{"version":3,"file":"adf-content-services.mjs","sources":["../../../../lib/content-services/src/lib/alfresco-icon/alfresco-icon.component.ts","../../../../lib/content-services/src/lib/alfresco-icon/alfresco-icon-component.svg","../../../../lib/content-services/src/lib/common/models/permissions.enum.ts","../../../../lib/content-services/src/lib/common/models/allowable-operations.enum.ts","../../../../lib/content-services/src/lib/services/alfresco-api.service.ts","../../../../lib/content-services/src/lib/common/services/content.service.ts","../../../../lib/content-services/src/lib/common/models/node-metadata.model.ts","../../../../lib/content-services/src/lib/common/services/nodes-api.service.ts","../../../../lib/content-services/src/lib/document-list/models/document-folder.model.ts","../../../../lib/content-services/src/lib/document-list/services/custom-resources.service.ts","../../../../lib/content-services/src/lib/document-list/services/document-list.service.ts","../../../../lib/content-services/src/lib/common/models/file.model.ts","../../../../lib/content-services/src/lib/common/events/file.event.ts","../../../../lib/content-services/src/lib/common/services/discovery-api.service.ts","../../../../lib/content-services/src/lib/common/services/upload.service.ts","../../../../lib/content-services/src/lib/document-list/models/node-action.enum.ts","../../../../lib/content-services/src/lib/common/services/favorites-api.service.ts","../../../../lib/content-services/src/lib/common/services/card-view-content-update.service.ts","../../../../lib/content-services/src/lib/common/services/sites.service.ts","../../../../lib/content-services/src/lib/common/services/rendition.service.ts","../../../../lib/content-services/src/lib/common/models/ecm-user.model.ts","../../../../lib/content-services/src/lib/common/services/people-content.service.ts","../../../../lib/content-services/src/lib/services/public-api.ts","../../../../lib/content-services/src/lib/services/index.ts","../../../../lib/content-services/src/lib/common/services/saved-searches-base.service.ts","../../../../lib/content-services/src/lib/common/services/saved-searches.service.ts","../../../../lib/content-services/src/lib/common/services/saved-searches-legacy.service.ts","../../../../lib/content-services/src/lib/common/models/ecm-company.model.ts","../../../../lib/content-services/src/lib/common/interfaces/search-configuration.interface.ts","../../../../lib/content-services/src/lib/common/interfaces/saved-search.interface.ts","../../../../lib/content-services/src/lib/common/interfaces/saved-searches-strategy.interface.ts","../../../../lib/content-services/src/lib/common/public-api.ts","../../../../lib/content-services/src/lib/common/index.ts","../../../../lib/content-services/src/lib/document-list/data/share-data-row.model.ts","../../../../lib/content-services/src/lib/document-list/data/share-datatable-adapter.ts","../../../../lib/content-services/src/lib/document-list/models/content-action.model.ts","../../../../lib/content-services/src/lib/document-list/models/preset.model.ts","../../../../lib/content-services/src/lib/document-list/services/lock.service.ts","../../../../lib/content-services/src/lib/dialogs/download-zip/services/download-zip.service.ts","../../../../lib/content-services/src/lib/dialogs/download-zip/download-zip.dialog.ts","../../../../lib/content-services/src/lib/dialogs/download-zip/download-zip.dialog.html","../../../../lib/content-services/src/lib/directives/node-download.directive.ts","../../../../lib/content-services/src/lib/document-list/components/file-auto-download/file-auto-download.component.ts","../../../../lib/content-services/src/lib/document-list/components/file-auto-download/file-auto-download.component.html","../../../../lib/content-services/src/lib/document-list/components/node.event.ts","../../../../lib/content-services/src/lib/search/services/base-query-builder.service.ts","../../../../lib/content-services/src/lib/search/services/search-header-query-builder.service.ts","../../../../lib/content-services/src/lib/search/components/search-text/search-text.component.ts","../../../../lib/content-services/src/lib/search/components/search-text/search-text.component.html","../../../../lib/content-services/src/lib/search/models/search-filter-list.model.ts","../../../../lib/content-services/src/lib/search/components/search-radio/search-radio.component.ts","../../../../lib/content-services/src/lib/search/components/search-radio/search-radio.component.html","../../../../lib/content-services/src/lib/search/components/search-slider/search-slider.component.ts","../../../../lib/content-services/src/lib/search/components/search-slider/search-slider.component.html","../../../../lib/content-services/src/lib/search/forms/live-error-state-matcher.ts","../../../../lib/content-services/src/lib/search/components/search-number-range/search-number-range.component.ts","../../../../lib/content-services/src/lib/search/components/search-number-range/search-number-range.component.html","../../../../lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.ts","../../../../lib/content-services/src/lib/search/components/search-check-list/search-check-list.component.html","../../../../lib/content-services/src/lib/search/components/search-datetime-range/search-datetime-range.component.ts","../../../../lib/content-services/src/lib/search/components/search-datetime-range/search-datetime-range.component.html","../../../../lib/content-services/src/lib/search/components/search-logical-filter/search-logical-filter.component.ts","../../../../lib/content-services/src/lib/search/components/search-logical-filter/search-logical-filter.component.html","../../../../lib/content-services/src/lib/tag/services/tag.service.ts","../../../../lib/content-services/src/lib/category/services/category.service.ts","../../../../lib/content-services/src/lib/search/models/autocomplete-option.interface.ts","../../../../lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.ts","../../../../lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.html","../../../../lib/content-services/src/lib/search/components/search-chip-autocomplete-input/index.ts","../../../../lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.html","../../../../lib/content-services/src/lib/search/components/search-properties/file-size-operator.enum.ts","../../../../lib/content-services/src/lib/search/components/search-properties/file-size-unit.enum.ts","../../../../lib/content-services/src/lib/search/components/search-properties/search-properties.component.ts","../../../../lib/content-services/src/lib/search/components/search-properties/search-properties.component.html","../../../../lib/content-services/src/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.ts","../../../../lib/content-services/src/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.ts","../../../../lib/content-services/src/lib/search/components/search-filter-tabbed/search-filter-tab.directive.ts","../../../../lib/content-services/src/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.html","../../../../lib/content-services/src/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.ts","../../../../lib/content-services/src/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.html","../../../../lib/content-services/src/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.ts","../../../../lib/content-services/src/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.html","../../../../lib/content-services/src/lib/search/services/search-filter.service.ts","../../../../lib/content-services/src/lib/search/services/search-configuration.service.ts","../../../../lib/content-services/src/lib/search/models/facet-field.interface.ts","../../../../lib/content-services/src/lib/search/search-configuration.token.ts","../../../../lib/content-services/src/lib/search/services/search-query-builder.service.ts","../../../../lib/content-services/src/lib/search/services/search.service.ts","../../../../lib/content-services/src/lib/search/services/search-facet-filters.service.ts","../../../../lib/content-services/src/lib/search/services/index.ts","../../../../lib/content-services/src/lib/search/components/search-widget-container/search-widget-container.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-container/search-filter-container.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-container/search-filter-container.component.html","../../../../lib/content-services/src/lib/document-list/components/filter-header/filter-header.component.ts","../../../../lib/content-services/src/lib/document-list/components/filter-header/filter-header.component.html","../../../../lib/content-services/src/lib/document-list/components/document-list.component.ts","../../../../lib/content-services/src/lib/document-list/components/document-list.component.html","../../../../lib/content-services/src/lib/breadcrumb/breadcrumb.component.ts","../../../../lib/content-services/src/lib/breadcrumb/breadcrumb.component.html","../../../../lib/content-services/src/lib/breadcrumb/dropdown-breadcrumb.component.ts","../../../../lib/content-services/src/lib/breadcrumb/dropdown-breadcrumb.component.html","../../../../lib/content-services/src/lib/directives/node-counter.directive.ts","../../../../lib/content-services/src/lib/upload/components/upload-files.event.ts","../../../../lib/content-services/src/lib/upload/components/base-upload/upload-base.ts","../../../../lib/content-services/src/lib/upload/directives/file-draggable.directive.ts","../../../../lib/content-services/src/lib/upload/components/upload-drag-area.component.ts","../../../../lib/content-services/src/lib/upload/components/upload-drag-area.component.html","../../../../lib/content-services/src/lib/upload/components/file-uploading-list.component.ts","../../../../lib/content-services/src/lib/upload/components/file-uploading-list.component.html","../../../../lib/content-services/src/lib/upload/components/file-uploading-list-row.component.ts","../../../../lib/content-services/src/lib/upload/components/file-uploading-list-row.component.html","../../../../lib/content-services/src/lib/upload/components/file-uploading-dialog.component.ts","../../../../lib/content-services/src/lib/upload/components/file-uploading-dialog.component.html","../../../../lib/content-services/src/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.ts","../../../../lib/content-services/src/lib/directives/auto-focus.directive.ts","../../../../lib/content-services/src/lib/content-node-selector/site-dropdown/sites-dropdown.component.ts","../../../../lib/content-services/src/lib/content-node-selector/site-dropdown/sites-dropdown.component.html","../../../../lib/content-services/src/lib/content-node-selector/name-location-cell/name-location-cell.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter/search-filter-card/search-filter-card.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter/search-filter-card/search-filter-card.component.html","../../../../lib/content-services/src/lib/search/components/reset-search.directive.ts","../../../../lib/content-services/src/lib/search/components/search-facet-field/search-facet-field.component.ts","../../../../lib/content-services/src/lib/search/components/search-facet-field/search-facet-field.component.html","../../../../lib/content-services/src/lib/search/components/search-facet-field/index.ts","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.html","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.html","../../../../lib/content-services/src/lib/search/components/search-filter-tabbed/index.ts","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.html","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.html","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.html","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-filter-chips.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter-chips/search-filter-chips.component.html","../../../../lib/content-services/src/lib/search/components/search-filter-chips/index.ts","../../../../lib/content-services/src/lib/search/components/search-filter/search-filter.component.ts","../../../../lib/content-services/src/lib/search/components/search-filter/search-filter.component.html","../../../../lib/content-services/src/lib/search/components/search-filter/index.ts","../../../../lib/content-services/src/lib/search/components/search-panel/search-panel.component.ts","../../../../lib/content-services/src/lib/search/components/search-panel/search-panel.component.html","../../../../lib/content-services/src/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.ts","../../../../lib/content-services/src/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.html","../../../../lib/content-services/src/lib/document-list/models/permissions.model.ts","../../../../lib/content-services/src/lib/upload/components/upload-button.component.ts","../../../../lib/content-services/src/lib/upload/components/upload-button.component.html","../../../../lib/content-services/src/lib/content-node-selector/content-node-selector.component.ts","../../../../lib/content-services/src/lib/content-node-selector/content-node-selector.component.html","../../../../lib/content-services/src/lib/dialogs/node-lock/node-lock.dialog.ts","../../../../lib/content-services/src/lib/dialogs/node-lock/node-lock.dialog.html","../../../../lib/content-services/src/lib/content-node-selector/content-node-dialog.service.ts","../../../../lib/content-services/src/lib/directives/node-lock.directive.ts","../../../../lib/content-services/src/lib/directives/library-favorite.directive.ts","../../../../lib/content-services/src/lib/version-compatibility/version-compatibility.service.ts","../../../../lib/content-services/src/lib/directives/library-membership.directive.ts","../../../../lib/content-services/src/lib/directives/node-delete.directive.ts","../../../../lib/content-services/src/lib/directives/node-favorite.directive.ts","../../../../lib/content-services/src/lib/directives/node-restore.directive.ts","../../../../lib/content-services/src/lib/directives/content-directive.module.ts","../../../../lib/content-services/src/lib/directives/public-api.ts","../../../../lib/content-services/src/lib/directives/index.ts","../../../../lib/content-services/src/lib/tag/tag-actions/tag-actions.component.ts","../../../../lib/content-services/src/lib/tag/tag-actions/tag-actions.component.html","../../../../lib/content-services/src/lib/tag/tag-list/tag-list.component.ts","../../../../lib/content-services/src/lib/tag/tag-list/tag-list.component.html","../../../../lib/content-services/src/lib/tag/tag-node-list/tag-node-list.component.ts","../../../../lib/content-services/src/lib/tag/tag-node-list/tag-node-list.component.html","../../../../lib/content-services/src/lib/tag/tags-creator/tags-creator-mode.ts","../../../../lib/content-services/src/lib/tag/tags-creator/tags-creator.component.ts","../../../../lib/content-services/src/lib/tag/tags-creator/tags-creator.component.html","../../../../lib/content-services/src/lib/tag/tag.module.ts","../../../../lib/content-services/src/lib/tag/public-api.ts","../../../../lib/content-services/src/lib/tag/index.ts","../../../../lib/content-services/src/lib/document-list/services/node-actions.service.ts","../../../../lib/content-services/src/lib/document-list/services/document-actions.service.ts","../../../../lib/content-services/src/lib/document-list/services/folder-actions.service.ts","../../../../lib/content-services/src/lib/document-list/components/content-action/content-action-list.component.ts","../../../../lib/content-services/src/lib/document-list/components/content-action/content-action.component.ts","../../../../lib/content-services/src/lib/document-list/utils/node-tooltip.utils.ts","../../../../lib/content-services/src/lib/document-list/components/library-name-column/library-name-column.component.ts","../../../../lib/content-services/src/lib/document-list/components/library-role-column/library-role-column.component.ts","../../../../lib/content-services/src/lib/document-list/components/library-status-column/library-status-column.component.ts","../../../../lib/content-services/src/lib/document-list/components/name-column/name-column.component.ts","../../../../lib/content-services/src/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.ts","../../../../lib/content-services/src/lib/document-list/data/image-resolver.model.ts","../../../../lib/content-services/src/lib/document-list/data/row-filter.model.ts","../../../../lib/content-services/src/lib/document-list/models/permissions-style.model.ts","../../../../lib/content-services/src/lib/document-list/interfaces/document-list-loader.interface.ts","../../../../lib/content-services/src/lib/document-list/document-list.module.ts","../../../../lib/content-services/src/lib/document-list/public-api.ts","../../../../lib/content-services/src/lib/document-list/index.ts","../../../../lib/content-services/src/lib/upload/components/upload-version-button.component.ts","../../../../lib/content-services/src/lib/upload/upload.module.ts","../../../../lib/content-services/src/lib/upload/public-api.ts","../../../../lib/content-services/src/lib/upload/index.ts","../../../../lib/content-services/src/lib/search/components/search-check-list/index.ts","../../../../lib/content-services/src/lib/search/components/search-chip-list/search-chip-list.component.ts","../../../../lib/content-services/src/lib/search/components/search-chip-list/search-chip-list.component.html","../../../../lib/content-services/src/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.ts","../../../../lib/content-services/src/lib/search/components/search-date-range-tabbed/index.ts","../../../../lib/content-services/src/lib/search/components/search-datetime-range/index.ts","../../../../lib/content-services/src/lib/search/components/search-filter-autocomplete-chips/index.ts","../../../../lib/content-services/src/lib/search/components/search-filter-container/index.ts","../../../../lib/content-services/src/lib/search/components/search-form/search-form.component.ts","../../../../lib/content-services/src/lib/search/components/search-form/search-form.component.html","../../../../lib/content-services/src/lib/search/components/search-form/index.ts","../../../../lib/content-services/src/lib/search/components/search-input/search-input.component.ts","../../../../lib/content-services/src/lib/search/components/search-input/search-input.component.html","../../../../lib/content-services/src/lib/search/components/search-input/index.ts","../../../../lib/content-services/src/lib/search/components/search-logical-filter/index.ts","../../../../lib/content-services/src/lib/search/components/search-number-range/index.ts","../../../../lib/content-services/src/lib/search/components/search-panel/index.ts","../../../../lib/content-services/src/lib/search/components/search-properties/file-size-condition.ts","../../../../lib/content-services/src/lib/search/components/search-properties/search-properties.ts","../../../../lib/content-services/src/lib/search/components/search-properties/index.ts","../../../../lib/content-services/src/lib/search/components/search-radio/index.ts","../../../../lib/content-services/src/lib/search/components/search-slider/index.ts","../../../../lib/content-services/src/lib/search/components/search-text/index.ts","../../../../lib/content-services/src/lib/search/components/search-widget-container/index.ts","../../../../lib/content-services/src/lib/search/components/empty-search-result.component.ts","../../../../lib/content-services/src/lib/search/components/empty-search-result.component.html","../../../../lib/content-services/src/lib/search/components/search.component.ts","../../../../lib/content-services/src/lib/search/components/search.component.html","../../../../lib/content-services/src/lib/search/components/search-control.component.ts","../../../../lib/content-services/src/lib/search/components/search-control.component.html","../../../../lib/content-services/src/lib/search/components/index.ts","../../../../lib/content-services/src/lib/search/forms/search-term-validator.ts","../../../../lib/content-services/src/lib/search/forms/index.ts","../../../../lib/content-services/src/lib/search/mocks/search.service.mock.ts","../../../../lib/content-services/src/lib/search/mocks/index.ts","../../../../lib/content-services/src/lib/search/models/facet-field-bucket.interface.ts","../../../../lib/content-services/src/lib/search/models/facet-query.interface.ts","../../../../lib/content-services/src/lib/search/models/facet-widget.interface.ts","../../../../lib/content-services/src/lib/search/models/filter-query.interface.ts","../../../../lib/content-services/src/lib/search/models/filter-search.interface.ts","../../../../lib/content-services/src/lib/search/models/response-facet-query-list.model.ts","../../../../lib/content-services/src/lib/search/models/search-category.interface.ts","../../../../lib/content-services/src/lib/search/models/search-configuration.interface.ts","../../../../lib/content-services/src/lib/search/models/search-form.interface.ts","../../../../lib/content-services/src/lib/search/models/search-range.interface.ts","../../../../lib/content-services/src/lib/search/models/search-sorting-definition.interface.ts","../../../../lib/content-services/src/lib/search/models/search-widget-settings.interface.ts","../../../../lib/content-services/src/lib/search/models/search-widget.interface.ts","../../../../lib/content-services/src/lib/search/models/tabbed-facet-field.interface.ts","../../../../lib/content-services/src/lib/search/models/index.ts","../../../../lib/content-services/src/lib/search/search.module.ts","../../../../lib/content-services/src/lib/search/public-api.ts","../../../../lib/content-services/src/lib/search/index.ts","../../../../lib/content-services/src/lib/breadcrumb/public-api.ts","../../../../lib/content-services/src/lib/breadcrumb/index.ts","../../../../lib/content-services/src/lib/version-manager/content-version.service.ts","../../../../lib/content-services/src/lib/infinite-scroll-datasource/infinite-scroll-datasource.ts","../../../../lib/content-services/src/lib/infinite-scroll-datasource/public-api.ts","../../../../lib/content-services/src/lib/infinite-scroll-datasource/index.ts","../../../../lib/content-services/src/lib/version-compatibility/version-compatibility.directive.ts","../../../../lib/content-services/src/lib/version-compatibility/version-compatibility.module.ts","../../../../lib/content-services/src/lib/version-compatibility/public-api.ts","../../../../lib/content-services/src/lib/version-compatibility/index.ts","../../../../lib/content-services/src/lib/version-manager/version-list.component.ts","../../../../lib/content-services/src/lib/version-manager/version-list.component.html","../../../../lib/content-services/src/lib/version-manager/version-comparison.component.ts","../../../../lib/content-services/src/lib/version-manager/version-comparison.component.html","../../../../lib/content-services/src/lib/version-manager/version-upload.component.ts","../../../../lib/content-services/src/lib/version-manager/version-upload.component.html","../../../../lib/content-services/src/lib/version-manager/version-manager.component.ts","../../../../lib/content-services/src/lib/version-manager/version-manager.component.html","../../../../lib/content-services/src/lib/version-manager/version-manager.module.ts","../../../../lib/content-services/src/lib/version-manager/public-api.ts","../../../../lib/content-services/src/lib/version-manager/index.ts","../../../../lib/content-services/src/lib/content-node-selector/content-node-selector.component-data.interface.ts","../../../../lib/content-services/src/lib/content-node-selector/content-node-selector.module.ts","../../../../lib/content-services/src/lib/content-node-selector/public-api.ts","../../../../lib/content-services/src/lib/content-node-selector/index.ts","../../../../lib/content-services/src/lib/dialogs/folder/folder-name.validators.ts","../../../../lib/content-services/src/lib/dialogs/folder/folder.dialog.ts","../../../../lib/content-services/src/lib/dialogs/folder/folder.dialog.html","../../../../lib/content-services/src/lib/tree/models/tree-node.interface.ts","../../../../lib/content-services/src/lib/tree/services/tree.service.ts","../../../../lib/content-services/src/lib/tree/components/tree.component.ts","../../../../lib/content-services/src/lib/tree/components/tree.component.html","../../../../lib/content-services/src/lib/tree/tree.module.ts","../../../../lib/content-services/src/lib/tree/models/tree-response.interface.ts","../../../../lib/content-services/src/lib/tree/models/tree-context-menu-result.interface.ts","../../../../lib/content-services/src/lib/tree/public-api.ts","../../../../lib/content-services/src/lib/tree/index.ts","../../../../lib/content-services/src/lib/category/services/category-tree-datasource.service.ts","../../../../lib/content-services/src/lib/category/models/category-node.interface.ts","../../../../lib/content-services/src/lib/category/categories-management/categories-management-mode.ts","../../../../lib/content-services/src/lib/category/categories-management/categories-management.component.ts","../../../../lib/content-services/src/lib/category/categories-management/categories-management.component.html","../../../../lib/content-services/src/lib/category/category.module.ts","../../../../lib/content-services/src/lib/category/public-api.ts","../../../../lib/content-services/src/lib/category/index.ts","../../../../lib/content-services/src/lib/dialogs/category-selector/category-selector.dialog.ts","../../../../lib/content-services/src/lib/dialogs/category-selector/category-selector.dialog.html","../../../../lib/content-services/src/lib/dialogs/library/library.dialog.ts","../../../../lib/content-services/src/lib/dialogs/library/library.dialog.html","../../../../lib/content-services/src/lib/dialogs/dialog.module.ts","../../../../lib/content-services/src/lib/dialogs/download-zip/download-zip.dialog.module.ts","../../../../lib/content-services/src/lib/dialogs/public-api.ts","../../../../lib/content-services/src/lib/dialogs/index.ts","../../../../lib/content-services/src/lib/content-metadata/services/basic-properties.service.ts","../../../../lib/content-services/src/lib/content-metadata/services/pipes/multi-value.pipe.ts","../../../../lib/content-services/src/lib/content-metadata/services/property-groups-translator.service.ts","../../../../lib/content-services/src/lib/content-metadata/services/config/property-group-reader.ts","../../../../lib/content-services/src/lib/content-metadata/services/config/aspect-oriented-config.service.ts","../../../../lib/content-services/src/lib/content-metadata/services/config/indifferent-config.service.ts","../../../../lib/content-services/src/lib/content-metadata/services/config/layout-oriented-config.service.ts","../../../../lib/content-services/src/lib/content-metadata/services/config/content-metadata-config.factory.ts","../../../../lib/content-services/src/lib/content-metadata/services/property-descriptors.service.ts","../../../../lib/content-services/src/lib/content-type/content-type.service.ts","../../../../lib/content-services/src/lib/content-type/content-type-dialog.component.ts","../../../../lib/content-services/src/lib/content-type/content-type-dialog.component.html","../../../../lib/content-services/src/lib/content-metadata/services/content-type-property.service.ts","../../../../lib/content-services/src/lib/content-metadata/services/content-metadata.service.ts","../../../../lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata-header.component.ts","../../../../lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.ts","../../../../lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.html","../../../../lib/content-services/src/lib/aspect-list/services/aspect-list.service.ts","../../../../lib/content-services/src/lib/aspect-list/aspect-list.component.ts","../../../../lib/content-services/src/lib/aspect-list/aspect-list.component.html","../../../../lib/content-services/src/lib/aspect-list/aspect-list-dialog.component.ts","../../../../lib/content-services/src/lib/aspect-list/aspect-list-dialog.component.html","../../../../lib/content-services/src/lib/aspect-list/services/dialog-aspect-list.service.ts","../../../../lib/content-services/src/lib/aspect-list/services/node-aspect.service.ts","../../../../lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.ts","../../../../lib/content-services/src/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.html","../../../../lib/content-services/src/lib/content-metadata/interfaces/aspect-oriented-config.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/property.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/property-group.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/organised-property-group.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/card-view-group.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/content-metadata-config.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/indifferent-config.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/layout-oriented-config.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/preset-config.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/content-metadata-panel.interface.ts","../../../../lib/content-services/src/lib/content-metadata/interfaces/content-metadata.interfaces.ts","../../../../lib/content-services/src/lib/content-metadata/content-metadata.module.ts","../../../../lib/content-services/src/lib/content-metadata/public-api.ts","../../../../lib/content-services/src/lib/content-metadata/index.ts","../../../../lib/content-services/src/lib/permission-manager/models/permission.model.ts","../../../../lib/content-services/src/lib/permission-manager/services/node-permission.service.ts","../../../../lib/content-services/src/lib/permission-manager/models/member.model.ts","../../../../lib/content-services/src/lib/permission-manager/components/add-permission/search-config-permission.service.ts","../../../../lib/content-services/src/lib/permission-manager/components/user-icon-column/user-icon-column.component.ts","../../../../lib/content-services/src/lib/permission-manager/components/add-permission/add-permission-panel.component.ts","../../../../lib/content-services/src/lib/permission-manager/components/add-permission/add-permission-panel.component.html","../../../../lib/content-services/src/lib/permission-manager/components/user-name-column/user-name-column.component.ts","../../../../lib/content-services/src/lib/permission-manager/components/user-role-column/user-role-column.component.ts","../../../../lib/content-services/src/lib/permission-manager/components/add-permission/add-permission-dialog.component.ts","../../../../lib/content-services/src/lib/permission-manager/components/add-permission/add-permission-dialog.component.html","../../../../lib/content-services/src/lib/permission-manager/services/node-permission-dialog.service.ts","../../../../lib/content-services/src/lib/permission-manager/components/permission-list/permission-list.service.ts","../../../../lib/content-services/src/lib/permission-manager/components/node-path-column/node-path-column.component.ts","../../../../lib/content-services/src/lib/permission-manager/components/permission-container/permission-container.component.ts","../../../../lib/content-services/src/lib/permission-manager/components/permission-container/permission-container.component.html","../../../../lib/content-services/src/lib/permission-manager/components/pop-over.directive.ts","../../../../lib/content-services/src/lib/permission-manager/components/permission-list/permission-list.component.ts","../../../../lib/content-services/src/lib/permission-manager/components/permission-list/permission-list.component.html","../../../../lib/content-services/src/lib/permission-manager/components/inherited-button.directive.ts","../../../../lib/content-services/src/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.ts","../../../../lib/content-services/src/lib/permission-manager/components/add-permission/add-permission.component.ts","../../../../lib/content-services/src/lib/permission-manager/components/add-permission/add-permission.component.html","../../../../lib/content-services/src/lib/permission-manager/models/role.model.ts","../../../../lib/content-services/src/lib/permission-manager/permission-manager.module.ts","../../../../lib/content-services/src/lib/permission-manager/public-api.ts","../../../../lib/content-services/src/lib/permission-manager/index.ts","../../../../lib/content-services/src/lib/content-node-share/content-node-share.settings.ts","../../../../lib/content-services/src/lib/content-node-share/services/shared-links-api.service.ts","../../../../lib/content-services/src/lib/content-node-share/content-node-share.dialog.ts","../../../../lib/content-services/src/lib/content-node-share/content-node-share.dialog.html","../../../../lib/content-services/src/lib/content-node-share/content-node-share.directive.ts","../../../../lib/content-services/src/lib/content-node-share/content-node-share.module.ts","../../../../lib/content-services/src/lib/content-node-share/public-api.ts","../../../../lib/content-services/src/lib/content-node-share/index.ts","../../../../lib/content-services/src/lib/tree-view/models/tree-view.model.ts","../../../../lib/content-services/src/lib/tree-view/services/tree-view.service.ts","../../../../lib/content-services/src/lib/tree-view/data/tree-view-datasource.ts","../../../../lib/content-services/src/lib/tree-view/components/tree-view.component.ts","../../../../lib/content-services/src/lib/tree-view/components/tree-view.component.html","../../../../lib/content-services/src/lib/tree-view/tree-view.module.ts","../../../../lib/content-services/src/lib/tree-view/public-api.ts","../../../../lib/content-services/src/lib/tree-view/index.ts","../../../../lib/content-services/src/lib/group/services/group.service.ts","../../../../lib/content-services/src/lib/group/public-api.ts","../../../../lib/content-services/src/lib/group/index.ts","../../../../lib/content-services/src/lib/aspect-list/aspect-list-dialog-data.interface.ts","../../../../lib/content-services/src/lib/aspect-list/interfaces/custom-aspect-paging.interface.ts","../../../../lib/content-services/src/lib/aspect-list/aspect-list.module.ts","../../../../lib/content-services/src/lib/aspect-list/public-api.ts","../../../../lib/content-services/src/lib/aspect-list/index.ts","../../../../lib/content-services/src/lib/content-type/content-type-metadata.interface.ts","../../../../lib/content-services/src/lib/content-type/index.ts","../../../../lib/content-services/src/lib/node-comments/services/node-comments.service.ts","../../../../lib/content-services/src/lib/node-comments/node-comments.component.ts","../../../../lib/content-services/src/lib/node-comments/node-comments.component.html","../../../../lib/content-services/src/lib/node-comments/node-comments.module.ts","../../../../lib/content-services/src/lib/node-comments/public-api.ts","../../../../lib/content-services/src/lib/node-comments/index.ts","../../../../lib/content-services/src/lib/new-version-uploader/models/new-version-uploader.model.ts","../../../../lib/content-services/src/lib/new-version-uploader/models/index.ts","../../../../lib/content-services/src/lib/new-version-uploader/new-version-uploader.dialog.ts","../../../../lib/content-services/src/lib/new-version-uploader/new-version-uploader.dialog.html","../../../../lib/content-services/src/lib/new-version-uploader/new-version-uploader.module.ts","../../../../lib/content-services/src/lib/new-version-uploader/new-version-uploader.service.ts","../../../../lib/content-services/src/lib/new-version-uploader/public-api.ts","../../../../lib/content-services/src/lib/new-version-uploader/index.ts","../../../../lib/content-services/src/lib/interfaces/library-entity.interface.ts","../../../../lib/content-services/src/lib/interfaces/restore-message-model.interface.ts","../../../../lib/content-services/src/lib/interfaces/library-membership-error-event.interface.ts","../../../../lib/content-services/src/lib/interfaces/library-membership-toggle-event.interface.ts","../../../../lib/content-services/src/lib/interfaces/public-api.ts","../../../../lib/content-services/src/lib/interfaces/index.ts","../../../../lib/content-services/src/lib/viewer/components/alfresco-viewer.component.ts","../../../../lib/content-services/src/lib/viewer/components/alfresco-viewer.component.html","../../../../lib/content-services/src/lib/viewer/alfresco-viewer.module.ts","../../../../lib/content-services/src/lib/viewer/public-api.ts","../../../../lib/content-services/src/lib/viewer/index.ts","../../../../lib/content-services/src/lib/security/services/security-controls-groups-marks-security.service.ts","../../../../lib/content-services/src/lib/security/public-api.ts","../../../../lib/content-services/src/lib/security/index.ts","../../../../lib/content-services/src/lib/api-factories/alfresco-api-no-auth.service.ts","../../../../lib/content-services/src/lib/security-options-loader/security-options-loader.service.ts","../../../../lib/content-services/src/lib/api-factories/alfresco-api-v2-loader.service.ts","../../../../lib/content-services/src/lib/api-factories/public-api.ts","../../../../lib/content-services/src/lib/api-factories/index.ts","../../../../lib/content-services/src/lib/prediction/services/prediction.service.ts","../../../../lib/content-services/src/lib/prediction/services/index.ts","../../../../lib/content-services/src/lib/prediction/public-api.ts","../../../../lib/content-services/src/lib/prediction/index.ts","../../../../lib/content-services/src/lib/legal-hold/services/legal-hold.service.ts","../../../../lib/content-services/src/lib/legal-hold/public-api.ts","../../../../lib/content-services/src/lib/legal-hold/index.ts","../../../../lib/content-services/src/lib/mock/alfresco-api.service.mock.ts","../../../../lib/content-services/src/lib/agent/services/agent.service.ts","../../../../lib/content-services/src/lib/agent/public-api.ts","../../../../lib/content-services/src/lib/agent/index.ts","../../../../lib/content-services/src/lib/search-ai/services/search-ai.service.ts","../../../../lib/content-services/src/lib/search-ai/models/search-ai-input-state.ts","../../../../lib/content-services/src/lib/search-ai/public-api.ts","../../../../lib/content-services/src/lib/search-ai/index.ts","../../../../lib/content-services/src/lib/version-compatibility/version-compatibility-factory.ts","../../../../lib/content-services/src/lib/auth-loader/content-auth-loader-factory.ts","../../../../lib/content-services/src/lib/auth-loader/content-auth-loader.service.ts","../../../../lib/content-services/src/lib/material.module.ts","../../../../lib/content-services/src/lib/content.module.ts","../../../../lib/content-services/src/public-api.ts","../../../../lib/content-services/src/adf-content-services.ts"],"sourcesContent":["/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component } from '@angular/core';\n\n@Component({\n    selector: 'adf-alfresco-icon',\n    templateUrl: './alfresco-icon-component.svg'\n})\nexport class AlfrescoIconComponent {}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" viewBox=\"17.2 134.6 562 573.1\"><path fill=\"#FFF\" d=\"M298.2,421.3L219,340.4l-2.9-2.9c-45.4-46.5-119.5-46.5-164.7-0.2c-45.6,46.3-45.6,121.5,0,167.8\tc45.2,46.4,119,46.4,164.4,0L298.2,421.3z\"/><path fill=\"#FFF\" d=\"M298.2,421.2v114.3l0.2,4.2c0,65.5-52.2,119-116.5,119c-64.3,0-116.5-53.1-116.5-118.6\tc0-65.6,52.4-118.8,116.5-118.8H298.2z\"/><path fill=\"#FFF\" d=\"M298.2,421.2v114.3l0.2,4.2c0,65.5-52.2,119-116.5,119c-64.3,0-116.5-53.1-116.5-118.6\tc0-65.6,52.4-118.8,116.5-118.8H298.2z\"/><path fill=\"#FFF\" d=\"M298.2,421.2v114.3l0.2,4.2c0,65.5-52.2,119-116.5,119c-64.3,0-116.5-53.1-116.5-118.6\tc0-7.3,0.8-14.4,2-21.2c45.4,32.2,108.2,27.7,148.6-13.7l82.4-83.8V421.2z\"/><path fill=\"#8ABF42\" d=\"M181.9,436.1c-56.1,0-101.6,46.5-101.6,103.8c0,57.1,45.6,103.5,101.6,103.5c56.2,0,101.7-46.4,101.7-103.5\tv-4.5v-99.3H182.1H181.9z\"/><path fill=\"#FFF\" d=\"M298.2,421.2l79.2,80.8l3.3,2.9c45.2,46.4,45.5,121.8,0,168.1c-45.6,46.3-119.2,46.3-164.8,0\tc-45.4-46.3-45.4-121.5,0-168L298.2,421.2z\"/><path fill=\"#8ABF42\" d=\"M226.5,515.6c-39.8,40.5-39.8,106.2,0,146.6c39.6,40.5,104,40.5,143.8,0c39.6-40.4,39.6-106.1,0-146.6\tl-3.3-3l-68.7-70.2l-71.7,73.1V515.6z\"/><path fill=\"#FFF\" d=\"M298.2,421.2h112.2l4.1-0.2c64.4,0,116.5,53.2,116.5,118.8c0,65.6-52,118.6-116.3,118.6\tc-64.3,0-116.5-53.1-116.5-118.6V421.2z\"/><path fill=\"#8ABF42\" d=\"M313.1,539.8c0,57.3,45.4,103.7,101.6,103.7c56,0,101.4-46.4,101.4-103.7c0-57.3-45.4-103.6-101.4-103.6\th-4.3h-97.4v103.3V539.8z\"/><path fill=\"#FFF\" d=\"M298.2,421.2l79.2-80.9l3.1-3.1c45.4-46.3,119.2-46.5,164.6-0.2c45.4,46.4,45.4,121.5,0,167.9\tc-45.4,46.4-119.2,46.4-164.6,0L298.2,421.2z\"/><path fill=\"#8ABF42\" d=\"M391.1,494.3c39.4,40.6,103.8,40.6,143.6,0c39.8-40.4,39.8-106,0-146.5c-39.8-40.5-104.1-40.5-143.6,0\tl-3.3,3.2l-68.6,70.3l71.5,73L391.1,494.3z\"/><path fill=\"#FFF\" d=\"M298.2,421.2V306.8v-4.3c0-65.5,51.9-118.8,116.5-118.8c64.2,0,116.1,52.9,116.1,118.6\tc0,65.6-52,118.8-116.1,118.8H298.2z\"/><path fill=\"#F89F31\" d=\"M414.7,406.1c56,0,101.4-46.4,101.4-103.7c0-57.1-45.4-103.6-101.4-103.6c-56.3,0-101.8,46.5-101.8,103.6\tl0.2,4.4v99.3h101.1H414.7z\"/><path fill=\"#FFF\" d=\"M298.2,421.2L219,340.3l-3.1-2.9c-45.4-46.5-45.4-121.8,0-168.1c45.2-46.4,119.1-46.4,164.6,0\tc45.4,46.3,45.4,121.6,0,167.9L298.2,421.2z\"/><path fill=\"#0080C5\" d=\"M370.1,327.6c39.6-40.5,39.6-106.2,0-146.6c-39.8-40.5-104-40.5-143.7,0c-39.8,40.4-39.8,106.1,0,146.6\tl2.9,3.1l69,70.1l71.6-73L370.1,327.6z\"/><path fill=\"#FFF\" d=\"M298.2,422.1H186.1l-4.2,0.1c-64.1,0-116.5-53.2-116.5-118.8c0-65.5,52.2-118.7,116.3-118.7\tc64.3,0,116.6,53.2,116.6,118.8V422.1z\"/><path fill=\"#0080C5\" d=\"M283.5,303.5c0-57.3-45.4-103.6-101.8-103.6c-56,0-101.6,46.3-101.6,103.5c0,57.2,45.6,103.7,101.6,103.7\tl4.4-0.1h97.4V303.8V303.5z\"/><path fill=\"#FFF\" d=\"M298.2,422.1l-281,0.1c0-30.4,11.2-60.8,34.2-84c45.2-46.3,119-46.3,164.4,0L298.2,422.1z\"/><path fill=\"#0080C5\" d=\"M205.4,348.9l71.9,73.3h-95.5c-51.6,0-95.5,34.3-110.7,81.9c-3.1-2.7-6.4-5.5-9.3-8.7\tc-39.8-40.5-39.8-106,0-146.5C101.3,308.4,165.8,308.4,205.4,348.9\"/><path fill=\"#005DA9\" d=\"M205.6,349l56.9,58l-80.9,0.2c-46.6,0-85.8-31.9-97.8-75.5c38.6-22.1,89.2-16.8,121.6,17.1L205.6,349z\"/><path fill=\"#005DA9\" d=\"M283.5,303.7l-0.1,82.1l-57.1-58.2c-32.9-33.6-38.7-84.4-17-123.8c42.7,12.2,74.2,52.2,74.2,99.8V303.7z\"/><path fill=\"#005DA9\" d=\"M312.6,386v-82.4c0-47.5,31.5-87.5,74.2-99.8c21.6,39.5,17.6,89-16.4,123.3L312.6,386z\"/><path fill=\"#FFDE4F\" d=\"M333.9,406.1l57.1-58.3c32.9-33.6,82.8-39.3,121.4-17.2c-12.2,43.5-49.4,74.8-95.3,75.6L333.9,406.1z\"/><path fill=\"#48A64A\" d=\"M333.8,436.1h80.8c46.6,0,85.8,31.7,97.8,75.4c-38.9,22.2-88.7,16.3-121.8-17.2L333.8,436.1z\"/><path fill=\"#48A64A\" d=\"M313.1,539.2v-82l57.2,58.2c32.9,33.7,38.5,84.7,16.8,124.1c-42.7-12.2-74-52.4-74-99.9V539.2z\"/><path fill=\"#48A64A\" d=\"M226.6,515.4l56.9-58l0.1,82.4c0,47.5-31.3,87.4-74,99.7c-21.6-39.5-15.8-90.4,17-123.9V515.4z\"/><path fill=\"#48A64A\" d=\"M182.4,436.1h80.4l-57,58.2c-32.8,33.5-83.1,39.3-121.7,17.3c12.1-43.7,51.4-75.5,98-75.5H182.4z\"/></svg>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n /* spellchecker: disable */\nexport class PermissionsEnum extends String {\n    static CONTRIBUTOR: string = 'Contributor';\n    static CONSUMER: string = 'Consumer';\n    static COLLABORATOR: string = 'Collaborator';\n    static MANAGER: string = 'Manager';\n    static EDITOR: string = 'Editor';\n    static COORDINATOR: string = 'Coordinator';\n    static NOT_CONTRIBUTOR: string = '!Contributor';\n    static NOT_CONSUMER: string = '!Consumer';\n    static NOT_COLLABORATOR: string = '!Collaborator';\n    static NOT_MANAGER: string = '!Manager';\n    static NOT_EDITOR: string = '!Editor';\n    static NOT_COORDINATOR: string = '!Coordinator';\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n /* spellchecker: disable */\nexport class AllowableOperationsEnum extends String {\n    static DELETE: string = 'delete';\n    static UPDATE: string = 'update';\n    static CREATE: string = 'create';\n    static COPY: string = 'copy';\n    static LOCK: string = 'lock';\n    static UPDATEPERMISSIONS: string = 'updatePermissions';\n    static NOT_DELETE: string = '!delete';\n    static NOT_UPDATE: string = '!update';\n    static NOT_CREATE: string = '!create';\n    static NOT_UPDATEPERMISSIONS: string = '!updatePermissions';\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { AlfrescoApi, AlfrescoApiConfig } from '@alfresco/js-api';\nimport { ReplaySubject } from 'rxjs';\nimport { AlfrescoApiFactory } from './alfresco-api.interface';\nimport { AppConfigService, AppConfigValues, OauthConfigModel, OpenidConfiguration, StorageService } from '@alfresco/adf-core';\n\nexport const ALFRESCO_API_FACTORY = new InjectionToken('ALFRESCO_API_FACTORY');\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AlfrescoApiService {\n    protected appConfig = inject(AppConfigService);\n    protected storageService = inject(StorageService);\n    private readonly alfrescoApiFactory = inject<AlfrescoApiFactory>(ALFRESCO_API_FACTORY, { optional: true });\n\n    alfrescoApiInitialized = new ReplaySubject<boolean>(1);\n\n    protected alfrescoApi: AlfrescoApi;\n\n    lastConfig: AlfrescoApiConfig;\n    currentAppConfig: AlfrescoApiConfig;\n\n    idpConfig: OpenidConfiguration;\n\n    private readonly excludedErrorUrl: string[] = ['api/enterprise/system/properties'];\n\n    getInstance(): AlfrescoApi {\n        return this.alfrescoApi;\n    }\n\n    async load(config: AlfrescoApiConfig): Promise<void> {\n        this.currentAppConfig = config;\n\n        if (config.authType === 'OAUTH') {\n            await this.mapAlfrescoApiOpenIdConfig();\n        }\n\n        this.initAlfrescoApi();\n        this.alfrescoApiInitialized.next(true);\n    }\n\n    async reset() {\n        this.getCurrentAppConfig();\n        if (this.currentAppConfig.authType === 'OAUTH') {\n            await this.mapAlfrescoApiOpenIdConfig();\n        }\n        this.initAlfrescoApiWithConfig();\n    }\n\n    private getAuthWithFixedOriginLocation(): OauthConfigModel {\n        const oauth = this.appConfig.oauth2;\n\n        if (oauth) {\n            oauth.redirectUri = window.location.origin + window.location.pathname;\n            oauth.redirectUriLogout = window.location.origin + window.location.pathname;\n        }\n        return oauth;\n    }\n\n    private async mapAlfrescoApiOpenIdConfig() {\n        this.idpConfig = await this.appConfig.loadWellKnown(this.currentAppConfig.oauth2.host);\n        this.currentAppConfig.oauth2.tokenUrl = this.idpConfig.token_endpoint;\n        this.currentAppConfig.oauth2.authorizationUrl = this.idpConfig.authorization_endpoint;\n        this.currentAppConfig.oauth2.logoutUrl = this.idpConfig.end_session_endpoint;\n        this.currentAppConfig.oauth2.userinfoEndpoint = this.idpConfig.userinfo_endpoint;\n    }\n\n    private getCurrentAppConfig() {\n        const oauth = this.getAuthWithFixedOriginLocation();\n\n        this.currentAppConfig = new AlfrescoApiConfig({\n            provider: this.appConfig.get<string>(AppConfigValues.PROVIDERS),\n            hostEcm: this.appConfig.get<string>(AppConfigValues.ECMHOST),\n            hostBpm: this.appConfig.get<string>(AppConfigValues.BPMHOST),\n            authType: this.appConfig.get<string>(AppConfigValues.AUTHTYPE, 'BASIC'),\n            contextRootBpm: this.appConfig.get<string>(AppConfigValues.CONTEXTROOTBPM),\n            contextRoot: this.appConfig.get<string>(AppConfigValues.CONTEXTROOTECM),\n            disableCsrf: this.appConfig.get<boolean>(AppConfigValues.DISABLECSRF),\n            withCredentials: this.appConfig.get<boolean>(AppConfigValues.AUTH_WITH_CREDENTIALS, false),\n            domainPrefix: this.appConfig.get<string>(AppConfigValues.STORAGE_PREFIX),\n            oauth2: oauth\n        });\n    }\n\n    protected initAlfrescoApi() {\n        this.getCurrentAppConfig();\n        this.initAlfrescoApiWithConfig();\n    }\n\n    private initAlfrescoApiWithConfig() {\n        if (this.alfrescoApi && this.isDifferentConfig(this.lastConfig, this.currentAppConfig)) {\n            this.alfrescoApi.setConfig(this.currentAppConfig);\n        } else {\n            this.alfrescoApi = this.createInstance(this.currentAppConfig);\n        }\n        this.lastConfig = this.currentAppConfig;\n    }\n\n    createInstance(config: AlfrescoApiConfig): AlfrescoApi {\n        if (this.alfrescoApiFactory) {\n            return this.alfrescoApiFactory.createAlfrescoApi(config);\n        }\n        return new AlfrescoApi(config);\n    }\n\n    isDifferentConfig(lastConfig: AlfrescoApiConfig, newConfig: AlfrescoApiConfig) {\n        return JSON.stringify(lastConfig) !== JSON.stringify(newConfig);\n    }\n\n    isExcludedErrorListener(currentFullPath: string): boolean {\n        const formattedPath = currentFullPath.replace(this.lastConfig.hostBpm + '/' + this.lastConfig.contextRootBpm, '');\n        return this.excludedErrorUrl.includes(formattedPath);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { ContentApi, Node, NodeEntry } from '@alfresco/js-api';\nimport { Subject } from 'rxjs';\nimport { AuthenticationService, ThumbnailService } from '@alfresco/adf-core';\nimport { PermissionsEnum } from '../models/permissions.enum';\nimport { AllowableOperationsEnum } from '../models/allowable-operations.enum';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\nexport interface FolderCreatedEvent {\n    name: string;\n    relativePath?: string;\n    parentId?: string;\n    node?: NodeEntry;\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ContentService {\n    authService = inject(AuthenticationService);\n    apiService = inject(AlfrescoApiService);\n    private readonly thumbnailService = inject(ThumbnailService);\n\n    folderCreated = new Subject<FolderCreatedEvent>();\n    folderCreate = new Subject<Node>();\n    folderEdit = new Subject<Node>();\n\n    private _contentApi: ContentApi;\n    get contentApi(): ContentApi {\n        this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance());\n        return this._contentApi;\n    }\n\n    /**\n     * Gets a content URL for the given node.\n     *\n     * @param node Node or Node ID to get URL for.\n     * @param attachment Toggles whether to retrieve content as an attachment for download\n     * @param ticket Custom ticket to use for authentication\n     * @returns URL string or `null`\n     */\n    getContentUrl(node: NodeEntry | string, attachment?: boolean, ticket?: string): string {\n        if (node) {\n            let nodeId: string;\n\n            if (typeof node === 'string') {\n                nodeId = node;\n            } else if (node.entry) {\n                nodeId = node.entry.id;\n            }\n\n            return this.contentApi.getContentUrl(nodeId, attachment, ticket);\n        }\n\n        return null;\n    }\n\n    getDocumentThumbnailUrl(nodeId: string, attachment?: boolean, ticket?: string): string {\n        return this.contentApi.getDocumentThumbnailUrl(nodeId, attachment, ticket);\n    }\n\n    /**\n     * Checks if the user has permission on that node\n     *\n     * @param node Node to check permissions\n     * @param permission Required permission type\n     * @param userId Optional current user id will be taken by default\n     * @returns True if the user has the required permissions, false otherwise\n     */\n    hasPermissions(node: Node, permission: PermissionsEnum | string, userId?: string): boolean {\n        let hasPermissions = false;\n        userId = userId ?? this.authService.getUsername();\n\n        const permissions = [...(node.permissions?.locallySet || []), ...(node.permissions?.inherited || [])].filter(\n            (currentPermission) => currentPermission.authorityId === userId\n        );\n        if (permissions.length) {\n            if (permission?.startsWith('!')) {\n                hasPermissions = !permissions.find((currentPermission) => currentPermission.name === permission.replace('!', ''));\n            } else {\n                hasPermissions = !!permissions.find((currentPermission) => currentPermission.name === permission);\n            }\n        } else {\n            if (permission === PermissionsEnum.CONSUMER) {\n                hasPermissions = true;\n            } else if (permission === PermissionsEnum.NOT_CONSUMER) {\n                hasPermissions = false;\n            } else if (permission?.startsWith('!')) {\n                hasPermissions = true;\n            }\n        }\n\n        return hasPermissions;\n    }\n\n    /**\n     * Checks if the user has permissions on that node\n     *\n     * @param node Node to check allowableOperations\n     * @param allowableOperation Create, delete, update, updatePermissions, !create, !delete, !update, !updatePermissions\n     * @returns True if the user has the required permissions, false otherwise\n     */\n    hasAllowableOperations(node: Node, allowableOperation: AllowableOperationsEnum | string): boolean {\n        let hasAllowableOperations = false;\n\n        if (node?.allowableOperations) {\n            if (allowableOperation?.startsWith('!')) {\n                hasAllowableOperations = !node.allowableOperations.find(\n                    (currentOperation) => currentOperation === allowableOperation.replace('!', '')\n                );\n            } else {\n                hasAllowableOperations = !!node.allowableOperations.find((currentOperation) => currentOperation === allowableOperation);\n            }\n        } else {\n            if (allowableOperation?.startsWith('!')) {\n                hasAllowableOperations = true;\n            }\n        }\n\n        if (allowableOperation === AllowableOperationsEnum.COPY) {\n            hasAllowableOperations = true;\n        }\n\n        if (allowableOperation === AllowableOperationsEnum.LOCK) {\n            hasAllowableOperations = node.isFile;\n\n            if (node.isLocked && node.allowableOperations) {\n                hasAllowableOperations = !!~node.allowableOperations.indexOf('updatePermissions');\n            }\n        }\n\n        return hasAllowableOperations;\n    }\n\n    getNodeIcon(node: Node): string {\n        if (node?.isFolder) {\n            return this.getFolderIcon(node);\n        }\n        if (node?.isFile) {\n            return this.thumbnailService.getMimeTypeIcon(node?.content?.mimeType);\n        }\n        return this.thumbnailService.getDefaultMimeTypeIcon();\n    }\n\n    private getFolderIcon(node: Node): string {\n        if (this.isSmartFolder(node)) {\n            return this.thumbnailService.getMimeTypeIcon('smartFolder');\n        } else if (this.isRuleFolder(node)) {\n            return this.thumbnailService.getMimeTypeIcon('ruleFolder');\n        } else if (this.isLinkFolder(node)) {\n            return this.thumbnailService.getMimeTypeIcon('linkFolder');\n        } else {\n            return this.thumbnailService.getMimeTypeIcon('folder');\n        }\n    }\n\n    isSmartFolder(node: Node): boolean {\n        if (node) {\n            return this.hasAspect(node, 'smf:customConfigSmartFolder') || this.hasAspect(node, 'smf:systemConfigSmartFolder');\n        }\n        return false;\n    }\n\n    isRuleFolder(node: Node): boolean {\n        if (node) {\n            return this.hasAspect(node, 'rule:rules');\n        }\n        return false;\n    }\n\n    isLinkFolder(node: Node): boolean {\n        return node?.nodeType === 'app:folderlink';\n    }\n\n    private hasAspect(node: Node, aspectName: string): boolean {\n        return node?.aspectNames?.includes(aspectName);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class NodeMetadata {\n    metadata: any;\n    nodeType: string;\n\n    constructor(metadata: any, nodeType: string) {\n        this.metadata = metadata;\n        this.nodeType = nodeType;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UserPreferencesService } from '@alfresco/adf-core';\nimport {\n    ContentPagingQuery,\n    Node,\n    NodeAssignedHold,\n    NodeEntry,\n    NodePaging,\n    NodesApi,\n    NodesIncludeQuery,\n    TrashcanApi,\n    SizeDetailsEntry,\n    JobIdBodyEntry,\n    NodeAssociationPaging\n} from '@alfresco/js-api';\nimport { Injectable, inject } from '@angular/core';\nimport { from, Observable, Subject, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { NodeMetadata } from '../models/node-metadata.model';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NodesApiService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly preferences = inject(UserPreferencesService);\n\n    /**\n     * Publish/subscribe to events related to node updates.\n     */\n    nodeUpdated = new Subject<Node>();\n\n    private _trashcanApi: TrashcanApi;\n    get trashcanApi(): TrashcanApi {\n        this._trashcanApi = this._trashcanApi ?? new TrashcanApi(this.apiService.getInstance());\n        return this._trashcanApi;\n    }\n\n    private _nodesApi: NodesApi;\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());\n        return this._nodesApi;\n    }\n\n    private getEntryFromEntity(entity: NodeEntry): Node {\n        return entity.entry;\n    }\n\n    /**\n     * Gets the stored information about a node.\n     *\n     * @param nodeId ID of the target node\n     * @param options Optional parameters supported by JS-API\n     * @returns Node information\n     */\n    getNode(nodeId: string, options: any = {}): Observable<Node> {\n        const defaults = {\n            include: ['path', 'properties', 'allowableOperations', 'permissions']\n        };\n        const queryOptions = Object.assign(defaults, options);\n\n        return from(this.nodesApi.getNode(nodeId, queryOptions)).pipe(\n            map(this.getEntryFromEntity),\n            catchError((err) => throwError(err))\n        );\n    }\n\n    /**\n     * Gets the items contained in a folder node.\n     *\n     * @param nodeId ID of the target node\n     * @param options Optional parameters supported by JS-API\n     * @returns List of child items from the folder\n     */\n    getNodeChildren(nodeId: string, options: any = {}): Observable<NodePaging> {\n        const defaults = {\n            maxItems: this.preferences.paginationSize,\n            skipCount: 0,\n            include: ['path', 'properties', 'allowableOperations', 'permissions']\n        };\n        const queryOptions = Object.assign(defaults, options);\n\n        return from(this.nodesApi.listNodeChildren(nodeId, queryOptions)).pipe(catchError((err) => throwError(err)));\n    }\n\n    /**\n     * Creates a new document node inside a folder.\n     *\n     * @param parentNodeId ID of the parent folder node\n     * @param nodeBody Data for the new node\n     * @param options Optional parameters supported by JS-API\n     * @returns Details of the new node\n     */\n    createNode(parentNodeId: string, nodeBody: any, options: any = {}): Observable<Node> {\n        return from(this.nodesApi.createNode(parentNodeId, nodeBody, options)).pipe(\n            map(this.getEntryFromEntity),\n            catchError((err) => throwError(err))\n        );\n    }\n\n    /**\n     * Creates a new folder node inside a parent folder.\n     *\n     * @param parentNodeId ID of the parent folder node\n     * @param nodeBody Data for the new folder\n     * @param options Optional parameters supported by JS-API\n     * @returns Details of the new folder\n     */\n    createFolder(parentNodeId: string, nodeBody: any, options: any = {}): Observable<Node> {\n        const body = Object.assign({ nodeType: 'cm:folder' }, nodeBody);\n        return this.createNode(parentNodeId, body, options);\n    }\n\n    /**\n     * Updates the information about a node.\n     *\n     * @param nodeId ID of the target node\n     * @param nodeBody New data for the node\n     * @param options Optional parameters supported by JS-API\n     * @returns Updated node information\n     */\n    updateNode(nodeId: string, nodeBody: any, options: any = {}): Observable<Node> {\n        const defaults = {\n            include: ['path', 'properties', 'allowableOperations', 'permissions', 'definition']\n        };\n        const queryOptions = Object.assign(defaults, options);\n\n        return from(this.nodesApi.updateNode(nodeId, nodeBody, queryOptions)).pipe(\n            map(this.getEntryFromEntity),\n            catchError((err) => throwError(err))\n        );\n    }\n\n    /**\n     * Moves a node to the trashcan.\n     *\n     * @param nodeId ID of the target node\n     * @param options Optional parameters supported by JS-API\n     * @returns Empty result that notifies when the deletion is complete\n     */\n    deleteNode(nodeId: string, options: any = {}): Observable<any> {\n        return from(this.nodesApi.deleteNode(nodeId, options)).pipe(catchError((err) => throwError(err)));\n    }\n\n    /**\n     * Restores a node previously moved to the trashcan.\n     *\n     * @param nodeId ID of the node to restore\n     * @returns Details of the restored node\n     */\n    restoreNode(nodeId: string): Observable<Node> {\n        return from(this.trashcanApi.restoreDeletedNode(nodeId)).pipe(\n            map(this.getEntryFromEntity),\n            catchError((err) => throwError(err))\n        );\n    }\n\n    /**\n     * Get the metadata and the nodeType for a nodeId cleaned by the prefix.\n     *\n     * @param nodeId ID of the target node\n     * @returns Node metadata\n     */\n    getNodeMetadata(nodeId: string): Observable<NodeMetadata> {\n        return from(this.nodesApi.getNode(nodeId)).pipe(map(this.cleanMetadataFromSemicolon));\n    }\n\n    /**\n     * Gets the list of holds assigned to the node.\n     *\n     * @param nodeId ID of the target node\n     * @param options Optional parameters supported by JS-API\n     * @param options.includeSource Also include **source** (in addition to **entries**) with folder information on **nodeId**\n     * @returns List of assigned holds Observable<Hold[]>\n     */\n    getNodeAssignedHolds(\n        nodeId: string,\n        options?: {\n            includeSource?: boolean;\n        } & NodesIncludeQuery &\n            ContentPagingQuery\n    ): Observable<NodeAssignedHold[]> {\n        const queryOptions = Object.assign({ where: `(assocType='rma:frozenContent')` }, options);\n\n        return from(this.nodesApi.listParents(nodeId, queryOptions)).pipe(\n            map(({ list }) =>\n                list.entries?.map(({ entry }) => ({\n                    id: entry.id,\n                    name: entry.name\n                }))\n            )\n        );\n    }\n\n    /**\n     * Gets content for the given node.\n     *\n     * @param nodeId ID of the target node\n     * @returns Content data\n     */\n    getNodeContent(nodeId: string): Observable<any> {\n        return from(this.nodesApi.getNodeContent(nodeId)).pipe(catchError((err) => throwError(err)));\n    }\n\n    /**\n     * Create a new Node inside `-root-` folder\n     *\n     * @param name Node name\n     * @param nodeType Node type\n     * @param properties Node body properties\n     * @param path Path to the node\n     * @returns The created node\n     */\n    createNodeInsideRoot(name: string, nodeType: string, properties: any, path: string): Observable<NodeEntry> {\n        const body = {\n            name,\n            nodeType,\n            properties,\n            relativePath: path\n        };\n        return from(this.nodesApi.createNode('-root-', body, {}));\n    }\n\n    /**\n     * Create a new Node from form metadata.\n     *\n     * @param nodeType Node type\n     * @param nameSpace Namespace for properties\n     * @param data Property data to store in the node under namespace\n     * @param path Path to the node\n     * @param name Node name\n     * @returns The created node\n     */\n    createNodeMetadata(nodeType: string, nameSpace: any, data: any, path: string, name?: string): Observable<NodeEntry> {\n        const properties = {};\n        for (const key in data) {\n            if (data[key]) {\n                properties[nameSpace + ':' + key] = data[key];\n            }\n        }\n\n        return this.createNodeInsideRoot(name || this.randomNodeName(), nodeType, properties, path);\n    }\n\n    /**\n     * Initiate a new request to calculate folder size.\n     *\n     * @param nodeId Node Id\n     * @returns The job id which can be used to track request status\n     */\n    initiateFolderSizeCalculation(nodeId: string): Observable<JobIdBodyEntry> {\n        return from(this.nodesApi.initiateFolderSizeCalculation(nodeId));\n    }\n\n    /**\n     * Gets the size of a folder.\n     *\n     * @param nodeId Node Id\n     * @param jobId Job Id\n     * @returns Folder details\n     */\n    getFolderSizeInfo(nodeId: string, jobId: string): Observable<SizeDetailsEntry> {\n        return from(this.nodesApi.getFolderSizeInfo(nodeId, jobId));\n    }\n\n    /**\n     * Lists parents of a given node.\n     *\n     * @param nodeId Node ID\n     * @param opts Optional parameters\n     * @returns List of parent nodes\n     */\n    listParents(\n        nodeId: string,\n        opts?: {\n            where?: string;\n            includeSource?: boolean;\n        } & NodesIncludeQuery &\n            ContentPagingQuery\n    ): Observable<NodeAssociationPaging> {\n        return from(this.nodesApi.listParents(nodeId, opts));\n    }\n\n    private randomNodeName(): string {\n        return `node_${Date.now()}`;\n    }\n\n    private cleanMetadataFromSemicolon(nodeEntry: NodeEntry): NodeMetadata {\n        const metadata = {};\n\n        if (nodeEntry?.entry.properties) {\n            for (const key in nodeEntry.entry.properties) {\n                if (key) {\n                    if (key.indexOf(':') !== -1) {\n                        metadata[key.split(':')[1]] = nodeEntry.entry.properties[key];\n                    } else {\n                        metadata[key] = nodeEntry.entry.properties[key];\n                    }\n                }\n            }\n        }\n\n        return new NodeMetadata(metadata, nodeEntry.entry.nodeType);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NodeEntry, NodePaging } from '@alfresco/js-api';\n\nexport class DocumentLoaderNode {\n    currentNode: NodeEntry;\n    children: NodePaging;\n\n    constructor(currentNode: NodeEntry, children: NodePaging) {\n        this.currentNode = currentNode;\n        this.children = children;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PaginationModel } from '@alfresco/adf-core';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport {\n    DeletedNodesPaging,\n    SearchRequest,\n    SharedLinkPaging,\n    FavoritePaging,\n    SiteMemberPaging,\n    SiteRolePaging,\n    PeopleApi,\n    SitesApi,\n    SearchApi,\n    FavoritesApi,\n    SharedlinksApi,\n    TrashcanApi,\n    NodesApi,\n    SitePaging,\n    ResultSetPaging,\n    SEARCH_LANGUAGE\n} from '@alfresco/js-api';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, from, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nconst CREATE_PERMISSION: string = 'create';\n\n@Injectable({ providedIn: 'root' })\nexport class CustomResourcesService {\n    private readonly apiService = inject(AlfrescoApiService);\n\n    private _peopleApi: PeopleApi;\n    get peopleApi(): PeopleApi {\n        this._peopleApi = this._peopleApi ?? new PeopleApi(this.apiService.getInstance());\n        return this._peopleApi;\n    }\n\n    private _sitesApi: SitesApi;\n    get sitesApi(): SitesApi {\n        this._sitesApi = this._sitesApi ?? new SitesApi(this.apiService.getInstance());\n        return this._sitesApi;\n    }\n\n    private _trashcanApi: TrashcanApi;\n    get trashcanApi(): TrashcanApi {\n        this._trashcanApi = this._trashcanApi ?? new TrashcanApi(this.apiService.getInstance());\n        return this._trashcanApi;\n    }\n\n    private _searchApi: SearchApi;\n    get searchApi(): SearchApi {\n        this._searchApi = this._searchApi ?? new SearchApi(this.apiService.getInstance());\n        return this._searchApi;\n    }\n\n    private _sharedLinksApi: SharedlinksApi;\n    get sharedLinksApi(): SharedlinksApi {\n        this._sharedLinksApi = this._sharedLinksApi ?? new SharedlinksApi(this.apiService.getInstance());\n        return this._sharedLinksApi;\n    }\n\n    private _favoritesApi: FavoritesApi;\n    get favoritesApi(): FavoritesApi {\n        this._favoritesApi = this._favoritesApi ?? new FavoritesApi(this.apiService.getInstance());\n        return this._favoritesApi;\n    }\n\n    private _nodesApi: NodesApi;\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());\n        return this._nodesApi;\n    }\n\n    /**\n     * Gets files recently accessed by a user.\n     *\n     * @param personId ID of the user\n     * @param pagination Specifies how to paginate the results\n     * @param filters Specifies additional filters to apply (joined with **AND**)\n     * @returns List of nodes for the recently used files\n     */\n    getRecentFiles(personId: string, pagination: PaginationModel, filters?: string[]): Observable<ResultSetPaging> {\n        const defaultFilter = [\n            'TYPE:\"content\"',\n            '-PATH:\"//cm:wiki/*\"',\n            '-TYPE:\"app:filelink\"',\n            '-TYPE:\"cm:thumbnail\"',\n            '-TYPE:\"cm:failedThumbnail\"',\n            '-TYPE:\"cm:rating\"',\n            '-TYPE:\"dl:dataList\"',\n            '-TYPE:\"dl:todoList\"',\n            '-TYPE:\"dl:issue\"',\n            '-TYPE:\"dl:contact\"',\n            '-TYPE:\"dl:eventAgenda\"',\n            '-TYPE:\"dl:event\"',\n            '-TYPE:\"dl:task\"',\n            '-TYPE:\"dl:simpletask\"',\n            '-TYPE:\"dl:meetingAgenda\"',\n            '-TYPE:\"dl:location\"',\n            '-TYPE:\"fm:topic\"',\n            '-TYPE:\"fm:post\"',\n            '-TYPE:\"ia:calendarEvent\"',\n            '-TYPE:\"lnk:link\"'\n        ];\n\n        return new Observable((observer) => {\n            this.peopleApi.getPerson(personId).then(\n                (person) => {\n                    const username = person.entry.id;\n                    const filterQueries = [\n                        { query: `cm:modified:[NOW/DAY-30DAYS TO NOW/DAY+1DAY]` },\n                        { query: `cm:modifier:'${username}' OR cm:creator:'${username}'` },\n                        { query: defaultFilter.join(' AND ') }\n                    ];\n\n                    if (filters && filters.length > 0) {\n                        filterQueries.push({\n                            query: filters.join()\n                        });\n                    }\n\n                    const query: SearchRequest = {\n                        query: {\n                            query: '*',\n                            language: SEARCH_LANGUAGE.AFTS\n                        },\n                        filterQueries,\n                        include: ['path', 'properties', 'allowableOperations', 'aspectNames'],\n                        sort: [\n                            {\n                                type: 'FIELD',\n                                field: 'cm:modified',\n                                ascending: false\n                            }\n                        ],\n                        paging: {\n                            maxItems: pagination.maxItems,\n                            skipCount: pagination.skipCount\n                        }\n                    };\n\n                    return this.searchApi.search(query).then(\n                        (searchResult) => {\n                            observer.next(searchResult);\n                            observer.complete();\n                        },\n                        (err) => {\n                            observer.error(err);\n                            observer.complete();\n                        }\n                    );\n                },\n                (err) => {\n                    observer.error(err);\n                    observer.complete();\n                }\n            );\n        });\n    }\n\n    /**\n     * Gets favorite files for the current user.\n     *\n     * @param pagination Specifies how to paginate the results\n     * @param includeFields List of data field names to include in the results\n     * @param where A string to restrict the returned objects by using a predicate\n     * @returns List of favorite files\n     */\n    loadFavorites(pagination: PaginationModel, includeFields: string[] = [], where?: string): Observable<FavoritePaging> {\n        const includeFieldsRequest = this.getIncludesFields(includeFields);\n        const defaultPredicate = '(EXISTS(target/file) OR EXISTS(target/folder))';\n\n        const options = {\n            maxItems: pagination.maxItems,\n            skipCount: pagination.skipCount,\n            where: where ? `${where} AND ${defaultPredicate}` : defaultPredicate,\n            include: includeFieldsRequest\n        };\n\n        return new Observable((observer) => {\n            this.favoritesApi.listFavorites('-me-', options).then(\n                (result) => {\n                    const page: FavoritePaging = {\n                        list: {\n                            entries: result.list.entries.map(({ entry }: any) => {\n                                const target = entry.target.file || entry.target.folder;\n                                target.properties = {\n                                    ...(target.properties || {\n                                        'cm:title': entry.title || target.title,\n                                        'cm:description': entry.description || target.description\n                                    }),\n                                    ...(entry.properties || {})\n                                };\n                                target.aspectNames = entry?.aspectNames ?? [];\n                                target.allowableOperations = entry?.allowableOperations ?? [];\n\n                                return {\n                                    entry: target\n                                };\n                            }),\n                            pagination: result.list.pagination\n                        }\n                    };\n\n                    observer.next(page);\n                    observer.complete();\n                },\n                (err) => {\n                    observer.error(err);\n                    observer.complete();\n                }\n            );\n        });\n    }\n\n    /**\n     * Gets sites that the current user is a member of.\n     *\n     * @param pagination Specifies how to paginate the results\n     * @param where A string to restrict the returned objects by using a predicate\n     * @returns List of sites\n     */\n    loadMemberSites(pagination: PaginationModel, where?: string): Observable<SiteMemberPaging> {\n        const options = {\n            include: ['properties'],\n            maxItems: pagination.maxItems,\n            skipCount: pagination.skipCount,\n            where\n        };\n\n        return new Observable((observer) => {\n            this.sitesApi.listSiteMembershipsForPerson('-me-', options).then(\n                (result: SiteRolePaging) => {\n                    const page: SiteMemberPaging = new SiteMemberPaging({\n                        list: {\n                            entries: result.list.entries.map(({ entry: { site } }: any) => {\n                                site.allowableOperations = site.allowableOperations ? site.allowableOperations : [CREATE_PERMISSION];\n                                site.name = site.name || site.title;\n                                return {\n                                    entry: site\n                                };\n                            }),\n                            pagination: result.list.pagination\n                        }\n                    });\n\n                    observer.next(page);\n                    observer.complete();\n                },\n                (err) => {\n                    observer.error(err);\n                    observer.complete();\n                }\n            );\n        });\n    }\n\n    /**\n     * Gets all sites in the repository.\n     *\n     * @param pagination Specifies how to paginate the results\n     * @param where A string to restrict the returned objects by using a predicate\n     * @returns List of sites\n     */\n    loadSites(pagination: PaginationModel, where?: string): Observable<SitePaging> {\n        const options = {\n            include: ['properties', 'aspectNames'],\n            maxItems: pagination.maxItems,\n            skipCount: pagination.skipCount,\n            where\n        };\n\n        return new Observable((observer) => {\n            this.sitesApi.listSites(options).then(\n                (page) => {\n                    page.list.entries.map(({ entry }: any) => {\n                        entry.name = entry.name || entry.title;\n                        return { entry };\n                    });\n                    observer.next(page);\n                    observer.complete();\n                },\n                (err) => {\n                    observer.error(err);\n                    observer.complete();\n                }\n            );\n        });\n    }\n\n    /**\n     * Gets all items currently in the trash.\n     *\n     * @param pagination Specifies how to paginate the results\n     * @param includeFields List of data field names to include in the results\n     * @returns List of deleted items\n     */\n    loadTrashcan(pagination: PaginationModel, includeFields: string[] = []): Observable<DeletedNodesPaging> {\n        const includeFieldsRequest = this.getIncludesFields(includeFields);\n\n        const options = {\n            include: includeFieldsRequest,\n            maxItems: pagination.maxItems,\n            skipCount: pagination.skipCount\n        };\n\n        return from(this.trashcanApi.listDeletedNodes(options));\n    }\n\n    /**\n     * Gets shared links for the current user.\n     *\n     * @param pagination Specifies how to paginate the results\n     * @param includeFields List of data field names to include in the results\n     * @param where A string to restrict the returned objects by using a predicate\n     * @returns List of shared links\n     */\n    loadSharedLinks(pagination: PaginationModel, includeFields: string[] = [], where?: string): Observable<SharedLinkPaging> {\n        const includeFieldsRequest = this.getIncludesFields(includeFields);\n\n        const options = {\n            include: includeFieldsRequest,\n            maxItems: pagination.maxItems,\n            skipCount: pagination.skipCount,\n            where\n        };\n\n        return from(this.sharedLinksApi.listSharedLinks(options));\n    }\n\n    /**\n     * Is the folder ID one of the well-known aliases?\n     *\n     * @param folderId Folder ID name to check\n     * @returns True if the ID is a well-known name, false otherwise\n     */\n    isCustomSource(folderId: string): boolean {\n        let isCustomSources = false;\n        const sources = ['-trashcan-', '-sharedlinks-', '-sites-', '-mysites-', '-favorites-', '-recent-'];\n\n        if (sources.indexOf(folderId) > -1) {\n            isCustomSources = true;\n        }\n\n        return isCustomSources;\n    }\n\n    /**\n     * Is the folder ID a \"-my\", \"-root-\", or \"-shared-\" alias?\n     *\n     * @param folderId Folder ID name to check\n     * @returns True if the ID is one of the supported sources, false otherwise\n     */\n    isSupportedSource(folderId: string): boolean {\n        let isSupportedSources = false;\n        const sources = ['-my-', '-root-', '-shared-'];\n\n        if (sources.indexOf(folderId) > -1) {\n            isSupportedSources = true;\n        }\n\n        return isSupportedSources;\n    }\n\n    /**\n     * Gets a folder's contents.\n     *\n     * @param nodeId ID of the target folder node\n     * @param pagination Specifies how to paginate the results\n     * @param includeFields List of data field names to include in the results\n     * @param where  Filters the Node list using the *where* condition of the REST API (for example, isFolder=true). See the REST API documentation for more information.\n     * @param filters Specifies additional filters to apply (joined with **AND**). Applied for '-recent-' only.\n     * @returns List of items contained in the folder\n     */\n    loadFolderByNodeId(nodeId: string, pagination: PaginationModel, includeFields: string[] = [], where?: string, filters?: string[]): any {\n        if (nodeId === '-trashcan-') {\n            return this.loadTrashcan(pagination, includeFields);\n        } else if (nodeId === '-sharedlinks-') {\n            return this.loadSharedLinks(pagination, includeFields, where);\n        } else if (nodeId === '-sites-') {\n            return this.loadSites(pagination, where);\n        } else if (nodeId === '-mysites-') {\n            return this.loadMemberSites(pagination, where);\n        } else if (nodeId === '-favorites-') {\n            return this.loadFavorites(pagination, includeFields, where);\n        } else if (nodeId === '-recent-') {\n            return this.getRecentFiles('-me-', pagination, filters);\n        } else {\n            return of(null);\n        }\n    }\n\n    // TODO: remove it from here\n\n    /**\n     * Gets the contents of one of the well-known aliases in the form of node ID strings.\n     *\n     * @param nodeId ID of the target folder node\n     * @param pagination Specifies how to paginate the results\n     * @returns List of node IDs\n     */\n    getCorrespondingNodeIds(nodeId: string, pagination: PaginationModel = {}): Observable<string[]> {\n        if (this.isCustomSource(nodeId)) {\n            return this.loadFolderByNodeId(nodeId, pagination).pipe(\n                map((result: any): string[] => result.list.entries.map((node: any): string => this.getIdFromEntry(node, nodeId)))\n            );\n        } else if (nodeId) {\n            // cases when nodeId is '-my-', '-root-' or '-shared-'\n            return from(this.nodesApi.getNode(nodeId).then((node) => [node.entry.id]));\n        }\n\n        return of([]);\n    }\n\n    /**\n     * Chooses the correct ID for a node entry.\n     *\n     * @param node Node object\n     * @param nodeId ID of the node object\n     * @returns ID value\n     */\n    getIdFromEntry(node: any, nodeId: string): string {\n        if (nodeId === '-sharedlinks-') {\n            return node.entry.nodeId;\n        } else if (nodeId === '-sites-' || nodeId === '-mysites-') {\n            return node.entry.guid;\n        } else if (nodeId === '-favorites-') {\n            return node.entry.targetGuid;\n        } else {\n            return node.entry.id;\n        }\n    }\n\n    /**\n     * Does the well-known alias have a corresponding node ID?\n     *\n     * @param nodeId Node to check\n     * @returns True if the alias has a corresponding node ID, false otherwise\n     */\n    hasCorrespondingNodeIds(nodeId: string): boolean {\n        return this.isCustomSource(nodeId) || this.isSupportedSource(nodeId);\n    }\n\n    private getIncludesFields(includeFields: string[]): string[] {\n        return ['path', 'properties', 'allowableOperations', 'permissions', 'aspectNames', ...includeFields].filter(\n            (element, index, array) => index === array.indexOf(element)\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PaginationModel } from '@alfresco/adf-core';\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { inject, Injectable } from '@angular/core';\nimport { Node, NodeEntry, NodePaging, NodesApi } from '@alfresco/js-api';\nimport { DocumentLoaderNode } from '../models/document-folder.model';\nimport { Observable, from, forkJoin, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DocumentListLoader } from '../interfaces/document-list-loader.interface';\nimport { CustomResourcesService } from './custom-resources.service';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\nconst ROOT_ID = '-root-';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DocumentListService implements DocumentListLoader {\n    private readonly nodesApiService = inject(NodesApiService);\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly customResourcesService = inject(CustomResourcesService);\n\n    private _nodesApi: NodesApi;\n    get nodes(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());\n        return this._nodesApi;\n    }\n\n    private readonly _reload = new Subject<void>();\n    private readonly _resetSelection = new Subject<void>();\n\n    /** Gets an observable that emits when the document list should be reloaded. */\n    reload$ = this._reload.asObservable();\n\n    /** Gets an observable that emits when the selection should be reset. */\n    resetSelection$ = this._resetSelection.asObservable();\n\n    /** Reloads the document list. */\n    reload() {\n        this._reload.next();\n    }\n\n    /** Resets the selection. */\n    resetSelection() {\n        this._resetSelection.next();\n    }\n\n    /**\n     * Deletes a node.\n     *\n     * @param nodeId ID of the node to delete\n     * @returns Empty response when the operation is complete\n     */\n    deleteNode(nodeId: string): Observable<any> {\n        return from(this.nodes.deleteNode(nodeId));\n    }\n\n    /**\n     * Copy a node to destination node\n     *\n     * @param nodeId The id of the node to be copied\n     * @param targetParentId The id of the folder where the node will be copied\n     * @returns NodeEntry for the copied node\n     */\n    copyNode(nodeId: string, targetParentId: string): Observable<NodeEntry> {\n        return from(this.nodes.copyNode(nodeId, { targetParentId }));\n    }\n\n    /**\n     * Moves a node to destination node.\n     *\n     * @param nodeId The id of the node to be moved\n     * @param targetParentId The id of the folder where the node will be moved\n     * @returns NodeEntry for the moved node\n     */\n    moveNode(nodeId: string, targetParentId: string): Observable<NodeEntry> {\n        return from(this.nodes.moveNode(nodeId, { targetParentId }));\n    }\n\n    /**\n     * Gets the folder node with the specified relative name path below the root node.\n     *\n     * @param folder Path to folder.\n     * @param opts Options.\n     * @param includeFields Extra information to include (available options are \"aspectNames\", \"isLink\" and \"association\")\n     * @returns Details of the folder\n     */\n    getFolder(folder: string, opts?: any, includeFields: string[] = []): Observable<NodePaging> {\n        let rootNodeId = ROOT_ID;\n        if (opts?.rootFolderId) {\n            rootNodeId = opts.rootFolderId;\n        }\n\n        const includeFieldsRequest = ['path', 'properties', 'allowableOperations', 'permissions', 'aspectNames', ...includeFields].filter(\n            (element, index, array) => index === array.indexOf(element)\n        );\n\n        const params: any = {\n            includeSource: true,\n            include: includeFieldsRequest\n        };\n\n        if (folder) {\n            params.relativePath = folder;\n        }\n\n        if (opts) {\n            if (opts.maxItems) {\n                params.maxItems = opts.maxItems;\n            }\n            if (opts.skipCount) {\n                params.skipCount = opts.skipCount;\n            }\n            if (opts.where) {\n                params.where = opts.where;\n            }\n            if (opts.orderBy) {\n                params.orderBy = opts.orderBy;\n            }\n        }\n\n        return from(this.nodes.listNodeChildren(rootNodeId, params));\n    }\n\n    /**\n     * Gets a node via its node ID.\n     *\n     * @param nodeId ID of the target node\n     * @param includeFields Extra information to include (available options are \"aspectNames\", \"isLink\" and \"association\")\n     * @returns Details of the folder\n     */\n    getNode(nodeId: string, includeFields: string[] = []): Observable<Node> {\n        const includeFieldsRequest = ['path', 'properties', 'allowableOperations', 'permissions', 'definition', ...includeFields].filter(\n            (element, index, array) => index === array.indexOf(element)\n        );\n\n        const opts: any = {\n            includeSource: true,\n            include: includeFieldsRequest\n        };\n\n        return this.nodesApiService.getNode(nodeId, opts);\n    }\n\n    /**\n     * Gets a folder node via its node ID.\n     *\n     * @param nodeId ID of the folder node\n     * @param includeFields Extra information to include (available options are \"aspectNames\", \"isLink\" and \"association\")\n     * @returns Details of the folder\n     */\n    getFolderNode(nodeId: string, includeFields: string[] = []): Observable<NodeEntry> {\n        const includeFieldsRequest = ['path', 'properties', 'allowableOperations', 'permissions', 'aspectNames', ...includeFields].filter(\n            (element, index, array) => index === array.indexOf(element)\n        );\n\n        const opts: any = {\n            includeSource: true,\n            include: includeFieldsRequest\n        };\n\n        return from(this.nodes.getNode(nodeId, opts));\n    }\n\n    isCustomSourceService(nodeId: string): boolean {\n        return this.customResourcesService.isCustomSource(nodeId);\n    }\n\n    /**\n     * Load a folder by Node Id.\n     *\n     * @param nodeId ID of the folder node\n     * @param pagination pagination model\n     * @param includeFields List of data field names to include in the results\n     * @param where  Optionally filter the list\n     * @param orderBy order by node property\n     * @param filters Specifies additional filters to apply (joined with **AND**). Applied for recent files only.\n     * @returns Details of the folder\n     */\n    loadFolderByNodeId(\n        nodeId: string,\n        pagination: PaginationModel,\n        includeFields: string[],\n        where?: string,\n        orderBy?: string[],\n        filters?: string[]\n    ): Observable<DocumentLoaderNode> {\n        if (this.customResourcesService.isCustomSource(nodeId)) {\n            return this.customResourcesService\n                .loadFolderByNodeId(nodeId, pagination, includeFields, where, filters)\n                .pipe(map((result: any) => new DocumentLoaderNode(null, result)));\n        } else {\n            return this.retrieveDocumentNode(nodeId, pagination, includeFields, where, orderBy);\n        }\n    }\n\n    private retrieveDocumentNode(\n        nodeId: string,\n        pagination: PaginationModel,\n        includeFields: string[],\n        where?: string,\n        orderBy?: string[]\n    ): Observable<DocumentLoaderNode> {\n        return forkJoin([\n            this.getFolderNode(nodeId, includeFields),\n            this.getFolder(\n                null,\n                {\n                    maxItems: pagination.maxItems,\n                    skipCount: pagination.skipCount,\n                    orderBy,\n                    rootFolderId: nodeId,\n                    where\n                },\n                includeFields\n            )\n        ]).pipe(map((results) => new DocumentLoaderNode(results[0], results[1])));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChildAssociationBody, AssociationBody } from '@alfresco/js-api';\n\nexport interface FileUploadProgress {\n    loaded: number;\n    total: number;\n    percent: number;\n}\n\nexport class FileUploadOptions {\n    /**\n     * Add a version comment which will appear in version history.\n     * Setting this parameter also enables versioning of this node, if it is not already versioned.\n     */\n    comment?: string;\n    /**\n     * Overwrite the content of the node with a new version.\n     */\n    newVersion?: boolean;\n    /**\n     * If true, then created node will be version 1.0 MAJOR. If false, then created node will be version 0.1 MINOR.\n     */\n    majorVersion?: boolean;\n    /**\n     * Root folder id.\n     */\n    parentId?: string;\n    /**\n     * Defines the **relativePath** value.\n     * The relativePath specifies the folder structure to create relative to the node nodeId.\n     * Folders in the relativePath that do not exist are created before the node is created.\n     */\n    path?: string;\n    /**\n     * You can use the nodeType field to create a specific type. The default is **cm:content**.\n     */\n    nodeType?: string;\n    /**\n     * You can set multi-value properties when you create a new node which supports properties of type multiple.\n     */\n    properties?: any;\n    /**\n     * If the content model allows then it is also possible to create primary children with a different assoc type.\n     */\n    association?: any;\n    /**\n     * You can optionally specify an array of **secondaryChildren** to create one or more secondary child associations,\n     * such that the newly created node acts as a parent node.\n     */\n    secondaryChildren?: ChildAssociationBody[];\n    /**\n     * You can optionally specify an array of **targets** to create one or more peer associations such that the newly created node acts as a source node.\n     */\n    targets?: AssociationBody[];\n    /**\n     * If true, then created node will be versioned. If false, then created node will be unversioned and auto-versioning disabled.\n     */\n    versioningEnabled?: boolean;\n}\n\nexport const FileUploadStatus = {\n    Pending: 0,\n    Complete: 1,\n    Starting: 2,\n    Progress: 3,\n    Cancelled: 4,\n    Aborted: 5,\n    Error: 6,\n    Deleted: 7\n} as const;\n\nexport type FileUploadStatus = (typeof FileUploadStatus)[keyof typeof FileUploadStatus];\n\nexport class FileModel {\n    readonly name: string;\n    readonly size: number;\n    readonly file: File;\n\n    id: string;\n    status: FileUploadStatus = FileUploadStatus.Pending;\n    errorCode: number;\n    progress: FileUploadProgress;\n    options: FileUploadOptions;\n    data: any;\n\n    constructor(file: File, options?: FileUploadOptions, id?: string) {\n        this.file = file;\n        this.id = id;\n        this.name = file.name;\n        this.size = file.size;\n        this.data = null;\n        this.errorCode = null;\n\n        this.progress = {\n            loaded: 0,\n            total: 0,\n            percent: 0\n        };\n\n        this.options = Object.assign(\n            {},\n            {\n                newVersion: false\n            },\n            options\n        );\n    }\n\n    get extension(): string {\n        return this.name.slice((Math.max(0, this.name.lastIndexOf('.')) || Infinity) + 1);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FileModel, FileUploadStatus } from '../models/file.model';\n\nexport class FileUploadEvent {\n    constructor(\n        public readonly file: FileModel,\n        public readonly status: FileUploadStatus = FileUploadStatus.Pending,\n        public readonly error: any = null\n    ) {}\n}\n\nexport class FileUploadCompleteEvent extends FileUploadEvent {\n    constructor(file: FileModel, public totalComplete: number = 0, public data?: any, public totalAborted: number = 0) {\n        super(file, FileUploadStatus.Complete);\n    }\n}\n\nexport class FileUploadDeleteEvent extends FileUploadEvent {\n    constructor(file: FileModel, public totalComplete: number = 0) {\n        super(file, FileUploadStatus.Deleted);\n    }\n}\n\nexport class FileUploadErrorEvent extends FileUploadEvent {\n    constructor(file: FileModel, public error: any, public totalError: number = 0) {\n        super(file, FileUploadStatus.Error);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { from, Observable, throwError, Subject } from 'rxjs';\nimport { catchError, map, switchMap, filter, take } from 'rxjs/operators';\nimport {\n    RepositoryInfo,\n    SystemPropertiesRepresentation,\n    DiscoveryApi,\n    AboutApi,\n    SystemPropertiesApi,\n    BpmProductVersionModel\n} from '@alfresco/js-api';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { AuthenticationService } from '@alfresco/adf-core';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DiscoveryApiService {\n    private readonly authenticationService = inject(AuthenticationService);\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n\n    private _discoveryApi: DiscoveryApi;\n    get discoveryApi(): DiscoveryApi {\n        this._discoveryApi = this._discoveryApi ?? new DiscoveryApi(this.alfrescoApiService.getInstance());\n        return this._discoveryApi;\n    }\n\n    /**\n     * Gets product information for Content Services.\n     */\n    ecmProductInfo$ = new Subject<RepositoryInfo>();\n\n    constructor() {\n        this.authenticationService.onLogin.subscribe(() => {\n            this.alfrescoApiService.alfrescoApiInitialized\n                .pipe(\n                    filter(() => this.authenticationService.isLoggedIn()),\n                    take(1),\n                    switchMap(() => this.getEcmProductInfo())\n                )\n                .subscribe((info) => this.ecmProductInfo$.next(info));\n        });\n    }\n\n    /**\n     * Gets product information for Content Services.\n     *\n     * @returns ProductVersionModel containing product details\n     */\n    getEcmProductInfo(): Observable<RepositoryInfo> {\n        return from(this.discoveryApi.getRepositoryInformation()).pipe(\n            map((res) => res.entry.repository),\n            catchError((err) => throwError(err))\n        );\n    }\n\n    /**\n     * @deprecated since 8.3.0 this method is no longer used, and will be removed in the next major release.\n     * Gets product information for Process Services.\n     *\n     * @returns ProductVersionModel containing product details\n     */\n    getBpmProductInfo(): Observable<BpmProductVersionModel> {\n        const aboutApi = new AboutApi(this.alfrescoApiService.getInstance());\n        return from(aboutApi.getAppVersion());\n    }\n\n    getBPMSystemProperties(): Observable<SystemPropertiesRepresentation> {\n        const systemPropertiesApi = new SystemPropertiesApi(this.alfrescoApiService.getInstance());\n\n        return from(systemPropertiesApi.getProperties()).pipe(\n            map((res) => {\n                if ('string' === typeof res) {\n                    throw new Error('Not valid response');\n                }\n                return res;\n            }),\n            catchError((err) => throwError(err.error))\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter, inject, Injectable } from '@angular/core';\nimport { Minimatch } from 'minimatch';\nimport { Subject } from 'rxjs';\nimport { FileUploadCompleteEvent, FileUploadDeleteEvent, FileUploadErrorEvent, FileUploadEvent } from '../events/file.event';\nimport { FileModel, FileUploadProgress, FileUploadStatus } from '../models/file.model';\nimport { AppConfigService } from '@alfresco/adf-core';\nimport { filter } from 'rxjs/operators';\nimport { DiscoveryApiService } from '../../common/services/discovery-api.service';\nimport { NodeBodyCreate, NodesApi, UploadApi, VersionsApi } from '@alfresco/js-api';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\nconst MIN_CANCELLABLE_FILE_SIZE = 1000000;\nconst MAX_CANCELLABLE_FILE_PERCENTAGE = 50;\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class UploadService {\n    queue: FileModel[] = [];\n    queueChanged: Subject<FileModel[]> = new Subject<FileModel[]>();\n    fileUpload: Subject<FileUploadEvent> = new Subject<FileUploadEvent>();\n    fileUploadStarting: Subject<FileUploadEvent> = new Subject<FileUploadEvent>();\n    fileUploadCancelled: Subject<FileUploadEvent> = new Subject<FileUploadEvent>();\n    fileUploadProgress: Subject<FileUploadEvent> = new Subject<FileUploadEvent>();\n    fileUploadAborted: Subject<FileUploadEvent> = new Subject<FileUploadEvent>();\n    fileUploadError: Subject<FileUploadErrorEvent> = new Subject<FileUploadErrorEvent>();\n    fileUploadComplete: Subject<FileUploadCompleteEvent> = new Subject<FileUploadCompleteEvent>();\n    fileUploadDeleted: Subject<FileUploadDeleteEvent> = new Subject<FileUploadDeleteEvent>();\n    fileDeleted: Subject<string> = new Subject<string>();\n\n    private cache: { [key: string]: any } = {};\n    private totalComplete: number = 0;\n    private totalAborted: number = 0;\n    private totalError: number = 0;\n    private excludedFileList: string[] = [];\n    private excludedFoldersList: string[] = [];\n    private matchingOptions: any = null;\n    private folderMatchingOptions: any = null;\n    private abortedFile: string;\n    private isThumbnailGenerationEnabled: boolean;\n\n    private _uploadApi: UploadApi;\n    get uploadApi(): UploadApi {\n        this._uploadApi = this._uploadApi ?? new UploadApi(this.apiService.getInstance());\n        return this._uploadApi;\n    }\n\n    private _nodesApi: NodesApi;\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());\n        return this._nodesApi;\n    }\n\n    private _versionsApi: VersionsApi;\n    get versionsApi(): VersionsApi {\n        this._versionsApi = this._versionsApi ?? new VersionsApi(this.apiService.getInstance());\n        return this._versionsApi;\n    }\n\n    protected apiService = inject(AlfrescoApiService);\n    protected appConfigService = inject(AppConfigService);\n    protected discoveryApiService = inject(DiscoveryApiService);\n\n    constructor() {\n        this.discoveryApiService.ecmProductInfo$.pipe(filter((info) => !!info)).subscribe(({ status }) => {\n            this.isThumbnailGenerationEnabled = status.isThumbnailGenerationEnabled;\n        });\n    }\n\n    clearCache() {\n        this.cache = {};\n    }\n\n    /**\n     * Returns the number of concurrent threads for uploading.\n     *\n     * @returns Number of concurrent threads (default 1)\n     */\n    getThreadsCount(): number {\n        return this.appConfigService.get<number>('upload.threads', 1);\n    }\n\n    /**\n     * Checks whether the service still has files uploading or awaiting upload.\n     *\n     * @returns True if files in the queue are still uploading, false otherwise\n     */\n    isUploading(): boolean {\n        const finishedFileStates: FileUploadStatus[] = [\n            FileUploadStatus.Complete,\n            FileUploadStatus.Cancelled,\n            FileUploadStatus.Aborted,\n            FileUploadStatus.Error,\n            FileUploadStatus.Deleted\n        ];\n        return this.queue.reduce(\n            (stillUploading: boolean, currentFile: FileModel) => stillUploading || finishedFileStates.indexOf(currentFile.status) === -1,\n            false\n        );\n    }\n\n    /**\n     * Gets the file Queue\n     *\n     * @returns Array of files that form the queue\n     */\n    getQueue(): FileModel[] {\n        return this.queue;\n    }\n\n    /**\n     * Adds files to the uploading queue to be uploaded\n     *\n     * @param files One or more separate parameters or an array of files to queue\n     * @returns Array of files that were not blocked from upload by the ignore list\n     */\n    addToQueue(...files: FileModel[]): FileModel[] {\n        const allowedFiles = files.filter((currentFile) => this.filterElement(currentFile));\n        this.queue = this.queue.concat(allowedFiles);\n        this.queueChanged.next(this.queue);\n        return allowedFiles;\n    }\n\n    /**\n     * Finds all the files in the queue that are not yet uploaded and uploads them into the directory folder.\n     *\n     * @param successEmitter Emitter to invoke on file success status change\n     * @param errorEmitter Emitter to invoke on file error status change\n     */\n    uploadFilesInTheQueue(successEmitter?: EventEmitter<any>, errorEmitter?: EventEmitter<any>): void {\n        const files = this.getFilesToUpload();\n\n        if (files && files.length > 0) {\n            for (const file of files) {\n                this.onUploadStarting(file);\n\n                const promise = this.beginUpload(file, successEmitter, errorEmitter);\n                this.cache[file.name] = promise;\n\n                const next = () => {\n                    setTimeout(() => this.uploadFilesInTheQueue(successEmitter, errorEmitter), 100);\n                };\n\n                promise.next = next;\n\n                promise.then(\n                    () => next(),\n                    () => next()\n                );\n            }\n        }\n    }\n\n    /**\n     * Cancels uploading of files.\n     * If the file is smaller than 1 MB the file will be uploaded and then the node deleted\n     * to prevent having files that were aborted but still uploaded.\n     *\n     * @param files One or more separate parameters or an array of files specifying uploads to cancel\n     */\n    cancelUpload(...files: FileModel[]) {\n        files.forEach((file) => {\n            const promise = this.cache[file.name];\n            if (promise) {\n                if (this.isSaveToAbortFile(file)) {\n                    promise.abort();\n                } else {\n                    this.abortedFile = file.name;\n                }\n                delete this.cache[file.name];\n                promise.next();\n            } else {\n                const performAction = this.getAction(file);\n\n                if (performAction) {\n                    performAction();\n                }\n            }\n        });\n    }\n\n    /** Clears the upload queue */\n    clearQueue() {\n        this.queue = [];\n        this.totalComplete = 0;\n        this.totalAborted = 0;\n        this.totalError = 0;\n    }\n\n    /**\n     * Gets an upload promise for a file.\n     *\n     * @param file The target file\n     * @returns Promise that is resolved if the upload is successful or error otherwise\n     */\n    getUploadPromise(file: FileModel): any {\n        const opts: any = {\n            include: ['allowableOperations']\n        };\n\n        if (this.isThumbnailGenerationEnabled) {\n            opts.renditions = 'doclib';\n        }\n\n        if (file.options?.versioningEnabled !== undefined) {\n            opts.versioningEnabled = file.options.versioningEnabled;\n        }\n\n        if (file.options.newVersion === true) {\n            opts.overwrite = true;\n            opts.majorVersion = file.options.majorVersion;\n            opts.comment = file.options.comment;\n            opts.name = file.name;\n        } else {\n            opts.autoRename = true;\n        }\n\n        if (file.options.nodeType) {\n            opts.nodeType = file.options.nodeType;\n        }\n\n        if (file.id) {\n            return this.nodesApi.updateNodeContent(file.id, file.file as any, opts);\n        } else {\n            const nodeBody: NodeBodyCreate = { ...file.options, name: file.name, nodeType: file.options.nodeType };\n            delete nodeBody['versioningEnabled'];\n\n            return this.uploadApi.uploadFile(file.file, file.options.path, file.options.parentId, nodeBody, opts);\n        }\n    }\n\n    private getFilesToUpload(): FileModel[] {\n        const cached = Object.keys(this.cache);\n        const threadsCount = this.getThreadsCount();\n\n        if (cached.length >= threadsCount) {\n            return [];\n        }\n\n        const files = this.queue\n            .filter((toUpload) => !cached.includes(toUpload.name) && toUpload.status === FileUploadStatus.Pending)\n            .slice(0, threadsCount);\n\n        return files;\n    }\n\n    private beginUpload(file: FileModel, successEmitter?: EventEmitter<any>, errorEmitter?: EventEmitter<any>): any {\n        const promise = this.getUploadPromise(file);\n        promise\n            .on('progress', (progress: FileUploadProgress) => {\n                this.onUploadProgress(file, progress);\n            })\n            .on('abort', () => {\n                this.onUploadAborted(file);\n                if (successEmitter) {\n                    successEmitter.emit({ value: 'File aborted' });\n                }\n            })\n            .on('error', (err) => {\n                this.onUploadError(file, err);\n                if (errorEmitter) {\n                    errorEmitter.emit({ value: 'Error file uploaded' });\n                }\n            })\n            .on('success', (data) => {\n                if (this.abortedFile === file.name) {\n                    this.onUploadAborted(file);\n                    if (file.id === undefined) {\n                        this.deleteAbortedNode(data.entry.id);\n                    } else {\n                        this.deleteAbortedNodeVersion(data.entry.id, data.entry.properties['cm:versionLabel']);\n                    }\n                    if (successEmitter) {\n                        successEmitter.emit({ value: 'File deleted' });\n                    }\n                } else {\n                    this.onUploadComplete(file, data);\n                    if (successEmitter) {\n                        successEmitter.emit({ value: data });\n                    }\n                }\n            })\n            .catch(() => {});\n\n        return promise;\n    }\n\n    private onUploadStarting(file: FileModel): void {\n        if (file) {\n            file.status = FileUploadStatus.Starting;\n            const event = new FileUploadEvent(file, FileUploadStatus.Starting);\n            this.fileUpload.next(event);\n            this.fileUploadStarting.next(event);\n        }\n    }\n\n    private onUploadProgress(file: FileModel, progress: FileUploadProgress): void {\n        if (file) {\n            file.progress = progress;\n            file.status = FileUploadStatus.Progress;\n\n            const event = new FileUploadEvent(file, FileUploadStatus.Progress);\n            this.fileUpload.next(event);\n            this.fileUploadProgress.next(event);\n        }\n    }\n\n    private onUploadError(file: FileModel, error: { status?: number }): void {\n        if (file) {\n            file.errorCode = error?.status;\n            file.status = FileUploadStatus.Error;\n            this.totalError++;\n\n            const promise = this.cache[file.name];\n            if (promise) {\n                delete this.cache[file.name];\n            }\n\n            const event = new FileUploadErrorEvent(file, error, this.totalError);\n            this.fileUpload.next(event);\n            this.fileUploadError.next(event);\n        }\n    }\n\n    private onUploadComplete(file: FileModel, data: any): void {\n        if (file) {\n            file.status = FileUploadStatus.Complete;\n            file.data = data;\n            this.totalComplete++;\n            const promise = this.cache[file.name];\n            if (promise) {\n                delete this.cache[file.name];\n            }\n\n            const event = new FileUploadCompleteEvent(file, this.totalComplete, data, this.totalAborted);\n            this.fileUpload.next(event);\n            this.fileUploadComplete.next(event);\n        }\n    }\n\n    private onUploadAborted(file: FileModel): void {\n        if (file) {\n            file.status = FileUploadStatus.Aborted;\n            this.totalAborted++;\n\n            const event = new FileUploadEvent(file, FileUploadStatus.Aborted);\n            this.fileUpload.next(event);\n            this.fileUploadAborted.next(event);\n        }\n    }\n\n    private onUploadCancelled(file: FileModel): void {\n        if (file) {\n            file.status = FileUploadStatus.Cancelled;\n\n            const event = new FileUploadEvent(file, FileUploadStatus.Cancelled);\n            this.fileUpload.next(event);\n            this.fileUploadCancelled.next(event);\n        }\n    }\n\n    private onUploadDeleted(file: FileModel): void {\n        if (file) {\n            file.status = FileUploadStatus.Deleted;\n            this.totalComplete--;\n\n            const event = new FileUploadDeleteEvent(file, this.totalComplete);\n            this.fileUpload.next(event);\n            this.fileUploadDeleted.next(event);\n        }\n    }\n\n    private getAction(file: FileModel) {\n        const actions = {\n            [FileUploadStatus.Pending]: () => this.onUploadCancelled(file),\n            [FileUploadStatus.Deleted]: () => this.onUploadDeleted(file),\n            [FileUploadStatus.Error]: () => this.onUploadError(file, null)\n        };\n\n        return actions[file.status];\n    }\n\n    private deleteAbortedNode(nodeId: string) {\n        this.nodesApi.deleteNode(nodeId, { permanent: true }).then(() => (this.abortedFile = undefined));\n    }\n\n    private deleteAbortedNodeVersion(nodeId: string, versionId: string) {\n        this.versionsApi.deleteVersion(nodeId, versionId).then(() => (this.abortedFile = undefined));\n    }\n\n    private isSaveToAbortFile(file: FileModel): boolean {\n        return file.size > MIN_CANCELLABLE_FILE_SIZE && file.progress.percent < MAX_CANCELLABLE_FILE_PERCENTAGE;\n    }\n\n    private filterElement(file: FileModel) {\n        this.excludedFileList = this.appConfigService.get<string[]>('files.excluded');\n        this.excludedFoldersList = this.appConfigService.get<string[]>('folders.excluded');\n        let isAllowed = true;\n\n        if (this.excludedFileList) {\n            this.matchingOptions = this.appConfigService.get('files.match-options');\n            isAllowed = this.isFileNameAllowed(file);\n        }\n\n        if (isAllowed && this.excludedFoldersList) {\n            this.folderMatchingOptions = this.appConfigService.get('folders.match-options');\n            isAllowed = this.isParentFolderAllowed(file);\n        }\n        return isAllowed;\n    }\n\n    private isParentFolderAllowed(file: FileModel): boolean {\n        let isAllowed: boolean = true;\n        const currentFile: any = file.file;\n        const fileRelativePath = currentFile.webkitRelativePath ? currentFile.webkitRelativePath : file.options.path;\n        if (currentFile && fileRelativePath) {\n            isAllowed =\n                this.excludedFoldersList.filter((folderToExclude) =>\n                    fileRelativePath.split('/').some((pathElement) => {\n                        const minimatch = new Minimatch(folderToExclude, this.folderMatchingOptions);\n                        return minimatch.match(pathElement);\n                    })\n                ).length === 0;\n        }\n        return isAllowed;\n    }\n\n    private isFileNameAllowed(file: FileModel): boolean {\n        return (\n            this.excludedFileList.filter((pattern) => {\n                const minimatch = new Minimatch(pattern, this.matchingOptions);\n                return minimatch.match(file.name);\n            }).length === 0\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-shadow */\n/* eslint-disable @typescript-eslint/naming-convention */\n\nexport const NodeAction = {\n    ATTACH: 'ATTACH',\n    CHOOSE: 'CHOOSE',\n    COPY: 'COPY',\n    MOVE: 'MOVE',\n    NEXT: 'NEXT'\n} as const;\n\nexport type NodeAction = (typeof NodeAction)[keyof typeof NodeAction];\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { FavoritesApi, NodePaging, FavoritePaging } from '@alfresco/js-api';\nimport { Observable, from, of } from 'rxjs';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { UserPreferencesService } from '@alfresco/adf-core';\nimport { catchError } from 'rxjs/operators';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class FavoritesApiService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly preferences = inject(UserPreferencesService);\n\n    private _favoritesApi: FavoritesApi;\n    get favoritesApi(): FavoritesApi {\n        this._favoritesApi = this._favoritesApi ?? new FavoritesApi(this.apiService.getInstance());\n        return this._favoritesApi;\n    }\n\n    static remapEntry({ entry }: any): any {\n        entry.properties = {\n            'cm:title': entry.title,\n            'cm:description': entry.description\n        };\n\n        return { entry };\n    }\n\n    remapFavoritesData(data: FavoritePaging = {}): NodePaging {\n        const pagination = data?.list?.pagination || {};\n        const entries: any[] = this.remapFavoriteEntries(data?.list?.entries || []);\n\n        return {\n            list: { entries, pagination }\n        };\n    }\n\n    remapFavoriteEntries(entries: any[]) {\n        return entries\n            .map(({ entry: { target } }: any) => ({\n                entry: target.file || target.folder\n            }))\n            .filter(({ entry }) => !!entry)\n            .map(FavoritesApiService.remapEntry);\n    }\n\n    /**\n     * Gets the favorites for a user.\n     *\n     * @param personId ID of the user\n     * @param options Options supported by JS-API\n     * @returns List of favorites\n     */\n    getFavorites(personId: string, options?: any): Observable<NodePaging> {\n        const defaultOptions = {\n            maxItems: this.preferences.paginationSize,\n            skipCount: 0,\n            where: '(EXISTS(target/file) OR EXISTS(target/folder))',\n            include: ['properties', 'allowableOperations']\n        };\n        const queryOptions = Object.assign(defaultOptions, options);\n        const promise = this.favoritesApi.listFavorites(personId, queryOptions).then(this.remapFavoritesData);\n\n        return from(promise).pipe(catchError((err) => of(err)));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UpdateNotification, CardViewBaseItemModel, CardViewUpdateService } from '@alfresco/adf-core';\nimport { Node } from '@alfresco/js-api';\nimport { Injectable, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CardViewContentUpdateService {\n    private readonly cardViewUpdateService = inject(CardViewUpdateService);\n\n    itemUpdated$ = new Subject<UpdateNotification>();\n    updatedAspect$ = new Subject<Node>();\n\n    constructor() {\n        this.linkVariables();\n    }\n\n    update(property: CardViewBaseItemModel, newValue: any) {\n        this.cardViewUpdateService.update(property, newValue);\n    }\n\n    updateElement(notification: CardViewBaseItemModel) {\n        this.cardViewUpdateService.updateElement(notification);\n    }\n\n    updateNodeAspect(node: Node) {\n        this.updatedAspect$.next(node);\n    }\n\n    private linkVariables() {\n        this.linkItemUpdated();\n    }\n\n    private linkItemUpdated() {\n        this.cardViewUpdateService.itemUpdated$.subscribe((res) => {\n            this.itemUpdated$.next(res);\n        });\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { from, Observable } from 'rxjs';\nimport {\n    Node,\n    SiteBodyCreate,\n    SiteEntry,\n    SiteGroupEntry,\n    SiteGroupPaging,\n    SiteMemberEntry,\n    SiteMemberPaging,\n    SiteMembershipBodyCreate,\n    SiteMembershipBodyUpdate,\n    SiteMembershipRequestWithPersonPaging,\n    SitePaging,\n    SitesApi\n} from '@alfresco/js-api';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SitesService {\n    private readonly apiService = inject(AlfrescoApiService);\n\n    private _sitesApi: SitesApi;\n    get sitesApi(): SitesApi {\n        this._sitesApi = this._sitesApi ?? new SitesApi(this.apiService.getInstance());\n        return this._sitesApi;\n    }\n\n    /**\n     * Create a site\n     *\n     * @param siteBody SiteBodyCreate to create site\n     * @returns site SiteEntry\n     */\n    createSite(siteBody: SiteBodyCreate): Observable<SiteEntry> {\n        return from(this.sitesApi.createSite(siteBody));\n    }\n\n    /**\n     * Gets a list of all sites in the repository.\n     *\n     * @param opts Options supported by JS-API\n     * @returns List of sites\n     */\n    getSites(opts: any = {}): Observable<SitePaging> {\n        const defaultOptions = {\n            skipCount: 0,\n            include: ['properties']\n        };\n        const queryOptions = Object.assign({}, defaultOptions, opts);\n        return from(this.sitesApi.listSites(queryOptions));\n    }\n\n    /**\n     * Gets the details for a site.\n     *\n     * @param siteId ID of the target site\n     * @param opts Options supported by JS-API\n     * @returns Information about the site\n     */\n    getSite(siteId: string, opts?: any): Observable<SiteEntry | any> {\n        return from(this.sitesApi.getSite(siteId, opts));\n    }\n\n    /**\n     * Deletes a site.\n     *\n     * @param siteId Site to delete\n     * @param permanentFlag True: deletion is permanent; False: site is moved to the trash\n     * @returns Null response notifying when the operation is complete\n     */\n    deleteSite(siteId: string, permanentFlag: boolean = true): Observable<any> {\n        const options: any = {};\n        options.permanent = permanentFlag;\n        return from(this.sitesApi.deleteSite(siteId, options));\n    }\n\n    /**\n     * Gets a site's content.\n     *\n     * @param siteId ID of the target site\n     * @returns Site content\n     */\n    getSiteContent(siteId: string): Observable<SiteEntry | any> {\n        return this.getSite(siteId, { relations: ['containers'] });\n    }\n\n    /**\n     * Gets a list of all a site's members.\n     *\n     * @param siteId ID of the target site\n     * @returns Site members\n     */\n    getSiteMembers(siteId: string): Observable<SiteEntry | any> {\n        return this.getSite(siteId, { relations: ['members'] });\n    }\n\n    /**\n     * Gets a list of all a site's members.\n     *\n     * @param siteId ID of the target site\n     * @param opts Optional parameters supported by JS-API\n     * @returns Observable<SiteMemberPaging>\n     */\n    listSiteMemberships(siteId: string, opts: any): Observable<SiteMemberPaging> {\n        return from(this.sitesApi.listSiteMemberships(siteId, opts));\n    }\n\n    /**\n     * Looks for a site inside the path of a Node and returns its guid if it finds one.\n     * (return an empty string if no site is found)\n     *\n     * @param node Node to look for parent site\n     * @returns Site guid\n     */\n    getSiteNameFromNodePath(node: Node): string {\n        let siteName = '';\n        if (node.path?.elements) {\n            const foundNode = node.path.elements.find((pathNode) => pathNode.nodeType === 'st:site' && pathNode.name !== 'Sites');\n            siteName = foundNode ? foundNode.name : '';\n        }\n        return siteName.toLocaleLowerCase();\n    }\n\n    /**\n     * Gets a list of site membership requests.\n     *\n     * @param opts Options supported by JS-API\n     * @returns Site membership requests\n     */\n    getSiteMembershipRequests(opts?: any): Observable<SiteMembershipRequestWithPersonPaging> {\n        return from(this.sitesApi.getSiteMembershipRequests(opts));\n    }\n\n    /**\n     * Creates a site membership for person **personId** on site **siteId**.\n     *\n     * @param siteId The identifier of a site\n     * @param siteMembershipBodyCreate The person to add and their role\n     * @param opts Optional parameters\n     * @returns Observable<SiteMemberEntry>\n     */\n    createSiteMembership(siteId: string, siteMembershipBodyCreate: SiteMembershipBodyCreate, opts?: any): Observable<SiteMemberEntry> {\n        return from(this.sitesApi.createSiteMembership(siteId, siteMembershipBodyCreate, opts));\n    }\n\n    /**\n     * Update a site membership\n     *\n     * @param siteId The identifier of a site.\n     * @param personId The identifier of a person.\n     * @param siteMembershipBodyUpdate The persons new role\n     * @param opts Optional parameters\n     * @returns Observable<SiteMemberEntry>\n     */\n    updateSiteMembership(\n        siteId: string,\n        personId: string,\n        siteMembershipBodyUpdate: SiteMembershipBodyUpdate,\n        opts?: any\n    ): Observable<SiteMemberEntry> {\n        return from(this.sitesApi.updateSiteMembership(siteId, personId, siteMembershipBodyUpdate, opts));\n    }\n\n    /**\n     * Delete a site membership\n     *\n     * @param siteId The identifier of a site.\n     * @param personId The identifier of a person.\n     * @returns Null response notifying when the operation is complete\n     */\n    deleteSiteMembership(siteId: string, personId: string): Observable<void> {\n        return from(this.sitesApi.deleteSiteMembership(siteId, personId));\n    }\n\n    /**\n     * Accept site membership requests.\n     *\n     * @param siteId The identifier of a site.\n     * @param inviteeId The invitee user name.\n     * @param opts Options supported by JS-API\n     * @returns  Null response notifying when the operation is complete\n     */\n    approveSiteMembershipRequest(siteId: string, inviteeId: string, opts?: any): Observable<SiteMembershipRequestWithPersonPaging> {\n        return from(this.sitesApi.approveSiteMembershipRequest(siteId, inviteeId, opts));\n    }\n\n    /**\n     * Reject site membership requests.\n     *\n     * @param siteId The identifier of a site.\n     * @param inviteeId The invitee user name.\n     * @param opts Options supported by JS-API\n     * @returns  Null response notifying when the operation is complete\n     */\n    rejectSiteMembershipRequest(siteId: string, inviteeId: string, opts?: any): Observable<SiteMembershipRequestWithPersonPaging> {\n        return from(this.sitesApi.rejectSiteMembershipRequest(siteId, inviteeId, opts));\n    }\n\n    /**\n     * List group membership for site\n     *\n     * @param siteId The identifier of a site.\n     * @param opts Options supported by JS-API\n     * @returns  Observable<SiteGroupPaging>\n     */\n    listSiteGroups(siteId: string, opts?: any): Observable<SiteGroupPaging> {\n        return from(this.sitesApi.listSiteGroups(siteId, opts));\n    }\n\n    /**\n     * Create a site membership for group\n     *\n     * @param siteId The identifier of a site.\n     * @param siteMembershipBodyCreate The Group to add and its role\n     * @returns Observable<SiteGroupEntry>\n     */\n    createSiteGroupMembership(siteId: string, siteMembershipBodyCreate: SiteMembershipBodyCreate): Observable<SiteGroupEntry> {\n        return from(this.sitesApi.createSiteGroupMembership(siteId, siteMembershipBodyCreate));\n    }\n\n    /**\n     * Get information about site membership of group\n     *\n     * @param siteId The identifier of a site.\n     * @param groupId The authorityId of a group.\n     * @returns Observable<SiteGroupEntry>\n     */\n    getSiteGroupMembership(siteId: string, groupId: string): Observable<SiteGroupEntry> {\n        return from(this.sitesApi.getSiteGroupMembership(siteId, groupId));\n    }\n\n    /**\n     * Update site membership of group\n     *\n     * @param siteId The identifier of a site.\n     * @param groupId The authorityId of a group.\n     * @param siteMembershipBodyUpdate The group new role\n     * @returns Observable<SiteGroupEntry>\n     */\n    updateSiteGroupMembership(siteId: string, groupId: string, siteMembershipBodyUpdate: SiteMembershipBodyUpdate): Observable<SiteGroupEntry> {\n        return from(this.sitesApi.updateSiteGroupMembership(siteId, groupId, siteMembershipBodyUpdate));\n    }\n\n    /**\n     * Delete a group membership for site\n     *\n     * @param siteId The identifier of a site.\n     * @param groupId The authorityId of a group.\n     * @returns Observable<void>\n     */\n    deleteSiteGroupMembership(siteId: string, groupId: string): Observable<void> {\n        return from(this.sitesApi.deleteSiteGroupMembership(siteId, groupId));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { ContentApi, RenditionEntry, RenditionPaging, RenditionsApi, VersionsApi } from '@alfresco/js-api';\nimport { Track, TranslationService, ViewUtilService } from '@alfresco/adf-core';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class RenditionService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly translateService = inject(TranslationService);\n    private readonly viewUtilsService = inject(ViewUtilService);\n\n    static TARGET = '_new';\n\n    /**\n     * Content groups based on categorization of files that can be viewed in the web browser. This\n     * implementation or grouping is tied to the definition the ng component: ViewerRenderComponent\n     */\n    static ContentGroup = {\n        IMAGE: 'image',\n        MEDIA: 'media',\n        PDF: 'pdf',\n        TEXT: 'text'\n    };\n\n    /**\n     * The name of the rendition with the media subtitles in the supported format\n     */\n    static SUBTITLES_RENDITION_NAME = 'webvtt';\n\n    /**\n     * Based on ViewerRenderComponent Implementation, this value is used to determine how many times we try\n     * to get the rendition of a file for preview, or printing.\n     */\n    maxRetries = 5;\n\n    /**\n     * Timeout used for setInterval.\n     */\n    private readonly TRY_TIMEOUT: number = 10000;\n\n    _renditionsApi: RenditionsApi;\n    get renditionsApi(): RenditionsApi {\n        this._renditionsApi = this._renditionsApi ?? new RenditionsApi(this.apiService.getInstance());\n        return this._renditionsApi;\n    }\n\n    _contentApi: ContentApi;\n    get contentApi(): ContentApi {\n        this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance());\n        return this._contentApi;\n    }\n\n    _versionsApi: VersionsApi;\n    private readonly DEFAULT_RENDITION: string = 'imgpreview';\n\n    get versionsApi(): VersionsApi {\n        this._versionsApi = this._versionsApi ?? new VersionsApi(this.apiService.getInstance());\n        return this._versionsApi;\n    }\n\n    getRenditionUrl(nodeId: string, type: string, renditionExists: boolean): string {\n        return renditionExists && type !== RenditionService.ContentGroup.IMAGE\n            ? this.contentApi.getRenditionUrl(nodeId, RenditionService.ContentGroup.PDF)\n            : this.contentApi.getContentUrl(nodeId, false);\n    }\n\n    private async waitRendition(nodeId: string, renditionId: string, retries: number): Promise<RenditionEntry> {\n        if (this.maxRetries > retries) {\n            const rendition = await this.renditionsApi.getRendition(nodeId, renditionId);\n            const status = rendition.entry.status.toString();\n\n            if (status === 'CREATED') {\n                return rendition;\n            } else {\n                retries += 1;\n                await this.wait(1000);\n                return this.waitRendition(nodeId, renditionId, retries);\n            }\n        }\n\n        return Promise.resolve(null);\n    }\n\n    private wait(ms: number): Promise<any> {\n        return new Promise((resolve) => setTimeout(resolve, ms));\n    }\n\n    async getRendition(nodeId: string, renditionId: string): Promise<RenditionEntry> {\n        const renditionPaging: RenditionPaging = await this.renditionsApi.listRenditions(nodeId);\n        let rendition: RenditionEntry = renditionPaging.list.entries.find(\n            (renditionEntry: RenditionEntry) => renditionEntry.entry.id.toLowerCase() === renditionId\n        );\n\n        if (rendition) {\n            const status = rendition.entry.status.toString();\n\n            if (status === 'NOT_CREATED') {\n                try {\n                    await this.renditionsApi.createRendition(nodeId, { id: renditionId });\n                    rendition = await this.waitRendition(nodeId, renditionId, 0);\n                } catch {\n                    return null;\n                }\n            }\n        }\n        return new Promise<RenditionEntry>((resolve) => resolve(rendition));\n    }\n\n    async getNodeRendition(nodeId: string, versionId?: string): Promise<{ url: string; mimeType: string }> {\n        try {\n            return versionId ? await this.resolveNodeRendition(nodeId, 'pdf', versionId) : await this.resolveNodeRendition(nodeId, 'pdf');\n        } catch {\n            return null;\n        }\n    }\n\n    private async resolveNodeRendition(nodeId: string, renditionId: string, versionId?: string): Promise<{ url: string; mimeType: string }> {\n        renditionId = renditionId.toLowerCase();\n\n        const supportedRendition: RenditionPaging = versionId\n            ? await this.versionsApi.listVersionRenditions(nodeId, versionId)\n            : await this.renditionsApi.listRenditions(nodeId);\n\n        let rendition = this.findRenditionById(supportedRendition, renditionId);\n        if (!rendition) {\n            renditionId = this.DEFAULT_RENDITION;\n            rendition = this.findRenditionById(supportedRendition, this.DEFAULT_RENDITION);\n        }\n\n        if (rendition) {\n            const status: string = rendition.entry.status.toString();\n            const mimeType: string = rendition.entry.content.mimeType;\n\n            if (status === 'NOT_CREATED') {\n                return { url: await this.requestCreateRendition(nodeId, renditionId, versionId), mimeType };\n            } else {\n                return { url: await this.handleNodeRendition(nodeId, renditionId, versionId), mimeType };\n            }\n        }\n\n        return null;\n    }\n\n    private async requestCreateRendition(nodeId: string, renditionId: string, versionId: string): Promise<string> {\n        try {\n            if (versionId) {\n                await this.versionsApi.createVersionRendition(nodeId, versionId, { id: renditionId });\n            } else {\n                await this.renditionsApi.createRendition(nodeId, { id: renditionId });\n            }\n            try {\n                return versionId ? await this.waitNodeRendition(nodeId, renditionId, versionId) : await this.waitNodeRendition(nodeId, renditionId);\n            } catch {\n                return null;\n            }\n        } catch {\n            return null;\n        }\n    }\n\n    private findRenditionById(supportedRendition: RenditionPaging, renditionId: string) {\n        return supportedRendition.list.entries.find((renditionEntry: RenditionEntry) => renditionEntry.entry.id.toLowerCase() === renditionId);\n    }\n\n    private async waitNodeRendition(nodeId: string, renditionId: string, versionId?: string): Promise<string> {\n        let currentRetry: number = 0;\n        return new Promise<string>((resolve, reject) => {\n            const intervalId = setInterval(() => {\n                currentRetry++;\n                if (this.maxRetries >= currentRetry) {\n                    if (versionId) {\n                        this.versionsApi.getVersionRendition(nodeId, versionId, renditionId).then(\n                            (rendition: RenditionEntry) => {\n                                const status: string = rendition.entry.status.toString();\n\n                                if (status === 'CREATED') {\n                                    clearInterval(intervalId);\n                                    return resolve(this.handleNodeRendition(nodeId, rendition.entry.content.mimeType, versionId));\n                                }\n                            },\n                            () => reject(new Error('Error geting version rendition'))\n                        );\n                    } else {\n                        this.renditionsApi.getRendition(nodeId, renditionId).then(\n                            (rendition: RenditionEntry) => {\n                                const status: string = rendition.entry.status.toString();\n\n                                if (status === 'CREATED') {\n                                    clearInterval(intervalId);\n                                    return resolve(this.handleNodeRendition(nodeId, renditionId, versionId));\n                                }\n                            },\n                            () => reject(new Error('Error getting rendition'))\n                        );\n                    }\n                } else {\n                    clearInterval(intervalId);\n                    return reject(new Error('Error getting rendition'));\n                }\n            }, this.TRY_TIMEOUT);\n        });\n    }\n\n    private async handleNodeRendition(nodeId: string, renditionId: string, versionId?: string): Promise<string> {\n        return versionId\n            ? this.contentApi.getVersionRenditionUrl(nodeId, versionId, renditionId)\n            : this.contentApi.getRenditionUrl(nodeId, renditionId);\n    }\n\n    async generateMediaTracksRendition(nodeId: string): Promise<Track[]> {\n        return this.isRenditionAvailable(nodeId, RenditionService.SUBTITLES_RENDITION_NAME)\n            .then((value) => {\n                const tracks = [];\n                if (value) {\n                    tracks.push({\n                        kind: 'subtitles',\n                        src: this.contentApi.getRenditionUrl(nodeId, RenditionService.SUBTITLES_RENDITION_NAME),\n                        label: this.translateService.instant('ADF_VIEWER.SUBTITLES')\n                    });\n                }\n                return tracks;\n            })\n            .catch(() => []);\n    }\n\n    private async isRenditionAvailable(nodeId: string, renditionId: string): Promise<boolean> {\n        const renditionPaging: RenditionPaging = await this.renditionsApi.listRenditions(nodeId);\n        const rendition: RenditionEntry = renditionPaging.list.entries.find(\n            (renditionEntry: RenditionEntry) => renditionEntry.entry.id.toLowerCase() === renditionId\n        );\n\n        return rendition?.entry?.status?.toString() === 'CREATED' || false;\n    }\n\n    /**\n     * This method takes a url to trigger the print dialog against, and the type of artifact that it\n     * is.\n     * This URL should be one that can be rendered in the browser, for example PDF, Image, or Text\n     *\n     * @param url url to print\n     * @param type type of the rendition\n     */\n    printFile(url: string, type: string): void {\n        const pwa = window.open(url, RenditionService.TARGET);\n        if (pwa) {\n            pwa.onload = () => {\n                pwa.print();\n                if (type === RenditionService.ContentGroup.IMAGE) {\n                    // Because of the way chrome focus and close image window vs. pdf preview window\n                    setTimeout(() => {\n                        pwa.close();\n                    }, 500);\n                }\n            };\n        }\n    }\n\n    /**\n     * Launch the File Print dialog from anywhere other than the preview service, which resolves the\n     * rendition of the object that can be printed from a web browser.\n     * These are: images, PDF files, or PDF rendition of files.\n     * We also force PDF rendition for TEXT type objects, otherwise the default URL is to download.\n     * TODO there are different TEXT type objects, (HTML, plaintext, xml, etc. we should determine how these are handled)\n     *\n     * @param objectId object it\n     * @param mimeType mime type\n     */\n    printFileGeneric(objectId: string, mimeType: string): void {\n        const nodeId = objectId;\n        const type: string = this.viewUtilsService.getViewerTypeByMimeType(mimeType);\n\n        this.getRendition(nodeId, RenditionService.ContentGroup.PDF)\n            .then((value) => {\n                const url: string = this.getRenditionUrl(nodeId, type, !!value);\n                const printType =\n                    type === RenditionService.ContentGroup.PDF || type === RenditionService.ContentGroup.TEXT\n                        ? RenditionService.ContentGroup.PDF\n                        : type;\n                this.printFile(url, printType);\n            })\n            .catch(() => {});\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Capabilities } from '@alfresco/js-api';\nimport { EcmCompanyModel } from './ecm-company.model';\n\nexport class EcmUserModel {\n    id: string;\n    firstName: string;\n    lastName?: string;\n    displayName?: string;\n    description?: string;\n    avatarId?: string;\n    email: string;\n    skypeId?: string;\n    googleId?: string;\n    instantMessageId?: string;\n    jobTitle?: string;\n    location?: string;\n    company: EcmCompanyModel;\n    mobile?: string;\n    telephone?: string;\n    statusUpdatedAt?: Date;\n    userStatus?: string;\n    enabled: boolean;\n    emailNotificationsEnabled?: boolean;\n    aspectNames?: string[];\n    properties?: { [key: string]: string };\n    capabilities?: Capabilities;\n\n    constructor(obj?: any) {\n        this.id = obj?.id || null;\n        this.firstName = obj?.firstName;\n        this.lastName = obj?.lastName;\n        this.description = obj?.description || null;\n        this.avatarId = obj?.avatarId || null;\n        this.email = obj?.email || null;\n        this.skypeId = obj?.skypeId;\n        this.googleId = obj?.googleId;\n        this.instantMessageId = obj?.instantMessageId;\n        this.jobTitle = obj?.jobTitle || null;\n        this.location = obj?.location || null;\n        this.company = obj?.company;\n        this.mobile = obj?.mobile;\n        this.telephone = obj?.telephone;\n        this.statusUpdatedAt = obj?.statusUpdatedAt;\n        this.userStatus = obj?.userStatus;\n        this.enabled = obj?.enabled;\n        this.emailNotificationsEnabled = obj?.emailNotificationsEnabled;\n        this.aspectNames = obj?.aspectNames;\n        this.properties = obj?.properties;\n        this.capabilities = obj?.capabilities;\n    }\n\n    isAdmin(): boolean {\n        return this.capabilities?.isAdmin;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { from, Observable, of } from 'rxjs';\nimport { AuthenticationService } from '@alfresco/adf-core';\nimport { map, tap } from 'rxjs/operators';\nimport { Pagination, PeopleApi, PersonBodyCreate, PersonBodyUpdate } from '@alfresco/js-api';\nimport { EcmUserModel } from '../models/ecm-user.model';\nimport { ContentService } from './content.service';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\nexport interface PeopleContentQueryResponse {\n    pagination: Pagination;\n    entries: EcmUserModel[];\n}\n\nexport interface PeopleContentSortingModel {\n    orderBy: string;\n    direction: string;\n}\n\nexport interface PeopleContentQueryRequestModel {\n    skipCount?: number;\n    maxItems?: number;\n    sorting?: PeopleContentSortingModel;\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PeopleContentService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly contentService = inject(ContentService);\n\n    private currentUser: EcmUserModel;\n\n    private _peopleApi: PeopleApi;\n    get peopleApi(): PeopleApi {\n        this._peopleApi = this._peopleApi ?? new PeopleApi(this.apiService.getInstance());\n        return this._peopleApi;\n    }\n\n    constructor() {\n        const authenticationService = inject(AuthenticationService);\n\n        authenticationService.onLogout.subscribe(() => {\n            this.resetLocalCurrentUser();\n        });\n    }\n\n    /**\n     * Gets information about a user identified by their username.\n     *\n     * @param personId ID of the target user\n     * @returns User information\n     */\n    getPerson(personId: string): Observable<EcmUserModel> {\n        return from(this.peopleApi.getPerson(personId)).pipe(map((personEntry) => new EcmUserModel(personEntry.entry)));\n    }\n\n    getCurrentPerson(): Observable<EcmUserModel> {\n        return this.getCurrentUserInfo();\n    }\n\n    /**\n     * Gets information about the current user alias -me-\n     *\n     * @returns User information\n     */\n    getCurrentUserInfo(): Observable<EcmUserModel> {\n        if (this.currentUser) {\n            return of(this.currentUser);\n        }\n        return this.getPerson('-me-').pipe(tap((user) => (this.currentUser = user)));\n    }\n\n    /**\n     * Used to know if the current user has the admin capability\n     *\n     * @returns true or false\n     */\n    isCurrentUserAdmin(): boolean {\n        return this.currentUser?.isAdmin() ?? false;\n    }\n\n    /**\n     * Reset the local current user object\n     */\n    resetLocalCurrentUser() {\n        this.currentUser = undefined;\n    }\n\n    /**\n     * Gets a list of people.\n     *\n     * @param requestQuery maxItems and skipCount parameters supported by JS-API\n     * @returns Response containing pagination and list of entries\n     */\n    listPeople(requestQuery?: PeopleContentQueryRequestModel): Observable<PeopleContentQueryResponse> {\n        const requestQueryParams = { skipCount: requestQuery?.skipCount, maxItems: requestQuery?.maxItems };\n        const orderBy = this.buildOrderArray(requestQuery?.sorting);\n        if (orderBy.length) {\n            requestQueryParams['orderBy'] = orderBy;\n        }\n\n        const promise = this.peopleApi.listPeople(requestQueryParams);\n        return from(promise).pipe(\n            map((response) => ({\n                pagination: response.list.pagination,\n                entries: response.list.entries.map((person) => person.entry as EcmUserModel)\n            }))\n        );\n    }\n\n    /**\n     * Creates new person.\n     *\n     * @param newPerson Object containing the new person details.\n     * @param opts Optional parameters\n     * @returns Created new person\n     */\n    createPerson(newPerson: PersonBodyCreate, opts?: any): Observable<EcmUserModel> {\n        return from(this.peopleApi.createPerson(newPerson, opts)).pipe(map((res) => res?.entry as EcmUserModel));\n    }\n\n    /**\n     * Updates the person details\n     *\n     * @param personId The identifier of a person\n     * @param details The person details\n     * @param opts Optional parameters\n     * @returns Updated person model\n     */\n    updatePerson(personId: string, details: PersonBodyUpdate, opts?: any): Observable<EcmUserModel> {\n        return from(this.peopleApi.updatePerson(personId, details, opts)).pipe(map((res) => res?.entry as EcmUserModel));\n    }\n\n    /**\n     * Returns a profile image as a URL.\n     *\n     * @param avatarId Target avatar\n     * @returns Image URL\n     */\n    getUserProfileImage(avatarId: string): string {\n        return this.contentService.getContentUrl(avatarId);\n    }\n\n    private buildOrderArray(sorting: PeopleContentSortingModel): string[] {\n        return sorting?.orderBy && sorting?.direction ? [`${sorting.orderBy} ${sorting.direction.toUpperCase()}`] : [];\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './alfresco-api.service';\nexport { AlfrescoApiFactory } from './alfresco-api.interface';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { inject, Injectable } from '@angular/core';\nimport { SavedSearchStrategy } from '../interfaces/saved-searches-strategy.interface';\nimport { AuthenticationService } from '@alfresco/adf-core';\nimport { ReplaySubject, Observable, catchError, switchMap, take, tap, throwError, map } from 'rxjs';\nimport { NodeEntry, NodesApi } from '@alfresco/js-api';\nimport { SavedSearch } from '../interfaces/saved-search.interface';\nimport { AlfrescoApiService } from '../../services';\n\n@Injectable()\nexport abstract class SavedSearchesBaseService implements SavedSearchStrategy {\n    private _nodesApi: NodesApi;\n\n    private static readonly SAVE_MODE_THRESHOLD = 5;\n\n    protected readonly _savedSearches$ = new ReplaySubject<SavedSearch[]>(1);\n    readonly savedSearches$: Observable<SavedSearch[]> = this._savedSearches$.asObservable();\n\n    protected readonly apiService = inject(AlfrescoApiService);\n    protected readonly authService = inject(AuthenticationService);\n\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());\n        return this._nodesApi;\n    }\n\n    protected abstract fetchAllSavedSearches(): Observable<SavedSearch[]>;\n    protected abstract updateSavedSearches(searches: SavedSearch[]): Observable<NodeEntry>;\n\n    init(): void {\n        this.fetchSavedSearches();\n    }\n\n    getSavedSearches(): Observable<SavedSearch[]> {\n        return this.fetchAllSavedSearches();\n    }\n\n    saveSearch(newSaveSearch: Pick<SavedSearch, 'name' | 'description' | 'encodedUrl'>): Observable<NodeEntry> {\n        const limit = SavedSearchesBaseService.SAVE_MODE_THRESHOLD;\n        return this.fetchAllSavedSearches().pipe(\n            take(1),\n            switchMap((savedSearches) => {\n                let updatedSavedSearches: SavedSearch[] = [];\n\n                if (savedSearches.length < limit) {\n                    updatedSavedSearches = [{ ...newSaveSearch, order: 0 }, ...savedSearches];\n                } else {\n                    const upToLimitSearches = savedSearches.slice(0, limit);\n                    const restSearches = savedSearches.slice(limit);\n                    updatedSavedSearches = [...upToLimitSearches, { ...newSaveSearch, order: limit }, ...restSearches];\n                }\n\n                updatedSavedSearches = updatedSavedSearches.map((search, index) => ({ ...search, order: index }));\n\n                return this.updateSavedSearches(updatedSavedSearches).pipe(tap(() => this._savedSearches$.next(updatedSavedSearches)));\n            }),\n            catchError((error) => {\n                console.error('Error saving new search:', error);\n                return throwError(() => error);\n            })\n        );\n    }\n\n    editSavedSearch(updatedSavedSearch: SavedSearch): Observable<NodeEntry> {\n        let previousSavedSearches: SavedSearch[];\n        return this.savedSearches$.pipe(\n            take(1),\n            map((savedSearches) => {\n                previousSavedSearches = [...savedSearches];\n                return savedSearches.map((search) => (search.order === updatedSavedSearch.order ? updatedSavedSearch : search));\n            }),\n            tap((updatedSearches) => {\n                this._savedSearches$.next(updatedSearches);\n            }),\n            switchMap((updatedSearches) => this.updateSavedSearches(updatedSearches)),\n            catchError((error) => {\n                this._savedSearches$.next(previousSavedSearches);\n                return throwError(() => error);\n            })\n        );\n    }\n\n    deleteSavedSearch(deletedSavedSearch: SavedSearch): Observable<NodeEntry> {\n        let previousSavedSearchesOrder: SavedSearch[];\n        return this.savedSearches$.pipe(\n            take(1),\n            map((savedSearches) => {\n                previousSavedSearchesOrder = [...savedSearches];\n                const updatedSearches = savedSearches.filter((search) => search.order !== deletedSavedSearch.order);\n                return updatedSearches.map((search, index) => ({ ...search, order: index }));\n            }),\n            tap((updatedSearches: SavedSearch[]) => {\n                this._savedSearches$.next(updatedSearches);\n            }),\n            switchMap((updatedSearches: SavedSearch[]) => this.updateSavedSearches(updatedSearches)),\n            catchError((error) => {\n                this._savedSearches$.next(previousSavedSearchesOrder);\n                return throwError(() => error);\n            })\n        );\n    }\n\n    changeOrder(previousIndex: number, currentIndex: number): void {\n        let previousSavedSearchesOrder: SavedSearch[];\n        this.savedSearches$\n            .pipe(\n                take(1),\n                map((savedSearches) => {\n                    previousSavedSearchesOrder = [...savedSearches];\n                    const [movedSearch] = savedSearches.splice(previousIndex, 1);\n                    savedSearches.splice(currentIndex, 0, movedSearch);\n                    return savedSearches.map((search, index) => ({ ...search, order: index }));\n                }),\n                tap((savedSearches: SavedSearch[]) => this._savedSearches$.next(savedSearches)),\n                switchMap((updatedSearches: SavedSearch[]) => this.updateSavedSearches(updatedSearches)),\n                catchError((error) => {\n                    this._savedSearches$.next(previousSavedSearchesOrder);\n                    return throwError(() => error);\n                })\n            )\n            .subscribe();\n    }\n\n    protected resetSavedSearchesStream(): void {\n        this._savedSearches$.next([]);\n    }\n\n    private fetchSavedSearches(): void {\n        this.getSavedSearches()\n            .pipe(take(1))\n            .subscribe((searches) => this._savedSearches$.next(searches));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NodeEntry, PreferencesApi, ContentFieldsQuery, PreferenceEntry } from '@alfresco/js-api';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { Observable, of, from, throwError } from 'rxjs';\nimport { catchError, concatMap, first, map, switchMap, take, tap } from 'rxjs/operators';\nimport { SavedSearch } from '../interfaces/saved-search.interface';\nimport { SavedSearchesBaseService } from './saved-searches-base.service';\n\nexport interface SavedSearchesPreferencesApiService {\n    getPreference: (personId: string, preferenceName: string, opts?: ContentFieldsQuery) => Promise<PreferenceEntry> | Observable<PreferenceEntry>;\n    updatePreference: (personId: string, preferenceName: string, preferenceValue: string) => Promise<PreferenceEntry> | Observable<PreferenceEntry>;\n}\n\nexport const SAVED_SEARCHES_SERVICE_PREFERENCES = new InjectionToken<SavedSearchesPreferencesApiService>('SAVED_SEARCHES_SERVICE_PREFERENCES');\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SavedSearchesService extends SavedSearchesBaseService {\n    private savedSearchFileNodeId: string;\n    private _preferencesApi: SavedSearchesPreferencesApiService;\n    private readonly preferencesService = inject(SAVED_SEARCHES_SERVICE_PREFERENCES, { optional: true });\n\n    get preferencesApi(): SavedSearchesPreferencesApiService {\n        if (this.preferencesService) {\n            this._preferencesApi = this.preferencesService;\n            return this._preferencesApi;\n        }\n\n        this._preferencesApi = this._preferencesApi ?? new PreferencesApi(this.apiService.getInstance());\n        return this._preferencesApi;\n    }\n\n    protected fetchAllSavedSearches(): Observable<SavedSearch[]> {\n        const savedSearchesMigrated = localStorage.getItem(this.getLocalStorageKey()) ?? '';\n        if (savedSearchesMigrated === 'true') {\n            return this.getSavedSearchesFromPreferenceApi();\n        } else {\n            return this.getSavedSearchesNodeId().pipe(\n                take(1),\n                switchMap(() => {\n                    if (this.savedSearchFileNodeId !== '') {\n                        return this.migrateSavedSearches();\n                    } else {\n                        return this.getSavedSearchesFromPreferenceApi();\n                    }\n                }),\n                catchError(() => this.getSavedSearchesFromPreferenceApi())\n            );\n        }\n    }\n\n    protected updateSavedSearches(updatedSavedSearches: SavedSearch[]): Observable<NodeEntry> {\n        return from(this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(updatedSavedSearches))).pipe(\n            map((preference) => JSON.parse(preference.entry.value))\n        );\n    }\n\n    private getSavedSearchesNodeId(): Observable<string> {\n        return from(this.nodesApi.getNode('-my-', { relativePath: 'config.json' })).pipe(\n            first(),\n            concatMap((configNode) => {\n                this.savedSearchFileNodeId = configNode.entry.id;\n                return configNode.entry.id;\n            }),\n            catchError((error) => {\n                const errorStatusCode = JSON.parse(error.message).error.statusCode;\n                if (errorStatusCode === 404) {\n                    localStorage.setItem(this.getLocalStorageKey(), 'true');\n                }\n                return throwError(() => error);\n            })\n        );\n    }\n\n    private async mapFileContentToSavedSearches(blob: Blob): Promise<Array<SavedSearch>> {\n        return blob\n            .text()\n            .then((content) => (content ? JSON.parse(content) : []))\n            .catch(() => []);\n    }\n\n    private getLocalStorageKey(): string {\n        return `saved-searches-${this.authService.getUsername()}-migrated`;\n    }\n\n    private migrateSavedSearches(): Observable<SavedSearch[]> {\n        return from(this.nodesApi.getNodeContent(this.savedSearchFileNodeId).then((content) => this.mapFileContentToSavedSearches(content))).pipe(\n            tap((savedSearches) => {\n                this.preferencesApi.updatePreference('-me-', 'saved-searches', JSON.stringify(savedSearches));\n                localStorage.setItem(this.getLocalStorageKey(), 'true');\n                this.nodesApi.deleteNode(this.savedSearchFileNodeId, { permanent: true });\n            })\n        );\n    }\n\n    private getSavedSearchesFromPreferenceApi(): Observable<SavedSearch[]> {\n        return from(this.preferencesApi.getPreference('-me-', 'saved-searches')).pipe(\n            map((preference) => JSON.parse(preference.entry.value)),\n            catchError(() => of([]))\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NodeEntry } from '@alfresco/js-api';\nimport { Injectable } from '@angular/core';\nimport { Observable, of, from, throwError } from 'rxjs';\nimport { catchError, concatMap, first, map } from 'rxjs/operators';\nimport { SavedSearch } from '../interfaces/saved-search.interface';\nimport { SavedSearchesBaseService } from './saved-searches-base.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SavedSearchesLegacyService extends SavedSearchesBaseService {\n    private savedSearchFileNodeId: string;\n    private currentUserLocalStorageKey: string;\n    private createFileAttempt = false;\n\n    protected fetchAllSavedSearches(): Observable<SavedSearch[]> {\n        return this.getSavedSearchesNodeId().pipe(\n            concatMap(() =>\n                from(this.nodesApi.getNodeContent(this.savedSearchFileNodeId).then((content) => this.mapFileContentToSavedSearches(content))).pipe(\n                    catchError((error) => {\n                        if (!this.createFileAttempt) {\n                            this.createFileAttempt = true;\n                            localStorage.removeItem(this.getLocalStorageKey());\n                            return this.fetchAllSavedSearches();\n                        }\n                        return throwError(() => error);\n                    })\n                )\n            )\n        );\n    }\n\n    protected updateSavedSearches(searches: SavedSearch[]): Observable<NodeEntry> {\n        return from(this.nodesApi.updateNodeContent(this.savedSearchFileNodeId, JSON.stringify(searches)));\n    }\n\n    private getSavedSearchesNodeId(): Observable<string> {\n        const localStorageKey = this.getLocalStorageKey();\n        if (this.currentUserLocalStorageKey && this.currentUserLocalStorageKey !== localStorageKey) {\n            this.resetSavedSearchesStream();\n        }\n        this.currentUserLocalStorageKey = localStorageKey;\n        let savedSearchesNodeId = localStorage.getItem(this.currentUserLocalStorageKey) ?? '';\n        if (savedSearchesNodeId === '') {\n            return from(this.nodesApi.getNode('-my-', { relativePath: 'config.json' })).pipe(\n                first(),\n                concatMap((configNode) => {\n                    savedSearchesNodeId = configNode.entry.id;\n                    localStorage.setItem(this.currentUserLocalStorageKey, savedSearchesNodeId);\n                    this.savedSearchFileNodeId = savedSearchesNodeId;\n                    return savedSearchesNodeId;\n                }),\n                catchError((error) => {\n                    const errorStatusCode = JSON.parse(error.message).error.statusCode;\n                    if (errorStatusCode === 404) {\n                        return this.createSavedSearchesNode('-my-').pipe(\n                            first(),\n                            map((node) => {\n                                localStorage.setItem(this.currentUserLocalStorageKey, node.entry.id);\n                                return node.entry.id;\n                            })\n                        );\n                    } else {\n                        return throwError(() => error);\n                    }\n                })\n            );\n        } else {\n            this.savedSearchFileNodeId = savedSearchesNodeId;\n            return of(savedSearchesNodeId);\n        }\n    }\n\n    private createSavedSearchesNode(parentNodeId: string): Observable<NodeEntry> {\n        return from(this.nodesApi.createNode(parentNodeId, { name: 'config.json', nodeType: 'cm:content' }));\n    }\n\n    private async mapFileContentToSavedSearches(blob: Blob): Promise<Array<SavedSearch>> {\n        return blob.text().then((content) => (content ? JSON.parse(content) : []));\n    }\n\n    private getLocalStorageKey(): string {\n        return `saved-searches-node-id__${this.authService.getUsername()}`;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class EcmCompanyModel {\n      organization: string;\n      address1: string;\n      address2: string;\n      address3: string;\n      postcode: string;\n      telephone: string;\n      fax: string;\n      email: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchRequest } from '@alfresco/js-api';\n\nexport interface SearchConfigurationInterface {\n    /**\n     * Generates a query object with custom search parameters.\n     *\n     * @param searchTerm Term text to search for\n     * @param maxResults Maximum number of search results to show in a page\n     * @param skipCount The offset of the start of the page within the results list\n     * @returns Query body defined by the parameters\n     */\n    generateQueryBody(searchTerm: string, maxResults: number, skipCount: number): SearchRequest;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface SavedSearch {\n    name: string;\n    description?: string;\n    encodedUrl: string;\n    order: number;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Observable } from 'rxjs';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { SavedSearch } from './saved-search.interface';\n\n/**\n * Contract that describes the public API for saved searches strategy.\n * Implemented by both the new and legacy SavedSearches services so callers\n * can depend on the same shape.\n */\nexport interface SavedSearchStrategy {\n    savedSearches$: Observable<SavedSearch[]>;\n\n    init(): void;\n\n    /**\n     * Gets a list of saved searches by user.\n     *\n     * @returns SavedSearch list containing user saved searches\n     */\n    getSavedSearches(): Observable<SavedSearch[]>;\n\n    /**\n     * Saves a new search into state and updates state. If there are less than 5 searches,\n     * it will be pushed on first place, if more it will be pushed to 6th place.\n     *\n     * @param newSaveSearch object { name: string, description: string, encodedUrl: string }\n     * @returns NodeEntry\n     */\n    saveSearch(newSaveSearch: Pick<SavedSearch, 'name' | 'description' | 'encodedUrl'>): Observable<NodeEntry>;\n\n    /**\n     * Replace Save Search with new one and also updates the state.\n     *\n     * @param updatedSavedSearch - updated Save Search\n     * @returns NodeEntry\n     */\n    editSavedSearch(updatedSavedSearch: SavedSearch): Observable<NodeEntry>;\n\n    /**\n     * Deletes Save Search and update state.\n     *\n     * @param deletedSavedSearch - Save Search to delete\n     * @returns NodeEntry\n     */\n    deleteSavedSearch(deletedSavedSearch: SavedSearch): Observable<NodeEntry>;\n\n    /**\n     * Reorders saved search place\n     *\n     * @param previousIndex - previous index of saved search\n     * @param currentIndex - new index of saved search\n     */\n    changeOrder(previousIndex: number, currentIndex: number): void;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './services/favorites-api.service';\nexport * from './services/card-view-content-update.service';\nexport * from './services/sites.service';\nexport * from './services/rendition.service';\nexport * from './services/upload.service';\nexport * from './services/nodes-api.service';\nexport * from './services/discovery-api.service';\nexport * from './services/people-content.service';\nexport * from './services/content.service';\nexport * from './services/saved-searches.service';\nexport * from './services/saved-searches-legacy.service';\nexport * from './services/saved-searches-base.service';\n\nexport * from './events/file.event';\n\nexport * from './models/ecm-user.model';\nexport * from './models/ecm-company.model';\nexport * from './models/file.model';\nexport * from './models/node-metadata.model';\n\nexport * from './models/permissions.enum';\nexport * from './models/allowable-operations.enum';\n\nexport * from './interfaces/search-configuration.interface';\nexport * from './interfaces/saved-search.interface';\nexport * from './interfaces/saved-searches-strategy.interface';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataRow, ObjectUtils, ThumbnailService } from '@alfresco/adf-core';\nimport { Node, NodeEntry } from '@alfresco/js-api';\nimport { PermissionStyleModel } from './../models/permissions-style.model';\nimport { ContentService } from './../../common/services/content.service';\n\nexport const ERR_OBJECT_NOT_FOUND: string = 'Object source not found';\n\nexport class ShareDataRow implements DataRow {\n    cache: { [key: string]: any } = {};\n    isSelected: boolean = false;\n    isSelectable: boolean = true;\n    isDropTarget: boolean;\n    cssClass: string = '';\n    id: string;\n\n    get node(): NodeEntry {\n        return this.obj;\n    }\n\n    set node(value: NodeEntry) {\n        this.obj = value;\n        this.cache = {};\n    }\n\n    constructor(\n        private obj: NodeEntry,\n        private readonly contentService: ContentService,\n        private readonly permissionsStyle: PermissionStyleModel[],\n        private readonly thumbnailService?: ThumbnailService,\n        private readonly allowDropFiles?: boolean\n    ) {\n        if (!obj) {\n            throw new Error(ERR_OBJECT_NOT_FOUND);\n        }\n\n        this.isDropTarget =\n            allowDropFiles !== undefined ? this.allowDropFiles && this.checkNodeTypeAndPermissions(obj) : this.checkNodeTypeAndPermissions(obj);\n        if (permissionsStyle) {\n            this.cssClass = this.getPermissionClass(obj);\n        }\n        this.id = this.getId();\n    }\n\n    checkNodeTypeAndPermissions(nodeEntry: NodeEntry) {\n        return this.isFolderAndHasPermissionToUpload(nodeEntry) || this.isFileAndHasParentFolderPermissionToUpload(nodeEntry);\n    }\n\n    getPermissionClass(nodeEntity: NodeEntry): string {\n        let permissionsClasses = '';\n\n        this.permissionsStyle.forEach((currentPermissionsStyle: PermissionStyleModel) => {\n            if (\n                this.applyPermissionStyleToFolder(nodeEntity.entry, currentPermissionsStyle) ||\n                this.applyPermissionStyleToFile(nodeEntity.entry, currentPermissionsStyle)\n            ) {\n                if (this.contentService.hasAllowableOperations(nodeEntity.entry, currentPermissionsStyle.permission)) {\n                    permissionsClasses += ` ${currentPermissionsStyle.css}`;\n                }\n            }\n        });\n\n        return permissionsClasses;\n    }\n\n    private applyPermissionStyleToFile(node: Node, currentPermissionsStyle: PermissionStyleModel): boolean {\n        return currentPermissionsStyle.isFile && node.isFile;\n    }\n\n    private applyPermissionStyleToFolder(node: Node, currentPermissionsStyle: PermissionStyleModel): boolean {\n        return currentPermissionsStyle.isFolder && node.isFolder;\n    }\n\n    isFolderAndHasPermissionToUpload(nodeEntry: NodeEntry): boolean {\n        return this.isFolder(nodeEntry) && this.contentService.hasAllowableOperations(nodeEntry.entry, 'create');\n    }\n\n    isFileAndHasParentFolderPermissionToUpload(nodeEntry: NodeEntry): boolean {\n        return this.isFile(nodeEntry) && this.contentService.hasAllowableOperations(nodeEntry.entry, 'update');\n    }\n\n    isFile(nodeEntry: NodeEntry): boolean {\n        return nodeEntry.entry?.isFile;\n    }\n\n    isFolder(nodeEntry: NodeEntry): boolean {\n        return nodeEntry.entry?.isFolder;\n    }\n\n    cacheValue(key: string, value: any): any {\n        this.cache[key] = value;\n        return value;\n    }\n\n    getValue(key: string): any {\n        if (this.cache[key]) {\n            return this.cache[key];\n        }\n        return ObjectUtils.getValue(this.obj.entry, key);\n    }\n\n    imageErrorResolver(): any {\n        if (this.obj.entry.content) {\n            return this.thumbnailService.getMimeTypeIcon(this.obj.entry.content.mimeType);\n        }\n    }\n\n    hasValue(key: string): boolean {\n        return this.getValue(key) !== undefined;\n    }\n\n    getId(): string {\n        return this.obj.entry.id || undefined;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataColumn, DataRow, DataSorting, DataTableAdapter, ThumbnailService } from '@alfresco/adf-core';\nimport { NodePaging, NodeEntry } from '@alfresco/js-api';\nimport { PermissionStyleModel } from './../models/permissions-style.model';\nimport { ShareDataRow } from './share-data-row.model';\nimport { RowFilter } from './row-filter.model';\nimport { ContentService } from '../../common/services/content.service';\n\nexport const ERR_ROW_NOT_FOUND: string = 'Row not found';\nexport const ERR_COL_NOT_FOUND: string = 'Column not found';\n\nexport class ShareDataTableAdapter implements DataTableAdapter {\n    private _sortingMode: string;\n    private sorting: DataSorting;\n    private rows: DataRow[];\n    private columns: DataColumn[];\n\n    private filter: RowFilter;\n    private imageResolver: any;\n\n    thumbnails = false;\n    permissionsStyle: PermissionStyleModel[];\n    selectedRow: DataRow;\n    allowDropFiles: boolean;\n    allowFocusOnRows = true;\n\n    set sortingMode(value: string) {\n        let newValue = (value || 'client').toLowerCase();\n        if (newValue !== 'client' && newValue !== 'server') {\n            newValue = 'client';\n        }\n        this._sortingMode = newValue;\n    }\n\n    get sortingMode(): string {\n        return this._sortingMode;\n    }\n\n    constructor(\n        private readonly thumbnailService: ThumbnailService,\n        private readonly contentService: ContentService,\n        schema: DataColumn[] = [],\n        sorting?: DataSorting,\n        sortingMode: string = 'client',\n        allowDropFiles: boolean = false\n    ) {\n        this.rows = [];\n        this.columns = schema || [];\n        this.sorting = sorting;\n        this.sortingMode = sortingMode;\n        this.allowDropFiles = allowDropFiles;\n    }\n\n    getColumnType(_row: DataRow, col: DataColumn): string {\n        return col.type;\n    }\n\n    getRows(): Array<DataRow> {\n        return this.rows;\n    }\n\n    // TODO: disable this api\n    setRows(rows: Array<DataRow>) {\n        this.rows = rows || [];\n        this.sort();\n    }\n\n    getColumns(): Array<DataColumn> {\n        return this.columns;\n    }\n\n    setColumns(columns: Array<DataColumn>) {\n        this.columns = columns || [];\n    }\n\n    getValue(row: DataRow, col: DataColumn): any {\n        if (!row) {\n            throw new Error(ERR_ROW_NOT_FOUND);\n        }\n        if (!col) {\n            throw new Error(ERR_COL_NOT_FOUND);\n        }\n        const dataRow = row as ShareDataRow;\n        const value: any = row.getValue(col.key);\n        if (dataRow.cache[col.key]) {\n            return dataRow.cache[col.key];\n        }\n\n        if (col.key === '$thumbnail') {\n            if (this.imageResolver) {\n                const resolved = this.imageResolver(row, col);\n                if (resolved) {\n                    return resolved;\n                }\n            }\n\n            const node = row.node;\n\n            if (node.entry.isFolder) {\n                return this.getFolderIcon(node);\n            }\n\n            if (node.entry.isFile) {\n                if (this.thumbnails) {\n                    return this.getDocumentThumbnailUrl(node);\n                }\n            }\n\n            if (node.entry.content) {\n                const mimeType = node.entry.content.mimeType;\n                if (mimeType) {\n                    return this.thumbnailService.getMimeTypeIcon(mimeType);\n                }\n            }\n\n            return this.thumbnailService.getDefaultMimeTypeIcon();\n        }\n\n        if (col.type === 'image') {\n            if (this.imageResolver) {\n                const resolved = this.imageResolver(row, col);\n                if (resolved) {\n                    return resolved;\n                }\n            }\n        }\n\n        return dataRow.cacheValue(col.key, value);\n    }\n\n    /**\n     * Gets a thumbnail URL for the given document node.\n     *\n     * @param node Node or Node ID to get URL for.\n     * @param attachment Toggles whether to retrieve content as an attachment for download\n     * @param ticket Custom ticket to use for authentication\n     * @returns URL string\n     */\n    private getDocumentThumbnailUrl(node: NodeEntry, attachment?: boolean, ticket?: string): string {\n        let resultUrl: string;\n\n        if (node) {\n            let nodeId: string;\n\n            if (typeof node === 'string') {\n                nodeId = node;\n            } else if (node.entry) {\n                nodeId = node.entry.id;\n            }\n\n            resultUrl = this.contentService.getDocumentThumbnailUrl(nodeId, attachment, ticket);\n        }\n\n        return resultUrl || this.thumbnailService.getMimeTypeIcon(node.entry.content.mimeType);\n    }\n\n    getSorting(): DataSorting {\n        return this.sorting;\n    }\n\n    setSorting(sorting: DataSorting): void {\n        this.sorting = sorting;\n\n        this.sortRows(this.rows, this.sorting);\n    }\n\n    sort(key?: string, direction?: string): void {\n        const sorting = this.sorting || new DataSorting();\n        if (key) {\n            sorting.key = key;\n            sorting.direction = direction || 'asc';\n        }\n        this.setSorting(sorting);\n    }\n\n    setFilter(filter: RowFilter) {\n        this.filter = filter;\n    }\n\n    setImageResolver(resolver: any) {\n        this.imageResolver = resolver;\n    }\n\n    setAllowFocusOnTableRows(allow: boolean) {\n        this.allowFocusOnRows = allow;\n    }\n\n    private getFolderIcon(node: any) {\n        if (this.isSmartFolder(node)) {\n            return this.thumbnailService.getMimeTypeIcon('smartFolder');\n        } else if (this.isRuleFolder(node)) {\n            return this.thumbnailService.getMimeTypeIcon('ruleFolder');\n        } else if (this.isALinkFolder(node)) {\n            return this.thumbnailService.getMimeTypeIcon('linkFolder');\n        } else {\n            return this.thumbnailService.getMimeTypeIcon('folder');\n        }\n    }\n\n    isSmartFolder(node: any) {\n        const nodeAspects = this.getNodeAspectNames(node);\n        return nodeAspects.indexOf('smf:customConfigSmartFolder') > -1 || nodeAspects.indexOf('smf:systemConfigSmartFolder') > -1;\n    }\n\n    isRuleFolder(node: any) {\n        const nodeAspects = this.getNodeAspectNames(node);\n        return nodeAspects.indexOf('rule:rules') > -1;\n    }\n\n    isALinkFolder(node: any) {\n        const nodeType = node.entry ? node.entry.nodeType : node.nodeType;\n        return nodeType === 'app:folderlink';\n    }\n\n    private getNodeAspectNames(node: any): any[] {\n        return node.entry?.aspectNames ? node.entry.aspectNames : node.aspectNames ? node.aspectNames : [];\n    }\n\n    private sortRows(rows: DataRow[], sorting: DataSorting) {\n        if (this.sortingMode === 'server') {\n            return;\n        }\n\n        const options: Intl.CollatorOptions = {};\n\n        if (sorting?.key && rows?.length) {\n            if (sorting.key.includes('sizeInBytes') || sorting.key === 'name') {\n                options.numeric = true;\n            }\n\n            rows.sort((a: ShareDataRow, b: ShareDataRow) => {\n                if (a.node.entry.isFolder !== b.node.entry.isFolder) {\n                    return a.node.entry.isFolder ? -1 : 1;\n                }\n\n                let left = a.getValue(sorting.key);\n                if (left) {\n                    left = left instanceof Date ? left.valueOf().toString() : left.toString();\n                } else {\n                    left = '';\n                }\n\n                let right = b.getValue(sorting.key);\n                if (right) {\n                    right = right instanceof Date ? right.valueOf().toString() : right.toString();\n                } else {\n                    right = '';\n                }\n\n                return sorting.direction === 'asc' ? left.localeCompare(right, undefined, options) : right.localeCompare(left, undefined, options);\n            });\n        }\n    }\n\n    public loadPage(nodePaging: NodePaging, merge: boolean = false, allowDropFiles?: boolean) {\n        let shareDataRows: ShareDataRow[] = [];\n        if (allowDropFiles !== undefined) {\n            this.allowDropFiles = allowDropFiles;\n        }\n        if (nodePaging?.list) {\n            const nodeEntries: NodeEntry[] = nodePaging.list.entries;\n            if (nodeEntries?.length) {\n                shareDataRows = nodeEntries.map(\n                    (item) => new ShareDataRow(item, this.contentService, this.permissionsStyle, this.thumbnailService, this.allowDropFiles)\n                );\n\n                if (this.filter) {\n                    shareDataRows = shareDataRows.filter(this.filter);\n                }\n\n                if (this.sortingMode !== 'server') {\n                    // Sort by first sortable or just first column\n                    if (this.columns?.length) {\n                        const sorting = this.getSorting();\n                        if (sorting) {\n                            this.sortRows(shareDataRows, sorting);\n                        } else {\n                            const sortable = this.columns.filter((c) => c.sortable);\n                            if (sortable.length > 0) {\n                                this.sort(sortable[0].key, 'asc');\n                            } else {\n                                this.sort(this.columns[0].key, 'asc');\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        if (merge) {\n            const listPrunedDuplicate = shareDataRows.filter((elementToFilter: any) => {\n                const isPresent = this.rows.find((currentRow: any) => currentRow.obj.entry.id === elementToFilter.obj.entry.id);\n\n                return !isPresent;\n            });\n\n            this.rows = this.rows.concat(listPrunedDuplicate);\n        } else {\n            this.rows = shareDataRows;\n        }\n    }\n\n    getSelectedRows(): DataRow[] {\n        return this.rows.filter((row: DataRow) => row.isSelected);\n    }\n\n    getRowByNodeId(nodeId: string): DataRow {\n        return this.rows.find((row: DataRow) => row.node.entry.id === nodeId);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-shadow */\n/* eslint-disable @typescript-eslint/naming-convention */\n\nexport class ContentActionModel {\n    icon: string;\n    title: string;\n    handler: ContentActionHandler;\n    execute: (...args) => void;\n    target: string;\n    permission: string;\n    disableWithNoPermission: boolean = false;\n    disabled: boolean | ((...args) => boolean) = false;\n    visible: boolean | ((...args) => boolean) = true;\n\n    constructor(obj?: any) {\n        if (obj) {\n            this.icon = obj.icon;\n            this.title = obj.title;\n            this.handler = obj.handler;\n            this.execute = obj.execute;\n            this.target = obj.target;\n            this.permission = obj.permission;\n            this.disableWithNoPermission = obj.disableWithNoPermission;\n\n            if (Object.prototype.hasOwnProperty.call(obj, 'disabled')) {\n                this.disabled = obj.disabled;\n            }\n\n            if (Object.prototype.hasOwnProperty.call(obj, 'visible')) {\n                this.visible = obj.visible;\n            }\n        }\n    }\n}\n\nexport const ContentActionTarget = {\n    Document: 'document',\n    Folder: 'folder',\n    All: 'all'\n} as const;\n\nexport type ContentActionTarget = (typeof ContentActionTarget)[keyof typeof ContentActionTarget];\n\nexport type ContentActionHandler = (obj: any, target?: any, permission?: string) => any;\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const presetsDefaultModel = {\n    '-trashcan-': [\n        {\n            key: '$thumbnail',\n            type: 'image',\n            srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',\n            sortable: false\n        },\n        {\n            key: 'name',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',\n            cssClass: 'full-width ellipsis-cell',\n            sortable: true\n        },\n        {\n            key: 'path',\n            type: 'location',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.LOCATION',\n            sortable: true\n        },\n        {\n            key: 'content.sizeInBytes',\n            type: 'fileSize',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',\n            sortable: true\n        },\n        {\n            key: 'archivedAt',\n            type: 'date',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.DELETED_ON',\n            format: 'timeAgo',\n            sortable: true\n        },\n        {\n            key: 'archivedByUser.displayName',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.DELETED_BY',\n            sortable: true\n        }\n    ],\n    '-sites-': [\n        {\n            key: '$thumbnail',\n            type: 'image',\n            srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',\n            sortable: false\n        },\n        {\n            key: 'title',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',\n            cssClass: 'full-width ellipsis-cell',\n            sortable: true\n        },\n        {\n            key: 'visibility',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.STATUS',\n            sortable: true\n        }\n    ],\n    '-mysites-': [\n        {\n            key: '$thumbnail',\n            type: 'image',\n            srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',\n            sortable: false\n        },\n        {\n            key: 'title',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',\n            cssClass: 'full-width ellipsis-cell',\n            sortable: true\n        },\n        {\n            key: 'visibility',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.STATUS',\n            sortable: true\n        }\n    ],\n    '-favorites-': [\n        {\n            key: '$thumbnail',\n            type: 'image',\n            srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',\n            sortable: false\n        },\n        {\n            key: 'name',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',\n            cssClass: 'full-width ellipsis-cell',\n            sortable: true\n        },\n        {\n            key: 'path',\n            type: 'location',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.LOCATION',\n            sortable: true\n        },\n        {\n            key: 'content.sizeInBytes',\n            type: 'fileSize',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',\n            sortable: true\n        },\n        {\n            key: 'modifiedAt',\n            type: 'date',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON',\n            format: 'timeAgo',\n            sortable: true\n        },\n        {\n            key: 'modifiedByUser.displayName',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_BY',\n            sortable: true\n        }\n    ],\n    '-recent-': [\n        {\n            key: '$thumbnail',\n            type: 'image',\n            srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',\n            sortable: false\n        },\n        {\n            key: 'name',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',\n            cssClass: 'full-width ellipsis-cell',\n            sortable: true\n        },\n        {\n            key: 'path',\n            type: 'location',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.LOCATION',\n            cssClass: 'ellipsis-cell',\n            sortable: true\n        },\n        {\n            key: 'content.sizeInBytes',\n            type: 'fileSize',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',\n            sortable: true\n        },\n        {\n            key: 'modifiedAt',\n            type: 'date',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON',\n            format: 'timeAgo',\n            sortable: true\n        }\n    ],\n    '-sharedlinks-': [\n        {\n            key: '$thumbnail',\n            type: 'image',\n            srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',\n            sortable: false\n        },\n        {\n            key: 'name',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',\n            cssClass: 'full-width ellipsis-cell',\n            sortable: true\n        },\n        {\n            key: 'path',\n            type: 'location',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.LOCATION',\n            cssClass: 'ellipsis-cell',\n            sortable: true\n        },\n        {\n            key: 'content.sizeInBytes',\n            type: 'fileSize',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',\n            sortable: true\n        },\n        {\n            key: 'modifiedAt',\n            type: 'date',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON',\n            format: 'timeAgo',\n            sortable: true\n        },\n        {\n            key: 'modifiedByUser.displayName',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_BY',\n            sortable: true\n        },\n        {\n            key: 'sharedByUser.displayName',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.SHARED_BY',\n            sortable: true\n        }\n    ],\n    default: [\n        {\n            key: '$thumbnail',\n            type: 'image',\n            srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL',\n            sortable: false\n        },\n        {\n            key: 'name',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME',\n            cssClass: 'full-width ellipsis-cell',\n            sortable: true\n        },\n        {\n            key: 'content.sizeInBytes',\n            type: 'fileSize',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.SIZE',\n            sortable: true\n        },\n        {\n            key: 'modifiedAt',\n            type: 'date',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON',\n            format: 'timeAgo',\n            sortable: true\n        },\n        {\n            key: 'modifiedByUser.displayName',\n            type: 'text',\n            title: 'ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_BY',\n            sortable: true\n        }\n    ]\n};\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { AuthenticationService } from '@alfresco/adf-core';\nimport { isAfter } from 'date-fns';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class LockService {\n    private readonly authService = inject(AuthenticationService);\n\n    isLocked(node: Node): boolean {\n        let isLocked = false;\n        if (this.hasLockConfigured(node)) {\n            if (this.isReadOnlyLock(node)) {\n                isLocked = !this.isLockExpired(node);\n            } else if (this.isLockOwnerAllowed(node)) {\n                isLocked = this.authService.getUsername() !== node.properties['cm:lockOwner'].id;\n                if (this.isLockExpired(node)) {\n                    isLocked = false;\n                }\n            }\n        }\n        return isLocked;\n    }\n\n    private hasLockConfigured(node: Node): boolean {\n        return node.isFile && node.isLocked && node.properties['cm:lockType'];\n    }\n\n    private isReadOnlyLock(node: Node): boolean {\n        return node.properties['cm:lockType'] === 'READ_ONLY_LOCK' && node.properties['cm:lockLifetime'] === 'PERSISTENT';\n    }\n\n    private isLockOwnerAllowed(node: Node): boolean {\n        return node.properties['cm:lockType'] === 'WRITE_LOCK' && node.properties['cm:lockLifetime'] === 'PERSISTENT';\n    }\n\n    private getLockExpiryTime(node: Node): Date | undefined {\n        if (node.properties['cm:expiryDate']) {\n            return new Date(node.properties['cm:expiryDate']);\n        }\n        return undefined;\n    }\n\n    private isLockExpired(node: Node): boolean {\n        const expiryLockTime = this.getLockExpiryTime(node);\n        if (expiryLockTime) {\n            return isAfter(new Date(), expiryLockTime);\n        }\n        return false;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DownloadEntry, DownloadBodyCreate, DownloadsApi } from '@alfresco/js-api';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, from } from 'rxjs';\nimport { AlfrescoApiService } from '../../../services/alfresco-api.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DownloadZipService {\n    private readonly apiService = inject(AlfrescoApiService);\n\n    private _downloadsApi: DownloadsApi;\n    get downloadsApi(): DownloadsApi {\n        this._downloadsApi = this._downloadsApi ?? new DownloadsApi(this.apiService.getInstance());\n        return this._downloadsApi;\n    }\n\n    /**\n     * Creates a new download.\n     *\n     * @param payload Object containing the node IDs of the items to add to the ZIP file\n     * @returns Status object for the download\n     */\n    createDownload(payload: DownloadBodyCreate): Observable<DownloadEntry> {\n        return from(this.downloadsApi.createDownload(payload));\n    }\n\n    /**\n     * Gets status information for a download node.\n     *\n     * @param downloadId ID of the download node\n     * @returns Status object for the download\n     */\n    getDownload(downloadId: string): Observable<DownloadEntry> {\n        return from(this.downloadsApi.getDownload(downloadId));\n    }\n\n    /**\n     * Cancels a download.\n     *\n     * @param downloadId ID of the target download node\n     */\n    cancelDownload(downloadId: string) {\n        this.downloadsApi.cancelDownload(downloadId);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { DownloadZipService } from './services/download-zip.service';\nimport { ContentService } from '../../common/services/content.service';\nimport { FileDownloadStatus } from '@alfresco/js-api';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n    selector: 'adf-download-zip-dialog',\n    standalone: true,\n    imports: [TranslatePipe, MatProgressBarModule, MatDialogModule, MatButtonModule],\n    templateUrl: './download-zip.dialog.html',\n    styleUrls: ['./download-zip.dialog.scss'],\n    host: { class: 'adf-download-zip-dialog' },\n    encapsulation: ViewEncapsulation.None\n})\nexport class DownloadZipDialogComponent implements OnInit {\n    private readonly dialogRef = inject<MatDialogRef<DownloadZipDialogComponent>>(MatDialogRef);\n    data = inject(MAT_DIALOG_DATA);\n    private readonly downloadZipService = inject(DownloadZipService);\n    private readonly nodeService = inject(NodesApiService);\n    private readonly contentService = inject(ContentService);\n\n    // flag for async threads\n    cancelled = false;\n    downloadId: string;\n    percentageDone = 0;\n\n    ngOnInit() {\n        if (this.data?.nodeIds?.length > 0) {\n            if (!this.cancelled) {\n                this.downloadZip(this.data.nodeIds);\n            }\n        }\n    }\n\n    cancelDownload() {\n        this.cancelled = true;\n        this.downloadZipService.cancelDownload(this.downloadId);\n        this.dialogRef.close(false);\n    }\n\n    downloadZip(nodeIds: string[]) {\n        if (nodeIds && nodeIds.length > 0) {\n            this.downloadZipService.createDownload({ nodeIds }).subscribe((data) => {\n                if (data?.entry?.id) {\n                    const url = this.contentService.getContentUrl(data.entry.id, true);\n\n                    this.nodeService.getNode(data.entry.id).subscribe((downloadNode) => {\n                        const fileName = downloadNode.name;\n                        this.downloadId = data.entry.id;\n                        this.waitAndDownload(data.entry.id, url, fileName);\n                    });\n                }\n            });\n        }\n    }\n\n    waitAndDownload(downloadId: string, url: string, fileName: string) {\n        if (this.cancelled) {\n            return;\n        }\n\n        this.downloadZipService.getDownload(downloadId).subscribe((downloadEntry) => {\n            if (downloadEntry.entry) {\n                if (downloadEntry.entry.status === FileDownloadStatus.IN_PROGRESS) {\n                    this.percentageDone = Number(((downloadEntry.entry.bytesAdded * 100) / downloadEntry.entry.totalBytes).toFixed(2));\n                }\n\n                if (downloadEntry.entry.status === FileDownloadStatus.DONE) {\n                    this.percentageDone = 100;\n                    this.download(url, fileName);\n                } else {\n                    setTimeout(() => {\n                        this.waitAndDownload(downloadId, url, fileName);\n                    }, 1000);\n                }\n            }\n        });\n    }\n\n    download(url: string, fileName: string) {\n        if (url && fileName) {\n            const link = document.createElement('a');\n\n            link.style.display = 'none';\n            link.download = fileName;\n            link.href = url;\n\n            document.body.appendChild(link);\n            link.click();\n            document.body.removeChild(link);\n        }\n        this.dialogRef.close(true);\n    }\n}\n","<h1 matDialogTitle>{{ 'CORE.DIALOG.DOWNLOAD_ZIP.TITLE' | translate }}</h1>\n<div mat-dialog-content class=\"adf-dialog-content\">\n    <mat-progress-bar value=\"{{ percentageDone }}\" color=\"primary\" mode=\"determinate\" />\n    <div class=\"adf-dialog-content-progress-text\">\n        <span class=\"adf-dialog-content-progress-text-percentage\">\n            {{ percentageDone }}%\n        </span>\n        {{ 'CORE.DIALOG.DOWNLOAD_ZIP.COMPLETE' | translate }}\n    </div>\n</div>\n<mat-dialog-actions align=\"end\">\n    <button class=\"adf-download-zip-dialog-button\" mat-button color=\"primary\" id=\"cancel-button\" (click)=\"cancelDownload()\">\n        {{ 'CORE.DIALOG.DOWNLOAD_ZIP.ACTIONS.CANCEL' | translate }}\n    </button>\n</mat-dialog-actions>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Directive, Input, HostListener, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DownloadService } from '@alfresco/adf-core';\nimport { DownloadZipDialogComponent } from '../dialogs/download-zip/download-zip.dialog';\nimport { ContentApi, NodeEntry, VersionEntry } from '@alfresco/js-api';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\n\n/**\n * Directive selectors without adf- prefix will be deprecated on 3.0.0\n */\n@Directive({\n    standalone: true,\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: '[adfNodeDownload]'\n})\nexport class NodeDownloadDirective {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly downloadService = inject(DownloadService);\n    private readonly dialog = inject(MatDialog);\n\n    private _contentApi: ContentApi;\n    get contentApi(): ContentApi {\n        this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance());\n        return this._contentApi;\n    }\n\n    /** Nodes to download. */\n    @Input('adfNodeDownload')\n    nodes: NodeEntry | NodeEntry[];\n\n    /** Node's version to download. */\n    @Input()\n    version: VersionEntry;\n\n    @HostListener('click')\n    onClick() {\n        this.downloadNodes(this.nodes);\n    }\n\n    /**\n     * Downloads multiple selected nodes.\n     * Packs result into a .ZIP archive if there is more than one node selected.\n     *\n     * @param selection Multiple selected nodes to download\n     */\n    downloadNodes(selection: NodeEntry | Array<NodeEntry>) {\n        if (!this.isSelectionValid(selection)) {\n            return;\n        }\n        if (selection instanceof Array) {\n            if (selection.length === 1) {\n                this.downloadNode(selection[0]);\n            } else {\n                this.downloadZip(selection);\n            }\n        } else {\n            this.downloadNode(selection);\n        }\n    }\n\n    /**\n     * Downloads a single node.\n     * Packs result into a .ZIP archive is the node is a Folder.\n     *\n     * @param node Node to download\n     */\n    downloadNode(node: NodeEntry) {\n        if (node?.entry) {\n            const entry = node.entry;\n\n            if (entry.isFile) {\n                this.downloadFile(node);\n            }\n\n            if (entry.isFolder) {\n                this.downloadZip([node]);\n            }\n\n            // Check if there's nodeId for Shared Files\n            if (!entry.isFile && !entry.isFolder && (entry as any).nodeId) {\n                this.downloadFile(node);\n            }\n        }\n    }\n\n    private isSelectionValid(selection: NodeEntry | Array<NodeEntry>) {\n        return selection || (selection instanceof Array && selection.length > 0);\n    }\n\n    private downloadFile(node: NodeEntry) {\n        if (node?.entry) {\n            // nodeId for Shared node\n            const id = (node.entry as any).nodeId || node.entry.id;\n\n            let url: string;\n            let fileName: string;\n            if (this.version) {\n                url = this.contentApi.getVersionContentUrl(id, this.version.entry.id, true);\n                fileName = this.version.entry.name;\n            } else {\n                url = this.contentApi.getContentUrl(id, true);\n                fileName = node.entry.name;\n            }\n\n            this.downloadService.downloadUrl(url, fileName);\n        }\n    }\n\n    private downloadZip(selection: Array<NodeEntry>) {\n        if (selection && selection.length > 0) {\n            // nodeId for Shared node\n            const nodeIds = selection.map((node: any) => node.entry.nodeId || node.entry.id);\n\n            this.dialog.open(DownloadZipDialogComponent, {\n                width: '600px',\n                disableClose: true,\n                data: {\n                    nodeIds\n                }\n            });\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NodeDownloadDirective } from '../../../directives/node-download.directive';\n\n@Component({\n    selector: 'adf-file-auto-download',\n    imports: [CommonModule, MatDialogModule, TranslatePipe, MatButtonModule, NodeDownloadDirective],\n    templateUrl: './file-auto-download.component.html'\n})\nexport class FileAutoDownloadComponent {\n    node = inject<NodeEntry>(MAT_DIALOG_DATA);\n}\n","<div mat-dialog-title>\n    <h3>{{ 'ADF-DOCUMENT-LIST.FILE_AUTO_DOWNLOAD_DIALOG.HEADER' | translate }}</h3>\n</div>\n<mat-dialog-content>\n    {{ 'ADF-DOCUMENT-LIST.FILE_AUTO_DOWNLOAD_DIALOG.LABEL' | translate }}\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n    <button\n        mat-button\n        mat-dialog-close\n        id=\"cancelButton\"\n        [attr.aria-label]=\"'ADF-DOCUMENT-LIST.FILE_AUTO_DOWNLOAD_DIALOG.ACTIONS.CANCEL' | translate\">\n        {{ 'ADF-DOCUMENT-LIST.FILE_AUTO_DOWNLOAD_DIALOG.ACTIONS.CANCEL' | translate }}\n    </button>\n    <button\n        mat-button\n        mat-dialog-close\n        id=\"downloadButton\"\n        color=\"primary\"\n        [attr.aria-label]=\"'ADF-DOCUMENT-LIST.FILE_AUTO_DOWNLOAD_DIALOG.ACTIONS.DOWNLOAD' | translate\"\n        [adfNodeDownload]=\"node\">\n        {{ 'ADF-DOCUMENT-LIST.FILE_AUTO_DOWNLOAD_DIALOG.ACTIONS.DOWNLOAD' | translate }}\n    </button>\n</mat-dialog-actions>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseEvent } from '@alfresco/adf-core';\nimport { NodeEntry, Node } from '@alfresco/js-api';\n\nexport class NodeEntityEvent extends BaseEvent<NodeEntry> {\n    constructor(nodeEntry: NodeEntry) {\n        super();\n        this.value = nodeEntry;\n    }\n}\n\nexport class NodeEntryEvent extends BaseEvent<Node> {\n    constructor(node: Node) {\n        super();\n        this.value = node;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BehaviorSubject, from, Observable, ReplaySubject, Subject } from 'rxjs';\nimport { AppConfigService } from '@alfresco/adf-core';\nimport {\n    RequestFacetFields,\n    RequestHighlight,\n    RequestScope,\n    RequestSortDefinitionInner,\n    ResultSetPaging,\n    SEARCH_LANGUAGE,\n    SearchApi,\n    SearchRequest\n} from '@alfresco/js-api';\nimport { SearchCategory } from '../models/search-category.interface';\nimport { FilterQuery } from '../models/filter-query.interface';\nimport { SearchRange } from '../models/search-range.interface';\nimport { SearchConfiguration } from '../models/search-configuration.interface';\nimport { FacetQuery } from '../models/facet-query.interface';\nimport { SearchSortingDefinition } from '../models/search-sorting-definition.interface';\nimport { FacetField } from '../models/facet-field.interface';\nimport { FacetFieldBucket } from '../models/facet-field-bucket.interface';\nimport { SearchForm } from '../models/search-form.interface';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nexport abstract class BaseQueryBuilderService {\n    private readonly router = inject(Router);\n    private readonly activatedRoute = inject(ActivatedRoute);\n    private _searchApi: SearchApi;\n    get searchApi(): SearchApi {\n        this._searchApi = this._searchApi ?? new SearchApi(this.alfrescoApiService.getInstance());\n        return this._searchApi;\n    }\n\n    /*  Stream that emits the search configuration whenever the user change the search forms */\n    configUpdated = new Subject<SearchConfiguration>();\n\n    /*  Stream that emits the event each time when search filter finishes loading initial value */\n    filterLoaded = new Subject<void>();\n\n    /*  Stream that emits the query before search whenever user search  */\n    updated = new Subject<SearchRequest>();\n\n    /*  Stream that emits the results whenever user search  */\n    executed = new Subject<ResultSetPaging>();\n\n    /*  Stream that emits the error whenever user search  */\n    error = new Subject();\n\n    /*  Stream that emits search forms  */\n    searchForms = new ReplaySubject<SearchForm[]>(1);\n\n    /*  Stream that emits void when change in filterQueries  */\n    filterQueryUpdate = new Subject<void>();\n\n    /*  Stream that emits the initial value for some or all search filters */\n    populateFilters = new BehaviorSubject<{ [key: string]: any }>({});\n\n    /*  Stream that emits every time queryFragments change */\n    queryFragmentsUpdate = new BehaviorSubject<{ [key: string]: any }>({});\n\n    /*  Stream that emits every time userFacetBuckets change */\n    userFacetBucketsUpdate = new BehaviorSubject<{ [key: string]: FacetFieldBucket[] }>({});\n\n    categories: SearchCategory[] = [];\n    filterQueries: FilterQuery[] = [];\n    filterRawParams: { [key: string]: any } = {};\n    paging: { maxItems?: number; skipCount?: number } = null;\n    sorting: SearchSortingDefinition[] = [];\n    sortingOptions: SearchSortingDefinition[] = [];\n\n    private encodedQuery: string;\n    private scope: RequestScope;\n    private selectedConfigurationId: string;\n    private _userQuery = '';\n    private _queryFragments: { [id: string]: string } = {};\n\n    private readonly selectedConfigurationKey = 'selectedConfigurationId';\n    private readonly queryFragmentsHandler: ProxyHandler<{ [key: string]: any }> = {\n        set: (target: { [key: string]: any }, property: string, value: any) => {\n            target[property as keyof typeof target] = value;\n            this.queryFragmentsUpdate.next(this._queryFragments);\n            return true;\n        }\n    };\n\n    protected userFacetBuckets: { [key: string]: FacetFieldBucket[] } = {};\n\n    get queryFragments(): { [key: string]: any } {\n        return this._queryFragments;\n    }\n\n    set queryFragments(value: { [key: string]: any }) {\n        this._queryFragments = this.createQueryFragmentsProxy(value);\n        this.queryFragmentsUpdate.next(this._queryFragments);\n    }\n\n    get userQuery(): string {\n        return this._userQuery;\n    }\n\n    set userQuery(value: string) {\n        value = (value || '').trim();\n        this._userQuery = value ? `(${value})` : '';\n    }\n\n    config: SearchConfiguration = {\n        categories: [],\n        id: 'SEARCH.UNKNOWN_CONFIGURATION'\n    };\n\n    // TODO: to be supported in future iterations\n    ranges: { [id: string]: SearchRange } = {};\n\n    protected constructor(\n        protected readonly appConfig: AppConfigService,\n        protected readonly alfrescoApiService: AlfrescoApiService\n    ) {\n        this.resetToDefaults();\n        this._queryFragments = this.createQueryFragmentsProxy({});\n\n        this.populateFilters.subscribe((filters) => this.handleSelectedConfigurationChange(filters));\n    }\n\n    public abstract loadConfiguration(): SearchConfiguration | SearchConfiguration[];\n\n    public abstract isFilterServiceActive(): boolean;\n\n    public resetToDefaults(withNavigate = false) {\n        if (withNavigate) {\n            this.router.navigate([], {\n                queryParams: { q: null },\n                relativeTo: this.activatedRoute,\n                queryParamsHandling: 'merge'\n            });\n        }\n        const currentConfig = this.getDefaultConfiguration();\n        this.resetSearchOptions();\n        this.configUpdated.next(currentConfig);\n        this.searchForms.next(this.getSearchFormDetails());\n        this.setUpSearchConfiguration(currentConfig);\n    }\n\n    public getDefaultConfiguration(): SearchConfiguration | undefined {\n        const configurations = this.loadConfiguration();\n\n        if (Array.isArray(configurations)) {\n            if (this.selectedConfigurationId !== undefined) {\n                return configurations.find((config) => config.id === this.selectedConfigurationId);\n            }\n\n            return configurations.find((configuration) => configuration.default);\n        }\n        return configurations;\n    }\n\n    public updateSelectedConfiguration(id: string): void {\n        const currentConfig = this.loadConfiguration();\n        if (Array.isArray(currentConfig)) {\n            const selectedConfig = currentConfig.find((config) => config.id === id);\n            if (selectedConfig) {\n                this.selectedConfigurationId = id;\n                this.searchForms.next(this.getSearchFormDetails());\n                this.resetSearchOptions();\n                this.setUpSearchConfiguration(selectedConfig);\n                this.filterRawParams[this.selectedConfigurationKey] = id;\n                this.configUpdated.next(selectedConfig);\n                this.execute();\n            }\n        }\n    }\n\n    private resetSearchOptions(): void {\n        this.categories = [];\n        this.queryFragments = {};\n        this.filterQueries = [];\n        this.sorting = [];\n        this.sortingOptions = [];\n        this.resetUserFacetBucket();\n        this.scope = null;\n        this.filterRawParams = {};\n        this._userQuery = '';\n        this.populateFilters.next({});\n    }\n\n    public getSearchFormDetails(): SearchForm[] {\n        const configurations = this.loadConfiguration();\n        if (Array.isArray(configurations)) {\n            return configurations.map((configuration, index) => ({\n                id: configuration.id,\n                index,\n                name: configuration.name || 'SEARCH.UNKNOWN_CONFIGURATION',\n                default: configuration.default || false,\n                selected: this.selectedConfigurationId !== undefined ? configuration.id === this.selectedConfigurationId : configuration.default\n            }));\n        } else if (configurations) {\n            return [\n                {\n                    id: 'SEARCH.UNKNOWN_CONFIGURATION',\n                    index: 0,\n                    name: configurations.name || 'SEARCH.UNKNOWN_CONFIGURATION',\n                    default: true,\n                    selected: true\n                }\n            ];\n        }\n        return [];\n    }\n\n    private setUpSearchConfiguration(currentConfiguration: SearchConfiguration) {\n        if (currentConfiguration) {\n            this.config = JSON.parse(JSON.stringify(currentConfiguration));\n            this.categories = (this.config.categories || []).filter((category) => category.enabled);\n            this.filterQueries = this.config.filterQueries || [];\n            this.userFacetBuckets = {};\n            if (this.config.sorting) {\n                this.sorting = this.config.sorting.defaults || [];\n                this.sortingOptions = this.config.sorting.options || [];\n            }\n        }\n    }\n\n    /**\n     * Adds a facet bucket to a field.\n     *\n     * @param field The target field\n     * @param bucket Bucket to add\n     */\n    addUserFacetBucket(field: string, bucket: FacetFieldBucket) {\n        if (field && bucket) {\n            const buckets = this.userFacetBuckets[field] || [];\n            const existing = buckets.find((facetBucket) => facetBucket.label === bucket.label);\n            if (!existing) {\n                buckets.push(bucket);\n            }\n            this.userFacetBuckets[field] = buckets;\n            this.userFacetBucketsUpdate.next(this.userFacetBuckets);\n        }\n    }\n\n    /**\n     * Gets the buckets currently added to a field\n     *\n     * @param field The target fields\n     * @returns Bucket array\n     */\n    getUserFacetBuckets(field: string) {\n        return this.userFacetBuckets[field] || [];\n    }\n\n    /**\n     * Removes an existing bucket from a field.\n     *\n     * @param field The target field\n     * @param bucket Bucket to remove\n     */\n    removeUserFacetBucket(field: string, bucket: FacetFieldBucket) {\n        if (field && bucket) {\n            const buckets = this.userFacetBuckets[field] || [];\n            this.userFacetBuckets[field] = buckets.filter((facetBucket) => facetBucket.label !== bucket.label);\n            this.userFacetBucketsUpdate.next(this.userFacetBuckets);\n        }\n    }\n\n    /**\n     * Resets an existing bucket list.\n     */\n    resetUserFacetBucket() {\n        this.userFacetBuckets = {};\n        this.userFacetBucketsUpdate.next(this.userFacetBuckets);\n    }\n\n    /**\n     * Adds a filter query to the current query.\n     *\n     * @param query Query string to add\n     */\n    addFilterQuery(query: string): void {\n        if (query) {\n            const existing = this.filterQueries.find((filterQuery) => filterQuery.query === query);\n            if (!existing) {\n                this.filterQueries.push({ query });\n                this.filterQueryUpdate.next();\n            }\n        }\n    }\n\n    /**\n     * Removes an existing filter query.\n     *\n     * @param query The query to remove\n     */\n    removeFilterQuery(query: string): void {\n        if (query) {\n            this.filterQueries = this.filterQueries.filter((filterQuery) => filterQuery.query !== query);\n            this.filterQueryUpdate.next();\n        }\n    }\n\n    /**\n     * Gets a facet query by label.\n     *\n     * @param label Label of the query\n     * @returns Facet query data\n     */\n    getFacetQuery(label: string): FacetQuery {\n        if (label && this.hasFacetQueries) {\n            const result = this.config.facetQueries.queries.find((query) => query.label === label);\n            if (result) {\n                return { ...result };\n            }\n        }\n        return null;\n    }\n\n    /**\n     * Gets a facet field by label.\n     *\n     * @param label Label of the facet field\n     * @returns Facet field data\n     */\n    getFacetField(label: string): FacetField {\n        if (label) {\n            const fields = this.config.facetFields.fields || [];\n            const result = fields.find((field) => field.label === label);\n            if (result) {\n                result.label = this.getSupportedLabel(result.label);\n                return { ...result };\n            }\n        }\n        return null;\n    }\n\n    setScope(scope: RequestScope) {\n        this.scope = scope;\n    }\n\n    getScope(): RequestScope {\n        return this.scope;\n    }\n\n    /**\n     * Builds the current query and triggers the `updated` event.\n     *\n     * @param queryBody query settings\n     */\n    update(queryBody?: SearchRequest): void {\n        const query = queryBody ? queryBody : this.buildQuery();\n        this.updated.next(query);\n    }\n\n    /**\n     * Builds and executes the current query.\n     *\n     * @param updateQueryParams whether query params should be updated with encoded query\n     * @param queryBody query settings\n     */\n    async execute(updateQueryParams = true, queryBody?: SearchRequest) {\n        try {\n            const query = queryBody ? queryBody : this.buildQuery();\n            if (query) {\n                if (updateQueryParams) {\n                    this.updateSearchQueryParams();\n                }\n                const resultSetPaging: ResultSetPaging = await this.searchApi.search(query);\n                this.executed.next(resultSetPaging);\n            }\n        } catch (error) {\n            this.error.next(error);\n\n            this.executed.next({\n                list: {\n                    pagination: {\n                        totalItems: 0\n                    },\n                    entries: []\n                }\n            });\n        }\n    }\n\n    search(queryBody: SearchRequest): Observable<ResultSetPaging> {\n        const promise = this.searchApi.search(queryBody);\n\n        promise.then((resultSetPaging) => {\n            this.executed.next(resultSetPaging);\n        });\n\n        return from(promise);\n    }\n\n    /**\n     * Builds the current query.\n     *\n     * @returns The finished query\n     */\n    buildQuery(): SearchRequest {\n        const query = this.getFinalQuery();\n\n        const include = this.config.include || [];\n        if (include.length === 0) {\n            include.push('path', 'allowableOperations');\n        }\n\n        if (query) {\n            const result: SearchRequest = {\n                query: {\n                    query,\n                    language: SEARCH_LANGUAGE.AFTS\n                },\n                include,\n                paging: this.paging,\n                fields: this.config.fields,\n                filterQueries: this.filterQueries,\n                facetQueries: this.facetQueries,\n                facetIntervals: this.facetIntervals,\n                facetFields: this.facetFields,\n                sort: this.sort,\n                highlight: this.highlight\n            };\n\n            if (this.scope) {\n                result.scope = this.scope;\n            }\n\n            result['facetFormat'] = 'V2';\n            return result;\n        }\n\n        return null;\n    }\n\n    /**\n     * Gets the primary sorting definition.\n     *\n     * @returns The primary sorting definition\n     */\n    getPrimarySorting(): SearchSortingDefinition {\n        if (this.sorting?.length > 0) {\n            return this.sorting[0];\n        }\n        return null;\n    }\n\n    /**\n     * Gets all pre-configured sorting options that users can choose from.\n     *\n     * @returns Pre-configured sorting options\n     */\n    getSortingOptions(): SearchSortingDefinition[] {\n        return this.config?.sorting?.options || [];\n    }\n\n    /**\n     * Gets the query group.\n     *\n     * @param query Target query\n     * @returns Query group\n     */\n    getQueryGroup(query: FacetQuery): string {\n        return query.group || this.config.facetQueries.label || 'Facet Queries';\n    }\n\n    /**\n     * Checks if FacetQueries has been defined\n     *\n     * @returns True if defined, false otherwise\n     */\n    get hasFacetQueries(): boolean {\n        return this.config?.facetQueries?.queries?.length > 0;\n    }\n\n    /**\n     * Checks if FacetIntervals has been defined\n     *\n     * @returns True if defined, false otherwise\n     */\n    get hasFacetIntervals(): boolean {\n        return this.config?.facetIntervals?.intervals?.length > 0;\n    }\n\n    get hasFacetHighlight(): boolean {\n        return !!this.config?.highlight;\n    }\n\n    protected get sort(): RequestSortDefinitionInner[] {\n        return this.sorting.map((def) => ({\n            type: def.type,\n            field: def.field,\n            ascending: def.ascending\n        }));\n    }\n\n    protected get facetQueries(): FacetQuery[] {\n        if (this.hasFacetQueries) {\n            return this.config.facetQueries.queries.map((query) => {\n                query.group = this.getQueryGroup(query);\n                return { ...query };\n            });\n        }\n\n        return null;\n    }\n\n    protected get facetIntervals(): any {\n        if (this.hasFacetIntervals) {\n            const configIntervals = this.config.facetIntervals;\n\n            return {\n                intervals: configIntervals.intervals.map(\n                    (interval) =>\n                        ({\n                            label: this.getSupportedLabel(interval.label),\n                            field: interval.field,\n                            sets: interval.sets.map(\n                                (set) =>\n                                    ({\n                                        label: this.getSupportedLabel(set.label),\n                                        start: set.start,\n                                        end: set.end,\n                                        startInclusive: set.startInclusive,\n                                        endInclusive: set.endInclusive\n                                    }) as any\n                            )\n                        }) as any\n                )\n            };\n        }\n\n        return null;\n    }\n\n    protected get highlight(): RequestHighlight {\n        return this.hasFacetHighlight ? this.config.highlight : null;\n    }\n\n    protected getFinalQuery(): string {\n        let query = '';\n        if (this.userQuery) {\n            this.filterRawParams['userQuery'] = this.userQuery;\n        }\n        this.categories.forEach((facet) => {\n            const customQuery = this.queryFragments[facet.id];\n            if (customQuery) {\n                if (query.length > 0) {\n                    query += ' AND ';\n                }\n                query += `(${customQuery})`;\n            }\n        });\n\n        let result = [this.userQuery, query].filter((entry) => entry).join(' AND ');\n\n        if (this.userFacetBuckets) {\n            Object.keys(this.userFacetBuckets).forEach((key) => {\n                const subQuery = (this.userFacetBuckets[key] || [])\n                    .filter((bucket) => bucket.filterQuery)\n                    .map((bucket) => bucket.filterQuery)\n                    .join(' OR ');\n                if (subQuery) {\n                    if (result.length > 0) {\n                        result += ' AND ';\n                    }\n                    result += `(${subQuery})`;\n                }\n            });\n        }\n\n        return result;\n    }\n\n    protected get facetFields(): RequestFacetFields {\n        const facetFields = this.config.facetFields?.fields;\n\n        if (facetFields?.length > 0) {\n            return {\n                facets: facetFields.map(\n                    (facet) =>\n                        ({\n                            field: facet.field,\n                            mincount: facet.mincount,\n                            label: this.getSupportedLabel(facet.label),\n                            limit: facet.limit,\n                            offset: facet.offset,\n                            prefix: facet.prefix\n                        }) as any\n                )\n            };\n        }\n\n        return null;\n    }\n\n    /**\n     * Encloses a label name with double quotes if it contains whitespace characters.\n     *\n     * @param configLabel Original label text\n     * @returns Label, possibly with quotes if it contains spaces\n     */\n    getSupportedLabel(configLabel: string): string {\n        const spaceInsideLabelIndex = configLabel.search(/\\s/g);\n        if (spaceInsideLabelIndex > -1) {\n            return `\"${configLabel}\"`;\n        }\n        return configLabel;\n    }\n\n    /**\n     * Encodes filter configuration stored in filterRawParams object.\n     */\n    encodeQuery() {\n        try {\n            this.encodedQuery = btoa(String.fromCharCode(...new TextEncoder().encode(JSON.stringify(this.filterRawParams))));\n        } catch (error) {\n            console.error('Failed to encode query parameters:', error);\n            this.encodedQuery = '';\n        }\n    }\n\n    /**\n     * Encodes existing filters configuration and updates search query param value.\n     */\n    updateSearchQueryParams() {\n        this.encodeQuery();\n        this.router.navigate([], {\n            relativeTo: this.activatedRoute,\n            queryParams: { q: this.encodedQuery },\n            queryParamsHandling: 'merge'\n        });\n    }\n\n    /**\n     * Builds search query with provided user query, executes query, encodes latest filter config and navigates to search.\n     *\n     * @param query user query to search for\n     * @param searchUrl search url to navigate to\n     */\n    async navigateToSearch(query: string, searchUrl: string) {\n        this.userQuery = query;\n        await this.execute();\n        await this.router.navigate([searchUrl], {\n            queryParams: { q: this.encodedQuery },\n            queryParamsHandling: 'merge'\n        });\n    }\n\n    private createQueryFragmentsProxy(target: { [key: string]: any }): { [key: string]: any } {\n        return new Proxy(target, this.queryFragmentsHandler);\n    }\n\n    private setSelectedConfiguration(id: string): void {\n        const currentConfig = this.loadConfiguration();\n        if (Array.isArray(currentConfig)) {\n            const selectedConfig = currentConfig.find((config) => config.id === id);\n            if (selectedConfig) {\n                this.selectedConfigurationId = id;\n                this.searchForms.next(this.getSearchFormDetails());\n                this.setUpSearchConfiguration(selectedConfig);\n                this.filterRawParams[this.selectedConfigurationKey] = id;\n                this.configUpdated.next(selectedConfig);\n            }\n        }\n    }\n\n    private handleSelectedConfigurationChange(filters: { [key: string]: string }): void {\n        if (Object.keys(filters ?? {}).length === 0) {\n            return;\n        }\n\n        const newSelectedConfig = filters?.[this.selectedConfigurationKey];\n\n        if (newSelectedConfig) {\n            if (newSelectedConfig !== this.selectedConfigurationId) {\n                this.setSelectedConfiguration(newSelectedConfig);\n            }\n        } else {\n            const configurations = this.loadConfiguration();\n            if (Array.isArray(configurations)) {\n                const defaultConfig = configurations.find(config => config.default);\n                if (defaultConfig && this.selectedConfigurationId !== defaultConfig.id) {\n                    this.setSelectedConfiguration(defaultConfig.id);\n                }\n            }\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { AppConfigService, DataSorting } from '@alfresco/adf-core';\nimport { SearchConfiguration } from '../models/search-configuration.interface';\nimport { BaseQueryBuilderService } from './base-query-builder.service';\nimport { SearchCategory } from '../models/search-category.interface';\nimport { Node } from '@alfresco/js-api';\nimport { filter } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { SearchSortingDefinition } from '../models/search-sorting-definition.interface';\nimport { FilterSearch } from '../models/filter-search.interface';\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SearchHeaderQueryBuilderService extends BaseQueryBuilderService {\n    private readonly nodeApiService = inject(NodesApiService);\n\n    private readonly customSources = ['-trashcan-', '-sharedlinks-', '-sites-', '-mysites-', '-favorites-', '-recent-', '-my-'];\n\n    activeFilters: FilterSearch[] = [];\n\n    constructor() {\n        const appConfig = inject(AppConfigService);\n        const alfrescoApiService = inject(AlfrescoApiService);\n\n        super(appConfig, alfrescoApiService);\n\n        this.updated.pipe(filter((query) => !!query)).subscribe(() => {\n            this.execute();\n        });\n    }\n\n    public isFilterServiceActive(): boolean {\n        return true;\n    }\n\n    loadConfiguration(): SearchConfiguration {\n        return this.appConfig.get<SearchConfiguration>('search-headers');\n    }\n\n    setupCurrentPagination(maxItems: number, skipCount: number) {\n        if (!this.paging || (this.paging && this.paging.maxItems !== maxItems) || this.paging.skipCount !== skipCount) {\n            this.paging = { maxItems, skipCount };\n            this.execute(false);\n        }\n    }\n\n    setActiveFilter(columnActivated: string, filterValue: string) {\n        const selectedFilter = this.activeFilters.find((activeFilter) => activeFilter.key === columnActivated);\n        if (!selectedFilter) {\n            this.activeFilters.push({\n                key: columnActivated,\n                value: filterValue\n            });\n        } else {\n            selectedFilter.value = filterValue;\n        }\n    }\n\n    resetActiveFilters() {\n        this.activeFilters = [];\n    }\n\n    getActiveFilters(): FilterSearch[] {\n        return this.activeFilters;\n    }\n\n    isNoFilterActive(): boolean {\n        return this.activeFilters.length === 0;\n    }\n\n    removeActiveFilter(columnRemoved: string) {\n        const filterIndex = this.activeFilters.map((activeFilter) => activeFilter.key).indexOf(columnRemoved);\n        if (filterIndex >= 0) {\n            this.activeFilters.splice(filterIndex, 1);\n        }\n    }\n\n    setSorting(dataSorting: DataSorting[]) {\n        this.sorting = [];\n        dataSorting.forEach((columnSorting: DataSorting) => {\n            const fieldValue = this.getSortingFieldFromColumnName(columnSorting.key);\n            if (fieldValue) {\n                const optionAscending = columnSorting.direction.toLocaleLowerCase() === 'asc';\n                const type = fieldValue === 'score' ? 'SCORE' : 'FIELD';\n                const currentSort: SearchSortingDefinition = {\n                    key: columnSorting.key,\n                    label: 'current',\n                    type,\n                    field: fieldValue,\n                    ascending: optionAscending\n                };\n                this.sorting.push(currentSort);\n            }\n        });\n\n        if (!this.isNoFilterActive()) {\n            this.execute(false);\n        }\n    }\n\n    private getSortingFieldFromColumnName(columnName: string) {\n        if (this.sortingOptions.length > 0) {\n            const sortOption = this.sortingOptions.find((option) => option.key === columnName);\n            return sortOption ? sortOption.field : '';\n        }\n        return '';\n    }\n\n    getCategoryForColumn(columnKey: string): SearchCategory {\n        let foundCategory = null;\n        if (this.categories !== null) {\n            foundCategory = this.categories.find((category) => category.columnKey === columnKey);\n        }\n        return foundCategory;\n    }\n\n    getOperatorForFilterId(id: string): string | undefined {\n        const foundCategory = this.categories?.find((category) => category.id === id);\n\n        return foundCategory?.component?.settings?.operator;\n    }\n\n    setCurrentRootFolderId(currentFolderId: string) {\n        const alreadyAddedFilter = this.filterQueries.find((filterQueries) => filterQueries.query.includes(currentFolderId));\n\n        if (alreadyAddedFilter !== undefined) {\n            this.filterQueries = [];\n        }\n\n        this.filterQueries = [\n            {\n                query: `PARENT:\"workspace://SpacesStore/${currentFolderId}\"`\n            }\n        ];\n\n        if (!this.isNoFilterActive()) {\n            this.execute(false);\n        }\n    }\n\n    isCustomSourceNode(currentNodeId: string): boolean {\n        return this.customSources.includes(currentNodeId);\n    }\n\n    getNodeIdForCustomSource(customSourceId: string): Observable<Node> {\n        return this.nodeApiService.getNode(customSourceId);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { FormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-search-text',\n    imports: [CommonModule, MatFormFieldModule, TranslatePipe, MatInputModule, MatButtonModule, FormsModule, IconModule],\n    templateUrl: './search-text.component.html',\n    styleUrls: ['./search-text.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-text' }\n})\nexport class SearchTextComponent implements SearchWidget, OnInit {\n    /** The content of the text box. */\n    @Input()\n    value = '';\n\n    id: string;\n    settings: SearchWidgetSettings;\n    context: SearchQueryBuilderService;\n    startValue: string;\n    isActive = false;\n    enableChangeUpdate = true;\n    displayValue$ = new ReplaySubject<string>(1);\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        if (this.context && this.settings?.pattern) {\n            const pattern = new RegExp(this.settings.pattern, 'g');\n            const match = pattern.exec(this.context.queryFragments[this.id] || '');\n            if (this.settings.allowUpdateOnChange !== undefined && this.settings.allowUpdateOnChange !== null) {\n                this.enableChangeUpdate = this.settings.allowUpdateOnChange;\n            }\n\n            if (match && match.length > 1) {\n                this.value = match[1];\n            }\n\n            if (this.startValue) {\n                this.setValue(this.startValue);\n            } else {\n                if (this.context?.queryFragments) {\n                    this.context.queryFragments[this.id] = '';\n                }\n            }\n        }\n        this.context.populateFilters\n            .asObservable()\n            .pipe(\n                map((filtersQueries) => filtersQueries?.[this.id]),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((filterQuery) => {\n                if (filterQuery) {\n                    this.value = filterQuery;\n                    this.updateQuery(this.value, false);\n                } else {\n                    this.reset(false);\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n    clear() {\n        this.isActive = false;\n        this.value = '';\n        if (this.enableChangeUpdate) {\n            this.updateQuery(null);\n        }\n    }\n\n    reset(updateContext = true) {\n        this.value = '';\n        this.context.filterRawParams[this.id] = undefined;\n        this.context.queryFragments[this.id] = '';\n        this.updateQuery(null, updateContext);\n    }\n\n    onChangedHandler(event) {\n        this.value = event.target.value;\n        this.isActive = !!this.value;\n        if (this.enableChangeUpdate) {\n            this.updateQuery(this.value);\n        }\n    }\n\n    private updateQuery(value: string, updateContext = true) {\n        if (value !== null) {\n            this.context.filterRawParams[this.id] = value;\n        }\n\n        this.displayValue$.next(value);\n        if (this.context?.queryFragments && this.settings?.field) {\n            this.context.queryFragments[this.id] = value ? `${this.settings.field}:'${this.getSearchPrefix()}${value}${this.getSearchSuffix()}'` : '';\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n    }\n\n    submitValues() {\n        this.updateQuery(this.value);\n    }\n\n    hasValidValue() {\n        return !!this.value;\n    }\n\n    getCurrentValue() {\n        return this.value;\n    }\n\n    setValue(value: string) {\n        this.value = value;\n        this.displayValue$.next(this.value);\n        this.submitValues();\n    }\n\n    private getSearchPrefix(): string {\n        return this.settings.searchPrefix ? this.settings.searchPrefix : '';\n    }\n\n    private getSearchSuffix(): string {\n        return this.settings.searchSuffix ? this.settings.searchSuffix : '';\n    }\n}\n","<mat-form-field class=\"adf-search-text-form-field\">\n    <mat-label>{{ settings?.placeholder | translate }}</mat-label>\n    <input\n        matInput\n        [(ngModel)]=\"value\"\n        (change)=\"onChangedHandler($event)\">\n    <button\n        mat-icon-button\n        *ngIf=\"value\"\n        matSuffix\n        (click)=\"clear()\"\n        class=\"adf-search-text-form-field-clear-button\"\n        [attr.aria-label]=\"'SEARCH.FILTER.ACTIONS.CLEAR' | translate\"\n        [attr.title]=\"'SEARCH.FILTER.ACTIONS.CLEAR' | translate\">\n        <mat-icon adf-icon=\"close\" />\n    </button>\n</mat-form-field>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DEFAULT_PAGE_SIZE = 5;\n\nexport class SearchFilterList<T> implements Iterable<T> {\n    private filteredItems: T[] = [];\n    private _filterText: string = '';\n\n    items: T[] = [];\n    pageSize: number = DEFAULT_PAGE_SIZE;\n    currentPageSize: number = DEFAULT_PAGE_SIZE;\n\n    get filterText(): string {\n        return this._filterText;\n    }\n\n    set filterText(value: string) {\n        this._filterText = value;\n        this.applyFilter();\n    }\n\n    private _filter: (item: T) => boolean = () => true;\n\n    get filter(): (item: T) => boolean {\n        return this._filter;\n    }\n\n    set filter(value: (item: T) => boolean) {\n        this._filter = value;\n        this.applyFilter();\n    }\n\n    private applyFilter() {\n        if (this.filter) {\n            this.filteredItems = this.items.filter(this.filter);\n        } else {\n            this.filteredItems = this.items;\n        }\n        this.currentPageSize = this.pageSize;\n    }\n\n    /**\n     * Returns visible portion of the items.\n     *\n     * @returns list of items\n     */\n    get visibleItems(): T[] {\n        return this.filteredItems.slice(0, this.currentPageSize);\n    }\n\n    /**\n     * Get items length\n     *\n     * @returns entire collection length including items not displayed on the page\n     */\n    get length(): number {\n        return this.items.length;\n    }\n\n    /**\n     * Detect whether more items can be displayed.\n     *\n     * @returns `true` if can show more items, otherwise `false`\n     */\n    get canShowMoreItems(): boolean {\n        return this.filteredItems.length > this.currentPageSize;\n    }\n\n    /**\n     * Detect whether less items can be displayed.\n     *\n     * @returns `true` if can show less items, otherwise `false`\n     */\n    get canShowLessItems(): boolean {\n        return this.currentPageSize > this.pageSize;\n    }\n\n    /**\n     * Detect whether content fits single page.\n     *\n     * @returns `true` if content fits single page, otherwise `false`.\n     */\n    get fitsPage(): boolean {\n        return this.pageSize >= this.filteredItems.length;\n    }\n\n    constructor(items: T[] = [], pageSize?: number) {\n        this.items = items;\n        this.filteredItems = items;\n        this.pageSize = pageSize || DEFAULT_PAGE_SIZE;\n        this.currentPageSize = pageSize || DEFAULT_PAGE_SIZE;\n    }\n\n    /** Display more items. */\n    showMoreItems() {\n        if (this.canShowMoreItems) {\n            this.currentPageSize += this.pageSize;\n        }\n    }\n\n    /** Display less items. */\n    showLessItems() {\n        if (this.canShowLessItems) {\n            this.currentPageSize -= this.pageSize;\n        }\n    }\n\n    /** Reset entire collection and page settings. */\n    clear() {\n        this.currentPageSize = this.pageSize;\n        this.items = [];\n        this.filteredItems = [];\n        this.filterText = '';\n    }\n\n    addItem(item: T) {\n        if (!item) {\n            return;\n        }\n        this.items.push(item);\n        this.applyFilter();\n    }\n\n    deleteItem(item: T) {\n        const removeIndex = this.items.indexOf(item);\n        if (removeIndex > -1) {\n            this.items.splice(removeIndex, 1);\n            this.filteredItems.splice(removeIndex, 1);\n        }\n    }\n\n    [Symbol.iterator](): Iterator<T> {\n        let pointer = 0;\n        const items = this.visibleItems;\n\n        return {\n            next: (): IteratorResult<T> => {\n                if (pointer < items.length) {\n                    return {\n                        done: false,\n                        value: items[pointer++]\n                    };\n                } else {\n                    return {\n                        done: true,\n                        value: null\n                    };\n                }\n            }\n        };\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatRadioChange, MatRadioModule } from '@angular/material/radio';\n\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { SearchFilterList } from '../../models/search-filter-list.model';\nimport { ReplaySubject } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { IconModule } from '@alfresco/adf-core';\n\nexport interface SearchRadioOption {\n    name: string;\n    value: string;\n}\n\n@Component({\n    selector: 'adf-search-radio',\n    imports: [CommonModule, MatRadioModule, FormsModule, TranslatePipe, MatButtonModule, IconModule],\n    templateUrl: './search-radio.component.html',\n    styleUrls: ['./search-radio.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-radio' }\n})\nexport class SearchRadioComponent implements SearchWidget, OnInit {\n    /** The value of the selected radio button. */\n    @Input()\n    value: string;\n\n    id: string;\n    settings: SearchWidgetSettings;\n    context: SearchQueryBuilderService;\n    options: SearchFilterList<SearchRadioOption>;\n    pageSize = 5;\n    isActive = false;\n    startValue: any;\n    enableChangeUpdate: boolean;\n    displayValue$ = new ReplaySubject<string>(1);\n\n    constructor() {\n        this.options = new SearchFilterList<SearchRadioOption>();\n    }\n\n    ngOnInit() {\n        if (this.settings) {\n            this.pageSize = this.settings.pageSize || 5;\n\n            if (this.settings.options && this.settings.options.length > 0) {\n                this.options = new SearchFilterList<SearchRadioOption>(this.settings.options, this.pageSize);\n            }\n        }\n\n        const initialValue = this.getSelectedValue();\n\n        if (initialValue !== null) {\n            this.value = initialValue;\n            this.context.queryFragments[this.id] = initialValue;\n        } else if (this.startValue !== null) {\n            this.value = initialValue;\n            this.context.queryFragments[this.id] = initialValue;\n        }\n        this.enableChangeUpdate = this.settings.allowUpdateOnChange ?? true;\n        this.updateDisplayValue();\n        this.context.populateFilters\n            .asObservable()\n            .pipe(first())\n            .subscribe((filtersQueries) => {\n                if (filtersQueries?.[this.id]) {\n                    this.value = filtersQueries[this.id];\n                    this.submitValues(false);\n                } else {\n                    this.reset(false);\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n\n    private getSelectedValue(): string {\n        const options: any[] = this.settings['options'] || [];\n        if (options && options.length > 0) {\n            this.isActive = true;\n\n            let selected = options.find((opt) => opt.default);\n            if (!selected) {\n                selected = options[0];\n            }\n            return selected.value;\n        }\n        return null;\n    }\n\n    submitValues(updateContext = true) {\n        this.setValue(this.value);\n        this.updateDisplayValue();\n        if (updateContext) {\n            this.context.update();\n        }\n    }\n\n    hasValidValue() {\n        const currentValue = this.getSelectedValue();\n        return !!currentValue;\n    }\n\n    setValue(newValue: string) {\n        this.value = newValue;\n        this.context.queryFragments[this.id] = newValue;\n        this.context.filterRawParams[this.id] = newValue;\n        if (this.enableChangeUpdate) {\n            this.updateDisplayValue();\n            this.context.update();\n        }\n    }\n\n    getCurrentValue() {\n        return this.getSelectedValue();\n    }\n\n    updateDisplayValue(): void {\n        const selectOptions = this.options.items.find(({ value }) => value === this.value);\n        if (selectOptions) {\n            this.displayValue$.next(selectOptions.name);\n        } else {\n            this.displayValue$.next('');\n        }\n    }\n\n    changeHandler(event: MatRadioChange) {\n        this.setValue(event.value);\n    }\n\n    clear() {\n        this.isActive = false;\n        const initialValue = this.getSelectedValue();\n        if (initialValue !== null) {\n            this.setValue(initialValue);\n        }\n    }\n\n    reset(updateContext = true) {\n        const initialValue = this.getSelectedValue();\n        if (initialValue !== null) {\n            this.setValue(initialValue);\n            this.updateDisplayValue();\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n    }\n}\n","<mat-radio-group\n    class=\"adf-search-radio-group\"\n    [(ngModel)]=\"value\"\n    (change)=\"changeHandler($event)\">\n    <mat-radio-button [attr.data-automation-id]=\"'search-radio-'+(option.name | translate)\"\n        *ngFor=\"let option of options\"\n        [value]=\"option.value\"\n        class=\"adf-facet-filter\">\n        <div title=\"{{ option.name | translate }}\" class=\"adf-filter-label\">\n            {{ option.name | translate }}\n        </div>\n    </mat-radio-button>\n</mat-radio-group>\n\n<div class=\"adf-facet-buttons\" *ngIf=\"!options.fitsPage\">\n    <button mat-icon-button\n        *ngIf=\"options.canShowLessItems\"\n        title=\"{{ 'SEARCH.FILTER.ACTIONS.SHOW-LESS' | translate }}\"\n        (click)=\"options.showLessItems()\">\n        <mat-icon adf-icon=\"keyboard_arrow_up\" />\n    </button>\n    <button mat-icon-button\n        *ngIf=\"options.canShowMoreItems\"\n        title=\"{{ 'SEARCH.FILTER.ACTIONS.SHOW-MORE' | translate }}\"\n        (click)=\"options.showMoreItems()\">\n        <mat-icon adf-icon=\"keyboard_arrow_down\" />\n    </button>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { ReplaySubject } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-search-slider',\n    imports: [CommonModule, MatSliderModule, FormsModule, MatButtonModule, TranslatePipe],\n    templateUrl: './search-slider.component.html',\n    styleUrls: ['./search-slider.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-slider' }\n})\nexport class SearchSliderComponent implements SearchWidget, OnInit {\n    /** The numeric value represented by the slider. */\n    @Input()\n    value: number | null;\n\n    isActive?: boolean;\n    startValue: any;\n\n    id: string;\n    settings: SearchWidgetSettings;\n    context: SearchQueryBuilderService;\n    step: number;\n    min: number;\n    max: number;\n    thumbLabel = false;\n    enableChangeUpdate: boolean;\n    displayValue$ = new ReplaySubject<string>(1);\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        if (this.settings) {\n            if (Object.prototype.hasOwnProperty.call(this.settings, 'min')) {\n                this.min = this.settings['min'];\n            }\n\n            if (Object.prototype.hasOwnProperty.call(this.settings, 'max')) {\n                this.max = this.settings['max'];\n            }\n\n            if (Object.prototype.hasOwnProperty.call(this.settings, 'step')) {\n                this.step = this.settings['step'];\n            }\n\n            this.thumbLabel = this.settings['thumbLabel'] ? true : false;\n            this.enableChangeUpdate = this.settings.allowUpdateOnChange ?? true;\n        }\n\n        if (this.startValue) {\n            this.setValue(this.startValue);\n        }\n        this.context.populateFilters\n            .asObservable()\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe((filtersQueries) => {\n                if (filtersQueries?.[this.id]) {\n                    this.value = filtersQueries[this.id];\n                    this.updateQuery(this.value, false);\n                } else {\n                    this.reset(false);\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n\n    clear() {\n        this.value = this.min || 0;\n        if (this.enableChangeUpdate) {\n            this.updateQuery(null);\n        }\n    }\n\n    reset(updateContext = true) {\n        this.value = this.min || 0;\n        this.updateQuery(null, updateContext);\n    }\n\n    onChangedHandler() {\n        if (this.enableChangeUpdate) {\n            this.updateQuery(this.value);\n        }\n    }\n\n    submitValues() {\n        this.updateQuery(this.value);\n    }\n\n    hasValidValue() {\n        return !!this.value;\n    }\n\n    getCurrentValue() {\n        return this.value;\n    }\n\n    setValue(value: any) {\n        this.value = value;\n        this.submitValues();\n    }\n\n    private updateQuery(value: number | null, updateContext = true) {\n        this.context.filterRawParams[this.id] = value;\n        this.displayValue$.next(this.value ? `${this.value} ${this.settings.unit ?? ''}` : '');\n        if (this.id && this.context?.queryFragments && this.settings?.field) {\n            if (value === null) {\n                this.context.queryFragments[this.id] = '';\n            } else {\n                this.context.queryFragments[this.id] = `${this.settings.field}:[0 TO ${value}]`;\n            }\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n    }\n}\n","<mat-slider\n    class=\"adf-search-slider\"\n    data-automation-id=\"slider-range\"\n    [max]=\"max\"\n    [min]=\"min\"\n    [step]=\"step\"\n    [discrete]=\"thumbLabel\">\n    <input matSliderThumb (change)=\"onChangedHandler()\" [(ngModel)]=\"value\">\n</mat-slider>\n\n<div class=\"adf-facet-buttons\" *ngIf=\"!settings?.hideDefaultAction\">\n    <button mat-button color=\"primary\" (click)=\"clear()\" data-automation-id=\"slider-btn-clear\">\n        {{ 'SEARCH.FILTER.ACTIONS.CLEAR' | translate }}\n    </button>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { UntypedFormControl, FormGroupDirective, NgForm } from '@angular/forms';\n\nexport class LiveErrorStateMatcher implements ErrorStateMatcher {\n    isErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n        const isSubmitted = form?.submitted;\n        return !!(control?.invalid && (control.dirty || control.touched || (!control.pristine && isSubmitted)));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ReactiveFormsModule, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { LiveErrorStateMatcher } from '../../forms/live-error-state-matcher';\nimport { ReplaySubject } from 'rxjs';\nimport { first, map } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n    selector: 'adf-search-number-range',\n    imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, TranslatePipe, MatButtonModule],\n    templateUrl: './search-number-range.component.html',\n    styleUrls: ['./search-number-range.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-number-range' }\n})\nexport class SearchNumberRangeComponent implements SearchWidget, OnInit {\n    from: UntypedFormControl;\n    to: UntypedFormControl;\n\n    form: UntypedFormGroup;\n    matcher = new LiveErrorStateMatcher();\n\n    id: string;\n    settings?: SearchWidgetSettings;\n    context?: SearchQueryBuilderService;\n\n    field: string;\n    format = '[{FROM} TO {TO}]';\n\n    isActive = false;\n    startValue: any;\n\n    validators: Validators;\n    enableChangeUpdate: boolean;\n    displayValue$ = new ReplaySubject<string>(1);\n\n    ngOnInit(): void {\n        if (this.settings) {\n            this.field = this.settings.field;\n            this.format = this.settings.format || '[{FROM} TO {TO}]';\n        }\n\n        this.validators = Validators.compose([Validators.required, Validators.pattern(/^-?(0|[1-9]\\d*)?$/), Validators.min(0)]);\n\n        if (this.startValue) {\n            this.from = new UntypedFormControl(this.startValue['from'], this.validators);\n            this.to = new UntypedFormControl(this.startValue['to'], this.validators);\n        } else {\n            this.from = new UntypedFormControl('', this.validators);\n            this.to = new UntypedFormControl('', this.validators);\n        }\n\n        this.form = new UntypedFormGroup(\n            {\n                from: this.from,\n                to: this.to\n            },\n            this.formValidator\n        );\n\n        this.enableChangeUpdate = this.settings?.allowUpdateOnChange ?? true;\n        this.updateDisplayValue();\n        this.context.populateFilters\n            .asObservable()\n            .pipe(\n                map((filtersQueries) => filtersQueries?.[this.id]),\n                first()\n            )\n            .subscribe((filterQuery) => {\n                if (filterQuery) {\n                    this.form.patchValue({ from: filterQuery.from, to: filterQuery.to });\n                    this.form.markAsDirty();\n                    this.apply({ from: filterQuery.from, to: filterQuery.to }, true, false);\n                } else {\n                    this.reset(false);\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n\n    formValidator(formGroup: UntypedFormGroup) {\n        return parseInt(formGroup.get('from').value, 10) < parseInt(formGroup.get('to').value, 10) ? null : { mismatch: true };\n    }\n\n    apply(model: { from: string; to: string }, isValid: boolean, updateContext = true) {\n        if (isValid && this.id && this.context && this.field) {\n            this.updateDisplayValue();\n            this.isActive = true;\n\n            const destinationObject = new Map<string, string>();\n            destinationObject.set('FROM', model.from);\n            destinationObject.set('TO', model.to);\n\n            const value = this.formatString(this.format, destinationObject);\n\n            this.context.queryFragments[this.id] = `${this.field}:${value}`;\n            const filterParam = this.context.filterRawParams[this.id] ?? {};\n            this.context.filterRawParams[this.id] = filterParam;\n            filterParam.from = model.from;\n            filterParam.to = model.to;\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n    }\n\n    private formatString(str: string, destinationObject: Map<string, string>): string {\n        let result = str;\n\n        destinationObject.forEach((value, key) => {\n            const expr = new RegExp('{' + key + '}', 'gm');\n            result = result.replace(expr, value);\n        });\n\n        return result;\n    }\n\n    submitValues() {\n        this.apply(this.form.value, this.form.valid);\n    }\n\n    hasValidValue() {\n        return this.form.valid;\n    }\n\n    getCurrentValue() {\n        return this.form.value;\n    }\n\n    updateDisplayValue(): void {\n        if (this.form.invalid || this.form.pristine) {\n            this.displayValue$.next('');\n        } else {\n            this.displayValue$.next(`${this.form.value.from} - ${this.form.value.to} ${this.settings.unit ?? ''}`);\n        }\n    }\n\n    setValue(value: any) {\n        this.form['from'].setValue(value);\n        this.form['to'].setValue(value);\n        this.updateDisplayValue();\n    }\n\n    clear(updateContext = true) {\n        this.isActive = false;\n\n        this.form.reset({\n            from: '',\n            to: ''\n        });\n\n        if (this.id && this.context) {\n            this.context.queryFragments[this.id] = '';\n            this.context.filterRawParams[this.id] = undefined;\n            this.updateDisplayValue();\n            if (this.enableChangeUpdate && updateContext) {\n                this.context.update();\n            }\n        }\n    }\n\n    reset(updateContext = true) {\n        this.clear();\n        if (this.id && this.context && updateContext) {\n            this.context.update();\n        }\n    }\n}\n","<form [formGroup]=\"form\" novalidate (ngSubmit)=\"apply(form.value, form.valid)\">\n\n    <mat-form-field>\n        <input\n            matInput [formControl]=\"from\" [errorStateMatcher]=\"matcher\"\n            placeholder=\"{{ 'SEARCH.FILTER.RANGE.FROM' | translate }}\"\n            autocomplete=\"off\"\n            data-automation-id=\"number-range-from-input\">\n        <mat-error *ngIf=\"from.hasError('pattern') || from.hasError('min')\" data-automation-id=\"number-range-from-error-invalid\">\n            {{ 'SEARCH.FILTER.VALIDATION.INVALID-FORMAT' | translate }}\n        </mat-error>\n        <mat-error *ngIf=\"from.hasError('required')\" data-automation-id=\"number-range-from-error-required\">\n            {{ 'SEARCH.FILTER.VALIDATION.REQUIRED-VALUE' | translate }}\n        </mat-error>\n    </mat-form-field>\n\n    <mat-form-field>\n        <input\n            matInput [formControl]=\"to\" [errorStateMatcher]=\"matcher\"\n            placeholder=\"{{ 'SEARCH.FILTER.RANGE.TO' | translate }}\"\n            autocomplete=\"off\"\n            data-automation-id=\"number-range-to-input\">\n        <mat-error *ngIf=\"to.hasError('pattern') || to.hasError('min')\" data-automation-id=\"number-range-to-error-invalid\">\n            {{ 'SEARCH.FILTER.VALIDATION.INVALID-FORMAT' | translate }}\n        </mat-error>\n        <mat-error *ngIf=\"to.hasError('required')\" data-automation-id=\"number-range-to-error-required\">\n            {{ 'SEARCH.FILTER.VALIDATION.REQUIRED-VALUE' | translate }}\n        </mat-error>\n    </mat-form-field>\n\n\n    <div class=\"adf-facet-buttons\" *ngIf=\"!settings?.hideDefaultAction\">\n        <button mat-button color=\"primary\" type=\"button\" (click)=\"clear()\" data-automation-id=\"number-range-btn-clear\">\n            {{ 'SEARCH.FILTER.ACTIONS.CLEAR' | translate }}\n        </button>\n        <button mat-button color=\"primary\" type=\"submit\" [disabled]=\"!form.valid\" data-automation-id=\"number-range-btn-apply\">\n            {{ 'SEARCH.FILTER.ACTIONS.APPLY' | translate }}\n        </button>\n    </div>\n</form>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { SearchFilterList } from '../../models/search-filter-list.model';\nimport { IconModule, TranslationService } from '@alfresco/adf-core';\nimport { ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface SearchListOption {\n    name: string;\n    value: string;\n    checked: boolean;\n}\n\n@Component({\n    selector: 'adf-search-check-list',\n    imports: [CommonModule, MatCheckboxModule, TranslatePipe, MatButtonModule, IconModule],\n    templateUrl: './search-check-list.component.html',\n    styleUrls: ['./search-check-list.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-check-list' }\n})\nexport class SearchCheckListComponent implements SearchWidget, OnInit {\n    private readonly translationService = inject(TranslationService);\n\n    id: string;\n    settings?: SearchWidgetSettings;\n    context?: SearchQueryBuilderService;\n    options: SearchFilterList<SearchListOption>;\n    operator: string = 'OR';\n    startValue: string | string[];\n    pageSize = 5;\n    isActive = false;\n    enableChangeUpdate = true;\n    displayValue$ = new ReplaySubject<string>(1);\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    constructor() {\n        this.options = new SearchFilterList<SearchListOption>();\n    }\n\n    ngOnInit(): void {\n        if (this.settings) {\n            this.operator = this.settings.operator || 'OR';\n            this.pageSize = this.settings.pageSize || 5;\n\n            if (this.settings.options && this.settings.options.length > 0) {\n                this.options = new SearchFilterList(this.settings.options, this.pageSize);\n            }\n            this.enableChangeUpdate = this.settings.allowUpdateOnChange ?? true;\n        }\n\n        if (this.startValue) {\n            this.setValue(this.startValue);\n        } else {\n            if (this.id && this.context) {\n                this.context.queryFragments[this.id] = '';\n            }\n        }\n        this.context.populateFilters\n            .pipe(\n                map((filtersQueries) => filtersQueries?.[this.id]),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((filterQuery) => {\n                if (filterQuery) {\n                    filterQuery.forEach((value) => {\n                        const option = this.options.items.find((searchListOption) => searchListOption.value === value);\n                        if (option) {\n                            option.checked = true;\n                        }\n                    });\n                    this.submitValues(false);\n                } else {\n                    this.reset(false);\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n\n    clear() {\n        this.isActive = false;\n        this.clearOptions();\n        if (this.id && this.context && this.enableChangeUpdate) {\n            this.updateDisplayValue();\n            this.context.update();\n        }\n    }\n\n    clearOptions() {\n        this.options.items.forEach((opt) => {\n            opt.checked = false;\n        });\n\n        if (this.id && this.context) {\n            this.context.queryFragments[this.id] = '';\n            this.context.filterRawParams[this.id] = undefined;\n        }\n    }\n\n    reset(updateContext = true) {\n        this.isActive = false;\n        this.clearOptions();\n        if (this.id && this.context) {\n            this.updateDisplayValue();\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n    }\n\n    updateDisplayValue(): void {\n        const displayValue = this.options.items\n            .filter((option) => option.checked)\n            .map(({ name }) => this.translationService.instant(name))\n            .join(', ');\n        this.displayValue$.next(displayValue);\n    }\n\n    changeHandler(event: MatCheckboxChange, option: any) {\n        option.checked = event.checked;\n        const checkedValues = this.getCheckedValues();\n        this.isActive = !!checkedValues.length;\n        if (this.enableChangeUpdate) {\n            this.submitValues();\n        }\n    }\n\n    hasValidValue() {\n        const checkedValues = this.getCheckedValues();\n        return !!checkedValues.length;\n    }\n\n    getCurrentValue() {\n        return this.getCheckedValues();\n    }\n\n    setValue(value: any) {\n        this.options.items.forEach((item) => (item.checked = value.includes(item.value)));\n        this.isActive = true;\n    }\n\n    private getCheckedValues() {\n        return this.options.items.filter((option) => option.checked).map((option) => option.value);\n    }\n\n    submitValues(updateContext = true) {\n        const checkedValues = this.getCheckedValues();\n        if (checkedValues.length !== 0) {\n            this.context.filterRawParams[this.id] = checkedValues;\n        }\n        const query = checkedValues.join(` ${this.operator} `);\n        if (this.id && this.context) {\n            this.context.queryFragments[this.id] = query;\n            this.updateDisplayValue();\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n    }\n}\n","<fieldset class=\"adf-search-checklist\">\n    <mat-checkbox\n        *ngFor=\"let option of options\"\n        [checked]=\"option.checked\"\n        (keydown.enter)=\"option.checked = !option.checked\"\n        [attr.data-automation-id]=\"'checkbox-' + (option.name)\"\n        (change)=\"changeHandler($event, option)\"\n        class=\"adf-facet-filter\">\n        <div title=\"{{ option.name | translate }}\" class=\"adf-search-check-list-label\">\n            {{ option.name | translate }}\n        </div>\n\n    </mat-checkbox>\n</fieldset>\n\n<div class=\"adf-facet-buttons\" *ngIf=\"options.fitsPage && !settings?.hideDefaultAction\">\n    <button mat-button color=\"primary\" (click)=\"clear()\">\n        {{ 'SEARCH.FILTER.ACTIONS.CLEAR-ALL' | translate }}\n    </button>\n</div>\n\n<div class=\"adf-facet-buttons\" *ngIf=\"!options.fitsPage\">\n    <button mat-icon-button\n        title=\"{{ 'SEARCH.FILTER.ACTIONS.CLEAR-ALL' | translate }}\"\n        (click)=\"clear()\">\n        <mat-icon adf-icon=\"clear\" />\n    </button>\n    <button mat-icon-button\n        *ngIf=\"options.canShowLessItems\"\n        title=\"{{ 'SEARCH.FILTER.ACTIONS.SHOW-LESS' | translate }}\"\n        (click)=\"options.showLessItems()\">\n        <mat-icon adf-icon=\"keyboard_arrow_up\" />\n    </button>\n    <button mat-icon-button\n        *ngIf=\"options.canShowMoreItems\"\n        title=\"{{ 'SEARCH.FILTER.ACTIONS.SHOW-MORE' | translate }}\"\n        (click)=\"options.showMoreItems()\">\n        <mat-icon adf-icon=\"keyboard_arrow_down\" />\n    </button>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ADF_DATE_FORMATS, ADF_DATETIME_FORMATS, AdfDateFnsAdapter, AdfDateTimeFnsAdapter, DateFnsUtils } from '@alfresco/adf-core';\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { LiveErrorStateMatcher } from '../../forms/live-error-state-matcher';\nimport { ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DatetimeAdapter, MAT_DATETIME_FORMATS, MatDatetimepickerInputEvent, MatDatetimepickerModule } from '@mat-datetimepicker/core';\nimport { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\nimport { endOfMinute, isBefore, isValid, parseISO, startOfMinute } from 'date-fns';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface DatetimeRangeValue {\n    from: string;\n    to: string;\n}\n\ninterface FormProps {\n    from: FormControl<Date>;\n    to: FormControl<Date>;\n}\n\nexport const DEFAULT_DATETIME_FORMAT: string = 'dd/MM/yyyy HH:mm';\n\n@Component({\n    selector: 'adf-search-datetime-range',\n    imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, TranslatePipe, MatDatetimepickerModule],\n    templateUrl: './search-datetime-range.component.html',\n    styleUrls: ['./search-datetime-range.component.scss'],\n    providers: [\n        { provide: MAT_DATE_FORMATS, useValue: ADF_DATE_FORMATS },\n        { provide: MAT_DATETIME_FORMATS, useValue: ADF_DATETIME_FORMATS },\n        { provide: DateAdapter, useClass: AdfDateFnsAdapter },\n        { provide: DatetimeAdapter, useClass: AdfDateTimeFnsAdapter }\n    ],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-date-range' }\n})\nexport class SearchDatetimeRangeComponent implements SearchWidget, OnInit {\n    private readonly dateAdapter = inject<DateAdapter<Date>>(DateAdapter);\n    private readonly dateTimeAdapter = inject<DatetimeAdapter<Date>>(DatetimeAdapter);\n\n    from: FormControl<Date>;\n    to: FormControl<Date>;\n\n    form: FormGroup<FormProps>;\n    matcher = new LiveErrorStateMatcher();\n\n    id: string;\n    settings?: SearchWidgetSettings;\n    context?: SearchQueryBuilderService;\n    datetimePickerFormat: string;\n    maxDatetime: any;\n    fromMaxDatetime: any;\n    isActive = false;\n    startValue: any;\n    enableChangeUpdate: boolean;\n    displayValue$ = new ReplaySubject<string>(1);\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    getFromValidationMessage(): string {\n        return this.from.hasError('invalidOnChange') || this.hasParseError(this.from)\n            ? 'SEARCH.FILTER.VALIDATION.INVALID-DATETIME'\n            : this.from.hasError('matDatepickerMax')\n              ? 'SEARCH.FILTER.VALIDATION.BEYOND-MAX-DATETIME'\n              : this.from.hasError('required')\n                ? 'SEARCH.FILTER.VALIDATION.REQUIRED-VALUE'\n                : '';\n    }\n\n    getToValidationMessage(): string {\n        return this.to.hasError('invalidOnChange') || this.hasParseError(this.to)\n            ? 'SEARCH.FILTER.VALIDATION.INVALID-DATETIME'\n            : this.to.hasError('matDatepickerMin')\n              ? 'SEARCH.FILTER.VALIDATION.NO-DAYS'\n              : this.to.hasError('matDatepickerMax')\n                ? 'SEARCH.FILTER.VALIDATION.BEYOND-MAX-DATETIME'\n                : this.to.hasError('required')\n                  ? 'SEARCH.FILTER.VALIDATION.REQUIRED-VALUE'\n                  : '';\n    }\n\n    ngOnInit() {\n        this.datetimePickerFormat = this.settings?.datetimeFormat ? this.settings.datetimeFormat : DEFAULT_DATETIME_FORMAT;\n\n        const dateAdapter = this.dateAdapter as AdfDateFnsAdapter;\n        dateAdapter.displayFormat = this.datetimePickerFormat;\n\n        const dateTimeAdapter = this.dateTimeAdapter as AdfDateTimeFnsAdapter;\n        dateTimeAdapter.displayFormat = this.datetimePickerFormat;\n\n        const validators = Validators.compose([Validators.required]);\n\n        if (this.settings?.maxDatetime) {\n            this.maxDatetime = new Date(this.settings.maxDatetime);\n        }\n\n        if (this.startValue) {\n            const splitValue = this.startValue.split('||');\n            const fromValue = this.dateAdapter.parse(splitValue[0], this.datetimePickerFormat);\n            const toValue = this.dateAdapter.parse(splitValue[1], this.datetimePickerFormat);\n            this.from = new FormControl<Date>(fromValue, validators);\n            this.to = new FormControl<Date>(toValue, validators);\n        } else {\n            this.from = new FormControl<Date>(null, validators);\n            this.to = new FormControl<Date>(null, validators);\n        }\n\n        this.form = new FormGroup<FormProps>({\n            from: this.from,\n            to: this.to\n        });\n\n        this.setFromMaxDatetime();\n        this.enableChangeUpdate = this.settings?.allowUpdateOnChange ?? true;\n        this.context.populateFilters\n            .asObservable()\n            .pipe(\n                map((filtersQueries) => filtersQueries?.[this.id]),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((filterQuery) => {\n                if (filterQuery) {\n                    const start = parseISO(filterQuery.start);\n                    const end = parseISO(filterQuery.end);\n                    this.form.patchValue({ from: start, to: end });\n                    this.form.markAsDirty();\n                    this.apply({ from: start, to: end }, true, false);\n                } else {\n                    this.reset();\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n\n    apply(model: Partial<{ from: Date; to: Date }>, isValidValue: boolean, updateContext = true) {\n        if (isValidValue && this.id && this.context?.queryFragments && this.settings?.field) {\n            this.isActive = true;\n\n            const start = DateFnsUtils.utcToLocal(startOfMinute(model.from)).toISOString();\n            const end = DateFnsUtils.utcToLocal(endOfMinute(model.to)).toISOString();\n\n            this.context.queryFragments[this.id] = `${this.settings.field}:['${start}' TO '${end}']`;\n            const filterParam = this.context.filterRawParams[this.id] ?? {};\n            this.context.filterRawParams[this.id] = filterParam;\n            filterParam.start = start;\n            filterParam.end = end;\n            this.updateDisplayValue();\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n    }\n\n    submitValues() {\n        this.apply(this.form.value, this.form.valid);\n    }\n\n    hasValidValue(): boolean {\n        return this.form.valid;\n    }\n\n    getCurrentValue(): DatetimeRangeValue {\n        return {\n            from: this.dateAdapter.format(this.form.value.from, this.datetimePickerFormat),\n            to: this.dateAdapter.format(this.form.value.to, this.datetimePickerFormat)\n        };\n    }\n\n    updateDisplayValue(): void {\n        if (this.form.invalid || this.form.pristine) {\n            this.displayValue$.next('');\n        } else {\n            this.displayValue$.next(\n                `${this.dateAdapter.format(this.form.value.from, this.datetimePickerFormat)} - ${this.dateAdapter.format(\n                    this.form.value.to,\n                    this.datetimePickerFormat\n                )}`\n            );\n        }\n    }\n\n    setValue(parsedDate: string) {\n        const splitValue = parsedDate.split('||');\n        const fromValue = this.dateAdapter.parse(splitValue[0], this.datetimePickerFormat);\n        const toValue = this.dateAdapter.parse(splitValue[1], this.datetimePickerFormat);\n        this.from.setValue(fromValue);\n        this.from.markAsDirty();\n        this.from.markAsTouched();\n        this.to.setValue(toValue);\n        this.to.markAsDirty();\n        this.to.markAsTouched();\n        this.submitValues();\n    }\n\n    clear() {\n        this.isActive = false;\n        this.form.reset({\n            from: null,\n            to: null\n        });\n        if (this.id && this.context) {\n            this.context.queryFragments[this.id] = '';\n            this.context.filterRawParams[this.id] = undefined;\n        }\n\n        if (this.id && this.context && this.enableChangeUpdate) {\n            this.updateQuery();\n        }\n        this.setFromMaxDatetime();\n    }\n\n    reset() {\n        this.clear();\n        this.updateQuery();\n    }\n\n    private updateQuery() {\n        if (this.id && this.context) {\n            this.updateDisplayValue();\n            this.context.update();\n        }\n    }\n\n    onChangedHandler(event: MatDatetimepickerInputEvent<Date>, formControl: FormControl<Date>) {\n        const formatDate = event.value;\n\n        if (isValid(formatDate)) {\n            formControl.setValue(formatDate);\n        } else if (formatDate) {\n            formControl.setErrors({\n                invalidOnChange: true\n            });\n        }\n\n        this.setFromMaxDatetime();\n    }\n\n    hasParseError(formControl: FormControl<Date>): boolean {\n        return formControl.hasError('matDatepickerParse') && formControl.getError('matDatepickerParse').text;\n    }\n\n    forcePlaceholder(event: any) {\n        event.target.click();\n    }\n\n    setFromMaxDatetime() {\n        this.fromMaxDatetime = !this.to.value || (this.maxDatetime && isBefore(this.maxDatetime, this.to.value)) ? this.maxDatetime : this.to.value;\n    }\n}\n","<form [formGroup]=\"form\" novalidate (ngSubmit)=\"apply(form.value, form.valid)\">\n    <mat-form-field>\n        <input matInput\n                (input)=\"forcePlaceholder($event)\"\n                [formControl]=\"from\"\n                [errorStateMatcher]=\"matcher\"\n                placeholder=\"{{ 'SEARCH.FILTER.RANGE.FROM-DATE' | translate }}\"\n                [matDatetimepicker]=\"fromDatetimePicker\"\n                [max]=\"fromMaxDatetime\"\n                (dateChange)=\"onChangedHandler($event, from)\"\n                data-automation-id=\"datetime-range-from-input\">\n        <mat-datetimepicker-toggle matSuffix [for]=\"fromDatetimePicker\" data-automation-id=\"datetime-range-from-date-toggle\" />\n        <mat-datetimepicker #fromDatetimePicker color=\"accent\" type=\"datetime\" />\n        <mat-error *ngIf=\"from.invalid\" data-automation-id=\"datetime-range-from-error\">\n            {{ getFromValidationMessage() | translate: { requiredFormat: datetimePickerFormat } }}\n        </mat-error>\n    </mat-form-field>\n\n    <mat-form-field>\n        <input matInput\n                (input)=\"forcePlaceholder($event)\"\n                [formControl]=\"to\"\n                [errorStateMatcher]=\"matcher\"\n                placeholder=\"{{ 'SEARCH.FILTER.RANGE.TO-DATE' | translate }}\"\n                [matDatetimepicker]=\"toDatetimePicker\"\n                [min]=\"from.value\"\n                [max]=\"maxDatetime\"\n                (dateChange)=\"onChangedHandler($event, to)\"\n                data-automation-id=\"datetime-range-to-input\">\n        <mat-datetimepicker-toggle matSuffix [for]=\"toDatetimePicker\" data-automation-id=\"datetime-range-to-date-toggle\" />\n        <mat-datetimepicker #toDatetimePicker color=\"accent\" type=\"datetime\" />\n        <mat-error *ngIf=\"to.invalid\" data-automation-id=\"datetime-range-to-error\">\n            {{ getToValidationMessage() | translate: { requiredFormat: datetimePickerFormat } }}\n        </mat-error>\n    </mat-form-field>\n</form>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { ReplaySubject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { TranslationService } from '@alfresco/adf-core';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { FormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport const LogicalSearchFields = {\n    MATCH_ALL: 'matchAll',\n    MATCH_ANY: 'matchAny',\n    EXCLUDE: 'exclude',\n    MATCH_EXACT: 'matchExact'\n} as const;\n\nexport type LogicalSearchFields = (typeof LogicalSearchFields)[keyof typeof LogicalSearchFields];\n\nexport type LogicalSearchConditionEnumValuedKeys = { [T in LogicalSearchFields]: string };\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface LogicalSearchCondition extends LogicalSearchConditionEnumValuedKeys {}\n\n@Component({\n    selector: 'adf-search-logical-filter',\n    imports: [CommonModule, MatFormFieldModule, TranslatePipe, FormsModule],\n    templateUrl: './search-logical-filter.component.html',\n    styleUrls: ['./search-logical-filter.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchLogicalFilterComponent implements SearchWidget, OnInit {\n    private readonly translationService = inject(TranslationService);\n\n    id: string;\n    settings?: SearchWidgetSettings;\n    context?: SearchQueryBuilderService;\n    startValue: string;\n    searchCondition: LogicalSearchCondition;\n    fields = Object.keys(LogicalSearchFields);\n    LogicalSearchFields = LogicalSearchFields;\n    displayValue$ = new ReplaySubject<string>(1);\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit(): void {\n        this.clearSearchInputs();\n        this.context.populateFilters\n            .asObservable()\n            .pipe(\n                map((filtersQueries) => filtersQueries?.[this.id]),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((filterQuery) => {\n                if (filterQuery) {\n                    this.searchCondition = filterQuery;\n                    this.submitValues(false);\n                } else {\n                    this.reset(false);\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n\n    submitValues(updateContext = true) {\n        if (this.hasValidValue() && this.id && this.context?.queryFragments && this.settings?.field) {\n            this.updateDisplayValue();\n            const fields = this.settings.field.split(',').map((field) => (field += ':'));\n            let query = '';\n            Object.keys(this.searchCondition).forEach((key) => {\n                if (this.searchCondition[key] !== '') {\n                    let connector = '';\n                    let subQuery = '';\n                    switch (key) {\n                        case LogicalSearchFields.MATCH_ALL:\n                        case LogicalSearchFields.MATCH_EXACT:\n                            connector = 'AND';\n                            break;\n                        case LogicalSearchFields.MATCH_ANY:\n                            connector = 'OR';\n                            break;\n                        case LogicalSearchFields.EXCLUDE:\n                            connector = 'AND NOT';\n                            break;\n                        default:\n                            break;\n                    }\n                    fields.forEach((field) => {\n                        subQuery += subQuery === '' ? '' : key === LogicalSearchFields.EXCLUDE ? ' AND ' : ' OR ';\n                        let fieldQuery = '(';\n                        if (key === LogicalSearchFields.MATCH_EXACT) {\n                            fieldQuery += field + '\"' + this.searchCondition[key].trim() + '\"';\n                        } else {\n                            this.searchCondition[key]\n                                .split(' ')\n                                .filter((condition: string) => condition !== '')\n                                .forEach((phrase: string) => {\n                                    const refinedPhrase = '\"' + phrase + '\"';\n                                    fieldQuery +=\n                                        fieldQuery === '('\n                                            ? `${key === LogicalSearchFields.EXCLUDE ? 'NOT ' : ''}${field}${refinedPhrase}`\n                                            : ` ${connector} ${field}${refinedPhrase}`;\n                                });\n                        }\n                        subQuery += `${fieldQuery})`;\n                    });\n                    query += query === '' ? `(${subQuery})` : ` AND (${subQuery})`;\n                    subQuery = '';\n                }\n            });\n            this.context.queryFragments[this.id] = query;\n            if (updateContext) {\n                this.context.update();\n            }\n        } else {\n            this.reset(updateContext);\n        }\n    }\n\n    hasValidValue(): boolean {\n        return Object.keys(this.searchCondition).some((key: string) => this.searchCondition[key] !== '');\n    }\n\n    getCurrentValue(): LogicalSearchCondition {\n        return this.searchCondition;\n    }\n\n    setValue(value: LogicalSearchCondition) {\n        this.searchCondition = value;\n        this.updateDisplayValue();\n    }\n\n    reset(updateContext = true) {\n        if (this.id && this.context) {\n            this.context.queryFragments[this.id] = '';\n            this.clearSearchInputs();\n            this.context.filterRawParams[this.id] = this.searchCondition;\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n    }\n\n    private updateDisplayValue(): void {\n        this.context.filterRawParams[this.id] = this.searchCondition;\n        if (this.hasValidValue()) {\n            const displayValue = Object.keys(this.searchCondition).reduce((acc, key) => {\n                const fieldIndex = Object.values(LogicalSearchFields).indexOf(key as LogicalSearchFields);\n                const fieldKeyTranslated = this.translationService.instant(`SEARCH.LOGICAL_SEARCH.${this.fields[fieldIndex]}`);\n                return this.searchCondition[key] !== '' ? `${acc} ${fieldKeyTranslated}: ${this.searchCondition[key]}` : acc;\n            }, '');\n            this.displayValue$.next(displayValue);\n        } else {\n            this.displayValue$.next('');\n        }\n    }\n\n    private clearSearchInputs(): void {\n        this.searchCondition = { matchAll: '', matchAny: '', matchExact: '', exclude: '' };\n        this.updateDisplayValue();\n    }\n}\n","<div class=\"adf-search-logical-filter-container\">\n    <div *ngFor=\"let field of fields\" class=\"adf-search-input\">\n        <mat-label data-automation-id=\"adf-search-input-label\">{{('SEARCH.LOGICAL_SEARCH.' + field + '_LABEL') | translate}}</mat-label>\n        <input type=\"text\"\n            [(ngModel)]=\"searchCondition[LogicalSearchFields[field]]\"\n            placeholder=\"{{ ('SEARCH.LOGICAL_SEARCH.' + field + '_HINT') | translate }}\"\n            [attr.aria-label]=\"('SEARCH.LOGICAL_SEARCH.' + field + '_HINT') | translate\"/>\n    </div>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { AppConfigService, UserPreferencesService } from '@alfresco/adf-core';\nimport { EventEmitter, Injectable, Output, inject } from '@angular/core';\nimport { from, Observable } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { TagBody, TagEntry, TagPaging, TagsApi } from '@alfresco/js-api';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TagService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly userPreferencesService = inject(UserPreferencesService);\n    private readonly appConfigService = inject(AppConfigService);\n\n    private _tagsApi: TagsApi;\n    get tagsApi(): TagsApi {\n        this._tagsApi = this._tagsApi ?? new TagsApi(this.apiService.getInstance());\n        return this._tagsApi;\n    }\n\n    /** Emitted when tag information is updated. */\n    @Output()\n    refresh = new EventEmitter();\n\n    /**\n     * Gets a list of tags added to a node.\n     *\n     * @param nodeId ID of the target node\n     * @returns TagPaging object (defined in JS-API) containing the tags\n     */\n    getTagsByNodeId(nodeId: string): Observable<TagPaging> {\n        return from(this.tagsApi.listTagsForNode(nodeId));\n    }\n\n    /**\n     * Gets a list of all the tags already defined in the repository.\n     *\n     * @param opts Options supported by JS-API\n     * @param includedCounts True if count field should be included in response object for each tag, false otherwise.\n     * @returns TagPaging object (defined in JS-API) containing the tags\n     */\n    getAllTheTags(opts?: any, includedCounts?: boolean): Observable<TagPaging> {\n        return from(\n            this.tagsApi.listTags({\n                include: includedCounts ? ['count'] : undefined,\n                ...opts\n            })\n        );\n    }\n\n    /**\n     * Adds a tag to a node.\n     *\n     * @param nodeId ID of the target node\n     * @param tagName Name of the tag to add\n     * @returns TagEntry object (defined in JS-API) with details of the new tag\n     */\n    addTag(nodeId: string, tagName: string): Observable<TagEntry> {\n        const tagBody = new TagBody();\n        tagBody.tag = tagName;\n\n        return from(this.tagsApi.createTagForNode(nodeId, [tagBody])).pipe(tap((tagEntry) => this.refresh.emit(tagEntry)));\n    }\n\n    /**\n     * Removes a tag from a node.\n     *\n     * @param nodeId ID of the target node\n     * @param tag Name of the tag to remove\n     * @returns Null object when the operation completes\n     */\n    removeTag(nodeId: string, tag: string): Observable<void> {\n        return from(this.tagsApi.deleteTagFromNode(nodeId, tag)).pipe(tap(() => this.refresh.emit()));\n    }\n\n    /**\n     * Creates tags.\n     *\n     * @param tags list of tags to create.\n     * @returns Created tags.\n     */\n    createTags(tags: TagBody[]): Observable<TagEntry | TagPaging> {\n        return from(this.tagsApi.createTags(tags)).pipe(tap((tagEntries) => this.refresh.emit(tagEntries)));\n    }\n\n    /**\n     * Update a tag\n     *\n     * @param tagId The identifier of a tag.\n     * @param tagBody The updated tag.\n     * @returns Updated tag.\n     */\n    updateTag(tagId: string, tagBody: TagBody): Observable<TagEntry> {\n        return from(this.tagsApi.updateTag(tagId, tagBody)).pipe(tap((tagEntry) => this.refresh.emit(tagEntry)));\n    }\n\n    /**\n     * Find tags which name contains searched name.\n     *\n     * @param name Value for name which should be used during searching tags.\n     * @param sorting Object which configures sorting. OrderBy field specifies field used for sorting, direction specified ascending or descending direction.\n     * Default sorting is ascending by tag field.\n     * @param includedCounts True if count field should be included in response object for each tag, false otherwise.\n     * @param skipCount Specify how many first results should be skipped. Default 0.\n     * @param maxItems Specify max number of returned tags. Default is specified by UserPreferencesService.\n     * @returns Found tags which name contains searched name.\n     */\n    searchTags(\n        name: string,\n        sorting = { orderBy: 'tag', direction: 'asc' },\n        includedCounts?: boolean,\n        skipCount = 0,\n        maxItems?: number\n    ): Observable<TagPaging> {\n        maxItems = maxItems || this.userPreferencesService.paginationSize;\n        return this.getAllTheTags(\n            {\n                tag: `*${name}*`,\n                skipCount,\n                maxItems,\n                sorting,\n                matching: true\n            },\n            includedCounts\n        );\n    }\n\n    /**\n     * Find tag which name matches exactly to passed name.\n     *\n     * @param name Value for name which should be used during finding exact tag.\n     * @returns Found tag which name matches exactly to passed name.\n     */\n    findTagByName(name: string): Observable<TagEntry> {\n        return this.getAllTheTags({ tag: name }).pipe(map((result) => result.list.entries[0]));\n    }\n\n    /**\n     * Deletes a tag with tagId.\n     * This will cause the tag to be removed from all nodes.\n     * You must have admin rights to delete a tag.\n     *\n     * @param tagId of the tag to be deleted\n     * @returns Null object when the operation completes\n     */\n    deleteTag(tagId: string): Observable<void> {\n        return from(this.tagsApi.deleteTag(tagId)).pipe(tap(() => this.refresh.emit()));\n    }\n\n    /**\n     * Assign tags to node. If tag is new then tag is also created additionally, if tag already exists then it is just assigned.\n     *\n     * @param nodeId Id of node to which tags should be assigned.\n     * @param tags List of tags to create and assign or just assign if they already exist.\n     * @returns Just linked tags to node or single tag if linked only one tag.\n     */\n    assignTagsToNode(nodeId: string, tags: TagBody[]): Observable<TagPaging | TagEntry> {\n        return from(this.tagsApi.assignTagsToNode(nodeId, tags)).pipe(tap((data) => this.refresh.emit(data)));\n    }\n\n    /**\n     * Checks if tags plugin is enabled.\n     *\n     * @returns boolean true if tags plugin is enabled, false otherwise.\n     */\n    areTagsEnabled(): boolean {\n        return this.appConfigService.get('plugins.tagsEnabled', true);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { AppConfigService, UserPreferencesService } from '@alfresco/adf-core';\nimport {\n    CategoriesApi,\n    CategoryBody,\n    CategoryEntry,\n    CategoryLinkBody,\n    CategoryPaging,\n    ResultSetPaging,\n    SearchApi,\n    SEARCH_LANGUAGE\n} from '@alfresco/js-api';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { from, Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class CategoryService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly userPreferencesService = inject(UserPreferencesService);\n    private readonly appConfigService = inject(AppConfigService);\n\n    private _categoriesApi: CategoriesApi;\n    private _searchApi: SearchApi;\n\n    get categoriesApi(): CategoriesApi {\n        this._categoriesApi = this._categoriesApi ?? new CategoriesApi(this.apiService.getInstance());\n        return this._categoriesApi;\n    }\n\n    get searchApi(): SearchApi {\n        this._searchApi = this._searchApi ?? new SearchApi(this.apiService.getInstance());\n        return this._searchApi;\n    }\n\n    /**\n     * Get subcategories of a given parent category\n     *\n     * @param parentCategoryId The identifier of a parent category.\n     * @param skipCount Number of top categories to skip.\n     * @param maxItems Maximum number of subcategories returned from Observable.\n     * @returns Observable<CategoryPaging>\n     */\n    getSubcategories(parentCategoryId: string, skipCount?: number, maxItems?: number): Observable<CategoryPaging> {\n        return from(this.categoriesApi.getSubcategories(parentCategoryId ?? '-root-', { skipCount, maxItems }));\n    }\n\n    /**\n     * Get a category by ID\n     *\n     * @param categoryId The identifier of a category.\n     * @param opts Optional parameters.\n     * @param opts.fields A list of field names.\n     * @param opts.include Returns additional information about the category. The following optional fields can be requested:\n     * count\n     * path\n     * @returns Observable<CategoryEntry>\n     */\n    getCategory(categoryId: string, opts?: any): Observable<CategoryEntry> {\n        return from(this.categoriesApi.getCategory(categoryId, opts));\n    }\n\n    /**\n     * Creates subcategories under category with provided categoryId\n     *\n     * @param parentCategoryId The identifier of a parent category.\n     * @param payload List of categories to be created.\n     * @returns Observable<CategoryPaging | CategoryEntry>\n     */\n    createSubcategories(parentCategoryId: string, payload: CategoryBody[]): Observable<CategoryPaging | CategoryEntry> {\n        return from(this.categoriesApi.createSubcategories(parentCategoryId, payload, {}));\n    }\n\n    /**\n     * Updates category\n     *\n     * @param categoryId The identifier of a category.\n     * @param payload Updated category body\n     * @returns Observable<CategoryEntry>\n     */\n    updateCategory(categoryId: string, payload: CategoryBody): Observable<CategoryEntry> {\n        return from(this.categoriesApi.updateCategory(categoryId, payload, {}));\n    }\n\n    /**\n     * Deletes category\n     *\n     * @param categoryId The identifier of a category.\n     * @returns Observable<void>\n     */\n    deleteCategory(categoryId: string): Observable<void> {\n        return from(this.categoriesApi.deleteCategory(categoryId));\n    }\n\n    /**\n     * Searches categories by their name.\n     *\n     * @param name Value for name which should be used during searching categories.\n     * @param skipCount Specify how many first results should be skipped. Default 0.\n     * @param maxItems Specify max number of returned categories. Default is specified by UserPreferencesService.\n     * @returns Observable<ResultSetPaging> Found categories which name contains searched name.\n     */\n    searchCategories(name: string, skipCount = 0, maxItems?: number): Observable<ResultSetPaging> {\n        maxItems = maxItems || this.userPreferencesService.paginationSize;\n        return from(\n            this.searchApi.search({\n                query: {\n                    language: SEARCH_LANGUAGE.AFTS,\n                    query: `cm:name:\"*${name}*\" AND TYPE:'cm:category' AND PATH:\"/cm:categoryRoot/cm:generalclassifiable//*\"`\n                },\n                paging: {\n                    skipCount,\n                    maxItems\n                },\n                include: ['path']\n            })\n        );\n    }\n\n    /**\n     * List of categories that node is assigned to\n     *\n     * @param nodeId The identifier of a node.\n     * @returns Observable<CategoryPaging> Categories that node is assigned to\n     */\n    getCategoryLinksForNode(nodeId: string): Observable<CategoryPaging> {\n        return from(this.categoriesApi.getCategoryLinksForNode(nodeId, { include: ['path'] }));\n    }\n\n    /**\n     * Unlink category from a node\n     *\n     * @param nodeId The identifier of a node.\n     * @param categoryId The identifier of a category.\n     * @returns Observable<void>\n     */\n    unlinkNodeFromCategory(nodeId: string, categoryId: string): Observable<void> {\n        return from(this.categoriesApi.unlinkNodeFromCategory(nodeId, categoryId));\n    }\n\n    /**\n     * Link node to a category\n     *\n     * @param nodeId The identifier of a node.\n     * @param categoryLinkBodyCreate Array of a categories that node will be linked to.\n     * @returns Observable<CategoryEntry>\n     */\n    linkNodeToCategory(nodeId: string, categoryLinkBodyCreate: CategoryLinkBody[]): Observable<CategoryPaging | CategoryEntry> {\n        return from(this.categoriesApi.linkNodeToCategory(nodeId, categoryLinkBodyCreate));\n    }\n\n    /**\n     * Checks if categories plugin is enabled.\n     *\n     * @returns boolean true if categories plugin is enabled, false otherwise.\n     */\n    areCategoriesEnabled(): boolean {\n        return this.appConfigService.get('plugins.categoriesEnabled', true);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface AutocompleteOption {\n    value: string;\n    id?: string;\n    fullPath?: string;\n    query?: string;\n}\n\nexport const AutocompleteField = {\n    TAG: 'TAG',\n    CATEGORIES: 'cm:categories',\n    LOCATION: 'SITE'\n} as const;\n\nexport type AutocompleteField = (typeof AutocompleteField)[keyof typeof AutocompleteField];\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    Component,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    inject,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { ENTER } from '@angular/cdk/keycodes';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { Observable, timer } from 'rxjs';\nimport { debounce, startWith, tap } from 'rxjs/operators';\nimport { AutocompleteOption } from '../../models/autocomplete-option.interface';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-search-chip-autocomplete-input',\n    imports: [CommonModule, MatFormFieldModule, MatChipsModule, TranslatePipe, IconModule, ReactiveFormsModule, MatAutocompleteModule],\n    templateUrl: './search-chip-autocomplete-input.component.html',\n    styleUrls: ['./search-chip-autocomplete-input.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchChipAutocompleteInputComponent implements OnInit, OnChanges {\n    @ViewChild('optionInput')\n    optionInput: ElementRef<HTMLInputElement>;\n\n    @Input()\n    autocompleteOptions: AutocompleteOption[] = [];\n\n    @Input()\n    preselectedOptions: AutocompleteOption[] = [];\n\n    @Input()\n    onReset$: Observable<void>;\n\n    @Input()\n    allowOnlyPredefinedValues = true;\n\n    @Input()\n    placeholder = 'SEARCH.FILTER.ACTIONS.ADD_OPTION';\n\n    @Input()\n    compareOption?: (option1: AutocompleteOption, option2: AutocompleteOption) => boolean;\n\n    @Input()\n    formatChipValue?: (option: string) => string;\n\n    @Input()\n    filter = (options: AutocompleteOption[], value: string): AutocompleteOption[] => {\n        const filterValue = value.toLowerCase();\n        return options?.filter((option) => option.value.toLowerCase().includes(filterValue)).slice(0, 15) ?? [];\n    };\n\n    @Output()\n    optionsChanged = new EventEmitter<AutocompleteOption[]>();\n\n    @Output()\n    inputChanged = new EventEmitter<string>();\n\n    readonly separatorKeysCodes = [ENTER] as const;\n    formCtrl = new FormControl('');\n    filteredOptions: AutocompleteOption[] = [];\n    selectedOptions: AutocompleteOption[] = [];\n\n    private _activeAnyOption = false;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    set activeAnyOption(active: boolean) {\n        this._activeAnyOption = active;\n    }\n\n    ngOnInit() {\n        this.formCtrl.valueChanges\n            .pipe(\n                startWith(''),\n                tap(() => (this.activeAnyOption = false)),\n                debounce(() => timer(300)),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((value: string) => {\n                this.filteredOptions = this.filter(this.autocompleteOptions, value);\n                this.inputChanged.emit(value);\n            });\n        this.onReset$?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.reset());\n        this.selectedOptions = this.preselectedOptions ?? [];\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.autocompleteOptions) {\n            this.filteredOptions =\n                changes.autocompleteOptions.currentValue?.length > 0\n                    ? this.filter(changes.autocompleteOptions.currentValue, this.formCtrl.value)\n                    : [];\n        }\n        if (changes.preselectedOptions) {\n            this.selectedOptions = changes.preselectedOptions.currentValue ?? [];\n        }\n    }\n\n    add(event: MatChipInputEvent) {\n        if (!this._activeAnyOption) {\n            let value = (event.value || '').trim();\n            if (this.formatChipValue) {\n                value = this.formatChipValue(value);\n            }\n\n            if (value && this.isExists(value) && !this.isAdded(value)) {\n                if (this.allowOnlyPredefinedValues) {\n                    const index = this.autocompleteOptions.findIndex((option) => option.value.toLowerCase() === value.toLowerCase());\n                    this.selectedOptions.push(this.autocompleteOptions[index]);\n                } else {\n                    this.selectedOptions.push({ value });\n                }\n                this.optionsChanged.emit(this.selectedOptions);\n                event.chipInput.clear();\n                this.formCtrl.setValue('');\n            }\n        }\n    }\n\n    remove(value: AutocompleteOption) {\n        const index = this.selectedOptions.indexOf(value);\n\n        if (index >= 0) {\n            this.selectedOptions.splice(index, 1);\n            this.optionsChanged.emit(this.selectedOptions);\n        }\n    }\n\n    selected(event: MatAutocompleteSelectedEvent) {\n        this.selectedOptions.push(event.option.value);\n        this.optionInput.nativeElement.value = '';\n        this.formCtrl.setValue('');\n        this.optionsChanged.emit(this.selectedOptions);\n    }\n\n    /**\n     * Determines if a given option is already selected.\n     *\n     * This method checks if the provided `option` is present in the `selectedOptions` array.\n     * If a custom comparison function (`compareOption`) is provided, it uses this function to determine equality.\n     * Otherwise, it falls back to using strict equality comparison.\n     *\n     * @param option - The option to check for selection.\n     * @returns `true` if the option is selected, `false` otherwise.\n     */\n    isOptionSelected(option: AutocompleteOption): boolean {\n        const compare = this.compareOption;\n        const array = this.selectedOptions;\n\n        return compare ? array.some((arrayValue) => compare(option, arrayValue)) : array.includes(option);\n    }\n\n    private isAdded(value: string): boolean {\n        const valueLowerCase = value.toLowerCase();\n        return this.selectedOptions.some((option) => option.value.toLowerCase() === valueLowerCase);\n    }\n\n    private isExists(value: string): boolean {\n        const valueLowerCase = value.toLowerCase();\n        return this.allowOnlyPredefinedValues ? this.autocompleteOptions.some((option) => option.value.toLowerCase() === valueLowerCase) : true;\n    }\n\n    private reset() {\n        this.selectedOptions = [];\n        this.optionsChanged.emit(this.selectedOptions);\n        this.formCtrl.setValue('');\n        this.optionInput.nativeElement.value = '';\n    }\n}\n","<mat-form-field class=\"adf-chip-list\">\n    <mat-label>{{ placeholder | translate }}</mat-label>\n    <mat-chip-grid #chipList [attr.aria-label]=\"'SEARCH.FILTER.ARIA-LABEL.OPTIONS-SELECTION' | translate\">\n        <mat-chip-row\n            class=\"adf-option-chips adf-autocomplete-added-option-chips\"\n            *ngFor=\"let option of selectedOptions\"\n            (removed)=\"remove(option)\">\n            <span [title]=\"option.fullPath ? ('SEARCH.RESULTS.WILL_CONTAIN' | translate:{searchTerm: option.fullPath}) : undefined\">\n                {{ option.value }}\n            </span>\n            <button\n                matChipRemove\n                class=\"adf-option-chips-delete-button adf-autocomplete-added-option-chips-delete-button\"\n                [title]=\"('SEARCH.FILTER.BUTTONS.REMOVE' | translate) + ' ' + option.value\"\n                [attr.aria-label]=\"('SEARCH.FILTER.BUTTONS.REMOVE' | translate) + ' ' + option.value\"\n            >\n                <mat-icon class=\"adf-option-chips-delete-icon adf-autocomplete-added-option-chips-delete-icon\" adf-icon=\"close\" />\n            </button>\n        </mat-chip-row>\n        <input\n            placeholder=\"{{ placeholder | translate }}\"\n            aria-controls=\"adf-search-chip-autocomplete\"\n            #optionInput\n            #autocompleteTrigger=\"matAutocompleteTrigger\"\n            [formControl]=\"formCtrl\"\n            [matAutocomplete]=\"auto\"\n            [matChipInputFor]=\"chipList\"\n            [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n            [attr.aria-label]=\"placeholder | translate\"\n            class=\"adf-search-properties-file-input\"\n            (matChipInputTokenEnd)=\"add($event)\"\n            (blur)=\"activeAnyOption = false; autocompleteTrigger.closePanel()\"\n            data-automation-id=\"adf-search-chip-autocomplete-input\">\n    </mat-chip-grid>\n    <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\" id=\"adf-search-chip-autocomplete\"\n                      (optionActivated)=\"activeAnyOption = true\" (closed)=\"activeAnyOption = false\">\n            <mat-option\n                *ngFor=\"let option of filteredOptions\"\n                [value]=\"option\"\n                (mousedown)=$event.preventDefault()\n                [disabled]=\"isOptionSelected(option)\"\n                [attr.data-automation-id]=\"'option-' + option.value\"\n                [title]=\"option.fullPath ? ('SEARCH.RESULTS.WILL_CONTAIN' | translate : { searchTerm: option.fullPath || option.value }) : undefined\"\n                class=\"adf-search-chip-autocomplete-added-option\"\n                [ngClass]=\"isOptionSelected(option) && 'adf-autocomplete-added-option'\"\n            >\n                {{ option.fullPath || option.value }}\n            </mat-option>\n    </mat-autocomplete>\n</mat-form-field>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-chip-autocomplete-input.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { BehaviorSubject, Observable, ReplaySubject, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { SearchFilterList } from '../../models/search-filter-list.model';\nimport { TagService } from '../../../tag/services/tag.service';\nimport { CategoryService } from '../../../category/services/category.service';\nimport { AutocompleteField, AutocompleteOption } from '../../models/autocomplete-option.interface';\nimport { CommonModule } from '@angular/common';\nimport { SearchChipAutocompleteInputComponent } from '../search-chip-autocomplete-input';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SitesService } from '../../../common/services/sites.service';\n\n@Component({\n    selector: 'adf-search-filter-autocomplete-chips',\n    imports: [CommonModule, SearchChipAutocompleteInputComponent, TranslatePipe, MatButtonModule],\n    templateUrl: './search-filter-autocomplete-chips.component.html',\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFilterAutocompleteChipsComponent implements SearchWidget, OnInit {\n    private readonly tagService = inject(TagService);\n    private readonly categoryService = inject(CategoryService);\n    private readonly sitesService = inject(SitesService);\n\n    id: string;\n    settings?: SearchWidgetSettings;\n    context?: SearchQueryBuilderService;\n    options: SearchFilterList<AutocompleteOption[]>;\n    startValue: AutocompleteOption[] = [];\n    displayValue$ = new ReplaySubject<string>(1);\n    selectedOptions: AutocompleteOption[] = [];\n    enableChangeUpdate: boolean;\n\n    private readonly resetSubject$ = new Subject<void>();\n    reset$: Observable<void> = this.resetSubject$.asObservable();\n    private readonly autocompleteOptionsSubject$ = new BehaviorSubject<AutocompleteOption[]>([]);\n    autocompleteOptions$: Observable<AutocompleteOption[]> = this.autocompleteOptionsSubject$.asObservable();\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    constructor() {\n        this.options = new SearchFilterList<AutocompleteOption[]>();\n    }\n\n    ngOnInit() {\n        if (this.settings) {\n            this.setOptions();\n            if (this.startValue?.length > 0) {\n                this.setValue(this.startValue);\n            }\n            this.enableChangeUpdate = this.settings.allowUpdateOnChange ?? true;\n        }\n        this.context.populateFilters\n            .asObservable()\n            .pipe(\n                map((filterQueries) => filterQueries[this.id]),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((filterQuery) => {\n                if (filterQuery) {\n                    this.selectedOptions = filterQuery;\n                    this.updateQuery(false);\n                } else if (!filterQuery && this.selectedOptions.length) {\n                    this.reset(false);\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n\n    reset(updateContext = true) {\n        this.selectedOptions = [];\n        this.context.filterRawParams[this.id] = undefined;\n        this.resetSubject$.next();\n        this.updateQuery(updateContext);\n    }\n\n    submitValues() {\n        this.updateQuery();\n    }\n\n    hasValidValue(): boolean {\n        return !!this.selectedOptions;\n    }\n\n    getCurrentValue(): AutocompleteOption[] {\n        return this.selectedOptions;\n    }\n\n    onOptionsChange(selectedOptions: AutocompleteOption[]) {\n        this.selectedOptions = selectedOptions;\n        if (this.enableChangeUpdate) {\n            this.updateQuery();\n            this.context.update();\n        }\n    }\n\n    setValue(value: AutocompleteOption[]) {\n        this.selectedOptions = value;\n        this.displayValue$.next(this.selectedOptions.join(', '));\n        this.submitValues();\n    }\n\n    onInputChange(value: string) {\n        if (this.settings.field === AutocompleteField.CATEGORIES) {\n            this.searchForExistingCategories(value);\n        } else if (this.settings.field === AutocompleteField.LOCATION) {\n            this.populateSitesOptions();\n        }\n    }\n\n    optionComparator(option1: AutocompleteOption, option2: AutocompleteOption): boolean {\n        if (!option1 || !option2) return false;\n        if (option1.id && option2.id) {\n            return option1.id.toUpperCase() === option2.id.toUpperCase();\n        }\n        if (option1.value && option2.value) {\n            return option1.value.toUpperCase() === option2.value.toUpperCase();\n        }\n        return false;\n    }\n\n    private updateQuery(updateContext = true) {\n        this.context.filterRawParams[this.id] = this.selectedOptions.length > 0 ? this.selectedOptions : undefined;\n        this.displayValue$.next(this.selectedOptions.map((option) => option.value).join(', '));\n        if (this.context && this.settings?.field) {\n            let queryFragments;\n            switch (this.settings.field) {\n                case AutocompleteField.CATEGORIES:\n                    queryFragments = this.selectedOptions.map((val) => `${this.settings.field}:\"workspace://SpacesStore/${val.id}\"`);\n                    break;\n                case AutocompleteField.LOCATION:\n                    queryFragments = this.selectedOptions.map((val) => val.query ?? `${this.settings.field}:\"${val.id || val.value}\"`);\n                    break;\n                default:\n                    queryFragments = this.selectedOptions.map((val) => val.query ?? `${this.settings.field}:\"${val.value}\"`);\n                    break;\n            }\n            this.context.queryFragments[this.id] = queryFragments.join(' OR ');\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n    }\n\n    private setOptions() {\n        switch (this.settings.field) {\n            case AutocompleteField.TAG:\n                this.tagService.getAllTheTags().subscribe((tagPaging) => {\n                    this.autocompleteOptionsSubject$.next(\n                        tagPaging.list.entries.map((tag) => ({\n                            value: tag.entry.tag\n                        }))\n                    );\n                });\n                break;\n            case AutocompleteField.CATEGORIES:\n                this.autocompleteOptionsSubject$.next([]);\n                break;\n            case AutocompleteField.LOCATION:\n                this.autocompleteOptionsSubject$.next([]);\n                break;\n            default:\n                this.autocompleteOptionsSubject$.next(this.settings.autocompleteOptions);\n        }\n    }\n\n    private searchForExistingCategories(searchTerm: string) {\n        this.categoryService.searchCategories(searchTerm, 0, 15).subscribe((existingCategoriesResult) => {\n            this.autocompleteOptionsSubject$.next(\n                existingCategoriesResult.list.entries.map((rowEntry) => {\n                    const path = rowEntry.entry.path.name.split('/').splice(3).join('/');\n                    const fullPath = path ? `${path}/${rowEntry.entry.name}` : rowEntry.entry.name;\n                    return { id: rowEntry.entry.id, value: rowEntry.entry.name, fullPath };\n                })\n            );\n        });\n    }\n\n    private populateSitesOptions(): void {\n        this.sitesService\n            .getSites()\n            .pipe(\n                map((sites) => {\n                    const predefinedOptions = this.settings?.autocompleteOptions || [];\n                    const sitesOptions = sites.list.entries\n                        .filter((siteEntry) => siteEntry.entry.visibility === 'public' || siteEntry.entry?.role)\n                        .map<AutocompleteOption>((siteEntry) => ({\n                            id: siteEntry.entry.id,\n                            value: siteEntry.entry.title\n                        }));\n                    return [...sitesOptions, ...predefinedOptions];\n                })\n            )\n            .subscribe((options) => this.autocompleteOptionsSubject$.next(options));\n    }\n}\n","<adf-search-chip-autocomplete-input\n    [autocompleteOptions]=\"autocompleteOptions$ | async\"\n    [preselectedOptions]=\"selectedOptions\"\n    [onReset$]=\"reset$\"\n    [allowOnlyPredefinedValues]=\"settings.allowOnlyPredefinedValues\"\n    (inputChanged)=\"onInputChange($event)\"\n    [compareOption]=\"optionComparator\"\n    (optionsChanged)=\"onOptionsChange($event)\" />\n\n<div class=\"adf-facet-buttons\" *ngIf=\"!settings?.hideDefaultAction\">\n    <button mat-button color=\"primary\" data-automation-id=\"adf-search-chip-autocomplete-btn-clear\" (click)=\"reset()\">\n        {{ 'SEARCH.FILTER.ACTIONS.CLEAR' | translate }}\n    </button>\n    <button mat-button color=\"primary\" data-automation-id=\"adf-search-chip-autocomplete-btn-apply\" (click)=\"submitValues()\">\n        {{ 'SEARCH.FILTER.ACTIONS.APPLY' | translate }}\n    </button>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const FileSizeOperator = {\n    AT_LEAST: 'SEARCH.SEARCH_PROPERTIES.FILE_SIZE_OPERATOR.AT_LEAST',\n    AT_MOST: 'SEARCH.SEARCH_PROPERTIES.FILE_SIZE_OPERATOR.AT_MOST',\n    EXACTLY: 'SEARCH.SEARCH_PROPERTIES.FILE_SIZE_OPERATOR.EXACTLY'\n} as const;\n\nexport type FileSizeOperator = (typeof FileSizeOperator)[keyof typeof FileSizeOperator];\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class FileSizeUnit {\n    static readonly KB = new FileSizeUnit('SEARCH.SEARCH_PROPERTIES.FILE_SIZE_UNIT_ABBREVIATION.KB', 1024);\n    static readonly MB = new FileSizeUnit('SEARCH.SEARCH_PROPERTIES.FILE_SIZE_UNIT_ABBREVIATION.MB', 1048576);\n    static readonly GB = new FileSizeUnit('SEARCH.SEARCH_PROPERTIES.FILE_SIZE_UNIT_ABBREVIATION.GB', 1073741824);\n\n    private constructor(readonly abbreviation: string, readonly bytes: number) {}\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AfterViewChecked, Component, DestroyRef, ElementRef, inject, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule } from '@angular/forms';\nimport { FileSizeCondition } from './file-size-condition';\nimport { FileSizeOperator } from './file-size-operator.enum';\nimport { FileSizeUnit } from './file-size-unit.enum';\nimport { ReplaySubject, Subject } from 'rxjs';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { SearchProperties } from './search-properties';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { AutocompleteOption } from '../../models/autocomplete-option.interface';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { SearchChipAutocompleteInputComponent } from '../search-chip-autocomplete-input';\nimport { map } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-search-properties',\n    imports: [\n        CommonModule,\n        ReactiveFormsModule,\n        TranslatePipe,\n        MatFormFieldModule,\n        MatSelectModule,\n        MatInputModule,\n        SearchChipAutocompleteInputComponent\n    ],\n    templateUrl: './search-properties.component.html',\n    styleUrls: ['./search-properties.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchPropertiesComponent implements OnInit, AfterViewChecked, SearchWidget {\n    private readonly translateService = inject(TranslateService);\n\n    id: string;\n    settings?: SearchWidgetSettings;\n    context?: SearchQueryBuilderService;\n    startValue: SearchProperties;\n    displayValue$ = new ReplaySubject<string>(1);\n    autocompleteOptions: AutocompleteOption[] = [];\n    preselectedOptions: AutocompleteOption[] = [];\n\n    private readonly formBuilder = inject(FormBuilder);\n\n    private readonly _form = this.formBuilder.nonNullable.group<FileSizeCondition>({\n        fileSizeOperator: FileSizeOperator.AT_LEAST,\n        fileSize: undefined,\n        fileSizeUnit: FileSizeUnit.KB\n    });\n    private readonly _fileSizeOperators = Object.keys(FileSizeOperator).map<string>((key) => FileSizeOperator[key]);\n    private readonly _fileSizeUnits = [FileSizeUnit.KB, FileSizeUnit.MB, FileSizeUnit.GB];\n    private readonly canvas = document.createElement('canvas');\n    private _fileSizeOperatorsMaxWidth: number;\n    private _selectedExtensions: string[];\n    private readonly _reset$ = new Subject<void>();\n    private sizeField: string;\n    private nameField: string;\n\n    @ViewChild('fileSizeOperatorSelect', { read: ElementRef })\n    fileSizeOperatorSelectElement: ElementRef;\n\n    get form(): SearchPropertiesComponent['_form'] {\n        return this._form;\n    }\n\n    get fileSizeOperators(): string[] {\n        return this._fileSizeOperators;\n    }\n\n    get fileSizeUnits(): FileSizeUnit[] {\n        return this._fileSizeUnits;\n    }\n\n    get fileSizeOperatorsMaxWidth(): number {\n        return this._fileSizeOperatorsMaxWidth;\n    }\n\n    get reset$(): Subject<void> {\n        return this._reset$;\n    }\n\n    get selectedExtensions(): AutocompleteOption[] {\n        return this.parseToAutocompleteOptions(this._selectedExtensions);\n    }\n\n    set selectedExtensions(extensions: AutocompleteOption[]) {\n        this._selectedExtensions = this.parseFromAutocompleteOptions(extensions);\n    }\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        if (this.settings) {\n            if (!this.settings.fileExtensions) {\n                this.settings.fileExtensions = [];\n            }\n            this.autocompleteOptions = this.parseToAutocompleteOptions(this.settings.fileExtensions);\n            [this.sizeField, this.nameField] = this.settings.field.split(',');\n        }\n        if (this.startValue) {\n            this.setValue(this.startValue);\n        }\n        this.context.populateFilters\n            .asObservable()\n            .pipe(\n                map((filtersQueries) => filtersQueries?.[this.id]),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((filterQuery) => {\n                if (filterQuery) {\n                    filterQuery.fileSizeCondition.fileSizeUnit = this.fileSizeUnits.find(\n                        (fileSizeUnit) => fileSizeUnit.bytes === filterQuery.fileSizeCondition.fileSizeUnit.bytes\n                    );\n                    this.form.patchValue(filterQuery.fileSizeCondition);\n                    this.form.updateValueAndValidity();\n                    this._selectedExtensions = filterQuery.fileExtensions ?? [];\n                    this.preselectedOptions = this.parseToAutocompleteOptions(this._selectedExtensions);\n                    this.submitValues(false);\n                } else {\n                    this.reset(false);\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n\n    ngAfterViewChecked() {\n        if (this.fileSizeOperatorSelectElement?.nativeElement.clientWidth && !this._fileSizeOperatorsMaxWidth) {\n            setTimeout(() => {\n                const extraFreeSpace = 20;\n                this._fileSizeOperatorsMaxWidth =\n                    Math.max(\n                        ...this._fileSizeOperators.map((operator) =>\n                            this.getOperatorNameWidth(operator, this.getCanvasFont(this.fileSizeOperatorSelectElement.nativeElement))\n                        )\n                    ) +\n                    this.fileSizeOperatorSelectElement.nativeElement.querySelector('.mat-mdc-select-arrow-wrapper').clientWidth +\n                    extraFreeSpace;\n            });\n        }\n    }\n\n    narrowDownAllowedCharacters(event: Event) {\n        const value = (event.target as HTMLInputElement).value;\n        if (!(event.target as HTMLInputElement).value) {\n            return;\n        }\n        if ((event as InputEvent).data !== ',' && (event as InputEvent).data !== '.') {\n            (event.target as HTMLInputElement).value = value.replace(/[^0-9.,]/g, '');\n        }\n    }\n\n    clearNumberFieldWhenInvalid(event: FocusEvent) {\n        if (!(event.target as HTMLInputElement).validity.valid) {\n            this.form.controls.fileSize.setValue(undefined);\n        }\n    }\n\n    preventIncorrectNumberCharacters(event: KeyboardEvent): boolean {\n        return event.key !== '-' && event.key !== 'e' && event.key !== '+';\n    }\n\n    compareFileExtensions(extension1: AutocompleteOption, extension2: AutocompleteOption): boolean {\n        return extension1.value.toUpperCase() === extension2.value.toUpperCase();\n    }\n\n    getExtensionWithoutDot(extension: string): string {\n        const extensionSplitByDot = extension.split('.');\n        return extensionSplitByDot[extensionSplitByDot.length - 1];\n    }\n\n    filterExtensions = (extensions: AutocompleteOption[], filterValue: string): AutocompleteOption[] => {\n        const filterValueLowerCase = this.getExtensionWithoutDot(filterValue).toLowerCase();\n        const extensionWithDot = filterValue.startsWith('.');\n        return extensions.filter((option) => {\n            const optionLowerCase = option.value.toLowerCase();\n            return extensionWithDot && filterValueLowerCase\n                ? optionLowerCase.startsWith(filterValueLowerCase)\n                : optionLowerCase.includes(filterValue);\n        });\n    };\n\n    reset(updateContext = true) {\n        this.form.reset();\n        if (this.id && this.context) {\n            this.context.queryFragments[this.id] = '';\n            this.context.filterRawParams[this.id] = undefined;\n            if (updateContext) {\n                this.context.update();\n            }\n        }\n        this.reset$.next();\n        this.displayValue$.next('');\n    }\n\n    submitValues(updateContext = true) {\n        if (this.context?.filterRawParams) {\n            this.context.filterRawParams[this.id] = {\n                fileExtensions: this._selectedExtensions,\n                fileSizeCondition: this.form.value\n            };\n        }\n        if (this.settings && this.context) {\n            this.updateSettingsAndContext(updateContext);\n        }\n    }\n\n    hasValidValue(): boolean {\n        return true;\n    }\n\n    getCurrentValue(): SearchProperties {\n        return {\n            fileSizeCondition: this.form.getRawValue(),\n            fileExtensions: this._selectedExtensions\n        };\n    }\n\n    setValue(searchProperties: SearchProperties) {\n        this.form.patchValue(searchProperties.fileSizeCondition);\n        this.selectedExtensions = this.parseToAutocompleteOptions(searchProperties.fileExtensions ?? []);\n        this.submitValues();\n    }\n\n    private updateSettingsAndContext(updateContext = true): void {\n        let query = '';\n        let displayedValue = '';\n        if (this.form.value.fileSize !== undefined && this.form.value.fileSize !== null) {\n            displayedValue = `${this.translateService.instant(this.form.value.fileSizeOperator)} ${\n                this.form.value.fileSize\n            } ${this.translateService.instant(this.form.value.fileSizeUnit.abbreviation)}`;\n            const size = this.form.value.fileSize * this.form.value.fileSizeUnit.bytes;\n            switch (this.form.value.fileSizeOperator) {\n                case FileSizeOperator.AT_MOST:\n                    query = `${this.sizeField}:[0 TO ${size}]`;\n                    break;\n                case FileSizeOperator.AT_LEAST:\n                    query = `${this.sizeField}:[${size} TO MAX]`;\n                    break;\n                default:\n                    query = `${this.sizeField}:[${size} TO ${size}]`;\n            }\n        }\n        if (this._selectedExtensions?.length) {\n            if (query) {\n                query += ' AND ';\n                displayedValue += ', ';\n            }\n            query += `${this.nameField}:(\"*.${this._selectedExtensions.join('\" OR \"*.')}\")`;\n            displayedValue += this._selectedExtensions.join(', ');\n        }\n        this.displayValue$.next(displayedValue);\n        this.context.queryFragments[this.id] = query;\n        if (updateContext) {\n            this.context.update();\n        }\n    }\n\n    private parseToAutocompleteOptions(array: string[]): AutocompleteOption[] {\n        return array.map((value) => ({ value }));\n    }\n\n    private parseFromAutocompleteOptions(array: AutocompleteOption[]): string[] {\n        return array.flatMap((option) => option.value);\n    }\n\n    private getOperatorNameWidth(operator: string, font: string): number {\n        const context = this.canvas.getContext('2d');\n        context.font = font;\n        return context.measureText(this.translateService.instant(operator)).width;\n    }\n\n    private getCssStyle(element: HTMLElement, property: string): string {\n        return window.getComputedStyle(element, null).getPropertyValue(property);\n    }\n\n    private getCanvasFont(el: HTMLElement): string {\n        return `${this.getCssStyle(el, 'font-weight')} ${this.getCssStyle(el, 'font-size')} ${this.getCssStyle(el, 'font-family')}`;\n    }\n}\n","<form [formGroup]=\"form\" class=\"adf-search-properties-form\">\n    <fieldset aria-labelledby=\"file-size-label\">\n        <legend id=\"file-size-label\" class=\"adf-search-properties-file-size-label\">\n            {{ 'SEARCH.SEARCH_PROPERTIES.FILE_SIZE' | translate }}\n        </legend>\n        <div class=\"adf-search-properties-file-size-container\">\n            <mat-form-field\n                class=\"adf-search-properties-form-field\"\n                [style.flex]=\"'0 0 ' + fileSizeOperatorsMaxWidth + 'px'\"\n                data-automation-id=\"adf-search-properties-file-size-operator\">\n                <mat-label>{{ 'SEARCH.SEARCH_PROPERTIES.ACCESSIBILITY.CONDITION' | translate }}</mat-label>\n                <mat-select\n                    data-automation-id=\"adf-search-properties-file-size-operator-select\"\n                    [formControl]=\"form.controls.fileSizeOperator\"\n                    #fileSizeOperatorSelect>\n                    <mat-option\n                        *ngFor=\"let fileSizeOperator of fileSizeOperators\"\n                        [value]=\"fileSizeOperator\">\n                        {{ fileSizeOperator | translate }}\n                    </mat-option>\n                </mat-select>\n            </mat-form-field>\n            <mat-form-field class=\"adf-search-properties-form-field\">\n                <mat-label>{{ 'SEARCH.SEARCH_PROPERTIES.ACCESSIBILITY.SIZE_VALUE' | translate }}</mat-label>\n                <input\n                    matInput\n                    [formControl]=\"form.controls.fileSize\"\n                    type=\"number\"\n                    min=\"0\"\n                    step=\"any\"\n                    (input)=\"narrowDownAllowedCharacters($event)\"\n                    (keydown)=\"preventIncorrectNumberCharacters($event)\"\n                    id=\"adf-search-properties-file-size\"\n                    [placeholder]=\"'SEARCH.SEARCH_PROPERTIES.FILE_SIZE_PLACEHOLDER' | translate\"\n                    (blur)=\"clearNumberFieldWhenInvalid($event)\"\n                    data-automation-id=\"adf-search-properties-file-size-input\"/>\n            </mat-form-field>\n            <mat-form-field\n                class=\"adf-search-properties-form-field\"\n                data-automation-id=\"adf-search-properties-file-size-unit\">\n                <mat-label>{{ 'SEARCH.SEARCH_PROPERTIES.ACCESSIBILITY.UNIT' | translate }}</mat-label>\n                <mat-select\n                    [attr.aria-label]=\"'SEARCH.SEARCH_PROPERTIES.ACCESSIBILITY.UNIT' | translate\"\n                    [formControl]=\"form.controls.fileSizeUnit\"\n                    data-automation-id=\"adf-search-properties-file-size-unit-select\">\n                    <mat-option\n                        *ngFor=\"let fileSizeUnit of fileSizeUnits\"\n                        [value]=\"fileSizeUnit\">\n                        {{ fileSizeUnit.abbreviation | translate }}\n                    </mat-option>\n                </mat-select>\n            </mat-form-field>\n        </div>\n    </fieldset>\n    <p class=\"adf-search-properties-file-type-label\">{{ 'SEARCH.SEARCH_PROPERTIES.FILE_TYPE' | translate }}</p>\n    <adf-search-chip-autocomplete-input\n        [autocompleteOptions]=\"autocompleteOptions\"\n        [preselectedOptions]=\"preselectedOptions\"\n        (optionsChanged)=\"selectedExtensions = $event\"\n        [onReset$]=\"reset$\"\n        [allowOnlyPredefinedValues]=\"false\"\n        [compareOption]=\"compareFileExtensions\"\n        [formatChipValue]=\"getExtensionWithoutDot\"\n        [filter]=\"filterExtensions\"\n        placeholder=\"SEARCH.SEARCH_PROPERTIES.FILE_TYPE\"/>\n</form>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DateRangeType = {\n    ANY: 'ANY',\n    IN_LAST: 'IN_LAST',\n    BETWEEN: 'BETWEEN'\n} as const;\n\nexport type DateRangeType = (typeof DateRangeType)[keyof typeof DateRangeType];\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const InLastDateType = {\n    DAYS: 'DAYS',\n    WEEKS: 'WEEKS',\n    MONTHS: 'MONTHS'\n} as const;\n\nexport type InLastDateType = (typeof InLastDateType)[keyof typeof InLastDateType];\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Directive, Input, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n    selector: '[adf-search-filter-tab]'\n})\nexport class SearchFilterTabDirective {\n    readonly templateRef = inject<TemplateRef<any>>(TemplateRef);\n\n    @Input('adf-search-filter-tab')\n    name: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    ElementRef,\n    OnDestroy,\n    OnInit,\n    QueryList,\n    ViewChild,\n    ViewEncapsulation,\n    inject\n} from '@angular/core';\nimport { SearchFilterTabDirective } from './search-filter-tab.directive';\nimport { CommonModule } from '@angular/common';\nimport { MatTabGroup, MatTabsModule } from '@angular/material/tabs';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n    selector: 'adf-search-filter-tabbed',\n    imports: [CommonModule, MatTabsModule, TranslatePipe],\n    templateUrl: './search-filter-tabbed.component.html',\n    styleUrls: ['./search-filter-tabbed.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFilterTabbedComponent implements OnInit, OnDestroy {\n    private readonly element = inject(ElementRef);\n    private readonly changeDetector = inject(ChangeDetectorRef);\n\n    @ContentChildren(SearchFilterTabDirective)\n    tabsContents: QueryList<SearchFilterTabDirective>;\n\n    selectedIndex: number = 0;\n\n    @ViewChild(MatTabGroup)\n    private readonly tabGroup: MatTabGroup;\n\n    private readonly intersectionObserver = new IntersectionObserver(\n        (entries) => {\n            if (!entries[0].isIntersecting) {\n                this.tabGroup.selectedIndex = (this.selectedIndex + 1) % this.tabsContents.length;\n                this.changeDetector.detectChanges();\n                this.tabGroup.selectedIndex = this.selectedIndex;\n                this.changeDetector.detectChanges();\n            }\n        },\n        {\n            threshold: [0, 1]\n        }\n    );\n\n    ngOnInit(): void {\n        this.intersectionObserver.observe(this.element.nativeElement);\n    }\n\n    ngOnDestroy(): void {\n        this.intersectionObserver.disconnect();\n    }\n\n    onTabIndexChanged(index: number): void {\n        this.selectedIndex = index;\n    }\n}\n","<mat-tab-group (selectedIndexChange)=\"onTabIndexChanged($event)\">\n    <mat-tab *ngFor=\"let tabContent of tabsContents; let i = index\"\n             [labelClass]='selectedIndex === i ? \"adf-search-tab-label-active\" : \"\"'\n             [bodyClass]='selectedIndex === i ? \"adf-search-tab-content-active\" : \"\"'\n             label=\"{{tabContent.name | translate}}\">\n        <ng-container *ngTemplateOutlet=\"tabContent.templateRef\" />\n    </mat-tab>\n</mat-tab-group>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    AfterViewInit,\n    Component,\n    DestroyRef,\n    effect,\n    ElementRef,\n    EventEmitter,\n    inject,\n    Input,\n    OnInit,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { endOfDay, isAfter, isBefore, isValid, parse } from 'date-fns';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatDateFormats } from '@angular/material/core';\nimport { DateFnsAdapter, MAT_DATE_FNS_FORMATS } from '@angular/material-date-fns-adapter';\nimport { InLastDateType } from './in-last-date-type';\nimport { DateRangeType } from './date-range-type';\nimport { SearchDateRange } from './search-date-range';\nimport { FormBuilder, ReactiveFormsModule, UntypedFormControl, Validators } from '@angular/forms';\nimport { DateFnsUtils, UserPreferencesService } from '@alfresco/adf-core';\nimport { CommonModule } from '@angular/common';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable } from 'rxjs';\n\nconst DEFAULT_DATE_DISPLAY_FORMAT = 'dd-MMM-yy';\n\n@Component({\n    selector: 'adf-search-date-range',\n    imports: [\n        CommonModule,\n        MatRadioModule,\n        ReactiveFormsModule,\n        TranslatePipe,\n        MatFormFieldModule,\n        MatInputModule,\n        MatSelectModule,\n        MatDatepickerModule\n    ],\n    templateUrl: './search-date-range.component.html',\n    styleUrls: ['./search-date-range.component.scss'],\n    providers: [\n        { provide: DateAdapter, useClass: DateFnsAdapter, deps: [MAT_DATE_LOCALE] },\n        { provide: MAT_DATE_FORMATS, useValue: MAT_DATE_FNS_FORMATS }\n    ],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-date-range' }\n})\nexport class SearchDateRangeComponent implements OnInit, AfterViewInit {\n    private readonly userPreferencesService = inject(UserPreferencesService);\n    private readonly dateAdapter = inject<DateAdapter<DateFnsAdapter>>(DateAdapter);\n    private readonly dateFormatConfig = inject<MatDateFormats>(MAT_DATE_FORMATS);\n\n    @Input()\n    dateFormat = DEFAULT_DATE_DISPLAY_FORMAT;\n    @Input()\n    maxDate: string;\n    @Input()\n    field: string;\n    @Input()\n    set initialValue(value: SearchDateRange) {\n        if (value) {\n            this.form.patchValue(value);\n        }\n    }\n\n    @Input()\n    onReset$: Observable<void>;\n\n    @Output()\n    changed = new EventEmitter<Partial<SearchDateRange>>();\n    @Output()\n    valid = new EventEmitter<boolean>();\n\n    @ViewChild('adfDateRangeInput', { static: false, read: ElementRef }) dateRangeInput: ElementRef;\n\n    private readonly formBuilder = inject(FormBuilder);\n\n    form = this.formBuilder.group<SearchDateRange>({\n        dateRangeType: DateRangeType.ANY,\n        inLastValueType: InLastDateType.DAYS,\n        inLastValue: undefined,\n        betweenStartDate: undefined,\n        betweenEndDate: undefined\n    });\n    betweenStartDateFormControl = this.form.controls.betweenStartDate;\n    betweenEndDateFormControl = this.form.controls.betweenEndDate;\n    convertedMaxDate: Date;\n\n    readonly DateRangeType = DateRangeType;\n    readonly InLastDateType = InLastDateType;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    constructor() {\n        // Use effect to react to locale signal changes (must be in injection context)\n        effect(() => {\n            const locale = this.userPreferencesService.localeSignal();\n            this.dateAdapter.setLocale(DateFnsUtils.getLocaleFromString(locale));\n        });\n    }\n\n    readonly endDateValidator = (formControl: UntypedFormControl): { [key: string]: boolean } | null => {\n        if (isBefore(formControl.value, this.betweenStartDateFormControl.value) || isAfter(formControl.value, this.convertedMaxDate)) {\n            return {\n                invalidDate: true\n            };\n        }\n        return {};\n    };\n\n    ngOnInit(): void {\n        this.dateFormatConfig.display.dateInput = this.dateFormat;\n        this.convertedMaxDate = endOfDay(this.maxDate && this.maxDate !== 'today' ? parse(this.maxDate, this.dateFormat, new Date()) : new Date());\n        this.form.controls.dateRangeType.valueChanges\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe((dateRangeType) => this.updateValidators(dateRangeType));\n        this.form.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.onChange());\n        this.onReset$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.reset());\n    }\n\n    ngAfterViewInit() {\n        this.dateRangeInput.nativeElement.querySelectorAll('input').forEach((input: HTMLInputElement) => {\n            input.setAttribute('aria-haspopup', 'false');\n        });\n    }\n\n    private updateValidators(dateRangeType: DateRangeType) {\n        switch (dateRangeType) {\n            case DateRangeType.BETWEEN:\n                this.betweenStartDateFormControl.setValidators(Validators.required);\n                this.betweenEndDateFormControl.setValidators([Validators.required, this.endDateValidator]);\n                this.form.controls.inLastValue.clearValidators();\n                break;\n            case DateRangeType.IN_LAST:\n                this.form.controls.inLastValue.setValidators(Validators.required);\n                this.betweenStartDateFormControl.clearValidators();\n                this.betweenEndDateFormControl.clearValidators();\n                break;\n            default:\n                this.form.controls.inLastValue.clearValidators();\n                this.betweenStartDateFormControl.clearValidators();\n                this.betweenEndDateFormControl.clearValidators();\n                break;\n        }\n        this.betweenStartDateFormControl.updateValueAndValidity();\n        this.betweenEndDateFormControl.updateValueAndValidity();\n        this.form.controls.inLastValue.updateValueAndValidity();\n    }\n\n    private onChange(): void {\n        if (this.form.valid) {\n            this.changed.emit(this.form.value);\n        }\n        this.valid.emit(this.form.valid);\n    }\n\n    dateChanged(event: Event, formControl: UntypedFormControl) {\n        if (event?.target['value']?.trim()) {\n            const date = parse(event.target['value'], this.dateFormat, new Date());\n            if (!isValid(date)) {\n                formControl.setErrors({\n                    ...formControl.errors,\n                    required: false,\n                    invalidDate: true\n                });\n            } else {\n                formControl.setErrors({\n                    ...formControl.errors,\n                    invalidDate: false\n                });\n                formControl.setValue(date);\n            }\n        }\n    }\n\n    narrowDownAllowedCharacters(event: Event) {\n        if (parseInt((event.target as HTMLInputElement).value, 10) === 0) {\n            (event.target as HTMLInputElement).value = '';\n        } else {\n            (event.target as HTMLInputElement).value = (event.target as HTMLInputElement).value.replace(/\\D/g, '');\n        }\n    }\n\n    preventIncorrectNumberCharacters(event: KeyboardEvent): boolean {\n        switch (event.key) {\n            case '.':\n            case '-':\n            case 'e':\n            case '+':\n                return false;\n            case '0':\n                return !!(event.target as HTMLInputElement).value;\n            default:\n                return true;\n        }\n    }\n\n    reset(): void {\n        this.form.reset({\n            dateRangeType: DateRangeType.ANY,\n            inLastValueType: InLastDateType.DAYS,\n            inLastValue: undefined,\n            betweenStartDate: undefined,\n            betweenEndDate: undefined\n        });\n    }\n}\n","<div class=\"adf-search-date-range-container\" [formGroup]=\"form\">\n  <mat-radio-group formControlName=\"dateRangeType\">\n    <span class=\"adf-search-date-range-container-row\">\n      <mat-radio-button [value]=\"DateRangeType.ANY\" data-automation-id=\"date-range-anytime\">\n        {{ 'SEARCH.DATE_RANGE_ADVANCED.OPTIONS.ANYTIME' | translate }}\n      </mat-radio-button>\n    </span>\n    <fieldset\n        class=\"adf-search-date-range-container-row\"\n        aria-labelledby=\"adf-search-date-range-in-last-radio-button\">\n      <mat-radio-button [value]=\"DateRangeType.IN_LAST\" data-automation-id=\"date-range-in-last\">\n          <span id=\"adf-search-date-range-in-last-radio-button\">\n              {{ 'SEARCH.DATE_RANGE_ADVANCED.OPTIONS.IN_LAST' | translate }}\n          </span>\n      </mat-radio-button>\n      <mat-form-field class=\"adf-search-date-range-form-field adf-search-date-range-input-field\">\n        <mat-label id=\"adf-search-date-range-quantity-label\">{{ 'SEARCH.DATE_RANGE_ADVANCED.IN_LAST_LABELS.QUANTITY' | translate }}</mat-label>\n        <input matInput [attr.aria-label]=\"'SEARCH.DATE_RANGE_ADVANCED.ARIA_LABEL.NUMBER_INPUT' | translate\"\n               aria-labelledby=\"adf-search-date-range-quantity-label\"\n               type=\"number\" min=\"1\" formControlName=\"inLastValue\"\n               data-automation-id=\"date-range-in-last-input\" (input)=\"narrowDownAllowedCharacters($event)\"\n               (keydown)=\"preventIncorrectNumberCharacters($event)\">\n        <mat-error *ngIf=\"form.controls.inLastValue.errors?.required\">{{ 'SEARCH.DATE_RANGE_ADVANCED.ERROR.IN_LAST' | translate }}</mat-error>\n      </mat-form-field>\n      <mat-form-field class=\"adf-search-date-range-form-field adf-search-date-range-form-field-select\">\n        <mat-label>{{ 'SEARCH.SEARCH_PROPERTIES.ACCESSIBILITY.UNIT' | translate }}</mat-label>\n        <mat-select formControlName=\"inLastValueType\" data-automation-id=\"date-range-in-last-dropdown\">\n          <mat-option data-automation-id=\"date-range-in-last-option-days\" [value]=\"InLastDateType.DAYS\">{{ 'SEARCH.DATE_RANGE_ADVANCED.IN_LAST_LABELS.DAYS' | translate }}</mat-option>\n          <mat-option data-automation-id=\"date-range-in-last-option-weeks\" [value]=\"InLastDateType.WEEKS\">{{ 'SEARCH.DATE_RANGE_ADVANCED.IN_LAST_LABELS.WEEKS' | translate }}</mat-option>\n          <mat-option data-automation-id=\"date-range-in-last-option-months\" [value]=\"InLastDateType.MONTHS\">{{ 'SEARCH.DATE_RANGE_ADVANCED.IN_LAST_LABELS.MONTHS' | translate }}</mat-option>\n        </mat-select>\n      </mat-form-field>\n    </fieldset>\n    <fieldset\n        class=\"adf-search-date-range-container-row adf-search-date-range-container-row-date\"\n        aria-labelledby=\"adf-search-date-range-between-radio-button\">\n      <mat-radio-button [value]=\"DateRangeType.BETWEEN\" data-automation-id=\"date-range-between\">\n        <span id=\"adf-search-date-range-between-radio-button\">\n            {{ 'SEARCH.DATE_RANGE_ADVANCED.OPTIONS.BETWEEN' | translate }}\n        </span>\n      </mat-radio-button>\n      <mat-form-field class=\"adf-search-date-range-form-field\">\n        <mat-label\n            aria-hidden=\"true\"\n            id=\"adf-search-date-range-between-range-label\">\n            {{ 'SEARCH.DATE_RANGE_ADVANCED.BETWEEN_PLACEHOLDERS.DATE_RANGE' | translate }}\n        </mat-label>\n        <mat-date-range-input [rangePicker]=\"$any(picker)\" [max]=\"convertedMaxDate\" #adfDateRangeInput>\n          <input\n              matStartDate placeholder=\"{{ 'SEARCH.DATE_RANGE_ADVANCED.BETWEEN_PLACEHOLDERS.START_DATE' | translate }}\"\n              data-automation-id=\"date-range-between-start-input\"\n              [formControl]=\"betweenStartDateFormControl\"\n              [required]=\"true\"\n              (change)=\"dateChanged($event, betweenStartDateFormControl)\"\n              aria-labelledby=\"adf-search-date-range-between-range-label\"\n          >\n          <input\n              matEndDate\n              placeholder=\"{{ 'SEARCH.DATE_RANGE_ADVANCED.BETWEEN_PLACEHOLDERS.END_DATE' | translate }}\"\n              data-automation-id=\"date-range-between-end-input\"\n              [formControl]=\"betweenEndDateFormControl\"\n              [required]=\"true\"\n              (change)=\"dateChanged($event, betweenEndDateFormControl)\"\n              aria-labelledby=\"adf-search-date-range-between-range-label\">\n        </mat-date-range-input>\n        <mat-datepicker-toggle matSuffix [for]=\"picker\" data-automation-id=\"date-range-between-datepicker-toggle\" />\n        <mat-date-range-picker #picker />\n\n        <mat-error *ngIf=\"betweenStartDateFormControl.errors?.invalidDate\">{{ 'SEARCH.DATE_RANGE_ADVANCED.ERROR.START_DATE.INVALID_FORMAT' | translate: { requiredFormat: dateFormat } }}</mat-error>\n        <mat-error *ngIf=\"betweenStartDateFormControl.errors?.required\">{{ 'SEARCH.DATE_RANGE_ADVANCED.ERROR.START_DATE.REQUIRED' | translate }}</mat-error>\n        <mat-error *ngIf=\"betweenEndDateFormControl.errors?.invalidDate\">{{ 'SEARCH.DATE_RANGE_ADVANCED.ERROR.END_DATE.INVALID_FORMAT' | translate : { requiredFormat: dateFormat } }}</mat-error>\n        <mat-error *ngIf=\"betweenEndDateFormControl.errors?.required\">{{ 'SEARCH.DATE_RANGE_ADVANCED.ERROR.END_DATE.REQUIRED' | translate }}</mat-error>\n      </mat-form-field>\n    </fieldset>\n  </mat-radio-group>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { ReplaySubject, Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DateRangeType } from './search-date-range/date-range-type';\nimport { SearchDateRange } from './search-date-range/search-date-range';\nimport { SearchWidget } from '../../models/search-widget.interface';\nimport { SearchWidgetSettings } from '../../models/search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { InLastDateType } from './search-date-range/in-last-date-type';\nimport { TranslationService } from '@alfresco/adf-core';\nimport { endOfDay, endOfToday, format, formatISO, parseISO, startOfDay, startOfMonth, startOfWeek, subDays, subMonths, subWeeks } from 'date-fns';\nimport { CommonModule } from '@angular/common';\nimport { SearchFilterTabbedComponent } from '../search-filter-tabbed/search-filter-tabbed.component';\nimport { SearchDateRangeComponent } from './search-date-range/search-date-range.component';\nimport { SearchFilterTabDirective } from '../search-filter-tabbed/search-filter-tab.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nconst DEFAULT_DATE_DISPLAY_FORMAT = 'dd-MMM-yy';\n\n@Component({\n    selector: 'adf-search-date-range-tabbed',\n    imports: [CommonModule, SearchFilterTabbedComponent, SearchDateRangeComponent, SearchFilterTabDirective],\n    templateUrl: './search-date-range-tabbed.component.html',\n    styleUrls: ['./search-date-range-tabbed.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchDateRangeTabbedComponent implements SearchWidget, OnInit {\n    private readonly translateService = inject(TranslationService);\n\n    private value: { [key: string]: Partial<SearchDateRange> } = {};\n\n    private readonly queryMapByField = new Map<string, string>();\n    private readonly displayValueMapByField = new Map<string, string>();\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly resetSubject$ = new Subject<void>();\n\n    displayValue$ = new ReplaySubject<string>(1);\n    id: string;\n    startValue: SearchDateRange = {\n        dateRangeType: DateRangeType.ANY,\n        inLastValueType: InLastDateType.DAYS,\n        inLastValue: undefined,\n        betweenStartDate: undefined,\n        betweenEndDate: undefined\n    };\n    preselectedValues: { [key: string]: SearchDateRange } = {};\n    settings?: SearchWidgetSettings;\n    context?: SearchQueryBuilderService;\n    fields: string[];\n    tabsValidity: { [key: string]: boolean } = {};\n    combinedQuery: string;\n    combinedDisplayValue: string;\n    reset$ = this.resetSubject$.asObservable();\n\n    ngOnInit(): void {\n        this.fields = this.settings?.field.split(',').map((field) => field.trim());\n        this.setDefaultDateFormatSettings();\n        this.context.populateFilters\n            .asObservable()\n            .pipe(\n                map((filtersQueries) => filtersQueries?.[this.id]),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((filterQuery) => {\n                if (filterQuery) {\n                    Object.keys(filterQuery).forEach((field) => {\n                        filterQuery[field].betweenStartDate = filterQuery[field].betweenStartDate\n                            ? parseISO(filterQuery[field].betweenStartDate)\n                            : undefined;\n                        filterQuery[field].betweenEndDate = filterQuery[field].betweenEndDate\n                            ? parseISO(filterQuery[field].betweenEndDate)\n                            : undefined;\n                        this.preselectedValues[field] = filterQuery[field];\n                        this.onDateRangedValueChanged(filterQuery[field], field);\n                    });\n                    this.submitValues(false);\n                } else {\n                    this.reset(false);\n                }\n                this.context.filterLoaded.next();\n            });\n    }\n    private setDefaultDateFormatSettings() {\n        if (this.settings && !this.settings.dateFormat) {\n            this.settings.dateFormat = DEFAULT_DATE_DISPLAY_FORMAT;\n        }\n    }\n\n    getCurrentValue(): { [key: string]: Partial<SearchDateRange> } {\n        return this.value;\n    }\n\n    hasValidValue(): boolean {\n        return Object.values(this.tabsValidity).every((valid) => valid);\n    }\n\n    reset(updateContext = true) {\n        this.combinedQuery = '';\n        this.combinedDisplayValue = '';\n        this.startValue = {\n            ...this.startValue\n        };\n        this.fields.forEach((field) => {\n            this.context.filterRawParams[field] = undefined;\n        });\n        this.context.queryFragments[this.id] = undefined;\n        this.context.filterRawParams[this.id] = undefined;\n        this.submitValues(updateContext);\n        this.resetSubject$.next();\n    }\n\n    setValue(value: { [key: string]: SearchDateRange }) {\n        this.value = value;\n    }\n\n    getTabLabel(field: string): string {\n        return this.settings?.displayedLabelsByField?.[field] ? this.settings.displayedLabelsByField[field] : field;\n    }\n\n    submitValues(updateContext = true) {\n        this.context.queryFragments[this.id] = this.combinedQuery;\n        this.displayValue$.next(this.combinedDisplayValue);\n        if (this.id && this.context && updateContext) {\n            this.context.update();\n        }\n    }\n    onDateRangedValueChanged(value: Partial<SearchDateRange>, field: string) {\n        this.context.filterRawParams[this.id] ||= {};\n        this.context.filterRawParams[this.id][field] = value;\n        this.value[field] = value;\n        this.updateQuery(value, field);\n        this.updateDisplayValue(value, field);\n    }\n\n    private generateQuery(value: Partial<SearchDateRange>, field: string): string {\n        let query = '';\n        let startDate: Date;\n        let endDate: Date;\n        if (value.dateRangeType === DateRangeType.IN_LAST) {\n            if (value.inLastValue) {\n                const numValue = typeof value.inLastValue === 'number' ? value.inLastValue : parseInt(value.inLastValue, 10);\n                switch (value.inLastValueType) {\n                    case InLastDateType.DAYS:\n                        startDate = startOfDay(subDays(new Date(), numValue));\n                        break;\n                    case InLastDateType.WEEKS:\n                        startDate = startOfWeek(subWeeks(new Date(), numValue));\n                        break;\n                    case InLastDateType.MONTHS:\n                        startDate = startOfMonth(subMonths(new Date(), numValue));\n                        break;\n                    default:\n                        break;\n                }\n            }\n            endDate = endOfToday();\n        } else if (value.dateRangeType === DateRangeType.BETWEEN) {\n            if (value.betweenStartDate && value.betweenEndDate) {\n                startDate = startOfDay(value.betweenStartDate);\n                endDate = endOfDay(value.betweenEndDate);\n            }\n        }\n        if (startDate && endDate) {\n            query = `${field}:['${formatISO(startDate)}' TO '${formatISO(endDate)}']`;\n        }\n        return query;\n    }\n\n    private generateDisplayValue(value: Partial<SearchDateRange>): string {\n        let displayValue = '';\n        if (value.dateRangeType === DateRangeType.IN_LAST && value.inLastValue) {\n            displayValue = this.translateService.instant(`SEARCH.DATE_RANGE_ADVANCED.IN_LAST_DISPLAY_LABELS.${value.inLastValueType}`, {\n                value: value.inLastValue\n            });\n        } else if (value.dateRangeType === DateRangeType.BETWEEN && value.betweenStartDate && value.betweenEndDate) {\n            displayValue = `${format(startOfDay(value.betweenStartDate), this.settings.dateFormat)} - ${format(\n                endOfDay(value.betweenEndDate),\n                this.settings.dateFormat\n            )}`;\n        }\n        return displayValue;\n    }\n\n    private updateQuery(value: Partial<SearchDateRange>, field: string) {\n        this.combinedQuery = '';\n        this.queryMapByField.set(field, this.generateQuery(value, field));\n        this.queryMapByField.forEach((query: string) => {\n            if (query) {\n                this.combinedQuery = this.combinedQuery ? `${this.combinedQuery} AND ${query}` : `${query}`;\n            }\n        });\n    }\n\n    private updateDisplayValue(value: Partial<SearchDateRange>, field: string) {\n        this.combinedDisplayValue = '';\n        this.displayValueMapByField.set(field, this.generateDisplayValue(value));\n        this.displayValueMapByField.forEach((displayValue: string, fieldForDisplayLabel: string) => {\n            if (displayValue) {\n                const displayLabelForField = `${this.translateService\n                    .instant(this.getDisplayLabelForField(fieldForDisplayLabel))\n                    .toUpperCase()}: ${displayValue}`;\n                this.combinedDisplayValue = this.combinedDisplayValue\n                    ? `${this.combinedDisplayValue} ${displayLabelForField}`\n                    : `${displayLabelForField}`;\n            }\n        });\n    }\n\n    private getDisplayLabelForField(fieldForDisplayLabel: string): string {\n        return this.settings?.displayedLabelsByField?.[fieldForDisplayLabel]\n            ? this.settings.displayedLabelsByField[fieldForDisplayLabel]\n            : fieldForDisplayLabel;\n    }\n}\n","<adf-search-filter-tabbed>\n    <ng-container *ngFor=\"let field of fields\">\n        <adf-search-date-range\n            *adf-search-filter-tab=\"getTabLabel(field)\"\n            [dateFormat]=\"settings.dateFormat\"\n            [maxDate]=\"settings.maxDate\"\n            [field]=\"field\"\n            [initialValue]=\"preselectedValues[field]\"\n            [onReset$]=\"reset$\"\n            (changed)=\"onDateRangedValueChanged($event, field)\"\n            (valid)=\"tabsValidity[field]=$event\" />\n    </ng-container>\n</adf-search-filter-tabbed>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, Type } from '@angular/core';\nimport { SearchTextComponent } from '../components/search-text/search-text.component';\nimport { SearchRadioComponent } from '../components/search-radio/search-radio.component';\nimport { SearchSliderComponent } from '../components/search-slider/search-slider.component';\nimport { SearchNumberRangeComponent } from '../components/search-number-range/search-number-range.component';\nimport { SearchCheckListComponent } from '../components/search-check-list/search-check-list.component';\nimport { SearchDatetimeRangeComponent } from '../components/search-datetime-range/search-datetime-range.component';\nimport { SearchLogicalFilterComponent } from '../components/search-logical-filter/search-logical-filter.component';\nimport { SearchFilterAutocompleteChipsComponent } from '../components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component';\nimport { SearchPropertiesComponent } from '../components/search-properties/search-properties.component';\nimport { SearchDateRangeTabbedComponent } from '../components/search-date-range-tabbed/search-date-range-tabbed.component';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SearchFilterService {\n    /**\n     * Contains string-to-type mappings for registered widgets.\n     */\n    widgets: { [id: string]: Type<any> } = {\n        text: SearchTextComponent,\n        radio: SearchRadioComponent,\n        slider: SearchSliderComponent,\n        properties: SearchPropertiesComponent,\n        'number-range': SearchNumberRangeComponent,\n        'check-list': SearchCheckListComponent,\n        'datetime-range': SearchDatetimeRangeComponent,\n        'logical-filter': SearchLogicalFilterComponent,\n        'autocomplete-chips': SearchFilterAutocompleteChipsComponent,\n        'date-range': SearchDateRangeTabbedComponent\n    };\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { SearchRequest } from '@alfresco/js-api';\nimport { SearchConfigurationInterface } from '../../common/interfaces/search-configuration.interface';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SearchConfigurationService implements SearchConfigurationInterface {\n    /**\n     * Generates a request object with custom search parameters.\n     *\n     * @param searchTerm Term text to search for\n     * @param maxResults Maximum number of search results to show in a page\n     * @param skipCount The offset of the start of the page within the results list\n     * @returns Query body defined by the parameters\n     */\n    generateQueryBody(searchTerm: string, maxResults: number, skipCount: number): SearchRequest {\n        return {\n            query: {\n                query: searchTerm ? `'${searchTerm}*' OR name:'${searchTerm}*'` : searchTerm\n            },\n            include: ['path', 'allowableOperations'],\n            paging: {\n                maxItems: maxResults,\n                skipCount\n            },\n            filterQueries: [{ query: `TYPE:'cm:folder' OR TYPE:'cm:content'` }, { query: 'NOT cm:creator:System' }]\n        };\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchFilterList } from './search-filter-list.model';\nimport { FacetFieldBucket } from './facet-field-bucket.interface';\n\nexport interface FacetField {\n    field: string;\n    label: string;\n    mincount?: number;\n    limit?: number;\n    offset?: number;\n    prefix?: string;\n\n    buckets?: SearchFilterList<FacetFieldBucket>;\n    pageSize?: number;\n    currentPageSize?: number;\n    checked?: boolean;\n    type?: string;\n    settings?: FacetFieldSettings;\n    [propName: string]: any;\n}\n\nexport interface FacetFieldSettings {\n    /* allow the user to update search in every change */\n    allowUpdateOnChange?: boolean;\n    /* allow the user show/hide default search actions */\n    hideDefaultAction?: boolean;\n    /* a number to compare to other facets to determine the order in which they will appear */\n    facetOrder?: number;\n    /* the field used to sort the buckets */\n    bucketSortBy?: FacetBucketSortBy;\n    /* the direction in which the buckets are ordered */\n    bucketSortDirection?: FacetBucketSortDirection;\n}\n\nexport const FacetBucketSortBy = {\n    LABEL: 'LABEL',\n    COUNT: 'COUNT'\n} as const;\n\nexport type FacetBucketSortBy = (typeof FacetBucketSortBy)[keyof typeof FacetBucketSortBy];\n\nexport const FacetBucketSortDirection = {\n    ASCENDING: 'ASCENDING',\n    DESCENDING: 'DESCENDING'\n} as const;\n\nexport type FacetBucketSortDirection = (typeof FacetBucketSortDirection)[keyof typeof FacetBucketSortDirection];\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InjectionToken } from '@angular/core';\nimport { SearchConfiguration } from './models/search-configuration.interface';\n\nexport const ADF_SEARCH_CONFIGURATION =  new InjectionToken<SearchConfiguration>('Custom search configuration settings');\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { AppConfigService } from '@alfresco/adf-core';\nimport { SearchConfiguration } from '../models/search-configuration.interface';\nimport { BaseQueryBuilderService } from './base-query-builder.service';\nimport { ADF_SEARCH_CONFIGURATION } from '../search-configuration.token';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Injectable({ providedIn: 'root' })\nexport class SearchQueryBuilderService extends BaseQueryBuilderService {\n    private readonly configuration = inject<SearchConfiguration>(ADF_SEARCH_CONFIGURATION, { optional: true });\n\n    public isFilterServiceActive(): boolean {\n        return false;\n    }\n\n    constructor() {\n        const appConfig = inject(AppConfigService);\n        const alfrescoApiService = inject(AlfrescoApiService);\n\n        super(appConfig, alfrescoApiService);\n    }\n\n    public loadConfiguration(): SearchConfiguration {\n        return this.configuration || this.appConfig.get<SearchConfiguration>('search');\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { inject, Injectable } from '@angular/core';\nimport { NodePaging, QueriesApi, SearchRequest, ResultSetPaging, SearchApi } from '@alfresco/js-api';\nimport { Observable, Subject, from } from 'rxjs';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { SearchConfigurationService } from './search-configuration.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SearchService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly searchConfigurationService = inject(SearchConfigurationService);\n\n    dataLoaded = new Subject<ResultSetPaging>();\n\n    private _queriesApi: QueriesApi;\n    get queriesApi(): QueriesApi {\n        this._queriesApi = this._queriesApi ?? new QueriesApi(this.apiService.getInstance());\n        return this._queriesApi;\n    }\n\n    private _searchApi: SearchApi;\n    get searchApi(): SearchApi {\n        this._searchApi = this._searchApi ?? new SearchApi(this.apiService.getInstance());\n        return this._searchApi;\n    }\n\n    /**\n     * Gets a list of nodes that match the given search criteria.\n     *\n     * @param term Term to search for\n     * @param options Options for delivery of the search results\n     * @returns List of nodes resulting from the search\n     */\n    getNodeQueryResults(term: string, options?: SearchOptions): Observable<NodePaging> {\n        const promise = this.queriesApi.findNodes(term, options);\n\n        promise.then((nodePaging) => {\n            this.dataLoaded.next(nodePaging);\n        });\n\n        return from(promise);\n    }\n\n    /**\n     * Performs a search.\n     *\n     * @param searchTerm Term to search for\n     * @param maxResults Maximum number of items in the list of results\n     * @param skipCount Number of higher-ranked items to skip over in the list\n     * @returns List of search results\n     */\n    search(searchTerm: string, maxResults: number, skipCount: number): Observable<ResultSetPaging> {\n        const searchQuery = this.searchConfigurationService.generateQueryBody(searchTerm, maxResults, skipCount);\n        const promise = this.searchApi.search(searchQuery);\n\n        promise.then((nodePaging) => {\n            this.dataLoaded.next(nodePaging);\n        });\n\n        return from(promise);\n    }\n\n    /**\n     * Performs a search with its parameters supplied by a request object.\n     *\n     * @param queryBody Object containing the search parameters\n     * @returns List of search results\n     */\n    searchByQueryBody(queryBody: SearchRequest): Observable<ResultSetPaging> {\n        const promise = this.searchApi.search(queryBody);\n\n        promise.then((nodePaging) => {\n            this.dataLoaded.next(nodePaging);\n        });\n\n        return from(promise);\n    }\n}\n\nexport interface SearchOptions {\n    /** The number of entities that exist in the collection before those included in this list. */\n    skipCount?: number;\n\n    /** The maximum number of items to return in the list. */\n    maxItems?: number;\n\n    /** The id of the node to start the search from. Supports the aliases -my-, -root- and -shared-. */\n    rootNodeId?: string;\n\n    /** Restrict the returned results to only those of the given node type and its sub-types. */\n    nodeType?: string;\n\n    /**\n     * Return additional information about the node. The available optional fields are:\n     * `allowableOperations`, `aspectNames`, `isLink`, `isLocked`, `path` and `properties`.\n     */\n    include?: string[];\n\n    /**\n     * String array to control the order of the entities returned in a list. You can use this\n     * parameter to sort the list by one or more fields. Each field has a default sort order,\n     * which is normally ascending order (but see the JS-API docs to check if any fields used\n     * in a method have a descending default search order). To sort the entities in a specific\n     * order, you can use the \"ASC\" and \"DESC\" keywords for any field.\n     */\n    orderBy?: string[];\n\n    /**\n     * List of field names. You can use this parameter to restrict the fields returned within\n     * a response if, for example, you want to save on overall bandwidth. The list applies to a\n     * returned individual entity or entries within a collection. If the API method also supports\n     * the `include` parameter, then the fields specified in the include parameter are returned in\n     * addition to those specified in the fields parameter.\n     */\n    fields?: string[];\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { FacetBucketSortBy, FacetBucketSortDirection, FacetField } from '../models/facet-field.interface';\nimport { throwError } from 'rxjs';\nimport { SearchQueryBuilderService } from './search-query-builder.service';\nimport { TranslationService } from '@alfresco/adf-core';\nimport { SearchService } from './search.service';\nimport { catchError } from 'rxjs/operators';\nimport { GenericBucket, GenericFacetResponse, ResultSetContext, ResultSetPaging } from '@alfresco/js-api';\nimport { SearchFilterList } from '../models/search-filter-list.model';\nimport { FacetFieldBucket } from '../models/facet-field-bucket.interface';\nimport { CategoryService } from '../../category/services/category.service';\nimport { TabbedFacetField } from '../models/tabbed-facet-field.interface';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport interface SelectedBucket {\n    field: FacetField;\n    bucket: FacetFieldBucket;\n}\n\nconst DEFAULT_PAGE_SIZE: number = 5;\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SearchFacetFiltersService {\n    private readonly queryBuilder = inject(SearchQueryBuilderService);\n    private readonly searchService = inject(SearchService);\n    private readonly translationService = inject(TranslationService);\n    private readonly categoryService = inject(CategoryService);\n\n    /**\n     * All facet field items to be displayed in the component. These are updated according to the response.\n     * When a new search is performed, the already existing items are updated with the new bucket count values and\n     * the newly received items are added to the responseFacets.\n     */\n    responseFacets: FacetField[] = null;\n    /* tabbed facet incorporating creator and modifier facets */\n    tabbedFacet: TabbedFacetField = null;\n\n    /** shows the facet chips */\n    selectedBuckets: SelectedBucket[] = [];\n\n    private readonly facetQueriesPageSize = DEFAULT_PAGE_SIZE;\n    constructor() {\n        const queryBuilder = this.queryBuilder;\n\n        if (queryBuilder.config?.facetQueries) {\n            this.facetQueriesPageSize = queryBuilder.config.facetQueries.pageSize || DEFAULT_PAGE_SIZE;\n        }\n\n        this.queryBuilder.configUpdated.pipe(takeUntilDestroyed()).subscribe(() => {\n            this.selectedBuckets = [];\n            this.responseFacets = null;\n        });\n\n        this.queryBuilder.updated.pipe(takeUntilDestroyed()).subscribe((query) => this.queryBuilder.execute(true, query));\n\n        this.queryBuilder.executed.pipe(takeUntilDestroyed()).subscribe((resultSetPaging: ResultSetPaging) => {\n            this.onDataLoaded(resultSetPaging);\n            this.searchService.dataLoaded.next(resultSetPaging);\n        });\n    }\n\n    onDataLoaded(data: any) {\n        const context = data.list.context;\n\n        if (context) {\n            this.parseFacets(context);\n        } else {\n            this.responseFacets = null;\n        }\n    }\n\n    private parseFacets(context: ResultSetContext) {\n        this.parseFacetFields(context);\n        this.parseFacetIntervals(context);\n        this.parseFacetQueries(context);\n        this.sortFacets();\n        this.parseTabbedFacetField();\n    }\n\n    private parseFacetItems(context: ResultSetContext, configFacetFields: FacetField[], itemType: string) {\n        configFacetFields.forEach((facetField) => {\n            const responseField = this.findFacet(context, itemType, facetField.label);\n            const responseBuckets = this.getResponseBuckets(responseField, facetField).filter(this.getFilterByMinCount(facetField.mincount));\n            this.sortFacetBuckets(\n                responseBuckets,\n                facetField.settings?.bucketSortBy,\n                facetField.settings?.bucketSortDirection ?? FacetBucketSortDirection.ASCENDING\n            );\n            const alreadyExistingField = this.findResponseFacet(itemType, facetField.label);\n\n            if (facetField.field === 'cm:categories') {\n                this.loadCategoryNames(responseBuckets);\n            }\n\n            if (alreadyExistingField) {\n                const alreadyExistingBuckets = alreadyExistingField.buckets?.items || [];\n\n                this.updateExistingBuckets(responseField, responseBuckets, alreadyExistingField, alreadyExistingBuckets);\n            } else if (responseField) {\n                if (responseBuckets.length > 0) {\n                    const bucketList = new SearchFilterList<FacetFieldBucket>(responseBuckets, facetField.pageSize);\n                    bucketList.filter = this.getBucketFilterFunction(bucketList);\n\n                    if (!this.responseFacets) {\n                        this.responseFacets = [];\n                    }\n                    this.responseFacets.push({\n                        ...facetField,\n                        type: responseField.type || itemType,\n                        label: facetField.label,\n                        pageSize: facetField.pageSize | DEFAULT_PAGE_SIZE,\n                        currentPageSize: facetField.pageSize | DEFAULT_PAGE_SIZE,\n                        buckets: bucketList\n                    });\n                }\n            }\n        });\n    }\n\n    private parseTabbedFacetField() {\n        if (this.responseFacets) {\n            const fields = this.responseFacets.reduce((acc, facet) => `${acc},${facet.field}`, '');\n            const tabbedFacetField: TabbedFacetField = {\n                fields: ['creator', 'modifier'],\n                label: 'SEARCH.FILTER.PEOPLE',\n                facets: {}\n            };\n            this.extractCreatorAndModifier(tabbedFacetField, fields);\n        }\n    }\n\n    private extractCreatorAndModifier(tabbedFacet: TabbedFacetField, fields: string) {\n        if (fields.includes('creator') && fields.includes('modifier')) {\n            for (let i = this.responseFacets.length - 1; i >= 0; i--) {\n                if (this.responseFacets[i].field === 'creator' || this.responseFacets[i].field === 'modifier') {\n                    const removedFacet = this.responseFacets.splice(i, 1)[0];\n                    Object.defineProperty(tabbedFacet.facets, removedFacet.field, {\n                        value: removedFacet,\n                        writable: true\n                    });\n                }\n            }\n            this.tabbedFacet = tabbedFacet;\n        }\n    }\n\n    private parseFacetFields(context: ResultSetContext) {\n        const configFacetFields = this.queryBuilder.config.facetFields?.fields || [];\n        this.parseFacetItems(context, configFacetFields, 'field');\n    }\n\n    private parseFacetIntervals(context: ResultSetContext) {\n        const configFacetIntervals = this.queryBuilder.config.facetIntervals?.intervals || [];\n        this.parseFacetItems(context, configFacetIntervals, 'interval');\n    }\n\n    private parseFacetQueries(context: ResultSetContext) {\n        const facetQuerySetting = this.queryBuilder.config.facetQueries?.settings || {};\n        const configFacetQueries = this.queryBuilder.config.facetQueries?.queries || [];\n        const configGroups = configFacetQueries.reduce((acc, query) => {\n            const group = this.queryBuilder.getQueryGroup(query);\n            if (acc[group]) {\n                acc[group].push(query);\n            } else {\n                acc[group] = [query];\n            }\n            return acc;\n        }, []);\n\n        const minCount = this.queryBuilder.config.facetQueries?.mincount;\n        const minCountFilter = this.getFilterByMinCount(minCount);\n\n        Object.keys(configGroups).forEach((group) => {\n            const responseField = this.findFacet(context, 'query', group);\n            const responseBuckets = this.getResponseQueryBuckets(responseField, configGroups[group]).filter(minCountFilter);\n            this.sortFacetBuckets(\n                responseBuckets,\n                facetQuerySetting?.bucketSortBy,\n                facetQuerySetting.bucketSortDirection ?? FacetBucketSortDirection.ASCENDING\n            );\n            const alreadyExistingField = this.findResponseFacet('query', group);\n\n            if (alreadyExistingField) {\n                const alreadyExistingBuckets = alreadyExistingField.buckets?.items || [];\n\n                this.updateExistingBuckets(responseField, responseBuckets, alreadyExistingField, alreadyExistingBuckets);\n            } else if (responseField) {\n                if (responseBuckets.length > 0) {\n                    const bucketList = new SearchFilterList<FacetFieldBucket>(responseBuckets, this.facetQueriesPageSize);\n                    bucketList.filter = this.getBucketFilterFunction(bucketList);\n\n                    if (!this.responseFacets) {\n                        this.responseFacets = [];\n                    }\n                    this.responseFacets.push({\n                        field: group,\n                        type: responseField.type || 'query',\n                        label: group,\n                        pageSize: DEFAULT_PAGE_SIZE,\n                        currentPageSize: DEFAULT_PAGE_SIZE,\n                        buckets: bucketList,\n                        settings: facetQuerySetting\n                    });\n                }\n            }\n        });\n    }\n\n    private sortFacets() {\n        this.responseFacets?.sort((facet1, facet2) => (facet1.settings?.facetOrder ?? 0) - (facet2.settings?.facetOrder ?? 0));\n    }\n\n    private getResponseBuckets(responseField: GenericFacetResponse, configField: FacetField): FacetFieldBucket[] {\n        return (responseField?.buckets || []).map((respBucket) => {\n            respBucket['count'] = this.getCountValue(respBucket);\n            respBucket.filterQuery = respBucket.filterQuery || this.getCorrespondingFilterQuery(configField, respBucket.label);\n            return {\n                ...respBucket,\n                checked: false,\n                display: respBucket.display,\n                label: respBucket.label\n            } as FacetFieldBucket;\n        });\n    }\n\n    private getResponseQueryBuckets(responseField: GenericFacetResponse, configGroup: any): FacetFieldBucket[] {\n        return (configGroup || []).map((query) => {\n            const respBucket = (responseField?.buckets || []).find((bucket) => bucket.label === query.label) || {};\n\n            respBucket['count'] = this.getCountValue(respBucket);\n            return {\n                ...respBucket,\n                checked: false,\n                display: respBucket.display,\n                label: respBucket.label\n            };\n        });\n    }\n\n    private sortFacetBuckets(buckets: FacetFieldBucket[], sortBy: FacetBucketSortBy, sortDirection: FacetBucketSortDirection) {\n        switch (sortBy) {\n            case FacetBucketSortBy.LABEL:\n                buckets.sort((bucket1, bucket2) =>\n                    sortDirection === FacetBucketSortDirection.ASCENDING\n                        ? bucket1.label.localeCompare(bucket2.label)\n                        : bucket2.label.localeCompare(bucket1.label)\n                );\n                break;\n            case FacetBucketSortBy.COUNT:\n                buckets.sort((bucket1, bucket2) =>\n                    sortDirection === FacetBucketSortDirection.ASCENDING ? bucket1.count - bucket2.count : bucket2.count - bucket1.count\n                );\n                break;\n            default:\n                return;\n        }\n    }\n\n    private getCountValue(bucket: GenericBucket): number {\n        return (!!bucket && !!bucket.metrics && bucket.metrics[0]?.value?.count) || 0;\n    }\n\n    getBucketCountDisplay(bucket: FacetFieldBucket): string {\n        return bucket.count === null ? '' : `(${bucket.count})`;\n    }\n\n    private readonly getFilterByMinCount =\n        (minCountInput: number) =>\n        (bucket: FacetFieldBucket): boolean => {\n            let minCount = minCountInput;\n            if (minCount === undefined) {\n                minCount = 1;\n            }\n            return bucket.count >= minCount;\n        };\n\n    private getCorrespondingFilterQuery(configFacetItem: FacetField, bucketLabel: string): string {\n        let filterQuery = null;\n\n        if (configFacetItem.field && bucketLabel) {\n            if (configFacetItem.sets) {\n                const configSet = configFacetItem.sets.find((set) => bucketLabel === set.label);\n\n                if (configSet) {\n                    filterQuery = this.buildIntervalQuery(configFacetItem.field, configSet);\n                }\n            } else {\n                filterQuery = `${configFacetItem.field}:\"${bucketLabel}\"`;\n            }\n        }\n\n        return filterQuery;\n    }\n\n    private buildIntervalQuery(fieldName: string, interval: any): string {\n        const start = interval.start;\n        const end = interval.end;\n        const startLimit = interval.startInclusive === undefined || interval.startInclusive === true ? '[' : '<';\n        const endLimit = interval.endInclusive === undefined || interval.endInclusive === true ? ']' : '>';\n\n        return `${fieldName}:${startLimit}\"${start}\" TO \"${end}\"${endLimit}`;\n    }\n\n    private findFacet(context: ResultSetContext, itemType: string, fieldLabel: string): GenericFacetResponse {\n        return (context.facets || []).find((response) => response.type === itemType && response.label === fieldLabel) || {};\n    }\n\n    private findResponseFacet(itemType: string, fieldLabel: string): FacetField {\n        return (this.responseFacets || []).find((response) => response.type === itemType && response.label === fieldLabel);\n    }\n\n    private updateExistingBuckets(\n        responseField: GenericFacetResponse,\n        responseBuckets: FacetFieldBucket[],\n        alreadyExistingField: FacetField,\n        alreadyExistingBuckets: FacetFieldBucket[]\n    ) {\n        const bucketsToDelete = [];\n\n        alreadyExistingBuckets.forEach((bucket) => {\n            const responseBucket = (responseField?.buckets || []).find((respBucket) => respBucket.label === bucket.label);\n\n            if (!responseBucket) {\n                bucketsToDelete.push(bucket);\n            }\n            bucket.count = this.getCountValue(responseBucket);\n            return bucket;\n        });\n\n        const hasSelection = !!this.selectedBuckets.find(\n            (selBuckets) => alreadyExistingField.label === selBuckets.field.label && alreadyExistingField.type === selBuckets.field.type\n        );\n\n        if (!hasSelection && bucketsToDelete.length) {\n            bucketsToDelete.forEach((bucket) => {\n                alreadyExistingField.buckets.deleteItem(bucket);\n            });\n        }\n\n        responseBuckets.forEach((respBucket) => {\n            const existingBucket = alreadyExistingBuckets.find((oldBucket) => oldBucket.label === respBucket.label);\n\n            if (!existingBucket) {\n                alreadyExistingField.buckets.addItem(respBucket);\n            }\n        });\n    }\n\n    private readonly getBucketFilterFunction =\n        (bucketList: SearchFilterList<FacetFieldBucket>) =>\n        (bucket: FacetFieldBucket): boolean => {\n            if (bucket && bucketList.filterText) {\n                const pattern = (bucketList.filterText || '').toLowerCase();\n                const label = (this.translationService.instant(bucket.display) || this.translationService.instant(bucket.label)).toLowerCase();\n                return this.queryBuilder.config.filterWithContains ? label.indexOf(pattern) !== -1 : label.startsWith(pattern);\n            }\n            return true;\n        };\n\n    private loadCategoryNames(bucketList: FacetFieldBucket[]) {\n        bucketList.forEach((item) => {\n            const categoryId = item.label.split('/').pop();\n            this.categoryService\n                .getCategory(categoryId, { include: ['path'] })\n                .pipe(catchError((error) => throwError(error)))\n                .subscribe((category) => {\n                    const nextAfterGeneralPathPartIndex = 3;\n                    const pathSeparator = '/';\n                    const path = category.entry.path.split(pathSeparator).slice(nextAfterGeneralPathPartIndex).join('/');\n                    item.display = path ? `${path}/${category.entry.name}` : category.entry.name;\n                });\n        });\n    }\n\n    unselectFacetBucket(facetField: FacetField, bucket: FacetFieldBucket) {\n        if (bucket) {\n            bucket.checked = false;\n            this.queryBuilder.removeUserFacetBucket(facetField.field, bucket);\n            this.updateSelectedBuckets();\n            this.queryBuilder.update();\n        }\n    }\n\n    /* update adf-search-chip-list component view */\n    updateSelectedBuckets() {\n        if (this.responseFacets) {\n            this.selectedBuckets = [];\n            let facetFields = this.tabbedFacet === null ? [] : Object.keys(this.tabbedFacet?.fields).map((field) => this.tabbedFacet.facets[field]);\n            facetFields = [...facetFields, ...this.responseFacets];\n            for (const facetField of facetFields) {\n                if (facetField?.buckets) {\n                    this.selectedBuckets.push(\n                        ...this.queryBuilder\n                            .getUserFacetBuckets(facetField.field)\n                            .filter((bucket) => bucket.checked)\n                            .map((bucket) => ({ field: facetField, bucket }))\n                    );\n                }\n            }\n        } else {\n            this.selectedBuckets = [];\n        }\n    }\n\n    resetAllSelectedBuckets() {\n        this.responseFacets.forEach((facetField) => {\n            if (facetField?.buckets) {\n                for (const bucket of facetField.buckets.items) {\n                    bucket.checked = false;\n                    this.queryBuilder.removeUserFacetBucket(facetField.field, bucket);\n                }\n                this.updateSelectedBuckets();\n            }\n        });\n        this.queryBuilder.update();\n    }\n\n    resetQueryFragments() {\n        this.queryBuilder.queryFragments = {};\n        this.queryBuilder.resetToDefaults();\n    }\n\n    reset() {\n        this.responseFacets = [];\n        this.selectedBuckets = [];\n        this.tabbedFacet = null;\n        this.queryBuilder.resetToDefaults(true);\n        this.queryBuilder.update();\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './base-query-builder.service';\nexport * from './search-configuration.service';\nexport * from './search-facet-filters.service';\nexport * from './search-filter.service';\nexport * from './search-header-query-builder.service';\nexport * from './search-query-builder.service';\nexport * from './search.service';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    Component,\n    Input,\n    ViewChild,\n    ViewContainerRef,\n    OnInit,\n    OnDestroy,\n    ComponentRef,\n    SimpleChanges,\n    OnChanges,\n    Injector,\n    inject\n} from '@angular/core';\nimport { SearchFilterService } from '../../services/search-filter.service';\nimport { Observable } from 'rxjs';\nimport { SearchHeaderQueryBuilderService, SearchQueryBuilderService } from '../../services';\n\n@Component({\n    selector: 'adf-search-widget-container',\n    template: '<div #content></div>'\n})\nexport class SearchWidgetContainerComponent implements OnInit, OnDestroy, OnChanges {\n    private readonly searchFilterService = inject(SearchFilterService);\n    private readonly injector = inject(Injector);\n\n    @ViewChild('content', { read: ViewContainerRef, static: true })\n    content: ViewContainerRef;\n\n    @Input()\n    id: string;\n\n    @Input()\n    selector: string;\n\n    @Input()\n    settings: any;\n\n    @Input()\n    config: any;\n\n    @Input()\n    value: any;\n\n    @Input()\n    useHeaderQueryBuilder: boolean;\n\n    componentRef: ComponentRef<any>;\n\n    ngOnInit() {\n        const componentType = this.searchFilterService.widgets[this.selector];\n        if (componentType) {\n            this.content.clear();\n            this.componentRef = this.content.createComponent(componentType, { index: 0 });\n            this.setupWidget(this.componentRef);\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes['value']?.currentValue && this.componentRef?.instance) {\n            this.componentRef.instance.isActive = true;\n            this.componentRef.instance.setValue(changes['value'].currentValue);\n        }\n    }\n\n    private setupWidget(ref: ComponentRef<any>) {\n        if (ref?.instance) {\n            ref.instance.id = this.id;\n            ref.instance.settings = { ...this.settings };\n            if (this.useHeaderQueryBuilder) {\n                ref.instance.context = this.injector.get(SearchHeaderQueryBuilderService);\n            } else {\n                ref.instance.context = this.injector.get(SearchQueryBuilderService);\n            }\n            if (this.value) {\n                ref.instance.isActive = true;\n                ref.instance.startValue = this.value;\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.componentRef) {\n            this.componentRef.destroy();\n            this.componentRef = null;\n        }\n    }\n\n    applyInnerWidget() {\n        this.componentRef.instance.submitValues();\n    }\n\n    setValue(currentValue: string | any) {\n        this.componentRef.instance.isActive = true;\n        this.componentRef.instance.setValue(currentValue);\n    }\n\n    hasValueSelected() {\n        return this.componentRef.instance.hasValidValue();\n    }\n\n    getCurrentValue() {\n        return this.componentRef.instance.getCurrentValue();\n    }\n\n    getDisplayValue(): Observable<string> | null {\n        if (!this.componentRef?.instance) {\n            return null;\n        }\n        return this.componentRef.instance.displayValue$;\n    }\n\n    resetInnerWidget() {\n        if (this.componentRef?.instance) {\n            this.componentRef.instance.reset();\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';\nimport { DataColumn, TranslationService } from '@alfresco/adf-core';\nimport { SearchWidgetContainerComponent } from '../search-widget-container/search-widget-container.component';\nimport { SearchHeaderQueryBuilderService } from '../../services/search-header-query-builder.service';\nimport { SearchCategory } from '../../models/search-category.interface';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { FilterSearch } from '../../models/filter-search.interface';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconModule, MatIconRegistry } from '@angular/material/icon';\n\n@Component({\n    selector: 'adf-search-filter-container',\n    imports: [CommonModule, MatButtonModule, MatMenuModule, MatIconModule, SearchWidgetContainerComponent, TranslatePipe, MatDialogModule],\n    templateUrl: './search-filter-container.component.html',\n    styleUrls: ['./search-filter-container.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFilterContainerComponent implements OnInit {\n    private readonly searchFilterQueryBuilder = inject(SearchHeaderQueryBuilderService);\n    private readonly translationService = inject(TranslationService);\n    private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n    private readonly matIconRegistry = inject(MatIconRegistry);\n    private readonly sanitizer = inject(DomSanitizer);\n\n    /** The column the filter will be applied on. */\n    @Input({ required: true })\n    col: DataColumn;\n\n    /** The column the filter will be applied on. */\n    @Input()\n    value: any;\n\n    /** Emitted when a filter value is selected */\n    @Output()\n    filterChange: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild(SearchWidgetContainerComponent)\n    widgetContainer: SearchWidgetContainerComponent;\n\n    @ViewChild('filterContainer')\n    filterContainer: ElementRef;\n\n    category: SearchCategory;\n    focusTrap: ConfigurableFocusTrap;\n    initialValue: any;\n\n    ngOnInit() {\n        this.registerFilterIcon();\n        this.category = this.searchFilterQueryBuilder.getCategoryForColumn(this.col.key);\n        this.initialValue = this.value?.[this.category?.id];\n    }\n\n    onKeyPressed(event: KeyboardEvent, menuTrigger: MatMenuTrigger) {\n        if (event.key === 'Enter' && this.widgetContainer.selector !== 'check-list') {\n            this.onApply();\n            menuTrigger.closeMenu();\n        }\n    }\n\n    onApply() {\n        if (this.widgetContainer.hasValueSelected()) {\n            this.searchFilterQueryBuilder.setActiveFilter(this.category.id, this.widgetContainer.getCurrentValue());\n            this.filterChange.emit();\n            this.widgetContainer.applyInnerWidget();\n        } else {\n            this.resetSearchFilter();\n        }\n    }\n\n    onClearButtonClick(event: Event) {\n        event.stopPropagation();\n        this.resetSearchFilter();\n    }\n\n    resetSearchFilter() {\n        this.widgetContainer.resetInnerWidget();\n        this.searchFilterQueryBuilder.removeActiveFilter(this.category.id);\n        this.filterChange.emit();\n    }\n\n    getTooltipTranslation(columnTitle: string): string {\n        if (!columnTitle) {\n            columnTitle = 'SEARCH.SEARCH_HEADER.TYPE';\n        }\n        return this.translationService.instant('SEARCH.SEARCH_HEADER.FILTER_BY', { category: this.translationService.instant(columnTitle) });\n    }\n\n    isActive(): boolean {\n        return this.searchFilterQueryBuilder.getActiveFilters().findIndex((f: FilterSearch) => f.key === this.category.id) > -1;\n    }\n\n    onMenuOpen() {\n        if (this.filterContainer && !this.focusTrap) {\n            this.focusTrap = this.focusTrapFactory.create(this.filterContainer.nativeElement);\n            this.focusTrap.focusInitialElement();\n        }\n    }\n\n    onClosed() {\n        this.focusTrap.destroy();\n        this.focusTrap = null;\n    }\n\n    private registerFilterIcon(): void {\n        const filterIcon = this.sanitizer.bypassSecurityTrustResourceUrl('./assets/images/custom_filter.svg');\n        const filterIconFilled = this.sanitizer.bypassSecurityTrustResourceUrl('./assets/images/custom_filter_filled.svg');\n        this.matIconRegistry.addSvgIconInNamespace('adf', 'custom_filter', filterIcon);\n        this.matIconRegistry.addSvgIconInNamespace('adf', 'custom_filter_filled', filterIconFilled);\n    }\n}\n","<div *ngIf=\"!!category\" class=\"adf-filter\">\n    <button\n        mat-icon-button\n        [matMenuTriggerFor]=\"filter\"\n        data-automation-id=\"filter-menu-button\"\n        #menuTrigger=\"matMenuTrigger\"\n        (click)=\"$event.stopPropagation()\"\n        (menuOpened)=\"onMenuOpen()\"\n        (keyup.enter)=\"$event.stopPropagation()\"\n        class=\"adf-filter-button\"\n        [attr.aria-label]=\"isActive() ? getTooltipTranslation(col?.title) + ' (' + ('SEARCH.SEARCH_HEADER.ACTIVE_FILTER' | translate) + ')' : getTooltipTranslation(col?.title)\"\n        [title]=\"getTooltipTranslation(col?.title)\"\n    >\n        <mat-icon\n            [svgIcon]=\"isActive() ? 'adf:custom_filter_filled' : 'adf:custom_filter'\"\n            [ngClass]=\"{ 'adf-filter-icon-active': isActive() || menuTrigger.menuOpen }\"\n            class=\"adf-filter-icon\"\n            aria-hidden=\"true\"\n        />\n    </button>\n\n    <mat-menu #filter=\"matMenu\" class=\"adf-filter-menu adf-search-filter-menu\" (closed)=\"onClosed()\">\n        <div #filterContainer role=\"menuitem\" tabindex=\"0\" (keydown.tab)=\"$event.stopPropagation()\">\n            <div (click)=\"$event.stopPropagation()\" role=\"button\" tabindex=\"0\" (keyup.enter)=\"$event.stopPropagation()\" class=\"adf-filter-container\">\n                <div class=\"adf-filter-title\">{{ category?.name | translate }}</div>\n                <adf-search-widget-container\n                    (keypress)=\"onKeyPressed($event, menuTrigger)\"\n                    [id]=\"category?.id\"\n                    [selector]=\"category?.component?.selector\"\n                    [settings]=\"category?.component?.settings\"\n                    [value]=\"initialValue\"\n                    [useHeaderQueryBuilder]=\"true\"\n                />\n            </div>\n            <mat-dialog-actions class=\"adf-filter-actions\">\n                <button\n                    mat-button\n                    id=\"clear-filter-button\"\n                    [attr.aria-label]=\"'SEARCH.SEARCH_HEADER.CLEAR' | translate\"\n                    (click)=\"onClearButtonClick($event)\"\n                >\n                    {{ 'SEARCH.SEARCH_HEADER.CLEAR' | translate | uppercase }}\n                </button>\n                <button\n                    mat-button\n                    color=\"primary\"\n                    id=\"apply-filter-button\"\n                    class=\"adf-filter-apply-button\"\n                    [attr.aria-label]=\"'SEARCH.SEARCH_HEADER.APPLY' | translate\"\n                    (click)=\"onApply()\"\n                >\n                    {{ 'SEARCH.SEARCH_HEADER.APPLY' | translate | uppercase }}\n                </button>\n            </mat-dialog-actions>\n        </div>\n    </mat-menu>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { DataSorting, HeaderFilterTemplateDirective, PaginationModel } from '@alfresco/adf-core';\nimport { SearchHeaderQueryBuilderService } from '../../../search/services/search-header-query-builder.service';\nimport { FilterSearch } from './../../../search/models/filter-search.interface';\nimport { SearchFilterContainerComponent } from '../../../search/components/search-filter-container/search-filter-container.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport type { NodePaging } from '@alfresco/js-api';\n\n@Component({\n    selector: 'adf-filter-header',\n    imports: [HeaderFilterTemplateDirective, SearchFilterContainerComponent],\n    templateUrl: './filter-header.component.html'\n})\nexport class FilterHeaderComponent implements OnInit, OnChanges {\n    /** (optional) Initial filter value to sort . */\n    @Input()\n    value: any = {};\n\n    /** The id of the current folder of the document list. */\n    @Input({ required: true })\n    currentFolderId: string;\n\n    /** Pagination model from the document list */\n    @Input()\n    pagination: PaginationModel;\n\n    /** Sorting configuration from the document list */\n    @Input()\n    sorting: DataSorting[];\n\n    /** Emitted when a filter value is selected */\n    @Output()\n    filterSelection: EventEmitter<FilterSearch[]> = new EventEmitter();\n\n    /** Emitted when search results are ready */\n    @Output()\n    searchResultsReady: EventEmitter<NodePaging> = new EventEmitter();\n\n    /** Emitted when filters are cleared and document list should reload */\n    @Output()\n    filtersCleared: EventEmitter<void> = new EventEmitter();\n\n    private readonly searchFilterQueryBuilder = inject(SearchHeaderQueryBuilderService);\n    private readonly destroyRef = inject(DestroyRef);\n\n    readonly isFilterServiceActive = this.searchFilterQueryBuilder.isFilterServiceActive();\n\n    ngOnInit() {\n        this.searchFilterQueryBuilder.executed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((resultSetPaging) => {\n            // ResultSetPaging is structurally compatible with NodePaging for the document list\n            // The data adapter can handle both types\n            this.searchResultsReady.emit(resultSetPaging as unknown as NodePaging);\n        });\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes['currentFolderId']?.currentValue) {\n            this.resetFilterHeader();\n            this.configureSearchParent(changes['currentFolderId'].currentValue);\n        }\n\n        if (changes['pagination']?.currentValue) {\n            const pagination = changes['pagination'].currentValue as PaginationModel;\n            this.searchFilterQueryBuilder.setupCurrentPagination(pagination.maxItems, pagination.skipCount);\n        }\n\n        if (changes['sorting']?.currentValue) {\n            const sorting = changes['sorting'].currentValue as DataSorting[];\n            this.searchFilterQueryBuilder.setSorting(sorting);\n        }\n    }\n\n    onFilterSelectionChange() {\n        this.filterSelection.emit(this.searchFilterQueryBuilder.getActiveFilters());\n        if (this.searchFilterQueryBuilder.isNoFilterActive()) {\n            this.filtersCleared.emit();\n        }\n    }\n\n    resetFilterHeader() {\n        this.searchFilterQueryBuilder.resetActiveFilters();\n    }\n\n    private configureSearchParent(currentFolderId: string) {\n        if (this.searchFilterQueryBuilder.isCustomSourceNode(currentFolderId)) {\n            this.searchFilterQueryBuilder.getNodeIdForCustomSource(currentFolderId).subscribe((node) => {\n                this.initSearchHeader(node.id);\n            });\n        } else {\n            this.initSearchHeader(currentFolderId);\n        }\n    }\n\n    private initSearchHeader(currentFolderId: string) {\n        if (this.value) {\n            Object.keys(this.value).forEach((key) => {\n                this.searchFilterQueryBuilder.setActiveFilter(key, this.value[key]);\n\n                const operator = this.searchFilterQueryBuilder.getOperatorForFilterId(key) || 'OR';\n                this.searchFilterQueryBuilder.filterRawParams[key] = this.value[key];\n                this.searchFilterQueryBuilder.queryFragments[key] = Array.isArray(this.value[key])\n                    ? this.value[key].join(` ${operator} `)\n                    : this.value[key];\n            });\n        }\n        this.searchFilterQueryBuilder.setCurrentRootFolderId(currentFolderId);\n    }\n}\n","@if (isFilterServiceActive) {\n    <adf-header-filter-template>\n        <ng-template let-col>\n            <adf-search-filter-container\n                [col]=\"col\"\n                [value]=\"value\"\n                (filterChange)=\"onFilterSelectionChange()\" />\n        </ng-template>\n    </adf-header-filter-template>\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable rxjs/no-subject-value */\n/* eslint-disable @typescript-eslint/naming-convention */\n\nimport {\n    AppConfigService,\n    ColumnsSelectorComponent,\n    CustomEmptyContentTemplateDirective,\n    CustomLoadingContentTemplateDirective,\n    CustomNoPermissionTemplateDirective,\n    DataCellEvent,\n    DataColumn,\n    DataColumnListComponent,\n    DataRow,\n    DataRowActionEvent,\n    DataSorting,\n    DataTableComponent,\n    DataTableSchema,\n    DataTableService,\n    EmptyListComponent,\n    IconModule,\n    LoadingContentTemplateDirective,\n    MainMenuDataTableTemplateDirective,\n    NoContentTemplateDirective,\n    NoPermissionTemplateDirective,\n    PaginatedComponent,\n    PaginationModel,\n    RequestPaginationModel,\n    ShowHeaderMode,\n    ThumbnailService,\n    UserPreferencesService,\n    UserPreferenceValues\n} from '@alfresco/adf-core';\nimport { Node, NodeEntry, NodePaging, NodesApi, Pagination } from '@alfresco/js-api';\nimport {\n    AfterContentInit,\n    Component,\n    ContentChild,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    HostListener,\n    inject,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BehaviorSubject, of, Subject } from 'rxjs';\nimport { ContentService, NodesApiService } from '../../common';\nimport { FilterSearch } from '../../search';\nimport { RowFilter } from '../data/row-filter.model';\nimport { ShareDataRow } from '../data/share-data-row.model';\nimport { ShareDataTableAdapter } from '../data/share-datatable-adapter';\nimport { ContentActionModel } from '../models/content-action.model';\nimport { DocumentLoaderNode } from '../models/document-folder.model';\nimport { PermissionStyleModel } from '../models/permissions-style.model';\nimport { presetsDefaultModel } from '../models/preset.model';\nimport { DocumentListService } from '../services/document-list.service';\nimport { LockService } from '../services/lock.service';\nimport { FileAutoDownloadComponent } from './file-auto-download/file-auto-download.component';\nimport { NodeEntityEvent, NodeEntryEvent } from './node.event';\nimport { CommonModule } from '@angular/common';\nimport { FilterHeaderComponent } from './filter-header/filter-header.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nconst BYTES_TO_MB_CONVERSION_VALUE = 1048576;\n\n@Component({\n    selector: 'adf-document-list',\n    imports: [\n        CommonModule,\n        DataTableComponent,\n        FilterHeaderComponent,\n        NoContentTemplateDirective,\n        EmptyListComponent,\n        TranslatePipe,\n        NoPermissionTemplateDirective,\n        IconModule,\n        LoadingContentTemplateDirective,\n        MatProgressSpinnerModule,\n        MainMenuDataTableTemplateDirective,\n        ColumnsSelectorComponent\n    ],\n    templateUrl: './document-list.component.html',\n    styleUrls: ['./document-list.component.scss'],\n    providers: [DataTableService],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-document-list' }\n})\nexport class DocumentListComponent extends DataTableSchema implements OnInit, OnChanges, AfterContentInit, PaginatedComponent {\n    private readonly documentListService = inject(DocumentListService);\n    private readonly elementRef = inject(ElementRef);\n    private readonly appConfig: AppConfigService;\n    private readonly userPreferencesService = inject(UserPreferencesService);\n    private readonly contentService = inject(ContentService);\n    private readonly thumbnailService = inject(ThumbnailService);\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n    private readonly nodeService = inject(NodesApiService);\n    private readonly dataTableService = inject(DataTableService);\n    private readonly lockService = inject(LockService);\n    private readonly dialog = inject(MatDialog);\n\n    static SINGLE_CLICK_NAVIGATION: string = 'click';\n    static DOUBLE_CLICK_NAVIGATION: string = 'dblclick';\n\n    DEFAULT_PAGINATION: Pagination = new Pagination({\n        hasMoreItems: false,\n        skipCount: 0,\n        maxItems: 25,\n        totalItems: 0\n    });\n\n    DEFAULT_SORTING: DataSorting[] = [new DataSorting('name', 'asc'), new DataSorting('isFolder', 'desc')];\n\n    @ContentChild(DataColumnListComponent)\n    declare columnList: DataColumnListComponent;\n\n    @ContentChild(CustomLoadingContentTemplateDirective)\n    customLoadingContent: CustomLoadingContentTemplateDirective;\n\n    @ContentChild(CustomNoPermissionTemplateDirective)\n    customNoPermissionsTemplate: CustomNoPermissionTemplateDirective;\n\n    @ContentChild(CustomEmptyContentTemplateDirective)\n    customNoContentTemplate: CustomEmptyContentTemplateDirective;\n\n    /** Include additional information about the node in the server request. For example: association, isLink, isLocked and others. */\n    @Input()\n    includeFields: string[];\n\n    /**\n     * Filters the Node list using the *where* condition of the REST API\n     * (for example, isFolder=true). See the REST API documentation for more information.\n     */\n    @Input()\n    where: string;\n\n    /**\n     * Specifies additional filters to apply (joined with **AND**). Applied for recent files only.\n     */\n    @Input()\n    filters: string[];\n\n    /**\n     * Define a set of CSS styles to apply depending on the permission\n     * of the user on that node. See the Permission Style model\n     * page for further details and examples.\n     */\n    @Input()\n    permissionsStyle: PermissionStyleModel[] = [];\n\n    /** The default route for all the location-based columns (if declared). */\n    @Input()\n    locationFormat: string = '/';\n\n    /** Toggles navigation to folder content or file preview */\n    @Input()\n    navigate: boolean = true;\n\n    /** Toggles the header */\n    @Input()\n    showHeader: ShowHeaderMode = ShowHeaderMode.Data;\n\n    /**\n     * User interaction for folder navigation or file preview.\n     * Valid values are \"click\" and \"dblclick\". Default value: \"dblclick\"\n     */\n    @Input()\n    navigationMode: string = DocumentListComponent.DOUBLE_CLICK_NAVIGATION; // click|dblclick\n\n    /** Show document thumbnails rather than icons */\n    @Input()\n    thumbnails: boolean = false;\n\n    /**\n     * Row selection mode. Can be null, `single` or `multiple`. For `multiple` mode,\n     * you can use Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for multiple rows.\n     */\n    @Input()\n    selectionMode: string = 'single'; // null|single|multiple\n\n    /** Toggles multiselect mode */\n    @Input()\n    multiselect: boolean = false;\n\n    /** Toggles content actions for each row */\n    @Input()\n    contentActions: boolean = false;\n\n    /** Position of the content actions dropdown menu. Can be set to \"left\" or \"right\". */\n    @Input()\n    contentActionsPosition: string = 'right'; // left|right\n\n    /** Toggles context menus for each row */\n    @Input()\n    contextMenuActions: boolean = false;\n\n    /** Custom image for empty folder. Default value: './assets/images/empty_doc_lib.svg' */\n    @Input()\n    emptyFolderImageUrl: string = './assets/images/empty_doc_lib.svg';\n\n    /**\n     * When true, this enables you to drop files directly into subfolders shown\n     * as items in the list or into another file to trigger updating it's version.\n     * When false, the dropped file will be added to the\n     * current folder (ie, the one containing all the items shown in the list).\n     * See the Upload directive for further details about how the file drop is\n     * handled.\n     */\n    @Input()\n    allowDropFiles: boolean = false;\n\n    /**\n     * Defines default sorting. The format is an array of 2 strings `[key, direction]`\n     * i.e. `['name', 'desc']` or `['name', 'asc']`. Set this value only if you want to\n     * override the default sorting detected by the component based on columns.\n     */\n    @Input()\n    sorting: string[] | DataSorting = ['name', 'asc'];\n\n    /**\n     * Defines default sorting. The format is an array of strings `[key direction, otherKey otherDirection]`\n     * i.e. `['name desc', 'nodeType asc']` or `['name asc']`. Set this value if you want a base\n     * rule to be added to the sorting apart from the one driven by the header.\n     */\n    @Input()\n    additionalSorting: DataSorting = new DataSorting('isFolder', 'desc');\n\n    /**\n     * Defines sorting mode. Can be either `client` (items in the list\n     * are sorted client-side) or `server` (the ordering supplied by the\n     * server is used without further client-side sorting).\n     * Note that the `server` option *does not* request the server to sort the data\n     * before delivering it.\n     */\n    @Input()\n    sortingMode: 'server' | 'client' = 'server';\n\n    /**\n     * The inline style to apply to every row. See\n     * the Angular NgStyle\n     * docs for more details and usage examples.\n     */\n    @Input()\n    rowStyle: { [key: string]: any };\n\n    /** The CSS class to apply to every row */\n    @Input()\n    rowStyleClass: string;\n\n    /**\n     * Toggles the loading state and animated spinners for the component. Used in\n     * combination with `navigate=false` to perform custom navigation and loading\n     * state indication.\n     */\n    @Input()\n    loading: boolean = false;\n\n    @Input()\n    _rowFilter: RowFilter | null = null;\n\n    /**\n     * Custom function to choose whether to show or hide rows.\n     * See the [Row Filter Model](row-filter.model.md) page for\n     * more information.\n     */\n    @Input()\n    set rowFilter(rowFilter: RowFilter) {\n        this._rowFilter = rowFilter;\n        if (this.data) {\n            this.data.setFilter(this._rowFilter);\n            if (this.currentFolderId) {\n                this.reload();\n            }\n        }\n    }\n\n    get rowFilter(): RowFilter {\n        return this._rowFilter;\n    }\n\n    /**\n     * Custom function to choose image file paths to show. See the\n     * [Image Resolver Model](image-resolver.model.md) page for\n     * more information.\n     */\n    @Input()\n    imageResolver: any | null = null;\n\n    /** Toggles the sticky header mode. */\n    @Input()\n    stickyHeader: boolean = false;\n\n    /** Toggles the header filters mode. */\n    @Input()\n    headerFilters: boolean = false;\n\n    /** Initial value for filter. */\n    @Input()\n    filterValue: any;\n\n    /** The ID of the folder node to display or a reserved string alias for special sources */\n    @Input()\n    currentFolderId: string = null;\n\n    /**\n     * Array of nodes to be pre-selected. All nodes in the\n     * array are pre-selected in multi selection mode, but only the first node\n     * is pre-selected in single selection mode.\n     */\n    @Input()\n    preselectNodes: NodeEntry[] = [];\n\n    /** The Document list will show all the nodes contained in the NodePaging entity */\n    @Input()\n    node: NodePaging = null;\n\n    /** Default value is stored in the user preference settings. Use this only if you are not using pagination. */\n    @Input()\n    maxItems: number = this.DEFAULT_PAGINATION.maxItems;\n\n    /** Key of columns preset set in extension.json  */\n    @Input()\n    columnsPresetKey?: string;\n\n    /** Sets columns visibility for DataTableSchema */\n    @Input()\n    set setColumnsVisibility(columnsVisibility: { [columnId: string]: boolean } | undefined) {\n        this.columnsVisibility = columnsVisibility;\n    }\n\n    /** Sets columns width for DataTableSchema */\n    @Input()\n    set setColumnsWidths(columnsWidths: { [columnId: string]: number } | undefined) {\n        this.columnsWidths = columnsWidths;\n    }\n\n    /** Sets columns order for DataTableSchema */\n    @Input()\n    set setColumnsOrder(columnsOrder: string[] | undefined) {\n        this.columnsOrder = columnsOrder;\n    }\n\n    /** Limit of possible visible columns, including \"$thumbnail\" column if provided */\n    @Input()\n    maxColumnsVisible?: number;\n\n    /** Enables column resizing for datatable */\n    @Input()\n    isResizingEnabled = false;\n\n    /** Enables blur when resizing datatable columns */\n    @Input()\n    blurOnResize = true;\n\n    /** Display checkboxes in datatable rows on hover only */\n    @Input()\n    displayCheckboxesOnHover = false;\n\n    /** Display drag and drop hint. */\n    @Input()\n    displayDragAndDropHint = true;\n\n    /**\n     * Indicates if the data is provided externally.\n     * If true the component won't fetch data itself\n     */\n    @Input()\n    isDataProvidedExternally = false;\n\n    /** Emitted when the user clicks a list node */\n    @Output()\n    nodeClick = new EventEmitter<NodeEntityEvent>();\n\n    /** Emitted when the user double-clicks a list node */\n    @Output()\n    nodeDblClick = new EventEmitter<NodeEntityEvent>();\n\n    /** Emitted when the current display folder changes */\n    @Output()\n    folderChange = new EventEmitter<NodeEntryEvent>();\n\n    /**\n     * Emitted when the user acts upon files with either single or double click\n     * (depends on `navigation-mode`). Useful for integration with the\n     * Viewer component.\n     */\n    @Output()\n    preview = new EventEmitter<NodeEntityEvent>();\n\n    /** Emitted when the Document List has loaded all items and is ready for use */\n    @Output()\n    ready = new EventEmitter<NodePaging>();\n\n    /** Emitted when the API fails to get the Document List data */\n    @Output()\n    error = new EventEmitter<any>();\n\n    /** Emitted when the node selection change */\n    @Output()\n    nodeSelected = new EventEmitter<NodeEntry[]>();\n\n    /** Emitted when a filter value is selected */\n    @Output()\n    filterSelection = new EventEmitter<FilterSearch[]>();\n\n    /** Emitted when column widths change */\n    @Output()\n    columnsWidthChanged = new EventEmitter<{ [columnId: string]: number } | undefined>();\n\n    /** Emitted when columns visibility change */\n    @Output()\n    columnsVisibilityChanged = new EventEmitter<{ [columnId: string]: boolean } | undefined>();\n\n    /** Emitted when columns order change */\n    @Output()\n    columnsOrderChanged = new EventEmitter<string[] | undefined>();\n\n    /** Emitted when the selected row items count in the table changed. */\n    @Output()\n    selectedItemsCountChanged = new EventEmitter<number | undefined>();\n\n    @ViewChild('dataTable', { static: true })\n    dataTable: DataTableComponent;\n\n    actions: ContentActionModel[] = [];\n    contextActionHandler = new Subject();\n    data: ShareDataTableAdapter;\n    noPermission: boolean = false;\n    selection = new Array<NodeEntry>();\n    $folderNode: Subject<Node> = new Subject<Node>();\n    allowFiltering: boolean = true;\n    orderBy: string[] = null;\n    preselectedRows: DataRow[] = [];\n\n    // @deprecated 3.0.0\n    folderNode: Node;\n\n    private readonly _pagination: PaginationModel = this.DEFAULT_PAGINATION;\n    pagination: BehaviorSubject<PaginationModel> = new BehaviorSubject<PaginationModel>(this.DEFAULT_PAGINATION);\n    sortingSubject: BehaviorSubject<DataSorting[]> = new BehaviorSubject<DataSorting[]>(this.DEFAULT_SORTING);\n\n    private rowMenuCache: { [key: string]: ContentActionModel[] } = {};\n    private loadingTimeout: any;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    private _nodesApi: NodesApi;\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.alfrescoApiService.getInstance());\n        return this._nodesApi;\n    }\n\n    constructor() {\n        const appConfig = inject(AppConfigService);\n\n        super('default', presetsDefaultModel);\n        this.appConfig = appConfig;\n\n        this.nodeService.nodeUpdated.pipe(takeUntilDestroyed()).subscribe((node) => {\n            this.dataTableService.rowUpdate.next({ id: node.id, obj: { entry: node } });\n        });\n\n        this.userPreferencesService\n            .select(UserPreferenceValues.PaginationSize)\n            .pipe(takeUntilDestroyed())\n            .subscribe((pagSize) => {\n                this.maxItems = this._pagination.maxItems = pagSize;\n            });\n    }\n\n    getContextActions(node: NodeEntry) {\n        if (node?.entry) {\n            const actions = this.getNodeActions(node);\n            if (actions && actions.length > 0) {\n                return actions.map((currentAction: ContentActionModel) => ({\n                    model: currentAction,\n                    node,\n                    subject: this.contextActionHandler\n                }));\n            }\n        }\n        return null;\n    }\n\n    private getDefaultSorting(): DataSorting {\n        let defaultSorting: DataSorting;\n        if (Array.isArray(this.sorting)) {\n            const [key, direction] = this.sorting;\n            defaultSorting = new DataSorting(key, direction);\n        } else {\n            defaultSorting = new DataSorting(this.sorting.key, this.sorting.direction);\n        }\n\n        return defaultSorting;\n    }\n\n    isMobile(): boolean {\n        return !!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n    }\n\n    isEmpty() {\n        return !this.data || this.data.getRows().length === 0;\n    }\n\n    ngOnInit() {\n        this.rowMenuCache = {};\n        this.loadLayoutPresets();\n        this.data = new ShareDataTableAdapter(\n            this.thumbnailService,\n            this.contentService,\n            null,\n            this.getDefaultSorting(),\n            this.sortingMode,\n            this.allowDropFiles\n        );\n        this.data.thumbnails = this.thumbnails;\n        this.data.permissionsStyle = this.permissionsStyle;\n\n        if (this._rowFilter) {\n            this.data.setFilter(this._rowFilter);\n        }\n\n        if (this.imageResolver) {\n            this.data.setImageResolver(this.imageResolver);\n        }\n\n        this.contextActionHandler.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((val) => this.contextActionCallback(val));\n\n        this.enforceSingleClickNavigationForMobile();\n        if (this.filterValue && Object.keys(this.filterValue).length > 0) {\n            this.showHeader = ShowHeaderMode.Always;\n        }\n        if (this.columnsPresetKey) {\n            this.setPresetKey(this.columnsPresetKey);\n        }\n\n        this.documentListService.reload$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this.resetSelection();\n            this.reload();\n        });\n\n        this.documentListService.resetSelection$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this.resetSelection();\n        });\n    }\n\n    ngAfterContentInit() {\n        if (this.columnList) {\n            this.columnList.columns.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n                this.createColumns();\n                this.data.setColumns(this.columns);\n            });\n        }\n        this.createDatatableSchema();\n        this.data.setColumns(this.columns);\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (!changes['preselectNodes']) {\n            this.resetSelection();\n        }\n\n        if (Array.isArray(this.sorting)) {\n            const [key, direction] = this.sorting;\n            this.orderBy = this.buildOrderByArray(key, direction);\n        } else {\n            this.orderBy = this.buildOrderByArray(this.sorting.key, this.sorting.direction);\n        }\n\n        if (this.data) {\n            this.data.thumbnails = this.thumbnails;\n        }\n\n        if (changes.sortingMode && !changes.sortingMode.firstChange && this.data) {\n            this.data.sortingMode = changes.sortingMode.currentValue;\n        }\n\n        if (changes.sorting && !changes.sorting.firstChange && this.data) {\n            const newValue = changes.sorting.currentValue;\n            if (newValue && newValue.length > 0) {\n                const [key, direction] = newValue;\n                this.data.setSorting(new DataSorting(key, direction));\n            }\n        }\n\n        if (this.currentFolderId && changes['currentFolderId']?.currentValue !== changes['currentFolderId']?.previousValue) {\n            !this.isDataProvidedExternally && this.loadFolder();\n        }\n\n        if (this.data) {\n            if (changes.node?.currentValue) {\n                const merge = this._pagination ? this._pagination.merge : false;\n                this.data.loadPage(changes.node.currentValue, merge, null);\n                this.preserveExistingSelection();\n                this.onPreselectNodes();\n                this.onDataReady(changes.node.currentValue);\n            } else if (changes.imageResolver) {\n                this.data.setImageResolver(changes.imageResolver.currentValue);\n            }\n        }\n    }\n\n    reload(hideLoadingSpinner = false) {\n        this.resetSelection();\n        this.reloadWithoutResettingSelection(hideLoadingSpinner);\n    }\n\n    reloadWithoutResettingSelection(hideLoadingSpinner = false) {\n        if (this.node) {\n            if (this.data) {\n                this.data.loadPage(this.node, this._pagination.merge, null);\n                this.preserveExistingSelection();\n            }\n            this.onPreselectNodes();\n            this.syncPagination();\n            this.onDataReady(this.node);\n        } else {\n            this.loadFolder(hideLoadingSpinner);\n        }\n    }\n\n    contextActionCallback(action) {\n        if (action) {\n            this.executeContentAction(action.node, action.model);\n        }\n    }\n\n    getNodeActions(node: NodeEntry | any): ContentActionModel[] {\n        if (node?.entry) {\n            let target = null;\n\n            if (node.entry.isFile) {\n                target = 'document';\n            } else if (node.entry.isFolder) {\n                target = 'folder';\n            }\n\n            if (target) {\n                const actions = this.rowMenuCache[node.entry.id];\n                if (actions) {\n                    actions.forEach((action) => {\n                        this.refreshAction(action, node);\n                    });\n                    return actions;\n                }\n\n                const actionsByTarget = this.actions\n                    .filter((entry) => {\n                        const isVisible = typeof entry.visible === 'function' ? entry.visible(node) : entry.visible;\n\n                        return isVisible && entry.target.toLowerCase() === target;\n                    })\n                    .map((action) => new ContentActionModel(action));\n\n                actionsByTarget.forEach((action) => {\n                    this.refreshAction(action, node);\n                });\n\n                this.rowMenuCache[node.entry.id] = actionsByTarget;\n                return actionsByTarget;\n            }\n        }\n\n        return [];\n    }\n\n    private refreshAction(action: ContentActionModel, node: NodeEntry) {\n        action.disabled = this.isActionDisabled(action, node);\n        action.visible = this.isActionVisible(action, node);\n    }\n\n    private isActionVisible(action: ContentActionModel, node: NodeEntry): boolean {\n        if (typeof action.visible === 'function') {\n            return action.visible(node);\n        }\n\n        return action.visible;\n    }\n\n    private isActionDisabled(action: ContentActionModel, node: NodeEntry): boolean {\n        if (typeof action.disabled === 'function') {\n            return action.disabled(node);\n        }\n\n        if (\n            (action.permission && action.disableWithNoPermission && !this.contentService.hasAllowableOperations(node.entry, action.permission)) ||\n            this.lockService.isLocked(node.entry)\n        ) {\n            return true;\n        } else {\n            return action.disabled;\n        }\n    }\n\n    @HostListener('contextmenu', ['$event'])\n    onShowContextMenu(e?: Event) {\n        if (e && this.contextMenuActions) {\n            e.preventDefault();\n        }\n    }\n\n    navigateTo(node: Node | string): boolean {\n        if (typeof node === 'string') {\n            this.resetNewFolderPagination();\n            this.currentFolderId = node;\n            this.filterValue = {};\n            this.folderChange.emit(new NodeEntryEvent({ id: node } as Node));\n            this.reload();\n            return true;\n        } else {\n            if (this.canNavigateFolder(node)) {\n                this.resetNewFolderPagination();\n                this.currentFolderId = this.getNodeFolderDestinationId(node);\n                this.filterValue = {};\n                this.folderChange.emit(new NodeEntryEvent({ id: this.currentFolderId } as Node));\n                this.reload();\n                return true;\n            }\n        }\n        return false;\n    }\n\n    private getNodeFolderDestinationId(node: Node) {\n        return this.isLinkFolder(node) ? node.properties['cm:destination'] : node.id;\n    }\n\n    private isLinkFolder(node: Node) {\n        return node.nodeType === 'app:folderlink' && node.properties?.['cm:destination'];\n    }\n\n    private updateCustomSourceData(nodeId: string): void {\n        this.currentFolderId = nodeId;\n    }\n\n    /**\n     * Invoked when executing content action for a document or folder.\n     *\n     * @param node Node to be the context of the execution.\n     * @param action Action to be executed against the context.\n     */\n    executeContentAction(node: NodeEntry, action: ContentActionModel) {\n        if (node?.entry && action) {\n            const handlerSub = typeof action.handler === 'function' ? action.handler(node, this, action.permission) : of(true);\n\n            if (typeof action.execute === 'function' && handlerSub) {\n                handlerSub.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => action.execute(node));\n            }\n        }\n    }\n\n    private setLoadingState(value: boolean) {\n        if (this.data?.getRows().length > 0) {\n            if (value) {\n                clearTimeout(this.loadingTimeout);\n                this.loadingTimeout = setTimeout(() => {\n                    this.loading = true;\n                }, 1000);\n            } else {\n                clearTimeout(this.loadingTimeout);\n                this.loading = false;\n            }\n        } else {\n            clearTimeout(this.loadingTimeout);\n            this.loading = value;\n        }\n    }\n\n    loadFolder(hideLoadingSpinner = false) {\n        if (!hideLoadingSpinner) {\n            this.setLoadingState(true);\n        }\n\n        if (this.documentListService.isCustomSourceService(this.currentFolderId)) {\n            this.updateCustomSourceData(this.currentFolderId);\n        }\n\n        this.documentListService\n            .loadFolderByNodeId(this.currentFolderId, this._pagination, this.includeFields, this.where, this.orderBy, this.filters)\n            .subscribe({\n                next: (documentNode: DocumentLoaderNode) => {\n                    if (documentNode.currentNode) {\n                        this.folderNode = documentNode.currentNode.entry;\n                        this.$folderNode.next(documentNode.currentNode.entry);\n                    }\n                    this.onPageLoaded(documentNode.children);\n                },\n                error: (err) => {\n                    this.handleError(err);\n                }\n            });\n    }\n\n    resetSelection() {\n        this.dataTable.resetSelection();\n        this.selection = [];\n        this.noPermission = false;\n    }\n\n    onPageLoaded(nodePaging: NodePaging) {\n        if (nodePaging) {\n            if (this.data) {\n                this.data.loadPage(nodePaging, this._pagination.merge, this.allowDropFiles);\n                this.preserveExistingSelection();\n            }\n            this.onPreselectNodes();\n            this.setLoadingState(false);\n            this.onDataReady(nodePaging);\n        }\n    }\n\n    onSortingChanged(event: CustomEvent) {\n        this.orderBy = this.buildOrderByArray(event.detail.sortingKey, event.detail.direction);\n        this.sorting = [event.detail.sortingKey, event.detail.direction];\n        this.sortingSubject.next([this.additionalSorting, event.detail]);\n\n        if (this.sortingMode === 'server') {\n            this.reload();\n        }\n    }\n\n    private buildOrderByArray(currentKey: string, currentDirection: string): string[] {\n        return [`${this.additionalSorting.key} ${this.additionalSorting.direction}`, `${currentKey} ${currentDirection}`];\n    }\n\n    onPreviewFile(node: NodeEntry) {\n        if (node) {\n            const sizeInMB = node.entry?.content?.sizeInBytes / BYTES_TO_MB_CONVERSION_VALUE;\n            const fileAutoDownloadFlag: boolean = this.appConfig.get('viewer.enableFileAutoDownload', true);\n            const sizeThreshold: number = this.appConfig.get('viewer.fileAutoDownloadSizeThresholdInMB', 15);\n\n            if (fileAutoDownloadFlag && sizeInMB && sizeInMB > sizeThreshold) {\n                this.dialog.open(FileAutoDownloadComponent, { disableClose: true, data: node });\n            } else {\n                this.preview.emit(new NodeEntityEvent(node));\n            }\n        }\n    }\n\n    onColumnsVisibilityChange(columns: DataColumn[]) {\n        this.columnsVisibility = columns.reduce((visibleColumnsMap, column) => {\n            if (column.isHidden !== undefined) {\n                visibleColumnsMap[column.id] = !column.isHidden;\n            }\n\n            return visibleColumnsMap;\n        }, {});\n\n        this.createColumns();\n        this.data.setColumns(this.columns);\n        this.columnsVisibilityChanged.emit(this.columnsVisibility);\n    }\n\n    onColumnOrderChange(columnsWithNewOrder: DataColumn[]) {\n        this.columnsOrder = columnsWithNewOrder.map((column) => column.id);\n        this.createColumns();\n        this.columnsOrderChanged.emit(this.columnsOrder);\n    }\n\n    onColumnsWidthChange(columns: DataColumn[]) {\n        const newColumnsWidths = columns.reduce((widthsColumnsMap, column) => {\n            if (column.width) {\n                widthsColumnsMap[column.id] = Math.ceil(column.width);\n            }\n            return widthsColumnsMap;\n        }, {});\n\n        this.columnsWidths = { ...this.columnsWidths, ...newColumnsWidths };\n        this.createColumns();\n        this.columnsWidthChanged.emit(this.columnsWidths);\n    }\n\n    onSelectedItemsCountChanged(count: number) {\n        this.selectedItemsCountChanged.emit(count);\n    }\n\n    onNodeClick(nodeEntry: NodeEntry) {\n        const domEvent = new CustomEvent('node-click', {\n            detail: {\n                sender: this,\n                node: nodeEntry\n            },\n            bubbles: true\n        });\n\n        this.elementRef.nativeElement.dispatchEvent(domEvent);\n\n        const event = new NodeEntityEvent(nodeEntry);\n        this.nodeClick.emit(event);\n\n        if (!event.defaultPrevented) {\n            if (this.navigate && this.navigationMode === DocumentListComponent.SINGLE_CLICK_NAVIGATION) {\n                this.executeActionClick(nodeEntry);\n            }\n        }\n    }\n\n    onNodeDblClick(nodeEntry: NodeEntry) {\n        const domEvent = new CustomEvent('node-dblclick', {\n            detail: {\n                sender: this,\n                node: nodeEntry\n            },\n            bubbles: true\n        });\n        this.elementRef.nativeElement.dispatchEvent(domEvent);\n\n        const event = new NodeEntityEvent(nodeEntry);\n        this.nodeDblClick.emit(event);\n\n        if (!event.defaultPrevented) {\n            if (this.navigate && this.navigationMode === DocumentListComponent.DOUBLE_CLICK_NAVIGATION) {\n                this.executeActionClick(nodeEntry);\n            }\n        }\n    }\n\n    executeActionClick(nodeEntry: NodeEntry) {\n        if (nodeEntry?.entry) {\n            if (nodeEntry.entry.isFile) {\n                this.onPreviewFile(nodeEntry);\n            }\n\n            if (nodeEntry.entry.isFolder) {\n                this.navigateTo(nodeEntry.entry);\n            }\n\n            if (nodeEntry.entry['guid']) {\n                const options = {\n                    include: this.includeFields\n                };\n\n                this.nodesApi.getNode(nodeEntry.entry['guid'], options).then((node: NodeEntry) => {\n                    this.navigateTo(node.entry);\n                });\n            }\n        }\n    }\n\n    onNodeSelect(event: { row: ShareDataRow; selection: Array<ShareDataRow> }) {\n        this.selection = event.selection.map((entry) => entry.node);\n        const domEvent = new CustomEvent('node-select', {\n            detail: {\n                node: event.row ? event.row.node : null,\n                selection: this.selection\n            },\n            bubbles: true\n        });\n        this.nodeSelected.emit(this.selection);\n        this.elementRef.nativeElement.dispatchEvent(domEvent);\n    }\n\n    onNodeUnselect(event: { row: ShareDataRow; selection: Array<ShareDataRow> }) {\n        this.selection = event.selection.map((entry) => entry.node);\n        const domEvent = new CustomEvent('node-unselect', {\n            detail: {\n                node: event.row ? event.row.node : null,\n                selection: this.selection\n            },\n            bubbles: true\n        });\n        this.nodeSelected.emit(this.selection);\n        this.elementRef.nativeElement.dispatchEvent(domEvent);\n    }\n\n    onShowRowContextMenu(event: DataCellEvent) {\n        if (this.contextMenuActions) {\n            const args = event.value;\n            const node = args.row.node;\n            if (node) {\n                args.actions = this.getContextActions(node) || [];\n            }\n        }\n    }\n\n    onShowRowActionsMenu(event: DataCellEvent) {\n        if (this.contentActions) {\n            const args = event.value;\n            const node = args.row.node;\n            if (node) {\n                args.actions = this.getNodeActions(node) || [];\n            }\n        }\n    }\n\n    onExecuteRowAction(event: DataRowActionEvent) {\n        if (this.contentActions) {\n            const args = event.value;\n            const node = args.row.node;\n            const action = args.action;\n            this.executeContentAction(node, action);\n        }\n    }\n\n    private enforceSingleClickNavigationForMobile(): void {\n        if (this.isMobile()) {\n            this.navigationMode = DocumentListComponent.SINGLE_CLICK_NAVIGATION;\n        }\n    }\n\n    canNavigateFolder(node: Node): boolean {\n        let canNavigateFolder: boolean = false;\n\n        if (node?.isFolder) {\n            canNavigateFolder = true;\n        }\n\n        return canNavigateFolder;\n    }\n\n    private onDataReady(nodePaging: NodePaging) {\n        this.ready.emit(nodePaging);\n        this.pagination.next(nodePaging.list.pagination);\n        this.setLoadingState(false);\n    }\n\n    updatePagination(requestPaginationModel: RequestPaginationModel) {\n        this._pagination.maxItems = requestPaginationModel.maxItems;\n        this._pagination.skipCount = requestPaginationModel.skipCount;\n        this.reload(requestPaginationModel.merge);\n    }\n\n    private syncPagination() {\n        this.node.list.pagination.maxItems = this._pagination.maxItems;\n        this.node.list.pagination.skipCount = this._pagination.skipCount;\n    }\n\n    onFilterSelectionChange(activeFilters: FilterSearch[]) {\n        this.filterSelection.emit(activeFilters);\n    }\n\n    onFilterSearchResultsReady(nodePaging: NodePaging) {\n        this.node = nodePaging;\n        this.reload();\n    }\n\n    onFiltersCleared() {\n        this.node = null;\n        this.reload();\n    }\n\n    resetNewFolderPagination() {\n        this._pagination.skipCount = 0;\n        this._pagination.maxItems = this.maxItems;\n    }\n\n    private handleError(err: any) {\n        if (err.message) {\n            try {\n                if (JSON.parse(err.message).error.statusCode === 403) {\n                    this.noPermission = true;\n                }\n            } catch {\n                /* empty */\n            }\n        }\n        this.setLoadingState(false);\n        this.error.emit(err);\n    }\n\n    getPreselectedNodesBasedOnSelectionMode(): NodeEntry[] {\n        return this.hasPreselectedNodes() ? (this.isSingleSelectionMode() ? [this.preselectNodes[0]] : this.preselectNodes) : [];\n    }\n\n    getPreselectedRowsBasedOnSelectionMode(): DataRow[] {\n        return this.hasPreselectedRows() ? (this.isSingleSelectionMode() ? [this.preselectedRows[0]] : this.preselectedRows) : [];\n    }\n\n    getSelectionBasedOnSelectionMode(): DataRow[] {\n        return this.hasPreselectedRows()\n            ? this.isSingleSelectionMode()\n                ? [this.preselectedRows[0]]\n                : this.data.getSelectedRows()\n            : this.data.getSelectedRows();\n    }\n\n    onPreselectNodes() {\n        if (this.hasPreselectedNodes()) {\n            this.preselectRowsOfPreselectedNodes();\n            const preselectedRows = this.getPreselectedRowsBasedOnSelectionMode();\n            const selection = this.data.getSelectedRows() as ShareDataRow[];\n\n            for (const node of preselectedRows) {\n                this.dataTable.selectRow(node, true);\n            }\n            this.onNodeSelect({ row: undefined, selection });\n        }\n    }\n\n    private preserveExistingSelection() {\n        if (this.isMultipleSelectionMode()) {\n            for (const selection of this.selection) {\n                const rowOfSelection = this.data.getRowByNodeId(selection.entry.id);\n                if (rowOfSelection) {\n                    rowOfSelection.isSelected = true;\n                }\n            }\n        }\n    }\n\n    preselectRowsOfPreselectedNodes() {\n        this.preselectedRows = [];\n        const preselectedNodes = this.getPreselectedNodesBasedOnSelectionMode();\n\n        preselectedNodes.forEach((preselectedNode: NodeEntry) => {\n            const rowOfPreselectedNode = this.data.getRowByNodeId(preselectedNode.entry.id);\n            if (rowOfPreselectedNode) {\n                rowOfPreselectedNode.isSelected = true;\n                this.preselectedRows.push(rowOfPreselectedNode);\n            }\n        });\n    }\n\n    unselectRowFromNodeId(nodeId: string) {\n        const rowToUnselect = this.data.getRowByNodeId(nodeId);\n        if (rowToUnselect?.isSelected) {\n            rowToUnselect.isSelected = false;\n            this.dataTable.selectRow(rowToUnselect, false);\n            const selection = this.getSelectionBasedOnSelectionMode() as ShareDataRow[];\n            this.onNodeUnselect({ row: undefined, selection });\n        }\n    }\n\n    private isSingleSelectionMode(): boolean {\n        return this.selectionMode === 'single';\n    }\n\n    private isMultipleSelectionMode(): boolean {\n        return this.selectionMode === 'multiple';\n    }\n\n    private hasPreselectedNodes(): boolean {\n        return this.preselectNodes?.length > 0;\n    }\n\n    private hasPreselectedRows(): boolean {\n        return this.preselectedRows?.length > 0;\n    }\n}\n","<adf-datatable\n    #dataTable\n    [selectionMode]=\"selectionMode\"\n    [data]=\"data\"\n    [actions]=\"contentActions\"\n    [actionsPosition]=\"contentActionsPosition\"\n    [multiselect]=\"multiselect\"\n    [contextMenu]=\"contextMenuActions\"\n    [rowStyle]=\"rowStyle\"\n    [rowStyleClass]=\"rowStyleClass\"\n    [showMainDatatableActions]=\"true\"\n    [loading]=\"loading\"\n    [noPermission]=\"noPermission\"\n    [showHeader]=\"showHeader\"\n    [rowMenuCacheEnabled]=\"false\"\n    [stickyHeader]=\"stickyHeader\"\n    [allowFiltering]=\"allowFiltering\"\n    [isResizingEnabled]=\"isResizingEnabled\"\n    [blurOnResize]=\"blurOnResize\"\n    [displayCheckboxesOnHover]=\"displayCheckboxesOnHover\"\n    (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n    (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n    (executeRowAction)=\"onExecuteRowAction($event)\"\n    (columnsWidthChanged)=\"onColumnsWidthChange($event)\"\n    (columnOrderChanged)=\"onColumnOrderChange($event)\"\n    (selectedItemsCountChanged)=\"onSelectedItemsCountChanged($event)\"\n    (rowClick)=\"onNodeClick($event.value?.node)\"\n    (rowDblClick)=\"onNodeDblClick($event.value?.node)\"\n    (row-select)=\"onNodeSelect($any($event).detail)\"\n    (row-unselect)=\"onNodeUnselect($any($event).detail)\"\n    (sorting-changed)=\"onSortingChanged($any($event))\"\n    [class.adf-datatable-gallery-thumbnails]=\"data.thumbnails\">\n\n    <div *ngIf=\"headerFilters\">\n        <adf-filter-header\n            [currentFolderId]=\"currentFolderId\"\n            [value]=\"filterValue\"\n            [pagination]=\"pagination | async\"\n            [sorting]=\"sortingSubject | async\"\n            (filterSelection)=\"onFilterSelectionChange($event)\"\n            (searchResultsReady)=\"onFilterSearchResultsReady($event)\"\n            (filtersCleared)=\"onFiltersCleared()\" />\n    </div>\n\n    <adf-no-content-template>\n        <ng-template>\n            <adf-empty-list *ngIf=\"!customNoContentTemplate\">\n                <div class=\"adf-empty-list_template adf-empty-folder\">\n                    <div class=\"adf-empty-folder-this-space-is-empty\">{{'ADF-DOCUMENT-LIST.EMPTY.HEADER' | translate}}</div>\n                    <ng-container *ngIf=\"displayDragAndDropHint\">\n                        <div class=\"adf-empty-folder-drag-drop\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate }}</div>\n                        <div class=\"adf-empty-folder-any-files-here-to-add\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.SUBTITLE' | translate }}</div>\n                    </ng-container>\n                    <img [alt]=\"'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate\" class=\"adf-empty-folder-image\" [src]=\"emptyFolderImageUrl\">\n                </div>\n            </adf-empty-list>\n            <ng-content select=\"adf-custom-empty-content-template, empty-folder-content\" />\n        </ng-template>\n    </adf-no-content-template>\n\n    <adf-no-permission-template>\n        <ng-template>\n            <div class=\"adf-no-permission__template\" *ngIf=\"!customNoPermissionsTemplate\">\n                <mat-icon adf-icon=\"error\" />\n                <p class=\"adf-no-permission__template--text\">{{ 'ADF-DOCUMENT-LIST.NO_PERMISSION' | translate }}</p>\n            </div>\n            <ng-content select=\"adf-custom-no-permission-template, no-permission-content\" />\n        </ng-template>\n    </adf-no-permission-template>\n\n    <adf-loading-content-template>\n        <ng-template>\n            <div class=\"adf-document-list-loading-container\" *ngIf=\"!customLoadingContent\">\n                <mat-progress-spinner\n                    id=\"adf-document-list-loading\"\n                    class=\"adf-document-list-loading-margin\"\n                    [attr.aria-label]=\"'ADF-DOCUMENT-LIST.LOADER_LABEL' | translate\"\n                    [color]=\"'primary'\"\n                    [mode]=\"'indeterminate'\" />\n            </div>\n            <ng-content select=\"adf-custom-loading-content-template\" />\n        </ng-template>\n    </adf-loading-content-template>\n\n    <adf-main-menu-datatable-template>\n        <ng-template let-mainMenuTrigger>\n            <adf-datatable-column-selector\n              [columns]=\"columns\"\n              [mainMenuTrigger]=\"mainMenuTrigger\"\n              [columnsSorting]=\"false\"\n              [maxColumnsVisible]=\"maxColumnsVisible\"\n              (submitColumnsVisibility)=\"onColumnsVisibilityChange($event)\" />\n        </ng-template>\n    </adf-main-menu-datatable-template>\n\n</adf-datatable>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    Component,\n    DestroyRef,\n    EventEmitter,\n    inject,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { MatSelect, MatSelectModule } from '@angular/material/select';\nimport { Node, PathElement } from '@alfresco/js-api';\nimport { DocumentListComponent } from '../document-list/components/document-list.component';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IconModule } from '@alfresco/adf-core';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\n\n@Component({\n    selector: 'adf-breadcrumb',\n    imports: [IconModule, TranslatePipe, MatSelectModule],\n    templateUrl: './breadcrumb.component.html',\n    styleUrls: ['./breadcrumb.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-breadcrumb' }\n})\nexport class BreadcrumbComponent implements OnInit, OnChanges {\n    /** Active node, builds UI based on folderNode.path.elements collection. */\n    @Input({ required: true })\n    folderNode: Node = null;\n\n    /**\n     * Name of the root element of the breadcrumb. You can use\n     * this property to rename \"Company Home\" to \"Personal Files\" for\n     * example. You can use an i18n resource key for the property value.\n     */\n    @Input()\n    root?: string = null;\n\n    /**\n     * The id of the root element. You can use this property\n     * to set a custom element the breadcrumb should start with.\n     */\n    @Input()\n    rootId?: string = null;\n\n    /**\n     * Document List component to operate with. The list will\n     * update when the breadcrumb is clicked.\n     */\n    @Input()\n    target?: DocumentListComponent;\n\n    /**\n     * Transformation to be performed on the chosen/folder node before building\n     * the breadcrumb UI. Can be useful when custom formatting is needed for the\n     * breadcrumb. You can change the path elements from the node that are used to\n     * build the breadcrumb using this function.\n     */\n    @Input()\n    transform: (node) => any;\n\n    @ViewChild('dropdown')\n    dropdown: MatSelect;\n\n    /** Maximum number of nodes to display before wrapping them with a dropdown element.  */\n    @Input()\n    maxItems: number;\n\n    /** Number of table rows that are currently selected.  */\n    @Input()\n    selectedRowItemsCount = 0;\n\n    previousNodes: PathElement[];\n    lastNodes: PathElement[];\n\n    route: PathElement[] = [];\n\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly liveAnnouncer = inject(LiveAnnouncer);\n    private readonly translationService = inject(TranslateService);\n\n    get hasRoot(): boolean {\n        return !!this.root;\n    }\n\n    /** If true, prevents the user from navigating away from the active node. */\n    @Input()\n    readOnly: boolean = false;\n\n    /** Emitted when the user clicks on a breadcrumb. */\n    @Output()\n    navigate = new EventEmitter<PathElement>();\n\n    ngOnInit() {\n        this.transform = this.transform ? this.transform : null;\n\n        if (this.target) {\n            this.target.$folderNode.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((folderNode: Node) => {\n                this.folderNode = folderNode;\n                this.recalculateNodes();\n            });\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        this.recalculateNodes();\n\n        if (changes['selectedRowItemsCount'] && changes['selectedRowItemsCount'].currentValue > 0) {\n            const msg = this.translationService.instant('BREADCRUMB.HEADER.SELECTED', { count: changes['selectedRowItemsCount'].currentValue });\n            this.liveAnnouncer.announce(msg);\n        }\n    }\n\n    protected recalculateNodes(): void {\n        const node: Node = this.transform ? this.transform(this.folderNode) : this.folderNode;\n\n        this.route = this.parseRoute(node);\n\n        if (this.maxItems && this.route.length > this.maxItems) {\n            this.lastNodes = this.route.slice(this.route.length - this.maxItems);\n            this.previousNodes = this.route.slice(0, this.route.length - this.maxItems);\n            this.previousNodes.reverse();\n        } else {\n            this.lastNodes = this.route;\n            this.previousNodes = null;\n        }\n    }\n\n    open(): void {\n        if (this.dropdown) {\n            this.dropdown.open();\n            this.dropdown.focus();\n        }\n    }\n\n    hasPreviousNodes(): boolean {\n        return !!this.previousNodes;\n    }\n\n    parseRoute(node: Node): PathElement[] {\n        if (node?.path) {\n            const route = (node.path.elements || []).slice();\n\n            route.push({\n                id: node.id,\n                name: node.name,\n                node\n            } as PathElement);\n\n            const rootPos = this.getElementPosition(route, this.rootId);\n            if (rootPos > 0) {\n                route.splice(0, rootPos);\n            }\n\n            if (rootPos === -1 && this.rootId) {\n                route[0].id = this.rootId;\n            }\n\n            if (this.root) {\n                route[0].name = this.root;\n            }\n\n            return route;\n        }\n\n        return [];\n    }\n\n    private getElementPosition(route: PathElement[], nodeId: string): number {\n        let position: number = -1;\n\n        if (route && route.length > 0 && nodeId) {\n            position = route.findIndex((el) => el.id === nodeId);\n        }\n\n        return position;\n    }\n\n    breadcrumbItemIsAnchor(lastItem): boolean {\n        return !this.readOnly && !lastItem;\n    }\n\n    onRoutePathClick(route: PathElement, event?: Event): void {\n        if (event && event.type === 'click') {\n            event.preventDefault();\n        }\n\n        this.onRouteClick(route);\n    }\n\n    onRouteClick(route: PathElement) {\n        if (route && !this.readOnly) {\n            this.navigate.emit(route);\n\n            if (this.target) {\n                this.target.navigateTo(route.id);\n            }\n        }\n    }\n}\n","@if (folderNode) {\n    <nav\n        data-automation-id=\"breadcrumb\"\n        class=\"adf-breadcrumb-container\"\n        role=\"navigation\"\n        [attr.aria-label]=\"'BREADCRUMB.ARIA-LABEL.BREADCRUMB' | translate\"\n    >\n        @if (hasPreviousNodes()) {\n            <button\n                tabindex=\"0\"\n                class=\"adf-breadcrumb-dropdown-trigger\"\n                (click)=\"open()\"\n                [attr.aria-label]=\"'BREADCRUMB.ARIA-LABEL.DROPDOWN' | translate\"\n            >\n                <div class=\"adf-breadcrumb-dropdown-trigger-icon\">\n                    <mat-icon [class.adf-isRoot]=\"!hasPreviousNodes()\" adf-icon=\"folder\" />\n                    <mat-icon [class.adf-isRoot]=\"!hasPreviousNodes()\" class=\"adf-breadcrumb-dropdown-trigger-arrow\" adf-icon=\"arrow_drop_down\" />\n                </div>\n            </button>\n            <mat-select\n                #dropdown\n                class=\"adf-breadcrumb-dropdown-path\"\n                tabindex=\"-1\"\n                role=\"button\"\n            >\n            @for (node of previousNodes; track node.id) {\n                <mat-option\n                    (click)=\"onRoutePathClick(node, $event)\"\n                    (onSelectionChange)=\"onRouteClick(node)\"\n                    class=\"adf-breadcrumb-path-option\"\n                    [disabled]=\"readOnly\"\n                >\n                    {{ node.name ?? '' | translate }}\n                </mat-option>\n            }\n            </mat-select>\n        }\n\n        @for (item of lastNodes; track item.id; let last = $last) {\n            <div\n                [class.adf-active]=\"last\"\n                title=\"{{ item.name ?? '' | translate }}\"\n                class=\"adf-breadcrumb-item\">\n            @if (breadcrumbItemIsAnchor(last)) {\n                <a\n                    href=\"#\"\n                    [attr.data-automation-id]=\"'breadcrumb_' + item.name\"\n                    class=\"adf-breadcrumb-item-anchor\"\n                    (click)=\"onRoutePathClick(item, $event)\"\n                >\n                    {{ item.name ?? '' | translate }}\n                </a>\n            } @else {\n                <div class=\"adf-breadcrumb-item-current\" aria-current=\"location\">\n                    {{ (selectedRowItemsCount < 1 ? item.name ?? '' : 'BREADCRUMB.HEADER.SELECTED') | translate: { count: selectedRowItemsCount } }}\n                </div>\n            }\n\n            @if (!last) {\n                <mat-icon class=\"adf-breadcrumb-item-chevron\" adf-icon=\"chevron_right\" />\n            }\n            </div>\n        }\n    </nav>\n\n    @if (!folderNode && hasRoot) {\n        <nav\n            data-automation-id=\"breadcrumb\"\n            role=\"navigation\"\n            [attr.aria-label]=\"'BREADCRUMB.ARIA-LABEL.BREADCRUMB' | translate\"\n        >\n            <div class=\"adf-breadcrumb-item adf-active\" role=\"group\">\n                <div class=\"adf-breadcrumb-item-current\">\n                    {{ root ?? '' | translate }}\n                </div>\n            </div>\n        </nav>\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, OnChanges, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { MatSelect, MatSelectModule } from '@angular/material/select';\nimport { PathElement, Node } from '@alfresco/js-api';\nimport { BreadcrumbComponent } from './breadcrumb.component';\n\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-dropdown-breadcrumb',\n    imports: [IconModule, MatSelectModule, TranslatePipe],\n    templateUrl: './dropdown-breadcrumb.component.html',\n    styleUrls: ['./dropdown-breadcrumb.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-dropdown-breadcrumb' }\n})\nexport class DropdownBreadcrumbComponent extends BreadcrumbComponent implements OnChanges {\n    @ViewChild('dropdown')\n    declare dropdown: MatSelect;\n\n    currentNode: PathElement;\n    declare previousNodes: PathElement[];\n\n    /**\n     * Calculate the current and previous nodes from the route array\n     */\n    protected recalculateNodes(): void {\n        const node: Node = this.transform ? this.transform(this.folderNode) : this.folderNode;\n\n        this.route = this.parseRoute(node);\n        this.currentNode = this.route[this.route.length - 1];\n        this.previousNodes = this.route.slice(0, this.route.length - 1).reverse();\n    }\n\n    /**\n     * Opens the node picker menu\n     */\n    open(): void {\n        if (this.dropdown) {\n            this.dropdown.open();\n            this.dropdown.focus();\n        }\n    }\n\n    /**\n     * Check if route has more than one element (means: we are not in the root directory)\n     *\n     * @returns `true` if there are previous nodes, otherwise `false`\n     */\n    hasPreviousNodes(): boolean {\n        return this.previousNodes.length > 0;\n    }\n}\n","@if (route.length > 0) {\n  <nav class=\"adf-dropdown-breadcrumb-container\"\n    role=\"navigation\"\n    [attr.aria-label]=\"'BREADCRUMB.ARIA-LABEL.BREADCRUMB' | translate\">\n    <button\n      id=\"dropdown-breadcrumb-button\"\n      [tabindex]=\"hasPreviousNodes() ? 0 : -1\"\n      class=\"adf-dropdown-breadcrumb-trigger\"\n      (click)=\"open()\"\n      [attr.aria-label]=\"'BREADCRUMB.ARIA-LABEL.DROPDOWN' | translate:{ folderName: currentNode?.name }\"\n      [attr.aria-haspopup]=\"hasPreviousNodes() ? 'true' : null\"\n      [attr.aria-expanded]=\"dropdown?.panelOpen || false\"\n      data-automation-id=\"dropdown-breadcrumb-trigger\">\n      <mat-icon class=\"adf-dropdown-breadcrumb-icon\" [class.adf-isRoot]=\"!hasPreviousNodes()\" adf-icon=\"folder\" />\n    </button>\n    <mat-icon class=\"adf-dropdown-breadcrumb-icon adf-dropdown-breadcrumb-item-chevron\" adf-icon=\"chevron_right\" />\n    <div class=\"adf-dropdown-breadcrumb-path\">\n      @if (hasPreviousNodes()) {\n        <mat-select\n          #dropdown\n          panelClass=\"adf-breadcrumb-dropdown-panel\"\n          class=\"adf-dropdown-breadcrumb-path-select\"\n          tabindex=\"-1\"\n          role=\"button\"\n          data-automation-id=\"dropdown-breadcrumb-path\"\n          aria-labelledby=\"dropdown-breadcrumb-button\">\n          @for (node of previousNodes; track node.id) {\n            <mat-option\n              (click)=\"onRoutePathClick(node, $event)\"\n              (onSelectionChange)=\"onRouteClick(node)\"\n              class=\"adf-dropdown-breadcrumb-path-option adf-dropdown-breadcrumb-path-option-node\"\n              data-automation-class=\"dropdown-breadcrumb-path-option\"\n              [disabled]=\"readOnly\">\n              {{ node.name ?? '' | translate }}\n            </mat-option>\n          }\n        </mat-select>\n      }\n    </div>\n    <span\n      class=\"adf-current-folder\"\n      [class.adf-isRoot]=\"!hasPreviousNodes()\"\n      data-automation-id=\"current-folder\"\n      aria-current=\"location\">{{ currentNode.name }}\n    </span>\n  </nav>\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Directive, Input, Component, OnInit, OnChanges, ViewContainerRef, inject } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Directive({\n    standalone: true,\n    selector: '[adf-node-counter]'\n})\nexport class NodeCounterDirective implements OnInit, OnChanges {\n    private readonly viewContainerRef = inject(ViewContainerRef);\n\n    /** Number to display in the counter badge */\n    @Input('adf-node-counter')\n    counter: number;\n\n    componentRef: NodeCounterComponent;\n\n    ngOnInit() {\n        this.componentRef = this.viewContainerRef.createComponent(NodeCounterComponent).instance;\n        this.componentRef.counter = this.counter;\n    }\n\n    ngOnChanges() {\n        if (this.componentRef) {\n            this.componentRef.counter = this.counter;\n        }\n    }\n}\n\n@Component({\n    standalone: true,\n    imports: [TranslatePipe],\n    selector: 'adf-node-counter',\n    template: ` <div>{{ 'NODE_COUNTER.SELECTED_COUNT' | translate: { count: counter } }}</div> `\n})\nexport class NodeCounterComponent {\n    counter: number;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FileModel } from '../../common/models/file.model';\nimport { UploadService } from '../../common/services/upload.service';\nimport { EventEmitter } from '@angular/core';\n\nexport class UploadFilesEvent {\n    private isDefaultPrevented: boolean = false;\n\n    get defaultPrevented() {\n        return this.isDefaultPrevented;\n    }\n\n    preventDefault() {\n        this.isDefaultPrevented = true;\n    }\n\n    constructor(\n        public files: Array<FileModel>,\n        private readonly uploadService: UploadService,\n        private readonly successEmitter: EventEmitter<any>,\n        private readonly errorEmitter: EventEmitter<any>\n    ) {}\n\n    pauseUpload() {\n        this.preventDefault();\n    }\n\n    resumeUpload() {\n        if (this.files && this.files.length > 0) {\n            this.uploadService.addToQueue(...this.files);\n            this.uploadService.uploadFilesInTheQueue(this.successEmitter, this.errorEmitter);\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FileInfo, TranslationService } from '@alfresco/adf-core';\nimport { FileUploadErrorEvent } from '../../../common/events/file.event';\nimport { FileModel } from '../../../common/models/file.model';\nimport { UploadService } from '../../../common/services/upload.service';\nimport { DestroyRef, Directive, EventEmitter, inject, Input, NgZone, OnInit, Output } from '@angular/core';\nimport { UploadFilesEvent } from '../upload-files.event';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class UploadBase implements OnInit {\n    protected uploadService = inject(UploadService);\n    protected translationService: TranslationService = inject(TranslationService);\n    protected ngZone = inject(NgZone);\n\n    /**\n     * Sets a limit on the maximum size (in bytes) of a file to be uploaded.\n     * Has no effect if undefined.\n     */\n    @Input()\n    maxFilesSize: number;\n\n    /**\n     * The ID of the root. Use the nodeId for\n     * Content Services or the taskId/processId for Process Services.\n     */\n    @Input()\n    rootFolderId: string = '-root-';\n\n    /** Toggles component disabled state (if there is no node permission checking). */\n    @Input()\n    disabled: boolean = false;\n\n    /** Filter for accepted file types. */\n    @Input()\n    acceptedFilesType: string = '*';\n\n    /** Toggles versioning. */\n    @Input()\n    versioning: boolean = false;\n\n    /** majorVersion boolean field to true to indicate a major version should be created. */\n    @Input()\n    majorVersion: boolean = false;\n\n    /** When you overwrite existing content, you can use the comment field to add a version comment that appears in the version history */\n    @Input()\n    comment: string;\n\n    /** Custom node type for uploaded file */\n    @Input()\n    nodeType: string = 'cm:content';\n\n    /** Emitted when the file is uploaded successfully. */\n    @Output()\n    success = new EventEmitter();\n\n    /** Emitted when an error occurs. */\n    @Output()\n    error = new EventEmitter<FileUploadErrorEvent>();\n\n    /** Emitted when the upload begins. */\n    @Output()\n    beginUpload = new EventEmitter<UploadFilesEvent>();\n\n    /** Emitted when dropping a file over another file to update the version. */\n    @Output()\n    updateFileVersion = new EventEmitter<CustomEvent>();\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.uploadService.fileUploadError\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(error => this.error.emit(error));\n    }\n\n    /**\n     * Upload a list of file in the specified path\n     *\n     * @param files files to upload\n     */\n    uploadFiles(files: File[]): void {\n        const filteredFiles: FileModel[] = files.map<FileModel>((file: File) =>\n            this.createFileModel(file, this.rootFolderId, ((file).webkitRelativePath || '').replace(/\\/[^/]*$/, ''))\n        );\n\n        this.uploadQueue(filteredFiles);\n    }\n\n    uploadFilesInfo(files: FileInfo[]): void {\n        const filteredFiles: FileModel[] = files.map<FileModel>((fileInfo: FileInfo) =>\n            this.createFileModel(fileInfo.file, this.rootFolderId, fileInfo.relativeFolder)\n        );\n\n        this.uploadQueue(filteredFiles);\n    }\n\n    private uploadQueue(files: FileModel[]) {\n        const filteredFiles = files.filter(this.isFileAcceptable.bind(this)).filter(this.isFileSizeAcceptable.bind(this));\n\n        this.ngZone.run(() => {\n            const event = new UploadFilesEvent([...filteredFiles], this.uploadService, this.success, this.error);\n            this.beginUpload.emit(event);\n\n            if (!event.defaultPrevented) {\n                if (filteredFiles.length > 0) {\n                    this.uploadService.addToQueue(...filteredFiles);\n                    this.uploadService.uploadFilesInTheQueue(this.success, this.error);\n                }\n            }\n        });\n    }\n\n    /**\n     * Checks if the given file is allowed by the extension filters\n     *\n     * @param file FileModel\n     * @returns `true` if file is acceptable, otherwise `false`\n     */\n    protected isFileAcceptable(file: FileModel): boolean {\n        if (this.acceptedFilesType === '*') {\n            return true;\n        }\n\n        const allowedExtensions = this.acceptedFilesType.split(',').map((ext) => ext.trim().replace(/^\\./, ''));\n\n        return allowedExtensions.indexOf(file.extension) !== -1;\n    }\n\n    /**\n     * Creates FileModel from File\n     *\n     * @param file file instance\n     * @param parentId parent id\n     * @param path upload path\n     * @param id model id\n     * @returns file model\n     */\n    protected createFileModel(file: File, parentId: string, path: string, id?: string): FileModel {\n        return new FileModel(\n            file,\n            {\n                comment: this.comment,\n                majorVersion: this.majorVersion,\n                newVersion: this.versioning,\n                parentId,\n                path,\n                nodeType: this.nodeType\n            },\n            id\n        );\n    }\n\n    protected isFileSizeAllowed(file: FileModel) {\n        let isFileSizeAllowed = true;\n        if (this.isMaxFileSizeDefined()) {\n            isFileSizeAllowed = this.isFileSizeCorrect(file);\n        }\n\n        return isFileSizeAllowed;\n    }\n\n    protected isMaxFileSizeDefined() {\n        return this.maxFilesSize !== undefined && this.maxFilesSize !== null;\n    }\n\n    protected isFileSizeCorrect(file: FileModel) {\n        return this.maxFilesSize >= 0 && file.size <= this.maxFilesSize;\n    }\n\n    /**\n     * Checks if the given file is an acceptable size\n     *\n     * @param file FileModel\n     * @returns `true` if file size is acceptable, otherwise `false`\n     */\n    private isFileSizeAcceptable(file: FileModel): boolean {\n        let acceptableSize = true;\n\n        if (!this.isFileSizeAllowed(file)) {\n            acceptableSize = false;\n\n            const message = this.translationService.instant('FILE_UPLOAD.MESSAGES.EXCEED_MAX_FILE_SIZE', { fileName: file.name });\n\n            this.error.emit(message);\n        }\n\n        return acceptableSize;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @angular-eslint/no-input-rename */\n\nimport { FileUtils } from '@alfresco/adf-core';\nimport { Directive, ElementRef, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output, inject } from '@angular/core';\n\nexport const INPUT_FOCUS_CSS_CLASS = 'adf-file-draggable-input-focus';\nexport const DROP_EFFECT = 'copy';\n\n@Directive({\n    selector: '[adf-file-draggable]'\n})\nexport class FileDraggableDirective implements OnInit, OnDestroy {\n    private readonly ngZone = inject(NgZone);\n\n    files: File[];\n\n    /** Enables/disables drag-and-drop functionality. */\n    @Input('adf-file-draggable')\n    enabled = true;\n\n    /** Emitted when one or more files are dragged and dropped onto the draggable element. */\n    @Output()\n    filesDropped = new EventEmitter<File[]>();\n\n    /** Emitted when a directory is dragged and dropped onto the draggable element. */\n    @Output()\n    folderEntityDropped = new EventEmitter<any>();\n\n    private readonly element: HTMLElement;\n\n    constructor() {\n        const el = inject(ElementRef);\n\n        this.element = el.nativeElement;\n    }\n\n    ngOnInit() {\n        this.ngZone.runOutsideAngular(() => {\n            this.element.addEventListener('dragenter', this.onDragEnter.bind(this));\n            this.element.addEventListener('dragover', this.onDragOver.bind(this));\n            this.element.addEventListener('dragleave', this.onDragLeave.bind(this));\n            this.element.addEventListener('drop', this.onDropFiles.bind(this));\n        });\n    }\n\n    ngOnDestroy() {\n        this.element.removeEventListener('dragenter', this.onDragEnter);\n        this.element.removeEventListener('dragover', this.onDragOver);\n        this.element.removeEventListener('dragleave', this.onDragLeave);\n        this.element.removeEventListener('drop', this.onDropFiles);\n    }\n\n    /**\n     * Method called when files is dropped in the drag and drop area.\n     *\n     * @param event DOM event.\n     */\n    onDropFiles(event: any): void {\n        if (this.enabled && !event.defaultPrevented) {\n            this.preventDefault(event);\n\n            // Chrome, Edge, Firefox, Opera (Files + Folders)\n            const items = event.dataTransfer?.items;\n            if (items) {\n                const files: File[] = [];\n\n                // eslint-disable-next-line @typescript-eslint/prefer-for-of\n                for (let i = 0; i < items.length; i++) {\n                    if (items[i].webkitGetAsEntry) {\n                        const item = items[i].webkitGetAsEntry();\n\n                        if (item) {\n                            if (item.isFile) {\n                                const file = items[i].getAsFile();\n\n                                if (file) {\n                                    files.push(file);\n                                }\n                            } else if (item.isDirectory) {\n                                this.folderEntityDropped.emit(item);\n                            }\n                        }\n                    }\n                }\n                if (files.length > 0) {\n                    this.filesDropped.emit(files);\n                }\n            } else if (event.dataTransfer?.files) {\n                // IE, Safari, Chrome, Edge, Firefox, Opera (Files only)\n                const files = FileUtils.toFileArray(event.dataTransfer.files);\n                this.filesDropped.emit(files);\n            }\n\n            this.element.classList.remove(INPUT_FOCUS_CSS_CLASS);\n        }\n    }\n\n    /**\n     * Change the style of the drag area when a file drag in.\n     *\n     * @param event - DOM event.\n     */\n    onDragEnter(event: DragEvent): void {\n        if (this.enabled && !event.defaultPrevented) {\n            this.preventDefault(event);\n\n            if (event.dataTransfer) {\n                event.dataTransfer.dropEffect = DROP_EFFECT;\n            }\n\n            this.element.classList.add(INPUT_FOCUS_CSS_CLASS);\n        }\n    }\n\n    /**\n     * Change the style of the drag area when a file drag out.\n     *\n     * @param event - DOM event.\n     */\n    onDragLeave(event: Event): void {\n        if (this.enabled && !event.defaultPrevented) {\n            this.preventDefault(event);\n            this.element.classList.remove(INPUT_FOCUS_CSS_CLASS);\n        }\n    }\n\n    /**\n     * Change the style of the drag area when a file is over the drag area.\n     *\n     * @param event drag event\n     */\n    onDragOver(event: DragEvent): void {\n        if (this.enabled && !event.defaultPrevented) {\n            this.preventDefault(event);\n\n            if (event.dataTransfer) {\n                event.dataTransfer.dropEffect = DROP_EFFECT;\n            }\n\n            this.element.classList.add(INPUT_FOCUS_CSS_CLASS);\n        }\n    }\n\n    /**\n     * Prevent default and stop propagation of the DOM event.\n     *\n     * @param event DOM event\n     */\n    preventDefault(event: Event): void {\n        event.stopPropagation();\n        event.preventDefault();\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FileInfo, FileUtils, NotificationService } from '@alfresco/adf-core';\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { UploadBase } from './base-upload/upload-base';\nimport { AllowableOperationsEnum } from '../../common/models/allowable-operations.enum';\nimport { ContentService } from '../../common/services/content.service';\nimport { FileModel } from '../../common/models/file.model';\nimport { Node } from '@alfresco/js-api';\nimport { FileDraggableDirective } from '../directives/file-draggable.directive';\n\n@Component({\n    selector: 'adf-upload-drag-area',\n    imports: [FileDraggableDirective],\n    templateUrl: './upload-drag-area.component.html',\n    styleUrls: ['./upload-drag-area.component.scss'],\n    host: { class: 'adf-upload-drag-area' },\n    encapsulation: ViewEncapsulation.None\n})\nexport class UploadDragAreaComponent extends UploadBase {\n    private readonly notificationService = inject(NotificationService);\n    private readonly contentService = inject(ContentService);\n\n    /**\n     * Method called when files are dropped in the drag area.\n     *\n     * @param files - files dropped in the drag area.\n     */\n    onFilesDropped(files: File[]): void {\n        if (!this.disabled && files.length) {\n            this.uploadFiles(files);\n        }\n    }\n\n    /**\n     * Called when a folder are dropped in the drag area\n     *\n     * @param folder - name of the dropped folder\n     */\n    onFolderEntityDropped(folder: any): void {\n        if (!this.disabled && folder.isDirectory) {\n            FileUtils.flatten(folder).then((filesInfo) => {\n                this.uploadFilesInfo(filesInfo);\n            });\n        }\n    }\n\n    /**\n     * Show undo notification bar.\n     *\n     * @param latestFilesAdded - files in the upload queue enriched with status flag and xhr object.\n     */\n    showUndoNotificationBar(latestFilesAdded: FileModel[]) {\n        const messageTranslate = this.translationService.instant('FILE_UPLOAD.MESSAGES.PROGRESS');\n        const actionTranslate = this.translationService.instant('FILE_UPLOAD.ACTION.UNDO');\n\n        this.notificationService\n            .openSnackMessageAction(messageTranslate, actionTranslate)\n            .onAction()\n            .subscribe(() => {\n                this.uploadService.cancelUpload(...latestFilesAdded);\n            });\n    }\n\n    /**\n     * Check if content is droppable\n     *\n     * @returns `true` or `false` considering the component options and node permissions\n     */\n    isDroppable(): boolean {\n        return !this.disabled;\n    }\n\n    /**\n     * Handles 'upload-files' events raised by child components.\n     *\n     * @param event DOM event\n     */\n    onUploadFiles(event: CustomEvent) {\n        event.stopPropagation();\n        event.preventDefault();\n\n        const node: Node = event.detail.data.obj.entry;\n        const files: FileInfo[] = event.detail?.files || [];\n\n        const isAllowed: boolean = this.isTargetNodeFolder(node)\n            ? this.contentService.hasAllowableOperations(node, AllowableOperationsEnum.CREATE)\n            : this.contentService.hasAllowableOperations(node, AllowableOperationsEnum.UPDATE);\n\n        if (isAllowed) {\n            if (!this.isTargetNodeFolder(node) && files.length === 1) {\n                this.updateFileVersion.emit(event);\n            } else {\n                if (this.isTargetNodeFolder(node)) {\n                    files.forEach((file) => (file.relativeFolder = node.name ? node.name.concat(file.relativeFolder) : file.relativeFolder));\n                }\n                if (files?.length > 0) {\n                    this.uploadFilesInfo(files);\n                }\n            }\n        }\n    }\n\n    private isTargetNodeFolder(node: Node): boolean {\n        return !!node?.isFolder;\n    }\n}\n","<div [adf-file-draggable]=\"isDroppable()\" class=\"adf-upload-border\"\n     (filesDropped)=\"onFilesDropped($event)\"\n     (folderEntityDropped)=\"onFolderEntityDropped($event)\"\n     (upload-files)=\"onUploadFiles($any($event))\"\n     dropzone=\"\" webkitdropzone=\"*\" #droparea>\n    <ng-content />\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TranslationService } from '@alfresco/adf-core';\nimport { UploadService } from '../../common/services/upload.service';\nimport { FileModel, FileUploadStatus } from '../../common/models/file.model';\n\nimport { Component, ContentChild, Input, Output, TemplateRef, EventEmitter, inject } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n    selector: 'adf-file-uploading-list',\n    imports: [NgTemplateOutlet],\n    templateUrl: './file-uploading-list.component.html',\n    styleUrls: ['./file-uploading-list.component.scss']\n})\nexport class FileUploadingListComponent {\n    private readonly uploadService = inject(UploadService);\n    private readonly translateService = inject(TranslationService);\n\n    @ContentChild(TemplateRef)\n    template: any;\n\n    @Input()\n    files: FileModel[] = [];\n\n    /** Emitted when a file in the list has an error. */\n    @Output()\n    error = new EventEmitter<any>();\n\n    /**\n     * Cancel file upload\n     *\n     * @param file File model to cancel upload for.\n     */\n    cancelFile(file: FileModel): void {\n        if (file.status === FileUploadStatus.Pending) {\n            file.status = FileUploadStatus.Cancelled;\n        } else {\n            this.uploadService.cancelUpload(file);\n        }\n    }\n\n    /**\n     * Remove uploaded file\n     *\n     * @param file File model to remove upload for.\n     */\n    removeFile(file: FileModel): void {\n        if (file.status === FileUploadStatus.Error) {\n            this.notifyError(file);\n        }\n\n        if (this.isUploadingFile(file)) {\n            this.cancelNodeVersionInstances(file);\n            this.uploadService.cancelUpload(file);\n        }\n\n        this.files = this.files.filter((entry) => entry !== file);\n    }\n\n    /**\n     * Calls the appropriate methods for each file, depending on state\n     */\n    cancelAllFiles(): void {\n        const filesToCancel = this.files.filter((file) => this.isUploadingFile(file));\n\n        if (filesToCancel.length > 0) {\n            this.uploadService.cancelUpload(...filesToCancel);\n        }\n    }\n\n    /**\n     * Checks if all the files are uploaded false if there is at least one file in Progress | Starting | Pending\n     *\n     * @returns `true` if upload is complete, otherwise `false`\n     */\n    isUploadCompleted(): boolean {\n        return (\n            !this.isUploadCancelled() &&\n            Boolean(this.files.length) &&\n            !this.files.some(\n                ({ status }) => status === FileUploadStatus.Starting || status === FileUploadStatus.Progress || status === FileUploadStatus.Pending\n            )\n        );\n    }\n\n    /**\n     * Check if all the files are Cancelled | Aborted | Error. false if there is at least one file in uploading states\n     *\n     * @returns `true` if upload is cancelled, otherwise `false`\n     */\n    isUploadCancelled(): boolean {\n        return (\n            !!this.files.length &&\n            this.files.every(\n                ({ status }) => status === FileUploadStatus.Aborted || status === FileUploadStatus.Cancelled || status === FileUploadStatus.Deleted\n            )\n        );\n    }\n\n    private cancelNodeVersionInstances(file: FileModel) {\n        this.files\n            .filter((item) => item.options.newVersion && item.data.entry.id === file.data.entry.id)\n            .map((item) => {\n                item.status = FileUploadStatus.Deleted;\n            });\n    }\n\n    private notifyError(...files: FileModel[]) {\n        let messageError: string = null;\n\n        if (files.length === 1) {\n            messageError = this.translateService.instant('FILE_UPLOAD.MESSAGES.REMOVE_FILE_ERROR', { fileName: files[0].name });\n        } else {\n            messageError = this.translateService.instant('FILE_UPLOAD.MESSAGES.REMOVE_FILES_ERROR', { total: files.length });\n        }\n\n        this.error.emit(messageError);\n    }\n\n    private isUploadingFile(file: FileModel): boolean {\n        return file.status === FileUploadStatus.Pending || file.status === FileUploadStatus.Starting || file.status === FileUploadStatus.Progress;\n    }\n}\n","<div class=\"upload-list\">\n  @for (file of files; track file.id) {\n    <ng-template\n      [ngTemplateOutlet]=\"template\"\n      [ngTemplateOutletContext]=\"{ $implicit: file }\" />\n  }\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FileModel, FileUploadStatus } from '../../common/models/file.model';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { MatListModule } from '@angular/material/list';\nimport { FileSizePipe, IconModule } from '@alfresco/adf-core';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\n\ninterface ToggleIconState {\n    isFocused: boolean;\n    isToggled: boolean;\n}\n\n@Component({\n    selector: 'adf-file-uploading-list-row',\n    imports: [IconModule, MatListModule, MatChipsModule, TranslatePipe, FileSizePipe, MatButtonModule],\n    templateUrl: './file-uploading-list-row.component.html',\n    styleUrls: ['./file-uploading-list-row.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class FileUploadingListRowComponent {\n    @Input()\n    file: FileModel;\n\n    @Output()\n    cancel = new EventEmitter<FileModel>();\n\n    toggleIconState: ToggleIconState = { isFocused: false, isToggled: false };\n    toggleIconCancelState: ToggleIconState = { isFocused: false, isToggled: false };\n\n    onCancel(file: FileModel): void {\n        this.cancel.emit(file);\n    }\n\n    onToggleMouseEnter(state: ToggleIconState): void {\n        if (!state.isFocused) {\n            state.isToggled = true;\n        }\n    }\n\n    onToggleMouseLeave(state: ToggleIconState): void {\n        if (!state.isFocused) {\n            state.isToggled = false;\n        }\n\n        if (state.isFocused && state.isToggled) {\n            state.isFocused = false;\n            state.isToggled = false;\n        }\n    }\n\n    onToggleFocus(state: ToggleIconState): void {\n        state.isFocused = true;\n        state.isToggled = true;\n    }\n\n    onToggleBlur(state: ToggleIconState): void {\n        state.isFocused = false;\n        state.isToggled = false;\n    }\n\n    showCancelledStatus(): boolean {\n        return (\n            this.file.status === FileUploadStatus.Cancelled ||\n            this.file.status === FileUploadStatus.Aborted ||\n            this.file.status === FileUploadStatus.Deleted\n        );\n    }\n\n    get versionNumber(): string {\n        return this.file.data.entry.properties['cm:versionLabel'];\n    }\n\n    get mimeType(): string {\n        return this.file?.file?.type || 'default';\n    }\n\n    isUploadVersion(): boolean {\n        return !!this.file.data && this.file.options?.newVersion && this.file.data.entry.properties?.['cm:versionLabel'];\n    }\n\n    canCancelUpload(): boolean {\n        return this.file?.status === FileUploadStatus.Pending;\n    }\n\n    isUploadError(): boolean {\n        return this.file?.status === FileUploadStatus.Error;\n    }\n\n    isUploading(): boolean {\n        return this.file && (this.file.status === FileUploadStatus.Progress || this.file.status === FileUploadStatus.Starting);\n    }\n\n    isUploadComplete(): boolean {\n        return this.file?.status === FileUploadStatus.Complete && !this.isUploadVersion();\n    }\n\n    isUploadVersionComplete(): boolean {\n        return this.file?.status === FileUploadStatus.Complete && this.isUploadVersion();\n    }\n\n    getFileUploadErrorKey(errorCode?: number | null): string {\n        return `FILE_UPLOAD.ERRORS.${errorCode || 'GENERIC'}`;\n    }\n}\n","<div class=\"adf-file-uploading-row\" [attr.aria-label]=\"file.name + ' ' + file.status\">\n  @if (mimeType === 'default') {\n    <mat-icon matListItemIcon class=\"adf-file-uploading-row__type\" adf-icon=\"insert_drive_file\" />\n  } @else {\n    <mat-icon svgIcon=\"adf:{{ mimeType }}\" aria-hidden=\"true\" />\n  }\n\n  <span\n    class=\"adf-file-uploading-row__name\"\n    title=\"{{ file.name }}\">\n    {{ file.name }}\n  </span>\n\n  @if (isUploadVersion()) {\n    <span class=\"adf-file-uploading-row__version\" tabindex=\"0\" >\n      <mat-chip color=\"primary\"\n        [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.VERSION' | translate: { version:  versionNumber }\"\n        [title]=\"'version' + versionNumber\"\n      >{{ versionNumber }}</mat-chip>\n    </span>\n  }\n\n  @if (isUploading()) {\n    <div\n      tabindex=\"0\"\n      role=\"button\"\n      (mouseenter)=\"onToggleMouseEnter(toggleIconState)\"\n      (mouseleave)=\"onToggleMouseLeave(toggleIconState)\"\n      (focus)=\"onToggleFocus(toggleIconState)\"\n      (blur)=\"onToggleBlur(toggleIconState)\"\n      (keyup.enter)=\"onCancel(file)\"\n      (click)=\"onCancel(file)\"\n      data-automation-id=\"cancel-upload-progress\"\n      [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.STOP_FILE_UPLOAD' | translate: { file: file.name }\"\n      class=\"adf-file-uploading-row__group adf-file-uploading-row__group--toggle\"\n      title=\"{{ 'ADF_FILE_UPLOAD.BUTTON.STOP_FILE' | translate }}\">\n\n      @if (toggleIconState.isToggled) {\n        <mat-icon class=\"adf-file-uploading-row__action adf-file-uploading-row__action--cancel\" adf-icon=\"clear\" />\n      } @else {\n        <span class=\"adf-file-uploading-row__status\">\n            {{ file.progress.loaded | adfFileSize }} / {{ file.progress.total | adfFileSize }}\n        </span>\n      }\n    </div>\n  }\n\n  @if (isUploadComplete()) {\n    <button mat-icon-button\n      (mouseenter)=\"onToggleMouseEnter(toggleIconState)\"\n      (mouseleave)=\"onToggleMouseLeave(toggleIconState)\"\n      (focus)=\"onToggleFocus(toggleIconState)\"\n      (blur)=\"onToggleBlur(toggleIconState)\"\n      class=\"adf-file-uploading-row__group\"\n      [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.UPLOAD_SUCCESSFUL' | translate: { file: file.name }\"\n      title=\"{{ 'ADF_FILE_UPLOAD.BUTTON.UPLOAD_SUCCESSFUL' | translate }}\">\n      <mat-icon class=\"adf-file-uploading-row__status adf-file-uploading-row__status--done\" adf-icon=\"check_circle\" />\n    </button>\n  }\n\n  @if (isUploadVersionComplete()) {\n    <div\n      class=\"adf-file-uploading-row__file-version\"\n      [attr.aria-label]=\"'ADF_FILE_UPLOAD.STATUS.FILE_DONE_STATUS' | translate\"\n      >\n      <mat-icon class=\"adf-file-uploading-row__status--done\" adf-icon=\"check_circle\" matListItemIcon />\n    </div>\n  }\n\n  @if (canCancelUpload()) {\n    <button\n      (mouseenter)=\"onToggleMouseEnter(toggleIconCancelState)\"\n      (mouseleave)=\"onToggleMouseLeave(toggleIconCancelState)\"\n      (focus)=\"onToggleFocus(toggleIconCancelState)\"\n      (blur)=\"onToggleBlur(toggleIconCancelState)\"\n      mat-icon-button\n      (click)=\"onCancel(file)\"\n      data-automation-id=\"cancel-upload-queue\"\n      class=\"adf-file-uploading-row__group\"\n      title=\"{{ 'ADF_FILE_UPLOAD.BUTTON.STOP_FILE' | translate }}\"\n      [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.STOP_FILE' | translate: { file: file.name }\">\n\n      @if (toggleIconCancelState.isToggled) {\n        <mat-icon class=\"adf-file-uploading-row__action adf-file-uploading-row__action--remove\" adf-icon=\"remove_circle\" />\n      } @else {\n        <mat-icon class=\"adf-file-uploading-row__status adf-file-uploading-row__status--pending\" adf-icon=\"schedule\" />\n      }\n    </button>\n  }\n\n  @if (isUploadError()) {\n    @let uploadErrorLabel = getFileUploadErrorKey(file.errorCode) | translate;\n    <div\n      role=\"status\"\n      class=\"adf-file-uploading-row__block adf-file-uploading-row__status--error\">\n      <mat-icon\n        [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.UPLOAD_FILE_ERROR' | translate: { error: uploadErrorLabel }\"\n        [title]=\"uploadErrorLabel\"\n        adf-icon=\"report_problem\"\n        matListItemIcon\n        />\n    </div>\n  }\n\n  @if (showCancelledStatus()) {\n    <div\n      [attr.aria-label]=\"'ADF_FILE_UPLOAD.STATUS.FILE_CANCELED_STATUS' | translate\"\n      role=\"status\"\n      class=\"adf-file-uploading-row__block adf-file-uploading-row__status--cancelled\">\n      {{ 'ADF_FILE_UPLOAD.STATUS.FILE_CANCELED_STATUS' | translate }}\n    </div>\n  }\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IconModule, UserPreferencesService } from '@alfresco/adf-core';\nimport {\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { merge, Subject } from 'rxjs';\nimport { FileUploadingListComponent } from './file-uploading-list.component';\nimport { Direction } from '@angular/cdk/bidi';\nimport { delay } from 'rxjs/operators';\nimport { UploadService } from '../../common/services/upload.service';\nimport { FileModel, FileUploadStatus } from '../../common/models/file.model';\nimport { FileUploadCompleteEvent, FileUploadDeleteEvent } from '../../common/events/file.event';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { FileUploadingListRowComponent } from './file-uploading-list-row.component';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-file-uploading-dialog',\n    imports: [MatButtonModule, TranslatePipe, IconModule, FileUploadingListComponent, FileUploadingListRowComponent, A11yModule],\n    templateUrl: './file-uploading-dialog.component.html',\n    styleUrls: ['./file-uploading-dialog.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class FileUploadingDialogComponent implements OnInit, OnDestroy {\n    private readonly uploadService = inject(UploadService);\n    private readonly changeDetector = inject(ChangeDetectorRef);\n    private readonly userPreferencesService = inject(UserPreferencesService);\n\n    @ViewChild('uploadDialog', { read: ElementRef })\n    private readonly uploadDialogRef: ElementRef<HTMLElement> | undefined;\n\n    /** Dialog direction. Can be 'ltr' or 'rtl. */\n    private direction: Direction = 'ltr';\n\n    @ViewChild('uploadList')\n    uploadList: FileUploadingListComponent;\n\n    /** Dialog position. Can be 'left' or 'right'. */\n    @Input()\n    position: string = 'right';\n\n    /** Makes the dialog always visible even when there are no uploads. */\n    @Input()\n    alwaysVisible = false;\n\n    /** Emitted when a file in the list has an error. */\n    @Output()\n    error = new EventEmitter();\n\n    @HostBinding('attr.adfUploadDialogRight')\n    public get isPositionRight(): boolean {\n        return (this.direction === 'ltr' && this.position === 'right') || (this.direction === 'rtl' && this.position === 'left') || null;\n    }\n    @HostBinding('attr.adfUploadDialogLeft')\n    public get isPositionLeft(): boolean {\n        return (this.direction === 'ltr' && this.position === 'left') || (this.direction === 'rtl' && this.position === 'right') || null;\n    }\n\n    filesUploadingList: FileModel[] = [];\n    isDialogActive: boolean = false;\n    totalCompleted: number = 0;\n    totalErrors: number = 0;\n    isDialogMinimized: boolean = false;\n    isConfirmation: boolean = false;\n\n    private readonly dialogActive = new Subject<boolean>();\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.dialogActive.pipe(delay(100), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this.uploadDialogRef?.nativeElement?.focus();\n        });\n\n        this.uploadService.queueChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((fileList) => {\n            this.filesUploadingList = fileList;\n\n            if (this.filesUploadingList.length && !this.isDialogActive) {\n                this.isDialogActive = true;\n                this.dialogActive.next(undefined);\n            } else {\n                this.dialogActive.next(undefined);\n            }\n        });\n\n        merge(this.uploadService.fileUploadComplete, this.uploadService.fileUploadDeleted)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe((event: FileUploadCompleteEvent | FileUploadDeleteEvent) => {\n                this.totalCompleted = event.totalComplete;\n                this.changeDetector.detectChanges();\n            });\n\n        this.uploadService.fileUploadError.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n            this.totalErrors = event.totalError;\n            this.changeDetector.detectChanges();\n        });\n\n        this.uploadService.fileUpload.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this.changeDetector.detectChanges();\n        });\n\n        this.uploadService.fileDeleted.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((objId) => {\n            if (this.filesUploadingList) {\n                const uploadedFile = this.filesUploadingList.find((file) => (file.data ? file.data.entry.id === objId : false));\n                if (uploadedFile) {\n                    uploadedFile.status = FileUploadStatus.Cancelled;\n                    this.changeDetector.detectChanges();\n                }\n            }\n        });\n\n        this.userPreferencesService\n            .select('textOrientation')\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe((textOrientation: Direction) => {\n                this.direction = textOrientation;\n            });\n    }\n\n    /**\n     * Toggle confirmation message.\n     */\n    toggleConfirmation() {\n        this.isConfirmation = !this.isConfirmation;\n\n        if (!this.isConfirmation) {\n            this.dialogActive.next(undefined);\n        }\n\n        if (this.isDialogMinimized) {\n            this.isDialogMinimized = false;\n        }\n    }\n\n    /**\n     * Cancel uploads and hide confirmation\n     */\n    cancelAllUploads() {\n        this.toggleConfirmation();\n        this.dialogActive.next(undefined);\n        this.uploadList.cancelAllFiles();\n    }\n\n    /**\n     * Toggle dialog minimized state.\n     */\n    toggleMinimized(): void {\n        this.isDialogMinimized = !this.isDialogMinimized;\n        this.changeDetector.detectChanges();\n    }\n\n    /**\n     * Dismiss dialog\n     */\n    close(): void {\n        this.isConfirmation = false;\n        this.totalCompleted = 0;\n        this.totalErrors = 0;\n        this.filesUploadingList = [];\n        this.isDialogActive = false;\n        this.isDialogMinimized = false;\n        this.uploadService.clearQueue();\n        this.changeDetector.detectChanges();\n    }\n\n    ngOnDestroy() {\n        this.uploadService.clearQueue();\n    }\n\n    canShowDialog(): boolean {\n        return this.isDialogActive || this.alwaysVisible;\n    }\n\n    canShowCancelAll(): boolean {\n        return this.filesUploadingList?.length && this.hasUploadInProgress();\n    }\n\n    canCloseDialog(): boolean {\n        return !this.hasUploadInProgress() && !this.alwaysVisible;\n    }\n\n    hasUploadInProgress(): boolean {\n        return !this.uploadList?.isUploadCompleted() && !this.uploadList?.isUploadCancelled();\n    }\n}\n","@if (canShowDialog()) {\n  <div\n    #uploadDialog\n    role=\"dialog\"\n    [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG'| translate\"\n    tabindex=\"0\"\n    class=\"adf-upload-dialog\"\n    id=\"upload-dialog\"\n    [class.adf-upload-dialog--minimized]=\"isDialogMinimized\">\n    <header class=\"adf-upload-dialog__header\">\n      <button\n        mat-icon-button\n        class=\"adf-upload-dialog__header-button\"\n        [attr.data-automation-id]=\"'adf-upload-dialog__toggle-minimize'\"\n        [attr.aria-label]=\"(isDialogMinimized ?\n            'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MAXIMIZE':\n            'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_MINIMIZE') | translate\"\n        [disabled]=\"isConfirmation\"\n        [attr.aria-expanded]=\"!isDialogMinimized\"\n        (click)=\"toggleMinimized()\">\n        <mat-icon class=\"adf-upload-dialog__header-button-icon\" [adf-icon]=\"isDialogMinimized ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\" />\n      </button>\n\n    @if (uploadList.isUploadCancelled()) {\n      <span class=\"adf-upload-dialog__title\">\n        {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_CANCELED' | translate }}\n      </span>\n    } @else {\n        <span class=\"adf-upload-dialog__title\">\n            {{ 'FILE_UPLOAD.MESSAGES.UPLOAD_PROGRESS'\n            | translate: {\n              completed: totalCompleted,\n              total: filesUploadingList.length\n            }\n          }}\n        </span>\n    }\n  </header>\n  @if (totalErrors) {\n    <section class=\"adf-upload-dialog__info\">\n      {{\n      (totalErrors > 1\n      ? 'FILE_UPLOAD.MESSAGES.UPLOAD_ERRORS'\n      : 'FILE_UPLOAD.MESSAGES.UPLOAD_ERROR')\n      | translate: { total: totalErrors }\n      }}\n    </section>\n  }\n  <section class=\"adf-upload-dialog__content\"\n    [class.adf-upload-dialog--padding]=\"isConfirmation\" aria-live=\"polite\">\n    <adf-file-uploading-list\n      class=\"adf-file-uploading-list\"\n      [class.adf-upload-dialog--hide]=\"isConfirmation\"\n      #uploadList\n      [files]=\"filesUploadingList\">\n      <ng-template let-file=\"$implicit\">\n        <adf-file-uploading-list-row\n          [file]=\"file\"\n          (cancel)=\"uploadList.cancelFile(file)\" />\n      </ng-template>\n    </adf-file-uploading-list>\n    <div\n      aria-live=\"polite\"\n      aria-labelledby=\"confirmationTitle\"\n      aria-describedby=\"confirmationDescription\"\n      class=\"adf-upload-dialog__confirmation\"\n      [class.adf-upload-dialog--hide]=\"!isConfirmation\">\n      <p role=\"heading\" aria-level=\"2\" id=\"confirmationTitle\" class=\"adf-upload-dialog__confirmation--title\">\n        {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TITLE' | translate }}\n      </p>\n      <p id=\"confirmationDescription\" class=\"adf-upload-dialog__confirmation--text\">\n        {{ 'ADF_FILE_UPLOAD.CONFIRMATION.MESSAGE.TEXT' | translate }}\n      </p>\n    </div>\n  </section>\n  @if (!isConfirmation) {\n    <footer class=\"adf-upload-dialog__actions\">\n      @if (canShowCancelAll()) {\n        <button\n          id=\"adf-upload-dialog-cancel-all\"\n          [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.STOP_ALL' | translate\"\n          color=\"primary\"\n          mat-button\n          (click)=\"toggleConfirmation()\"\n        >{{ 'ADF_FILE_UPLOAD.BUTTON.STOP_ALL' | translate }}</button>\n      }\n      @if (canCloseDialog()) {\n        <button\n          id=\"adf-upload-dialog-close\"\n          [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.DIALOG_CLOSE' | translate\"\n          mat-button\n          color=\"primary\"\n          (click)=\"close()\"\n        >{{ 'ADF_FILE_UPLOAD.BUTTON.CLOSE' | translate }}</button>\n      }\n    </footer>\n  }\n  @if (isConfirmation) {\n    <footer class=\"adf-upload-dialog__actions\"\n      cdkTrapFocus cdkTrapFocusAutoCapture>\n      <button\n        id=\"adf-upload-dialog-cancel\"\n        [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CANCEL' | translate\"\n        mat-button\n        (click)=\"cancelAllUploads()\"\n      >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CANCEL' | translate }}</button>\n      <button\n        id=\"adf-upload-dialog-confirm\"\n        [attr.aria-label]=\"'ADF_FILE_UPLOAD.ARIA-LABEL.CONFIRMATION.CONTINUE' | translate\"\n        mat-button\n        color=\"primary\"\n        (click)=\"toggleConfirmation()\"\n      >{{ 'ADF_FILE_UPLOAD.CONFIRMATION.BUTTON.CONTINUE' | translate }}</button>\n    </footer>\n  }\n</div>\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { SearchCategory } from '../../search/models/search-category.interface';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ContentNodeSelectorPanelService {\n    propertyTypes = ['d:text', 'd:date', 'd:datetime'];\n    modelPropertyTypeToSearchFilterTypeMap = new Map<string, string>();\n    customModels: any[];\n\n    constructor() {\n        this.modelPropertyTypeToSearchFilterTypeMap.set(this.propertyTypes[0], 'text');\n        this.modelPropertyTypeToSearchFilterTypeMap.set(this.propertyTypes[1], 'date-range');\n        this.modelPropertyTypeToSearchFilterTypeMap.set(this.propertyTypes[2], 'datetime-range');\n    }\n\n    convertCustomModelPropertiesToSearchCategories(): SearchCategory[] {\n        const searchConfig: SearchCategory[] = [];\n        this.customModels?.forEach((propertyModel) => {\n            searchConfig.push(this.convertModelPropertyIntoSearchFilter(propertyModel));\n        });\n\n        return searchConfig;\n    }\n\n    convertModelPropertyIntoSearchFilter(modelProperty: any): SearchCategory {\n        let filterSearch: SearchCategory;\n        if (this.isTypeSupported(modelProperty.dataType)) {\n            filterSearch = {\n                id: modelProperty.prefixedName,\n                name: modelProperty.prefixedName,\n                expanded: false,\n                enabled: true,\n                component: {\n                    selector: this.modelPropertyTypeToSearchFilterTypeMap.get(modelProperty.dataType),\n                    settings: {\n                        pattern: `${modelProperty.prefixedName}:'(.*?)'`,\n                        field: `${modelProperty.prefixedName}`,\n                        placeholder: `Enter the ${modelProperty.name}`\n                    }\n                }\n            };\n        }\n        return filterSearch;\n    }\n\n    isTypeSupported(dataType: string): boolean {\n        return this.propertyTypes.includes(dataType);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AfterContentInit, Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n    standalone: true,\n    selector: '[adf-auto-focus]'\n})\nexport class AutoFocusDirective implements AfterContentInit {\n    private readonly el = inject(ElementRef);\n\n    public ngAfterContentInit() {\n        setTimeout(() => {\n            this.el.nativeElement.focus();\n        }, 100);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { InfiniteSelectScrollDirective, AuthenticationService } from '@alfresco/adf-core';\nimport { SitePaging, SiteEntry, Site } from '@alfresco/js-api';\nimport { MatSelectChange, MatSelectModule } from '@angular/material/select';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { SitesService } from '../../common/services/sites.service';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\n/* eslint-disable no-shadow */\n/* eslint-disable @typescript-eslint/naming-convention */\n\nexport const Relations = {\n    Members: 'members',\n    Containers: 'containers'\n} as const;\n\nexport type Relations = (typeof Relations)[keyof typeof Relations];\n\n@Component({\n    selector: 'adf-sites-dropdown',\n    imports: [CommonModule, TranslatePipe, MatFormFieldModule, MatSelectModule, InfiniteSelectScrollDirective],\n    templateUrl: './sites-dropdown.component.html',\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-sites-dropdown' }\n})\nexport class DropdownSitesComponent implements OnInit {\n    private readonly authService = inject(AuthenticationService);\n    private readonly sitesService = inject(SitesService);\n    private readonly liveAnnouncer = inject(LiveAnnouncer);\n    private readonly translateService = inject(TranslateService);\n\n    /** Hide the \"My Files\" option. */\n    @Input()\n    hideMyFiles: boolean = false;\n\n    /**\n     * A custom list of sites to be displayed by the dropdown. If no value\n     * is given, the sites of the current user are displayed by default. A\n     * list of objects only with properties 'title' and 'guid' is enough to\n     * be able to display the dropdown.\n     */\n    @Input()\n    siteList: SitePaging = null;\n\n    /** Id of the selected site */\n    @Input()\n    value: string = null;\n\n    /**\n     * Text or a translation key to act as a placeholder. Default value is the\n     * key \"DROPDOWN.PLACEHOLDER_LABEL\".\n     */\n    @Input()\n    placeholder: string = 'DROPDOWN.PLACEHOLDER_LABEL';\n\n    /**\n     * Filter for the results of the sites query. Possible values are\n     * \"members\" and \"containers\". When \"members\" is used, the site list\n     * will be restricted to the sites that the user is a member of.\n     */\n    @Input()\n    relations: string;\n\n    /**\n     * Emitted when the user selects a site. When the default option is selected,\n     * an empty model is emitted.\n     */\n    @Output()\n    change = new EventEmitter<SiteEntry>();\n\n    @Output()\n    error = new EventEmitter<any>();\n\n    private loading = true;\n    private skipCount = 0;\n\n    selected: SiteEntry = null;\n    MY_FILES_VALUE = '-my-';\n\n    get isLoading(): boolean {\n        return this.loading;\n    }\n\n    ngOnInit() {\n        if (!this.siteList) {\n            this.loadSiteList();\n        }\n    }\n\n    loadAllOnScroll() {\n        if (this.isInfiniteScrollingEnabled()) {\n            this.loading = true;\n            this.loadSiteList();\n        }\n    }\n\n    selectedSite(event: MatSelectChange) {\n        this.liveAnnouncer.announce(\n            this.translateService.instant('ADF_DROPDOWN.SELECTION_ARIA_LABEL', {\n                placeholder: this.translateService.instant(this.placeholder),\n                selectedOption: this.translateService.instant(event.value.entry.title)\n            })\n        );\n        this.change.emit(event.value);\n    }\n\n    private loadSiteList() {\n        const extendedOptions: { skipCount: number; maxItems: number; relations?: string[] } = {\n            skipCount: this.skipCount,\n            maxItems: InfiniteSelectScrollDirective.MAX_ITEMS\n        };\n\n        this.skipCount += InfiniteSelectScrollDirective.MAX_ITEMS;\n\n        if (this.relations) {\n            extendedOptions.relations = [this.relations];\n        }\n\n        this.sitesService.getSites(extendedOptions).subscribe({\n            next: (sitePaging: SitePaging) => {\n                if (!this.siteList) {\n                    this.siteList = this.relations === Relations.Members ? this.filteredResultsByMember(sitePaging) : sitePaging;\n\n                    if (!this.hideMyFiles) {\n                        const siteEntry = new SiteEntry({\n                            entry: new Site({ id: this.MY_FILES_VALUE, guid: this.MY_FILES_VALUE, title: 'DROPDOWN.MY_FILES_OPTION' })\n                        });\n\n                        this.siteList.list.entries.unshift(siteEntry);\n\n                        if (!this.value) {\n                            this.value = this.MY_FILES_VALUE;\n                        }\n                    }\n                } else {\n                    const siteList: SitePaging = this.relations === Relations.Members ? this.filteredResultsByMember(sitePaging) : sitePaging;\n\n                    this.siteList.list.entries = this.siteList.list.entries.concat(siteList.list.entries);\n                    this.siteList.list.pagination = sitePaging.list.pagination;\n                }\n\n                this.selected = this.siteList.list.entries.find((site: SiteEntry) => site.entry.id === this.value);\n\n                if (this.value && !this.selected && this.siteListHasMoreItems()) {\n                    this.loadSiteList();\n                }\n            },\n            error: (error) => {\n                this.loading = false;\n                this.error.emit(error);\n            },\n            complete: () => {\n                this.loading = false;\n            }\n        });\n    }\n\n    showLoading(): boolean {\n        return this.loading && this.siteListHasMoreItems();\n    }\n\n    isInfiniteScrollingEnabled(): boolean {\n        return !this.loading && this.siteListHasMoreItems();\n    }\n\n    private siteListHasMoreItems(): boolean {\n        return this.siteList?.list.pagination?.hasMoreItems;\n    }\n\n    private filteredResultsByMember(sites: SitePaging): SitePaging {\n        const loggedUserName = this.authService.getUsername();\n        sites.list.entries = sites.list.entries.filter((site) => this.isCurrentUserMember(site, loggedUserName));\n        return sites;\n    }\n\n    private isCurrentUserMember(site: SiteEntry, loggedUserName: string): boolean {\n        return (\n            site.entry.visibility === 'PUBLIC' ||\n            !!site.relations.members.list.entries.find((member) => member.entry.id.toLowerCase() === loggedUserName.toLowerCase())\n        );\n    }\n}\n","<div id=\"site-dropdown-container\" class=\"adf-site-dropdown-container\">\n    <mat-form-field class=\"adf-sites-dropdown-form-field\">\n        <mat-label>{{ 'NODE_SELECTOR.LOCATION' | translate }}</mat-label>\n        <mat-select\n            adf-infinite-select-scroll\n            (scrollEnd)=\"loadAllOnScroll()\"\n            #siteSelect\n            data-automation-id=\"site-my-files-option\"\n            class=\"adf-site-dropdown-list-element\"\n            id=\"site-dropdown\"\n            placeholder=\"{{placeholder | translate}}\"\n            [(value)]=\"selected\"\n            placeholder=\"{{placeholder | translate}}\"\n            (selectionChange)=\"selectedSite($event)\">\n            <mat-select-trigger class=\"adf-sites-dropdown-select-trigger\">\n                {{ selected?.entry.title | translate}}\n            </mat-select-trigger>\n            <mat-option *ngFor=\"let site of siteList?.list.entries;\" [value]=\"site\">\n                {{ site.entry.title | translate}}\n            </mat-option>\n            <mat-option *ngIf=\"showLoading()\" disabled=\"true\" data-automation-id=\"site-loading\">\n                {{ 'ADF_DROPDOWN.LOADING' | translate}}\n            </mat-option>\n        </mat-select>\n    </mat-form-field>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Input, ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { DataRow } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-name-location-cell',\n    template: `\n        <div class=\"adf-name-location-cell-name adf-datatable-cell-value\" [title]=\"name\">{{ name }}</div>\n        <div class=\"adf-name-location-cell-location adf-datatable-cell-value\" [title]=\"path\">{{ path }}</div>\n    `,\n    styleUrls: ['./name-location-cell.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: { class: 'adf-name-location-cell adf-datatable-content-cell' }\n})\nexport class NameLocationCellComponent implements OnInit {\n    name: string = '';\n    path: string = '';\n\n    @Input()\n    row: DataRow;\n\n    ngOnInit() {\n        if (this.row) {\n            this.name = this.row.getValue('name');\n\n            const fullPath = this.row.getValue('path');\n            if (fullPath) {\n                this.path = fullPath.name || '';\n            }\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { SearchWidgetContainerComponent } from '../../search-widget-container/search-widget-container.component';\nimport { SearchCategory } from '../../../models/search-category.interface';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n    selector: 'adf-search-filter-card',\n    imports: [CommonModule, SearchWidgetContainerComponent, TranslatePipe, MatButtonModule],\n    templateUrl: './search-filter-card.component.html',\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFilterCardComponent {\n    @Input({ required: true })\n    category: SearchCategory;\n\n    @ViewChild(SearchWidgetContainerComponent, { static: false })\n    widgetContainerComponent: SearchWidgetContainerComponent;\n\n    clear() {\n        this.widgetContainerComponent.resetInnerWidget();\n    }\n\n    apply() {\n        this.widgetContainerComponent.applyInnerWidget();\n    }\n}\n","<div class=\"adf-search-filter-card\">\n    <adf-search-widget-container\n        [id]=\"category.id\"\n        [selector]=\"category.component.selector\"\n        [settings]=\"category.component.settings\" />\n    <div\n        *ngIf=\"!category?.component?.settings?.hideDefaultAction\"\n        class=\"adf-search-filter-card-actions\"\n    >\n        <button mat-button class=\"adf-search-action-button\" (click)=\"clear()\" id=\"clear-filter-button\">\n            {{ 'SEARCH.FILTER.BUTTONS.CLEAR' | translate }}\n        </button>\n        <button mat-flat-button class=\"adf-search-action-button\" color=\"primary\" (click)=\"apply()\" id=\"apply-filter-button\">\n            {{ 'SEARCH.FILTER.BUTTONS.APPLY' | translate }}\n        </button>\n    </div>\n</div>","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Directive, HostListener, inject } from '@angular/core';\nimport { SearchFacetFiltersService } from '../services/search-facet-filters.service';\n\n@Directive({\n    selector: '[adf-reset-search]'\n})\nexport class ResetSearchDirective {\n    private readonly filterService = inject(SearchFacetFiltersService);\n\n    @HostListener('click')\n    onClick() {\n        this.filterService.reset();\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { FacetField } from '../../models/facet-field.interface';\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\nimport { FacetFieldBucket } from '../../models/facet-field-bucket.interface';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { SearchFacetFiltersService } from '../../services/search-facet-filters.service';\nimport { FacetWidget } from '../../models/facet-widget.interface';\nimport { IconModule, TranslationService } from '@alfresco/adf-core';\nimport { Subject } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n    selector: 'adf-search-facet-field',\n    imports: [CommonModule, MatButtonModule, IconModule, MatFormFieldModule, MatInputModule, TranslatePipe, FormsModule, MatCheckboxModule],\n    templateUrl: './search-facet-field.component.html',\n    styleUrls: ['./search-facet-field.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFacetFieldComponent implements FacetWidget {\n    private readonly queryBuilder = inject(SearchQueryBuilderService);\n    private readonly searchFacetFiltersService = inject(SearchFacetFiltersService);\n    private readonly translationService = inject(TranslationService);\n\n    @Input({ required: true })\n    field: FacetField;\n\n    displayValue$: Subject<string> = new Subject<string>();\n\n    get canUpdateOnChange() {\n        return this.field.settings?.allowUpdateOnChange ?? true;\n    }\n\n    onToggleBucket(event: MatCheckboxChange, field: FacetField, bucket: FacetFieldBucket) {\n        if (event && bucket) {\n            if (event.checked) {\n                this.selectFacetBucket(field, bucket);\n            } else {\n                this.unselectFacetBucket(field, bucket);\n            }\n        }\n    }\n\n    selectFacetBucket(field: FacetField, bucket: FacetFieldBucket) {\n        if (bucket) {\n            bucket.checked = true;\n            this.queryBuilder.addUserFacetBucket(field.field, bucket);\n            this.searchFacetFiltersService.updateSelectedBuckets();\n            if (this.canUpdateOnChange) {\n                this.updateDisplayValue();\n                this.queryBuilder.update();\n            }\n        }\n    }\n\n    unselectFacetBucket(field: FacetField, bucket: FacetFieldBucket) {\n        if (bucket) {\n            bucket.checked = false;\n            this.queryBuilder.removeUserFacetBucket(field.field, bucket);\n            this.searchFacetFiltersService.updateSelectedBuckets();\n            if (this.canUpdateOnChange) {\n                this.updateDisplayValue();\n                this.queryBuilder.update();\n            }\n        }\n    }\n\n    canResetSelectedBuckets(field: FacetField): boolean {\n        if (field?.buckets) {\n            return field.buckets.items.some((bucket) => bucket.checked);\n        }\n        return false;\n    }\n\n    resetSelectedBuckets(field: FacetField) {\n        if (field?.buckets) {\n            for (const bucket of field.buckets.items) {\n                bucket.checked = false;\n                this.queryBuilder.removeUserFacetBucket(field.field, bucket);\n            }\n            this.searchFacetFiltersService.updateSelectedBuckets();\n            if (this.canUpdateOnChange) {\n                this.queryBuilder.update();\n            }\n        }\n    }\n\n    getBucketCountDisplay(bucket: FacetFieldBucket): string {\n        return bucket.count === null ? '' : `(${bucket.count})`;\n    }\n\n    updateDisplayValue(): void {\n        if (!this.field.buckets?.items) {\n            this.displayValue$.next('');\n        } else {\n            const displayValue = this.field.buckets?.items\n                ?.filter((item) => item.checked)\n                .map((item) => this.translationService.instant(item.display || item.label))\n                .join(', ');\n            this.displayValue$.next(displayValue);\n        }\n    }\n\n    reset(): void {\n        this.resetSelectedBuckets(this.field);\n        this.updateDisplayValue();\n        this.queryBuilder.update();\n    }\n\n    submitValues(): void {\n        this.updateDisplayValue();\n        this.queryBuilder.update();\n    }\n}\n","<div class=\"adf-search-filter-facet\">\n    <mat-form-field>\n        <input\n            matInput\n            placeholder=\"{{ 'SEARCH.FILTER.ACTIONS.SEARCH' | translate }}\"\n            [attr.data-automation-id]=\"'facet-result-filter-' + field.label\"\n            [(ngModel)]=\"field.buckets.filterText\"\n        />\n        @if (field.buckets.filterText) {\n            <button\n                matSuffix\n                mat-icon-button\n                [attr.title]=\"'SEARCH.FILTER.BUTTONS.CLEAR' | translate\"\n                (click)=\"field.buckets.filterText = ''\"\n            >\n                <mat-icon [attr.aria-label]=\"'SEARCH.FILTER.BUTTONS.CLEAR' | translate\" adf-icon=\"clear\" />\n            </button>\n        } @else {\n            <mat-icon matSuffix aria-hidden adf-icon=\"search\" />\n        }\n    </mat-form-field>\n\n    <div class=\"adf-checklist\">\n        <mat-checkbox\n            *ngFor=\"let bucket of field.buckets\"\n            [checked]=\"bucket.checked\"\n            [attr.data-automation-id]=\"'checkbox-' + field.label + '-' + (bucket.display || bucket.label)\"\n            (change)=\"onToggleBucket($event, field, bucket)\"\n            class=\"adf-search-filter-facet-checkbox\"\n        >\n            <div\n                title=\"{{ bucket.display || bucket.label | translate }} {{ getBucketCountDisplay(bucket) }}\"\n                class=\"adf-facet-label\"\n                [class.adf-search-filter-facet-checkbox-checked]=\"bucket.checked\"\n            >\n                {{ bucket.display || bucket.label | translate }} {{ getBucketCountDisplay(bucket) }}\n            </div>\n        </mat-checkbox>\n    </div>\n\n    <div class=\"adf-facet-buttons\" *ngIf=\"field.buckets.fitsPage && !field.settings?.hideDefaultAction\">\n        <button *ngIf=\"canResetSelectedBuckets(field)\" mat-button color=\"primary\" (click)=\"resetSelectedBuckets(field)\">\n            {{ 'SEARCH.FILTER.ACTIONS.CLEAR-ALL' | translate }}\n        </button>\n    </div>\n\n    <div class=\"adf-facet-buttons\" *ngIf=\"!field.buckets.fitsPage\">\n        <button\n            mat-icon-button\n            *ngIf=\"canResetSelectedBuckets(field)\"\n            title=\"{{ 'SEARCH.FILTER.ACTIONS.CLEAR-ALL' | translate }}\"\n            (click)=\"resetSelectedBuckets(field)\"\n        >\n            <mat-icon adf-icon=\"clear\" />\n        </button>\n        <button\n            mat-icon-button\n            *ngIf=\"field.buckets.canShowLessItems\"\n            (click)=\"field.buckets.showLessItems()\"\n            title=\"{{ 'SEARCH.FILTER.ACTIONS.SHOW-LESS' | translate }}\"\n        >\n            <mat-icon adf-icon=\"keyboard_arrow_up\" />\n        </button>\n        <button\n            mat-icon-button\n            *ngIf=\"field.buckets.canShowMoreItems\"\n            (click)=\"field.buckets.showMoreItems()\"\n            title=\"{{ 'SEARCH.FILTER.ACTIONS.SHOW-MORE' | translate }}\"\n        >\n            <mat-icon adf-icon=\"keyboard_arrow_down\" />\n        </button>\n    </div>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-facet-field.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, EventEmitter, Output, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-search-filter-menu-card',\n    imports: [CommonModule, MatButtonModule, TranslatePipe, IconModule, MatDividerModule],\n    templateUrl: './search-filter-menu-card.component.html',\n    styleUrls: ['./search-filter-menu-card.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFilterMenuCardComponent {\n    @Output()\n    close = new EventEmitter();\n\n    onClose() {\n        this.close.emit();\n    }\n}\n","<div class=\"adf-search-filter-menu-card\">\n    <div class=\"adf-search-filter-title\">\n        <ng-content select=\"filter-title\" />\n        <button mat-icon-button\n            class=\"adf-search-filter-title-action\"\n            aria-hidden=\"false\"\n            (click)=\"onClose()\"\n            [title]=\"'SEARCH.FILTER.BUTTONS.CLOSE' | translate\">\n            <mat-icon adf-icon=\"close\" />\n        </button>\n    </div>\n\n    <mat-divider aria-hidden=\"true\" />\n\n    <div class=\"adf-search-filter-content\">\n        <ng-content select=\"filter-content\" />\n    </div>\n\n    <mat-divider aria-hidden=\"true\" />\n\n    <div class=\"adf-search-filter-actions\">\n        <ng-content select=\"filter-actions\" />\n    </div>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ElementRef, Input, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';\nimport { FacetField } from '../../../models/facet-field.interface';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { SearchFacetFieldComponent } from '../../search-facet-field/search-facet-field.component';\nimport { CommonModule } from '@angular/common';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchFilterMenuCardComponent } from '../search-filter-menu-card/search-filter-menu-card.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-search-facet-chip',\n    imports: [\n        CommonModule,\n        MatChipsModule,\n        MatMenuModule,\n        TranslatePipe,\n        IconModule,\n        SearchFilterMenuCardComponent,\n        MatButtonModule,\n        SearchFacetFieldComponent\n    ],\n    templateUrl: './search-facet-chip.component.html',\n    styleUrls: ['./search-facet-chip.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFacetChipComponent {\n    private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n\n    @Input({ required: true })\n    field: FacetField;\n\n    @ViewChild('menuContainer', { static: false })\n    menuContainer: ElementRef;\n\n    @ViewChild('menuTrigger', { static: false })\n    menuTrigger: MatMenuTrigger;\n\n    @ViewChild(SearchFacetFieldComponent, { static: false })\n    facetFieldComponent: SearchFacetFieldComponent;\n\n    focusTrap: ConfigurableFocusTrap;\n    chipIcon = 'keyboard_arrow_down';\n\n    onMenuOpen() {\n        if (this.menuContainer && !this.focusTrap) {\n            this.focusTrap = this.focusTrapFactory.create(this.menuContainer.nativeElement);\n        }\n        this.chipIcon = 'keyboard_arrow_up';\n    }\n\n    onClosed() {\n        this.focusTrap.destroy();\n        this.focusTrap = null;\n        this.chipIcon = 'keyboard_arrow_down';\n    }\n\n    onRemove() {\n        this.facetFieldComponent.reset();\n        this.menuTrigger.closeMenu();\n    }\n\n    onApply() {\n        this.facetFieldComponent.submitValues();\n        this.menuTrigger.closeMenu();\n    }\n\n    onEnterKeydown(): void {\n        if (this.isPopulated()) {\n            if (!this.menuTrigger.menuOpen) {\n                this.menuTrigger.openMenu();\n            } else {\n                this.menuTrigger.closeMenu();\n            }\n        }\n    }\n\n    onEscKeydown() {\n        if (this.menuTrigger.menuOpen) {\n            this.menuTrigger.closeMenu();\n        }\n    }\n\n    isPopulated(): boolean {\n        return this.field.buckets?.items.length > 0;\n    }\n}\n","<mat-chip [attr.data-automation-id]=\"'search-filter-chip-' + field.label\"\n          [disableRipple]=\"true\"\n          class=\"adf-search-filter-chip adf-search-filter-facet-chip\"\n          [class.adf-search-toggle-chip]=\"(facetField.displayValue$ | async) || menuTrigger.menuOpen\"\n          [disabled]=\"!isPopulated()\"\n          tabindex=\"0\"\n          [matMenuTriggerFor]=\"menu\"\n          (menuOpened)=\"onMenuOpen()\"\n          (keydown.enter)=\"onEnterKeydown()\"\n          (keydown.escape)=\"onEscKeydown()\"\n          [attr.title]=\"facetField.displayValue$ | async\"\n          #menuTrigger=\"matMenuTrigger\">\n\n    <span class=\"adf-search-filter-placeholder\">\n        <span class=\"adf-search-filter-ellipsis\">{{ field.label | translate }}:</span>\n    </span>\n\n    <span class=\"adf-search-filter-ellipsis adf-filter-value\" *ngIf=\"facetField.displayValue$ | async as displayValue; else showAny\">\n        &nbsp; {{ displayValue | translate }}\n    </span>\n    <ng-template #showAny><span class=\"adf-search-filter-ellipsis adf-filter-value\">&nbsp;{{ 'SEARCH.FILTER.ANY' | translate }}</span></ng-template>\n    <mat-icon *ngIf=\"isPopulated(); else disabledIcon\" [adf-icon]=\"chipIcon\" />\n    <ng-template #disabledIcon>\n        <mat-icon adf-icon=\"remove\" />\n    </ng-template>\n</mat-chip>\n\n<mat-menu #menu=\"matMenu\" backdropClass=\"adf-search-filter-chip-menu\" (closed)=\"onClosed()\">\n    <div #menuContainer [attr.data-automation-id]=\"'search-field-' + field.label\">\n        <adf-search-filter-menu-card (click)=\"$event.stopPropagation()\"\n                                     (keydown.tab)=\"$event.stopPropagation();\"\n                                     (keydown.shift.tab)=\"$event.stopPropagation()\"\n                                     (close)=\"menuTrigger.closeMenu()\">\n            <ng-container ngProjectAs=\"filter-title\">\n                {{ field.label | translate }}\n            </ng-container>\n            <ng-container ngProjectAs=\"filter-content\">\n                <adf-search-facet-field [field]=\"field\" #facetField />\n            </ng-container>\n            <ng-container ngProjectAs=\"filter-actions\">\n                <button mat-button class=\"adf-search-action-button\" (click)=\"onRemove()\" id=\"cancel-filter-button\">\n                    {{ 'SEARCH.FILTER.BUTTONS.CLEAR' | translate }}\n                </button>\n                <button mat-flat-button class=\"adf-search-action-button\" color=\"primary\" (click)=\"onApply()\" id=\"apply-filter-button\">\n                    {{ 'SEARCH.FILTER.BUTTONS.APPLY' | translate }}\n                </button>\n            </ng-container>\n        </adf-search-filter-menu-card>\n    </div>\n</mat-menu>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-filter-tab.directive';\nexport * from './search-filter-tabbed.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { SearchQueryBuilderService } from '../../../services/search-query-builder.service';\nimport { FacetWidget } from '../../../models/facet-widget.interface';\nimport { TranslationService } from '@alfresco/adf-core';\nimport { AutocompleteOption } from '../../../models/autocomplete-option.interface';\nimport { TabbedFacetField } from '../../../models/tabbed-facet-field.interface';\nimport { SearchFacetFiltersService } from '../../../services/search-facet-filters.service';\nimport { CommonModule } from '@angular/common';\nimport { SearchChipAutocompleteInputComponent } from '../../search-chip-autocomplete-input';\nimport { SearchFilterTabbedComponent } from '../../search-filter-tabbed/search-filter-tabbed.component';\nimport { SearchFilterTabDirective } from '../../search-filter-tabbed';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-search-facet-tabbed-content',\n    imports: [CommonModule, SearchChipAutocompleteInputComponent, SearchFilterTabbedComponent, SearchFilterTabDirective],\n    templateUrl: './search-facet-tabbed-content.component.html',\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFacetTabbedContentComponent implements OnInit, OnChanges, FacetWidget {\n    private readonly queryBuilder = inject(SearchQueryBuilderService);\n    private readonly translationService = inject(TranslationService);\n    private readonly searchFacetFiltersService = inject(SearchFacetFiltersService);\n\n    @Input({ required: true })\n    tabbedFacet: TabbedFacetField;\n\n    @Input()\n    onReset$: Observable<void>;\n\n    @Input()\n    onApply$: Observable<void>;\n\n    @Output()\n    isPopulated = new EventEmitter<boolean>();\n\n    @Output()\n    displayValue$ = new EventEmitter<string>();\n\n    private readonly resetSubject$ = new Subject<void>();\n\n    reset$ = this.resetSubject$.asObservable();\n    chipIcon = 'keyboard_arrow_down';\n    autocompleteOptions = {};\n    selectedOptions = {};\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.tabbedFacet.fields.forEach((field) => {\n            Object.defineProperty(this.selectedOptions, field, {\n                value: [],\n                writable: true\n            });\n        });\n\n        this.onReset$?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.reset());\n        this.onApply$?.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.submitValues());\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.tabbedFacet) {\n            this.isPopulated.emit(this.tabbedFacet.fields.some((field) => this.tabbedFacet.facets[field]?.buckets.items.length > 0));\n            this.tabbedFacet.fields.forEach((field) => {\n                const options: AutocompleteOption[] = this.tabbedFacet.facets[field].buckets.items.map((item) => ({ value: item.display }));\n                Object.defineProperty(this.autocompleteOptions, field, {\n                    value: options,\n                    writable: true\n                });\n            });\n        }\n    }\n\n    onOptionsChange(selectedOptions: AutocompleteOption[], field: string) {\n        this.selectedOptions[field] = selectedOptions.map((selectedOption) => selectedOption.value);\n        this.isPopulated.emit(this.tabbedFacet.fields.some((facetField) => this.selectedOptions[facetField].length > 0));\n        this.updateDisplayValue();\n        this.updateUserFacetBuckets();\n    }\n\n    updateDisplayValue() {\n        let displayValue = '';\n        this.tabbedFacet.fields.forEach((field) => {\n            if (this.selectedOptions[field].length > 0) {\n                const stackedOptions = this.selectedOptions[field].join(', ');\n                displayValue += `${this.translationService.instant(this.tabbedFacet.facets[field].label + '_LABEL')}: ${stackedOptions} `;\n            }\n        });\n        this.displayValue$.emit(displayValue);\n    }\n\n    reset() {\n        this.resetSubject$.next();\n        this.updateUserFacetBuckets();\n        this.updateDisplayValue();\n        this.queryBuilder.update();\n    }\n\n    submitValues() {\n        this.updateUserFacetBuckets();\n        this.searchFacetFiltersService.updateSelectedBuckets();\n        this.updateDisplayValue();\n        this.queryBuilder.update();\n    }\n\n    optionComparator(option1: AutocompleteOption, option2: AutocompleteOption): boolean {\n        return option1.value.toUpperCase() === option2.value.toUpperCase();\n    }\n\n    private updateUserFacetBuckets() {\n        this.tabbedFacet.fields.forEach((field) => {\n            this.tabbedFacet.facets[field].buckets.items.forEach((item) => {\n                const matchedOption = this.selectedOptions[field].find((option) => option === item.display);\n                if (matchedOption) {\n                    item.checked = true;\n                    this.queryBuilder.addUserFacetBucket(field, item);\n                } else {\n                    item.checked = false;\n                    this.queryBuilder.removeUserFacetBucket(field, item);\n                }\n            });\n        });\n    }\n}\n","<adf-search-filter-tabbed>\n    <ng-container *ngFor=\"let field of tabbedFacet.fields\">\n        <adf-search-chip-autocomplete-input\n            *adf-search-filter-tab=\"tabbedFacet.facets[field]?.label\"\n            [autocompleteOptions]=\"autocompleteOptions[field]\"\n            [onReset$]=\"reset$\"\n            [allowOnlyPredefinedValues]=\"true\"\n            [compareOption]=\"optionComparator\"\n            (optionsChanged)=\"onOptionsChange($event, field)\" />\n    </ng-container>\n</adf-search-filter-tabbed>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChangeDetectorRef, Component, ElementRef, Input, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { TabbedFacetField } from '../../../models/tabbed-facet-field.interface';\nimport { Subject } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchFacetTabbedContentComponent } from './search-facet-tabbed-content.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { SearchFilterMenuCardComponent } from '../search-filter-menu-card/search-filter-menu-card.component';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-search-facet-chip-tabbed',\n    imports: [\n        CommonModule,\n        MatChipsModule,\n        MatMenuModule,\n        TranslatePipe,\n        IconModule,\n        SearchFacetTabbedContentComponent,\n        MatButtonModule,\n        SearchFilterMenuCardComponent\n    ],\n    templateUrl: './search-facet-chip-tabbed.component.html',\n    styleUrls: ['./search-facet-chip-tabbed.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFacetChipTabbedComponent {\n    private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n    private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n    @Input()\n    tabbedFacet: TabbedFacetField;\n\n    @ViewChild('menuContainer', { static: false })\n    menuContainer: ElementRef;\n\n    @ViewChild('menuTrigger', { static: false })\n    menuTrigger: MatMenuTrigger;\n\n    private readonly resetSubject$ = new Subject<void>();\n    private readonly applySubject$ = new Subject<void>();\n\n    displayValue = '';\n    reset$ = this.resetSubject$.asObservable();\n    apply$ = this.applySubject$.asObservable();\n    focusTrap: ConfigurableFocusTrap;\n    chipIcon = 'keyboard_arrow_down';\n    isPopulated = false;\n\n    onMenuOpen() {\n        setTimeout(() => {\n            if (this.menuContainer && !this.focusTrap) {\n                this.focusTrap = this.focusTrapFactory.create(this.menuContainer.nativeElement);\n                this.focusTrap.focusInitialElement();\n            }\n        });\n        this.chipIcon = 'keyboard_arrow_up';\n    }\n\n    onClosed() {\n        this.focusTrap?.destroy();\n        this.focusTrap = null;\n        this.chipIcon = 'keyboard_arrow_down';\n    }\n\n    onRemove() {\n        this.resetSubject$.next();\n        this.menuTrigger.closeMenu();\n    }\n\n    onApply() {\n        this.applySubject$.next();\n        this.menuTrigger.closeMenu();\n    }\n\n    onEnterKeydown() {\n        if (this.isPopulated) {\n            if (!this.menuTrigger.menuOpen) {\n                this.menuTrigger.openMenu();\n            } else {\n                this.menuTrigger.closeMenu();\n            }\n        }\n    }\n\n    onEscKeydown() {\n        if (this.menuTrigger.menuOpen) {\n            this.menuTrigger.closeMenu();\n        }\n    }\n\n    onIsPopulatedEventChange(isPopulated: boolean) {\n        this.isPopulated = isPopulated;\n        this.changeDetectorRef.detectChanges();\n    }\n}\n","<mat-chip [attr.data-automation-id]=\"'search-filter-chip-tabbed-' + tabbedFacet.label\"\n          [disableRipple]=\"true\"\n          class=\"adf-search-filter-chip-tabbed\"\n          [class.adf-search-toggle-chip]=\"displayValue || menuTrigger.menuOpen\"\n          [disabled]=\"!isPopulated\"\n          tabindex=\"0\"\n          [matMenuTriggerFor]=\"menu\"\n          (menuOpened)=\"onMenuOpen()\"\n          (keydown.enter)=\"onEnterKeydown()\"\n          (keydown.escape)=\"onEscKeydown()\"\n          [attr.title]=\"displayValue\"\n          #menuTrigger=\"matMenuTrigger\">\n\n    <span class=\"adf-search-filter-placeholder\">{{ tabbedFacet.label | translate }}:</span>\n\n    <span class=\"adf-search-filter-ellipsis adf-filter-value\" *ngIf=\"displayValue; else showAny\">\n        &nbsp; {{ displayValue | translate }}\n    </span>\n    <ng-template #showAny><span class=\"adf-search-filter-ellipsis adf-filter-value\">&nbsp;{{ 'SEARCH.FILTER.ANY' | translate }}</span></ng-template>\n    <mat-icon class=\"adf-search-filter-chip-icon\" *ngIf=\"isPopulated; else disabledIcon\" [adf-icon]=\"chipIcon\" />\n    <ng-template #disabledIcon>\n        <mat-icon adf-icon=\"remove\" />\n    </ng-template>\n</mat-chip>\n\n<mat-menu #menu=\"matMenu\" class=\"adf-search-widget-extra-width\" backdropClass=\"adf-search-filter-chip-menu\" (closed)=\"onClosed()\">\n    <div #menuContainer [attr.data-automation-id]=\"'search-field-' + tabbedFacet.label\">\n        <adf-search-filter-menu-card (click)=\"$event.stopPropagation()\"\n                                     (keydown.tab)=\"$event.stopPropagation();\"\n                                     (keydown.shift.tab)=\"$event.stopPropagation()\"\n                                     (close)=\"menuTrigger.closeMenu()\">\n            <ng-container ngProjectAs=\"filter-title\">\n                {{ tabbedFacet.label | translate }}\n            </ng-container>\n            <ng-container ngProjectAs=\"filter-content\">\n                <adf-search-facet-tabbed-content [tabbedFacet]=\"tabbedFacet\" (isPopulated)=\"onIsPopulatedEventChange($event)\"\n                                                 [onReset$]=\"reset$\" [onApply$]=\"apply$\" (displayValue$)=\"displayValue = $event\" />\n            </ng-container>\n            <ng-container ngProjectAs=\"filter-actions\">\n                <button mat-button class=\"adf-search-action-button\" (click)=\"onRemove()\" id=\"cancel-filter-button\">\n                    {{ 'SEARCH.FILTER.BUTTONS.CLEAR' | translate }}\n                </button>\n                <button mat-flat-button class=\"adf-search-action-button\" color=\"primary\" (click)=\"onApply()\" id=\"apply-filter-button\">\n                    {{ 'SEARCH.FILTER.BUTTONS.APPLY' | translate }}\n                </button>\n            </ng-container>\n        </adf-search-filter-menu-card>\n    </div>\n</mat-menu>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { SearchCategory } from '../../../models/search-category.interface';\nimport { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { SearchWidgetContainerComponent } from '../../search-widget-container/search-widget-container.component';\nimport { CommonModule } from '@angular/common';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchFilterMenuCardComponent } from '../search-filter-menu-card/search-filter-menu-card.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { first } from 'rxjs/operators';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-search-widget-chip',\n    imports: [\n        CommonModule,\n        MatChipsModule,\n        MatMenuModule,\n        TranslatePipe,\n        IconModule,\n        SearchFilterMenuCardComponent,\n        SearchWidgetContainerComponent,\n        MatButtonModule\n    ],\n    templateUrl: './search-widget-chip.component.html',\n    styles: [\n        `\n            .adf-search-widget-extra-width.adf-search-filter-chip-menu-panel {\n                max-width: 500px;\n            }\n        `\n    ],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchWidgetChipComponent implements AfterViewInit {\n    private readonly cd = inject(ChangeDetectorRef);\n    private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n\n    @Input({ required: true })\n    category: SearchCategory;\n\n    @ViewChild('menuContainer', { static: false })\n    menuContainer: ElementRef;\n\n    @ViewChild('menuTrigger', { read: ElementRef, static: false })\n    menuTriggerEl: ElementRef;\n\n    @ViewChild('menuTrigger', { static: false })\n    menuTrigger: MatMenuTrigger;\n\n    @ViewChild(SearchWidgetContainerComponent, { static: false })\n    widgetContainerComponent: SearchWidgetContainerComponent;\n\n    focusTrap: ConfigurableFocusTrap;\n    chipIcon = 'keyboard_arrow_down';\n\n    ngAfterViewInit(): void {\n        this.widgetContainerComponent\n            ?.getDisplayValue()\n            .pipe(first())\n            .subscribe(() => {\n                this.cd.detectChanges();\n            });\n\n        if (this.menuTriggerEl) {\n            this.menuTriggerEl.nativeElement.setAttribute('aria-haspopup', 'dialog');\n        }\n    }\n\n    onMenuOpen() {\n        setTimeout(() => {\n            if (this.menuContainer && !this.focusTrap) {\n                this.focusTrap = this.focusTrapFactory.create(this.menuContainer.nativeElement);\n                this.focusTrap.focusInitialElement();\n            }\n        });\n        this.chipIcon = 'keyboard_arrow_up';\n    }\n\n    onClosed() {\n        this.focusTrap.destroy();\n        this.focusTrap = null;\n        this.chipIcon = 'keyboard_arrow_down';\n    }\n\n    onRemove() {\n        this.widgetContainerComponent.resetInnerWidget();\n        this.menuTrigger.closeMenu();\n    }\n\n    onApply() {\n        this.widgetContainerComponent.applyInnerWidget();\n        this.menuTrigger.closeMenu();\n    }\n\n    onEnterKeydown(): void {\n        if (!this.menuTrigger.menuOpen) {\n            this.menuTrigger.openMenu();\n        } else {\n            this.menuTrigger.closeMenu();\n        }\n    }\n\n    onEscKeydown() {\n        if (this.menuTrigger.menuOpen) {\n            this.menuTrigger.closeMenu();\n        }\n    }\n}\n","<mat-chip\n    role=\"button\"\n    [attr.data-automation-id]=\"'search-filter-chip-' + category.name\"\n    [disableRipple]=\"true\"\n    class=\"adf-search-filter-chip\"\n    [class.adf-search-toggle-chip]=\"(widget.getDisplayValue() | async) || menuTrigger.menuOpen\"\n    tabindex=\"0\"\n    [matMenuTriggerFor]=\"menu\"\n    (menuOpened)=\"onMenuOpen()\"\n    (keydown.enter)=\"onEnterKeydown()\"\n    (keydown.escape)=\"onEscKeydown()\"\n    [attr.title]=\"widget.getDisplayValue() | async\"\n    [attr.aria-label]=\"category.name | translate\"\n    [attr.aria-expanded]=\"menuTrigger.menuOpen\"\n    [attr.aria-haspopup]=\"'dialog'\"\n    #menuTrigger=\"matMenuTrigger\"\n>\n    <span class=\"adf-search-filter-placeholder\">\n        <span class=\"adf-search-filter-ellipsis\">{{ category.name | translate }}:</span>\n    </span>\n    <span class=\"adf-search-filter-ellipsis adf-filter-value\" *ngIf=\"widget.getDisplayValue() | async as displayValue; else showAny\">\n        &nbsp;{{ displayValue | translate }}\n    </span>\n    <ng-template #showAny\n        ><span class=\"adf-search-filter-ellipsis adf-filter-value\">&nbsp;{{ 'SEARCH.FILTER.ANY' | translate }}</span></ng-template\n    >\n    <mat-icon class=\"adf-search-filter-chip-icon\" [adf-icon]=\"chipIcon\" />\n</mat-chip>\n\n<mat-menu\n    #menu=\"matMenu\"\n    class=\"adf-search-widget-extra-width\"\n    backdropClass=\"adf-search-filter-chip-menu\"\n    [class]=\"'adf-search-filter-chip-menu-panel adf-search-filter-chip-menu-panel-' + category.id\"\n    (closed)=\"onClosed()\"\n    role=\"presentation\"\n>\n    <div\n        [attr.aria-label]=\"category.name | translate\"\n        role=\"dialog\"\n        aria-modal=\"false\"\n        #menuContainer\n        [attr.data-automation-id]=\"'search-field-' + category.name\"\n    >\n        <adf-search-filter-menu-card\n            (click)=\"$event.stopPropagation()\"\n            (keydown.tab)=\"$event.stopPropagation()\"\n            (keydown.shift.tab)=\"$event.stopPropagation()\"\n            (close)=\"menuTrigger.closeMenu()\"\n        >\n            <ng-container ngProjectAs=\"filter-title\">\n                {{ category.name | translate }}\n                <ng-container *ngIf=\"category.component.settings.unit\">({{ category.component.settings.unit }})</ng-container>\n            </ng-container>\n\n            <ng-container ngProjectAs=\"filter-content\">\n                <adf-search-widget-container\n                    #widget\n                    [id]=\"category.id\"\n                    [selector]=\"category.component.selector\"\n                    [settings]=\"category.component.settings\"\n                />\n            </ng-container>\n\n            <ng-container ngProjectAs=\"filter-actions\">\n                <button mat-button class=\"adf-search-action-button\" (click)=\"onRemove()\" id=\"cancel-filter-button\">\n                    {{ 'SEARCH.FILTER.BUTTONS.CLEAR' | translate }}\n                </button>\n                <button mat-flat-button class=\"adf-search-action-button\" color=\"primary\" (click)=\"onApply()\" id=\"apply-filter-button\">\n                    {{ 'SEARCH.FILTER.BUTTONS.APPLY' | translate }}\n                </button>\n            </ng-container>\n        </adf-search-filter-menu-card>\n    </div>\n</mat-menu>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { SearchFacetFiltersService } from '../../services/search-facet-filters.service';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { FacetField, SearchCategory, TabbedFacetField } from '../../models';\nimport { CommonModule } from '@angular/common';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchFacetChipTabbedComponent } from './search-facet-chip-tabbed/search-facet-chip-tabbed.component';\nimport { SearchFacetChipComponent } from './search-facet-chip/search-facet-chip.component';\nimport { SearchWidgetChipComponent } from './search-widget-chip/search-widget-chip.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-search-filter-chips',\n    imports: [CommonModule, MatChipsModule, TranslatePipe, SearchFacetChipTabbedComponent, SearchFacetChipComponent, SearchWidgetChipComponent],\n    templateUrl: './search-filter-chips.component.html',\n    styleUrls: ['./search-filter-chips.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFilterChipsComponent implements OnInit {\n    private readonly queryBuilder = inject(SearchQueryBuilderService);\n    private readonly facetFiltersService = inject(SearchFacetFiltersService);\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    /** Toggles whether to show or not the context facet filters. */\n    @Input()\n    showContextFacets: boolean = true;\n\n    facetChipTabbedId = '';\n\n    get categories(): SearchCategory[] {\n        return this.queryBuilder.categories || [];\n    }\n\n    get tabbedFacet(): TabbedFacetField | null {\n        return this.facetFiltersService.tabbedFacet;\n    }\n\n    get responseFacets(): FacetField[] {\n        return this.facetFiltersService.responseFacets || [];\n    }\n\n    ngOnInit() {\n        this.queryBuilder.executed\n            .asObservable()\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => (this.facetChipTabbedId = 'search-fact-chip-tabbed-' + this.facetFiltersService.tabbedFacet?.fields.join('-')));\n    }\n}\n","<mat-chip-set [attr.aria-label]=\"'SEARCH.FILTER.ARIA-LABEL.SEARCH_FILTER' | translate\">\n    <ng-container *ngFor=\"let category of categories\">\n        <adf-search-widget-chip [category]=\"category\" />\n    </ng-container>\n\n    <ng-container *ngIf=\"showContextFacets && tabbedFacet\">\n        <adf-search-facet-chip-tabbed\n            [tabbedFacet]=\"tabbedFacet\"\n            [attr.data-automation-id]=\"facetChipTabbedId\" />\n    </ng-container>\n\n    <ng-container *ngIf=\"showContextFacets && responseFacets\">\n        <ng-container *ngFor=\"let field of responseFacets\">\n            <adf-search-facet-chip [field]=\"field\" [attr.data-automation-id]=\"'search-fact-chip-' + field.field\" />\n        </ng-container>\n    </ng-container>\n\n    <ng-content />\n</mat-chip-set>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-facet-chip/search-facet-chip.component';\nexport * from './search-facet-chip-tabbed/search-facet-chip-tabbed.component';\nexport * from './search-facet-chip-tabbed/search-facet-tabbed-content.component';\nexport * from './search-filter-menu-card/search-filter-menu-card.component';\nexport * from './search-widget-chip/search-widget-chip.component';\nexport * from './search-filter-chips.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { FacetFieldBucket } from '../../models/facet-field-bucket.interface';\nimport { FacetField } from '../../models/facet-field.interface';\nimport { SearchFacetFiltersService } from '../../services/search-facet-filters.service';\nimport { CommonModule } from '@angular/common';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchFilterCardComponent } from './search-filter-card/search-filter-card.component';\nimport { ResetSearchDirective } from '../reset-search.directive';\nimport { SearchFacetFieldComponent } from '../search-facet-field';\nimport { SearchFacetTabbedContentComponent } from '../search-filter-chips';\n\n@Component({\n    selector: 'adf-search-filter',\n    imports: [\n        CommonModule,\n        MatExpansionModule,\n        MatButtonModule,\n        TranslatePipe,\n        SearchFilterCardComponent,\n        ResetSearchDirective,\n        SearchFacetFieldComponent,\n        SearchFacetTabbedContentComponent\n    ],\n    templateUrl: './search-filter.component.html',\n    styleUrls: ['./search-filter.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-filter' }\n})\nexport class SearchFilterComponent {\n    queryBuilder = inject(SearchQueryBuilderService);\n    facetFiltersService = inject(SearchFacetFiltersService);\n\n    /** Toggles whether to show or not the context facet filters. */\n    @Input()\n    showContextFacets: boolean = true;\n\n    facetQueriesLabel: string = 'Facet Queries';\n    facetExpanded = {\n        default: false\n    };\n    displayResetButton: boolean;\n\n    constructor() {\n        const queryBuilder = this.queryBuilder;\n\n        if (queryBuilder.config?.facetQueries) {\n            this.facetQueriesLabel = queryBuilder.config.facetQueries.label || 'Facet Queries';\n            this.facetExpanded['query'] = queryBuilder.config.facetQueries.expanded;\n        }\n        if (queryBuilder.config?.facetFields) {\n            this.facetExpanded['field'] = queryBuilder.config.facetFields.expanded;\n        }\n        if (queryBuilder.config?.facetIntervals) {\n            this.facetExpanded['interval'] = queryBuilder.config.facetIntervals.expanded;\n        }\n        this.displayResetButton = this.queryBuilder.config && !!this.queryBuilder.config.resetButton;\n    }\n\n    shouldExpand(field: FacetField): boolean {\n        return this.facetExpanded[field.type] || this.facetExpanded['default'];\n    }\n\n    getBucketCountDisplay(bucket: FacetFieldBucket): string {\n        return bucket.count === null ? '' : `(${bucket.count})`;\n    }\n}\n","<mat-accordion multi=\"true\" displayMode=\"flat\">\n\n    <button *ngIf=\"displayResetButton && facetFiltersService.responseFacets\"\n            mat-button\n            color=\"primary\"\n            title=\"{{ 'SEARCH.FILTER.BUTTONS.RESET-ALL.TOOLTIP' | translate }}\"\n            adf-reset-search>\n        {{ 'SEARCH.FILTER.BUTTONS.RESET-ALL.LABEL' | translate }}\n    </button>\n    <mat-expansion-panel\n        *ngFor=\"let category of queryBuilder.categories\"\n        [attr.data-automation-id]=\"'expansion-panel-'+category.name\"\n        [(expanded)]=\"category.expanded\">\n        <mat-expansion-panel-header>\n            <mat-panel-title class=\"adf-search-filter-header-title\">\n                {{ category.name | translate }}\n            </mat-panel-title>\n        </mat-expansion-panel-header>\n        <adf-search-filter-card [category]=\"category\" />\n    </mat-expansion-panel>\n\n    <ng-container *ngIf=\"facetFiltersService.tabbedFacet && showContextFacets\">\n        <mat-expansion-panel [attr.data-automation-id]=\"'expansion-panel-'+facetFiltersService.tabbedFacet.label\" [expanded]=\"true\">\n            <mat-expansion-panel-header>\n                <mat-panel-title class=\"adf-search-filter-header-title\">{{ facetFiltersService.tabbedFacet.label | translate }}</mat-panel-title>\n            </mat-expansion-panel-header>\n            <adf-search-facet-tabbed-content\n                [tabbedFacet]=\"facetFiltersService.tabbedFacet\"\n                [attr.data-automation-id]=\"'expansion-panel-'+facetFiltersService.tabbedFacet.label\" />\n        </mat-expansion-panel>\n    </ng-container>\n\n    <ng-container *ngIf=\"facetFiltersService.responseFacets && showContextFacets\">\n        <mat-expansion-panel [attr.data-automation-id]=\"'expansion-panel-'+field.label\" *ngFor=\"let field of facetFiltersService.responseFacets\"\n                             [expanded]=\"shouldExpand(field)\">\n            <mat-expansion-panel-header>\n                <mat-panel-title class=\"adf-search-filter-header-title\">{{ field.label | translate }}</mat-panel-title>\n            </mat-expansion-panel-header>\n\n            <adf-search-facet-field [field]=\"field\" />\n\n        </mat-expansion-panel>\n    </ng-container>\n</mat-accordion>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-filter-card/search-filter-card.component';\nexport * from './search-filter.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { ContentNodeSelectorPanelService } from '../../../content-node-selector/content-node-selector-panel/content-node-selector-panel.service';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { CommonModule } from '@angular/common';\nimport { SearchFilterComponent } from '../search-filter';\n\n@Component({\n    selector: 'adf-search-panel',\n    imports: [CommonModule, SearchFilterComponent],\n    templateUrl: './search-panel.component.html',\n    styleUrls: ['./search-panel.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-panel' }\n})\nexport class SearchPanelComponent implements OnInit {\n    private readonly contentNodeSelectorPanelService = inject(ContentNodeSelectorPanelService);\n    private readonly queryBuilderService = inject(SearchQueryBuilderService);\n\n    ngOnInit(): void {\n        this.queryBuilderService.categories = this.contentNodeSelectorPanelService.convertCustomModelPropertiesToSearchCategories();\n    }\n\n    hasCustomModels(): boolean {\n        return this.contentNodeSelectorPanelService?.customModels?.length > 0;\n    }\n}\n","<div class=\"adf-search-panel-scrollable\" data-automation-id=\"adf-search-panel-container\">\n    <adf-search-filter *ngIf=\"hasCustomModels()\"\n                       class=\"app-search-settings\"\n                       [showContextFacets]=\"false\" />\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport {\n    CustomEmptyContentTemplateDirective,\n    DataColumnComponent,\n    DataColumnListComponent,\n    DataSorting,\n    HighlightDirective,\n    IconModule,\n    InfinitePaginationComponent,\n    PaginatedComponent,\n    ShowHeaderMode,\n    ToolbarComponent,\n    ToolbarTitleComponent,\n    UserPreferencesService,\n    UserPreferenceValues\n} from '@alfresco/adf-core';\nimport { FileUploadCompleteEvent, FileUploadDeleteEvent, NodesApiService, SitesService, UploadService } from '../../common';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { Node, NodeEntry, NodePaging, Pagination, RequestScope, SearchRequest, SiteEntry, SitePaging } from '@alfresco/js-api';\nimport { DocumentListComponent } from '../../document-list/components/document-list.component';\nimport { RowFilter } from '../../document-list/data/row-filter.model';\nimport { ImageResolver } from '../../document-list/data/image-resolver.model';\nimport { CustomResourcesService } from '../../document-list/services/custom-resources.service';\nimport { ShareDataRow } from '../../document-list/data/share-data-row.model';\nimport { NodeEntryEvent } from '../../document-list/components/node.event';\nimport { debounceTime } from 'rxjs/operators';\nimport { ContentNodeSelectorPanelService } from './content-node-selector-panel.service';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { AutoFocusDirective } from '../../directives/auto-focus.directive';\nimport { NodeCounterDirective } from '../../directives/node-counter.directive';\nimport { DropdownSitesComponent } from '../site-dropdown/sites-dropdown.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NameLocationCellComponent } from '../name-location-cell/name-location-cell.component';\nimport { DropdownBreadcrumbComponent } from '../../breadcrumb/dropdown-breadcrumb.component';\nimport { SearchQueryBuilderService } from '../../search/services/search-query-builder.service';\nimport { SearchPanelComponent } from '../../search/components/search-panel/search-panel.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport type ValidationFunction = (entry: Node) => boolean;\n\nexport const defaultValidation = () => true;\n\n@Component({\n    selector: 'adf-content-node-selector-panel',\n    imports: [\n        MatFormFieldModule,\n        TranslatePipe,\n        MatInputModule,\n        ReactiveFormsModule,\n        AutoFocusDirective,\n        IconModule,\n        DropdownSitesComponent,\n        MatButtonModule,\n        ToolbarTitleComponent,\n        ToolbarComponent,\n        DropdownBreadcrumbComponent,\n        NodeCounterDirective,\n        DocumentListComponent,\n        HighlightDirective,\n        DataColumnListComponent,\n        DataColumnComponent,\n        NameLocationCellComponent,\n        InfinitePaginationComponent,\n        CustomEmptyContentTemplateDirective,\n        SearchPanelComponent\n    ],\n    templateUrl: './content-node-selector-panel.component.html',\n    styleUrls: ['./content-node-selector-panel.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-content-node-selector-panel' },\n    providers: [SearchQueryBuilderService]\n})\nexport class ContentNodeSelectorPanelComponent implements OnInit {\n    private readonly customResourcesService = inject(CustomResourcesService);\n    private readonly queryBuilderService = inject(SearchQueryBuilderService);\n    private readonly userPreferencesService = inject(UserPreferencesService);\n    private readonly nodesApiService = inject(NodesApiService);\n    private readonly uploadService = inject(UploadService);\n    private readonly sitesService = inject(SitesService);\n    private readonly contentNodeSelectorPanelService = inject(ContentNodeSelectorPanelService);\n\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    DEFAULT_PAGINATION: Pagination = new Pagination({\n        maxItems: 25,\n        skipCount: 0\n    });\n\n    readonly disableActionFolderList = ['-mysites-'];\n\n    private showSiteList = true;\n    private showSearchField = true;\n    private showCounter = false;\n    private _emptyList = true;\n\n    /** If true will restrict the search and breadcrumbs to the currentFolderId */\n    @Input()\n    restrictRootToCurrentFolderId: boolean = false;\n\n    /** Node ID of the folder currently listed. */\n    @Input({ required: true })\n    currentFolderId: string = null;\n\n    /**\n     * Hide the \"My Files\" option added to the site list by default.\n     * See the [Sites Dropdown component](sites-dropdown.component.md)\n     * for more information.\n     */\n    @Input()\n    dropdownHideMyFiles: boolean = false;\n\n    /**\n     * Custom site for site dropdown. This is the same as the `siteList`.\n     * property of the Sites Dropdown component (see its doc page\n     * for more information).\n     */\n    @Input()\n    dropdownSiteList: SitePaging = null;\n\n    _rowFilter: RowFilter = defaultValidation;\n\n    /**\n     * Custom *where* filter function. See the\n     * Document List component\n     * for more information.\n     */\n    @Input()\n    where: string;\n\n    /**\n     * Custom row filter function. See the\n     * [Row Filter Model](row-filter.model.md) page\n     * for more information.\n     */\n    @Input()\n    set rowFilter(rowFilter: RowFilter) {\n        this.createRowFilter(rowFilter);\n    }\n\n    get rowFilter(): RowFilter {\n        return this._rowFilter;\n    }\n\n    _excludeSiteContent: string[] = [];\n\n    /**\n     * Custom list of site content componentIds.\n     * Used to filter out the corresponding items from the displayed nodes\n     */\n    @Input()\n    set excludeSiteContent(excludeSiteContent: string[]) {\n        this._excludeSiteContent = excludeSiteContent;\n        this.createRowFilter(this._rowFilter);\n    }\n\n    get excludeSiteContent(): string[] {\n        return this._excludeSiteContent;\n    }\n\n    /**\n     * Custom image resolver function. See the\n     * [Image Resolver Model](image-resolver.model.md) page\n     * for more information.\n     */\n    @Input()\n    imageResolver: ImageResolver = null;\n\n    /** Number of items shown per page in the list. */\n    @Input()\n    pageSize: number = this.DEFAULT_PAGINATION.maxItems;\n\n    /** Define the selection mode for document list. The allowed values are single or multiple */\n    @Input()\n    selectionMode: 'single' | 'multiple' = 'single';\n\n    /**\n     * Function used to decide if the selected node has permission to be selected.\n     * Default value is a function that always returns true.\n     */\n    @Input()\n    isSelectionValid: ValidationFunction = defaultValidation;\n\n    /**\n     * Transformation to be performed on the chosen/folder node before building the\n     * breadcrumb UI. Can be useful when custom formatting is needed for the breadcrumb.\n     * You can change the path elements from the node that are used to build the\n     * breadcrumb using this function.\n     */\n    @Input()\n    breadcrumbTransform: (node) => any;\n\n    /** Toggle search input rendering */\n    @Input()\n    set showSearch(value: boolean) {\n        if (value !== undefined && value !== null) {\n            this.showSearchField = value;\n        }\n    }\n\n    get showSearch(): boolean {\n        return this.showSearchField;\n    }\n\n    /** Toggle sites list dropdown rendering */\n    @Input()\n    set showDropdownSiteList(value: boolean) {\n        if (value !== undefined && value !== null) {\n            this.showSiteList = value;\n        }\n    }\n\n    get showDropdownSiteList(): boolean {\n        return this.showSiteList;\n    }\n\n    /** Shows the files and folders in the search result */\n    @Input()\n    set showFilesInResult(value: boolean) {\n        if (value !== undefined && value !== null) {\n            const showFilesQuery = `TYPE:'cm:folder'${value ? ` OR TYPE:'cm:content'` : ''}`;\n            this.queryBuilderService.addFilterQuery(showFilesQuery);\n        }\n    }\n\n    /** Shows the node counter in the breadcrumb */\n    @Input()\n    set showNodeCounter(value: boolean) {\n        this.showCounter = value ?? false;\n    }\n\n    get showNodeCounter(): boolean {\n        return this.showCounter;\n    }\n\n    /** Emitted when the user has chosen an item. */\n    @Output()\n    select = new EventEmitter<Node[]>();\n\n    /** Emitted when the navigation changes. */\n    @Output()\n    navigationChange = new EventEmitter<NodeEntryEvent>();\n\n    /** Emitted when the select site changes. */\n    @Output()\n    siteChange = new EventEmitter<string>();\n\n    /** Emitted when search is running. */\n    @Output()\n    showingSearch = new EventEmitter<boolean>();\n\n    /** Emitted when current folder loaded. */\n    @Output()\n    currentFolder = new EventEmitter<Node>();\n\n    /** Emitted when folder loaded. */\n    @Output()\n    folderLoaded: EventEmitter<any> = new EventEmitter<any>();\n\n    @ViewChild('documentList', { static: true })\n    documentList: DocumentListComponent;\n\n    @ViewChild(HighlightDirective, { static: true })\n    highlighter: HighlightDirective;\n\n    nodePaging: NodePaging | null = null;\n    siteId: null | string;\n    breadcrumbRootId: null | string;\n    searchTerm: string = '';\n    showingSearchResults: boolean = false;\n    loadingSearchResults: boolean = false;\n    inDialog: boolean = false;\n    _chosenNode: Node[] = null;\n    selectionWithoutValidation: Node[] = null;\n    folderIdToShow: string | null = null;\n    breadcrumbFolderTitle: string | null = null;\n    startSiteGuid: string | null = null;\n    hasValidQuery: boolean = false;\n    showHeader = ShowHeaderMode.Never;\n\n    @ViewChild(InfinitePaginationComponent, { static: true })\n    infinitePaginationComponent: InfinitePaginationComponent;\n\n    infiniteScroll: boolean = false;\n    debounceSearch: number = 200;\n    searchInput: UntypedFormControl = new UntypedFormControl();\n\n    target: PaginatedComponent;\n    preselectedNodes: NodeEntry[] = [];\n    currentUploadBatch: NodeEntry[] = [];\n\n    sorting: string[] | DataSorting = ['createdAt', 'desc'];\n\n    searchPanelExpanded: boolean = false;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    set chosenNode(value: Node[]) {\n        this._chosenNode = value;\n        this.select.next(value);\n    }\n\n    get chosenNode() {\n        return this._chosenNode;\n    }\n\n    get emptyList(): boolean {\n        return this._emptyList;\n    }\n\n    getSelectedCount(): number {\n        return this.chosenNode?.length || 0;\n    }\n\n    ngOnInit() {\n        this.searchInput.valueChanges\n            .pipe(debounceTime(this.debounceSearch), takeUntilDestroyed(this.destroyRef))\n            .subscribe((searchValue: string) => {\n                this.searchTerm = searchValue;\n                this.queryBuilderService.userQuery = searchValue.length > 0 ? `${searchValue}*` : searchValue;\n                this.queryBuilderService.update();\n            });\n\n        this.queryBuilderService.updated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((searchRequest) => {\n            if (searchRequest) {\n                this.hasValidQuery = true;\n                this.prepareDialogForNewSearch(searchRequest);\n                this.queryBuilderService.execute(false, searchRequest);\n            } else {\n                this.hasValidQuery = false;\n                this.resetFolderToShow();\n                this.clearSearch();\n            }\n        });\n\n        this.queryBuilderService.executed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((results: NodePaging) => {\n            if (this.hasValidQuery) {\n                this.showSearchResults(results);\n            }\n        });\n\n        this.userPreferencesService\n            .select(UserPreferenceValues.PaginationSize)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe((pagSize) => (this.pageSize = pagSize));\n\n        this.target = this.documentList;\n        this.folderIdToShow = this.currentFolderId;\n        if (this.currentFolderId) {\n            if (this.restrictRootToCurrentFolderId) {\n                this.breadcrumbRootId = this.currentFolderId;\n                this.siteId = this.currentFolderId;\n            } else {\n                this.getStartSite();\n            }\n        }\n\n        this.breadcrumbTransform = this.breadcrumbTransform ? this.breadcrumbTransform : null;\n        this.isSelectionValid = this.isSelectionValid ? this.isSelectionValid : defaultValidation;\n        this.onFileUploadEvent();\n        this.onFileUploadDeletedEvent();\n        this.resetPagination();\n        this.setSearchScopeToNodes();\n\n        this.documentList.$folderNode.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((currentNode: Node) => {\n            this.currentFolder.emit(currentNode);\n        });\n    }\n\n    toggleSearchPanel() {\n        this.searchPanelExpanded = !this.searchPanelExpanded;\n    }\n\n    hasCustomModels(): boolean {\n        return this.contentNodeSelectorPanelService?.customModels?.length > 0;\n    }\n\n    private onFileUploadEvent() {\n        this.uploadService.fileUploadComplete\n            .pipe(debounceTime(500), takeUntilDestroyed(this.destroyRef))\n            .subscribe((fileUploadEvent: FileUploadCompleteEvent) => {\n                this.currentUploadBatch.push(fileUploadEvent.data);\n                if (!this.uploadService.isUploading()) {\n                    this.preselectedNodes = this.getPreselectNodesBasedOnSelectionMode();\n                    this.currentUploadBatch = [];\n                    this.documentList.reloadWithoutResettingSelection();\n                }\n            });\n    }\n\n    private onFileUploadDeletedEvent() {\n        this.uploadService.fileUploadDeleted.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((deletedFileEvent: FileUploadDeleteEvent) => {\n            this.documentList.unselectRowFromNodeId(deletedFileEvent.file.data.entry.id);\n            this.documentList.reloadWithoutResettingSelection();\n        });\n    }\n\n    private getStartSite() {\n        this.nodesApiService.getNode(this.currentFolderId).subscribe((startNodeEntry) => {\n            this.startSiteGuid = this.sitesService.getSiteNameFromNodePath(startNodeEntry);\n            if (this.startSiteGuid) {\n                this.sitesService.getSite(this.startSiteGuid).subscribe((startSiteEntry) => {\n                    if (startSiteEntry instanceof SiteEntry) {\n                        this.siteChange.emit(startSiteEntry.entry.title);\n                    }\n                });\n            }\n        });\n    }\n\n    private createRowFilter(filter?: RowFilter) {\n        if (!filter) {\n            filter = () => true;\n        }\n        this._rowFilter = (value: ShareDataRow, index: number, array: ShareDataRow[]) =>\n            filter(value, index, array) && !this.isExcludedSiteContent(value);\n    }\n\n    private isExcludedSiteContent(row: ShareDataRow): boolean {\n        const entry = row.node.entry;\n        if (this._excludeSiteContent?.length && entry?.properties?.['st:componentId']) {\n            const excludedItem = this._excludeSiteContent.find((id: string) => entry.properties['st:componentId'] === id);\n            return !!excludedItem;\n        }\n        return false;\n    }\n\n    /**\n     * Updates the site attribute and starts a new search\n     *\n     * @param chosenSite SiteEntry to search within\n     */\n    siteChanged(chosenSite: SiteEntry): void {\n        this.siteId = chosenSite.entry.guid;\n        this.setTitleIfCustomSite(chosenSite);\n        this.siteChange.emit(chosenSite.entry.title);\n        this.queryBuilderService.update();\n    }\n\n    /**\n     * Get current breadcrumb folder node\n     *\n     * @returns the actually selected|entered folder node or null in case of searching for the breadcrumb\n     */\n    get breadcrumbFolderNode(): Node | null {\n        let folderNode: Node;\n\n        if (this.showingSearchResults && this.selectionWithoutValidation?.length) {\n            folderNode = this.selectionWithoutValidation[0];\n        } else {\n            folderNode = this.documentList.folderNode;\n        }\n\n        return folderNode;\n    }\n\n    /**\n     * Prepares the dialog for a new search\n     *\n     * @param searchRequest request options\n     */\n    prepareDialogForNewSearch(searchRequest: SearchRequest): void {\n        this.target = searchRequest ? null : this.documentList;\n        if (this.target) {\n            this.infinitePaginationComponent.reset();\n        }\n        this.folderIdToShow = null;\n        this.preselectedNodes = [];\n        this.loadingSearchResults = true;\n        this.addCorrespondingNodeIdsQuery();\n        this.resetChosenNode();\n    }\n\n    /**\n     * Clear the search input and reset to last folder node in which search was performed\n     */\n    clear(): void {\n        this.searchTerm = '';\n        this.queryBuilderService.userQuery = '';\n        this.queryBuilderService.update();\n    }\n\n    /**\n     * Resets the folder to be shown with the site selection or the initial landing folder\n     */\n    resetFolderToShow(): void {\n        this.folderIdToShow = this.siteId || this.currentFolderId;\n    }\n\n    /**\n     * Clear the search input and search related data\n     */\n    clearSearch() {\n        this.searchTerm = '';\n        this.nodePaging = null;\n        this.resetPagination();\n        this.resetChosenNode();\n        this.showingSearchResults = false;\n        this.showingSearch.emit(this.showingSearchResults);\n    }\n\n    private addCorrespondingNodeIdsQuery() {\n        let extraParentFiltering = '';\n\n        if (this.customResourcesService.hasCorrespondingNodeIds(this.siteId)) {\n            this.customResourcesService.getCorrespondingNodeIds(this.siteId).subscribe((nodeIds) => {\n                if (nodeIds?.length) {\n                    nodeIds\n                        .filter((id) => id !== this.siteId)\n                        .forEach((extraId) => {\n                            extraParentFiltering += ` OR ANCESTOR:'workspace://SpacesStore/${extraId}'`;\n                        });\n                }\n                const parentFiltering = this.siteId ? `ANCESTOR:'workspace://SpacesStore/${this.siteId}'${extraParentFiltering}` : '';\n                this.queryBuilderService.addFilterQuery(parentFiltering);\n            });\n        } else {\n            const parentFiltering = this.siteId ? `ANCESTOR:'workspace://SpacesStore/${this.siteId}'` : '';\n            this.queryBuilderService.addFilterQuery(parentFiltering);\n        }\n    }\n\n    private setSearchScopeToNodes() {\n        const scope: RequestScope = {\n            locations: 'nodes'\n        };\n        this.queryBuilderService.setScope(scope);\n    }\n\n    /**\n     * Show the results of the search\n     *\n     * @param results Search results\n     */\n    private showSearchResults(results: NodePaging): void {\n        this.showingSearchResults = true;\n        this.loadingSearchResults = false;\n        this.showingSearch.emit(this.showingSearchResults);\n\n        this.nodePaging = results;\n    }\n\n    /**\n     * Sets showingSearchResults state to be able to differentiate between search results or folder results\n     *\n     * @param $event node event\n     */\n    onFolderChange($event: NodeEntryEvent): void {\n        this.folderIdToShow = $event.value.id;\n        this.showingSearchResults = false;\n        this.infiniteScroll = false;\n        this.breadcrumbFolderTitle = null;\n        this.preselectedNodes = [];\n        this.clearSearch();\n        this.navigationChange.emit($event);\n    }\n\n    /**\n     * Attempts to set the currently loaded node\n     *\n     * @param nodePaging pagination model\n     */\n    onFolderLoaded(nodePaging: NodePaging): void {\n        setTimeout(() => {\n            this._emptyList = !this.documentList.data.getRows().length;\n        });\n        this.updatePaginationAfterRowFilter(nodePaging);\n        if (!this.showingSearchResults) {\n            this.attemptNodeSelection(this.documentList.folderNode);\n        }\n        this.folderLoaded.emit();\n    }\n\n    /**\n     * Updates pagination.hasMoreItems to false after filtering only folders during 'COPY' and 'MOVE' action\n     *\n     * @param nodePaging pagination model\n     */\n    updatePaginationAfterRowFilter(nodePaging: NodePaging): void {\n        if (this.documentList.data.getRows().length < nodePaging.list.pagination.maxItems) {\n            nodePaging.list.pagination.hasMoreItems = false;\n        }\n    }\n\n    /**\n     * Returns whether breadcrumb has to be shown or not\n     *\n     * @returns `true` if needs to show the breadcrumb, otherwise `false`\n     */\n    showBreadcrumbs() {\n        return !this.showingSearchResults || this.chosenNode;\n    }\n\n    /**\n     * Loads the next batch of search results\n     *\n     * @param pagination Pagination object\n     */\n    getNextPageOfSearch(pagination: Pagination): void {\n        this.infiniteScroll = true;\n        this.queryBuilderService.paging.maxItems = pagination.maxItems;\n        this.queryBuilderService.paging.skipCount = pagination.skipCount;\n\n        if (this.searchTerm.length > 0) {\n            this.queryBuilderService.update();\n        }\n    }\n\n    /**\n     * Selects node as chosen if it has the right permission, clears the selection otherwise\n     *\n     * @param entry node entry\n     */\n    private attemptNodeSelection(entry: Node): void {\n        if (entry && this.isSelectionValid(entry) && !this.isActionDisabledForFolder(this.documentList.currentFolderId)) {\n            this.chosenNode = [entry];\n        }\n    }\n\n    private isActionDisabledForFolder(folderId: string): boolean {\n        return this.disableActionFolderList.includes(folderId);\n    }\n\n    /**\n     * Clears the chosen node\n     */\n    resetChosenNode(): void {\n        this.chosenNode = null;\n    }\n\n    /**\n     * It filters and emit the selection coming from the document list\n     *\n     * @param nodesEntries selected nodes\n     */\n    onCurrentSelection(nodesEntries: NodeEntry[]): void {\n        const validNodesEntity = nodesEntries.filter((node) => this.isSelectionValid(node.entry));\n        this.chosenNode = validNodesEntity.map((node) => node.entry);\n        this.selectionWithoutValidation = nodesEntries.map((node) => node.entry);\n    }\n\n    setTitleIfCustomSite(site: SiteEntry) {\n        if (this.customResourcesService.isCustomSource(site.entry.guid)) {\n            this.breadcrumbFolderTitle = site.entry.title;\n            if (this.documentList.folderNode.path.elements) {\n                this.breadcrumbFolderNode.name = site.entry.title;\n                this.documentList.folderNode.path.elements = null;\n            }\n        } else {\n            this.breadcrumbFolderTitle = null;\n        }\n    }\n\n    hasPreselectNodes(): boolean {\n        return this.preselectedNodes?.length > 0;\n    }\n\n    isSingleSelectionMode(): boolean {\n        return this.selectionMode === 'single';\n    }\n\n    getPreselectNodesBasedOnSelectionMode(): NodeEntry[] {\n        let selectedNodes: NodeEntry[] = [];\n\n        if (this.currentUploadBatch?.length) {\n            if (this.isSingleSelectionMode()) {\n                selectedNodes = [this.currentUploadBatch[this.currentUploadBatch.length - 1]];\n            } else {\n                selectedNodes = this.currentUploadBatch;\n            }\n        }\n\n        return selectedNodes;\n    }\n\n    private resetPagination(): void {\n        this.queryBuilderService.paging = {\n            maxItems: this.pageSize,\n            skipCount: this.DEFAULT_PAGINATION.skipCount\n        };\n    }\n}\n","<div class=\"adf-content-node-selector-content\">\n    @if (showSearch) {\n        <mat-form-field floatPlaceholder=\"never\" class=\"adf-content-node-selector-content-input\">\n            <mat-label>{{ 'NODE_SELECTOR.SEARCH' | translate }}</mat-label>\n            <input matInput\n                id=\"searchInput\"\n                [formControl]=\"searchInput\"\n                type=\"text\"\n                [value]=\"searchTerm\"\n                adf-auto-focus\n                data-automation-id=\"content-node-selector-search-input\">\n\n            @if (searchTerm.length > 0) {\n                <button\n                    matSuffix\n                    mat-icon-button\n                    data-automation-id=\"content-node-selector-search-clear\"\n                    class=\"adf-content-node-selector-search-clear-button\"\n                    (click)=\"clear()\"\n                    [attr.aria-label]=\"'COMMON.CLEAR' | translate\"\n                    [attr.title]=\"'COMMON.CLEAR' | translate\"\n                >\n                    <mat-icon class=\"adf-content-node-selector-content-input-icon\" adf-icon=\"clear\" />\n                </button>\n            }\n            @if (searchTerm.length === 0) {\n                <mat-icon\n                    matSuffix\n                    class=\"adf-content-node-selector-content-input-icon\"\n                    data-automation-id=\"content-node-selector-search-icon\"\n                    adf-icon=\"search\"\n                />\n            }\n        </mat-form-field>\n    }\n    @if (showDropdownSiteList) {\n        <adf-sites-dropdown\n            class=\"full-width\"\n            (change)=\"siteChanged($event)\"\n            [placeholder]=\"'NODE_SELECTOR.SELECT_LIBRARY'\"\n            [hideMyFiles]=\"dropdownHideMyFiles\"\n            [siteList]=\"dropdownSiteList\"\n            [value]=\"startSiteGuid\"\n            data-automation-id=\"content-node-selector-sites-combo\" />\n    }\n    @if (hasCustomModels()) {\n        <button\n            data-automation-id=\"adf-toggle-search-panel-button\"\n            mat-icon-button\n            (click)=\"toggleSearchPanel()\">\n            <mat-icon adf-icon=\"filter_list\" />\n            {{ 'SEARCH.SEARCH_HEADER.TITLE' | translate }}\n        </button>\n    }\n    <div class=\"adf-content-node-selector-search-panel-container\">\n        @if (searchPanelExpanded) {\n            <adf-search-panel />\n        }\n        <div class=\"adf-content-node-selector-document-list-container\">\n    <adf-toolbar>\n        <adf-toolbar-title>\n            @if (!showBreadcrumbs()) {\n                <h2 class=\"adf-search-results-label\">{{ 'NODE_SELECTOR.SEARCH_RESULTS' | translate }}</h2>\n            } @else {\n                <adf-dropdown-breadcrumb\n                    class=\"adf-content-node-selector-content-breadcrumb\"\n                    (navigate)=\"clearSearch()\"\n                    [target]=\"documentList\"\n                    [rootId]=\"breadcrumbRootId\"\n                    [transform]=\"breadcrumbTransform\"\n                    [folderNode]=\"breadcrumbFolderNode\"\n                    [root]=\"breadcrumbFolderTitle\"\n                    data-automation-id=\"content-node-selector-content-breadcrumb\" />\n            }\n            @if (showNodeCounter) {\n                <ng-container [adf-node-counter]=\"getSelectedCount()\" />\n            }\n        </adf-toolbar-title>\n    </adf-toolbar>\n\n    <div\n        class=\"adf-content-node-selector-content-list\"\n        [class.adf-content-node-selector-content-list-searchLayout]=\"showingSearchResults\"\n        data-automation-id=\"content-node-selector-content-list\">\n        <adf-document-list\n            #documentList\n            [adf-highlight]=\"searchTerm\"\n            adf-highlight-selector=\".adf-name-location-cell-name\"\n            [showHeader]=\"showHeader\"\n            [node]=\"nodePaging\"\n            [preselectNodes]=\"preselectedNodes\"\n            [maxItems]=\"pageSize\"\n            [rowFilter]=\"_rowFilter\"\n            [imageResolver]=\"imageResolver\"\n            [currentFolderId]=\"folderIdToShow\"\n            [selectionMode]=\"selectionMode\"\n            [contextMenuActions]=\"false\"\n            [contentActions]=\"false\"\n            [allowDropFiles]=\"false\"\n            [sorting]=\"sorting\"\n            sortingMode=\"server\"\n            [where]=\"where\"\n            (folderChange)=\"onFolderChange($event)\"\n            (ready)=\"onFolderLoaded($event)\"\n            (nodeSelected)=\"onCurrentSelection($event)\"\n            [class.adf-content-node-selector-content-list-empty]=\"emptyList\"\n            data-automation-id=\"content-node-selector-document-list\">\n\n            <adf-custom-empty-content-template>\n                <div aria-live=\"polite\">{{ 'NODE_SELECTOR.NO_RESULTS' | translate }}</div>\n            </adf-custom-empty-content-template>\n\n            <data-columns>\n                <data-column key=\"$thumbnail\" type=\"image\" />\n                <data-column key=\"name\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.NAME\" class=\"adf-full-width adf-ellipsis-cell\">\n                    <ng-template let-context>\n                        <adf-name-location-cell [row]=\"context.row\" />\n                    </ng-template>\n                </data-column>\n                <data-column key=\"modifiedAt\" type=\"date\" title=\"ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON\" format=\"timeAgo\" class=\"adf-content-selector-modified-cell\" />\n                <data-column key=\"createdByUser.displayName\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.CREATED_BY\" class=\"adf-content-selector-modifier-cell\" />\n                <data-column key=\"visibility\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.STATUS\" class=\"adf-content-selector-visibility-cell\" />\n            </data-columns>\n\n        </adf-document-list>\n\n        <adf-infinite-pagination\n            [target]=\"target\"\n            [loading]=\"loadingSearchResults\"\n            (loadMore)=\"getNextPageOfSearch($event)\"\n            data-automation-id=\"content-node-selector-search-pagination\">\n            {{ 'ADF-DOCUMENT-LIST.LAYOUT.LOAD_MORE' | translate }}\n        </adf-infinite-pagination>\n    </div>\n        </div>\n    </div>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class PermissionModel {\n    type: string;\n    action: string;\n    permission: string;\n\n    constructor(obj?: any) {\n        if (obj) {\n            this.type = obj.type || null;\n            this.action = obj.action || null;\n            this.permission = obj.permission || null;\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FileUtils, IconModule } from '@alfresco/adf-core';\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { ContentService } from '../../common/services/content.service';\nimport { AllowableOperationsEnum } from '../../common/models/allowable-operations.enum';\nimport { Node } from '@alfresco/js-api';\nimport { Subject } from 'rxjs';\nimport { PermissionModel } from '../../document-list/models/permissions.model';\nimport { UploadBase } from './base-upload/upload-base';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n    selector: 'adf-upload-button',\n    imports: [MatButtonModule, TranslatePipe, IconModule],\n    templateUrl: './upload-button.component.html',\n    styleUrls: ['./upload-button.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class UploadButtonComponent extends UploadBase implements OnInit, OnChanges {\n    private readonly contentService = inject(ContentService);\n    private readonly nodesApiService = inject(NodesApiService);\n\n    /** Allows/disallows upload folders (only for Chrome). */\n    @Input()\n    uploadFolders: boolean = false;\n\n    /** Allows/disallows multiple files */\n    @Input()\n    multipleFiles: boolean = false;\n\n    /** Defines the text of the upload button. */\n    @Input()\n    staticTitle: string;\n\n    /** Custom tooltip text. */\n    @Input()\n    tooltip: string = null;\n\n    /** Custom added file. The upload button type will be 'button' instead of 'file' */\n    @Input()\n    file: File;\n\n    /** Emitted when create permission is missing. */\n    @Output()\n    permissionEvent = new EventEmitter<PermissionModel>();\n\n    private hasAllowableOperations: boolean = false;\n    protected permissionValue = new Subject<boolean>();\n\n    ngOnInit() {\n        this.permissionValue.subscribe((permission: boolean) => {\n            this.hasAllowableOperations = permission;\n        });\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const rootFolderId = changes['rootFolderId'];\n        if (rootFolderId?.currentValue) {\n            this.checkPermission();\n        }\n    }\n\n    isButtonDisabled(): boolean {\n        return this.disabled ? true : undefined;\n    }\n\n    onFilesAdded($event: any): void {\n        const files = FileUtils.toFileArray($event.currentTarget.files);\n\n        if (this.hasAllowableOperations) {\n            this.uploadFiles(files);\n        } else {\n            this.permissionEvent.emit(new PermissionModel({ type: 'content', action: 'upload', permission: 'create' }));\n        }\n        // reset the value of the input file\n        $event.target.value = '';\n    }\n\n    onClickUploadButton(): void {\n        if (this.file) {\n            const files = [this.file];\n\n            if (this.hasAllowableOperations) {\n                this.uploadFiles(files);\n            } else {\n                this.permissionEvent.emit(new PermissionModel({ type: 'content', action: 'upload', permission: 'create' }));\n            }\n        }\n    }\n\n    onDirectoryAdded($event: any): void {\n        if (this.hasAllowableOperations) {\n            const files = FileUtils.toFileArray($event.currentTarget.files);\n            this.uploadFiles(files);\n        } else {\n            this.permissionEvent.emit(new PermissionModel({ type: 'content', action: 'upload', permission: 'create' }));\n        }\n        // reset the value of the input file\n        $event.target.value = '';\n    }\n\n    checkPermission() {\n        if (this.rootFolderId) {\n            const opts: any = {\n                includeSource: true,\n                include: ['allowableOperations']\n            };\n\n            this.nodesApiService.getNode(this.rootFolderId, opts).subscribe(\n                (res) => this.permissionValue.next(this.nodeHasPermission(res, AllowableOperationsEnum.CREATE)),\n                (error: { error: Error }) => {\n                    if (error?.error) {\n                        this.error.emit({ error: error.error.message } as any);\n                    } else {\n                        this.error.emit({ error: 'FILE_UPLOAD.BUTTON.PERMISSION_CHECK_ERROR' } as any);\n                    }\n                }\n            );\n        }\n    }\n\n    nodeHasPermission(node: Node, permission: AllowableOperationsEnum | string): boolean {\n        return this.contentService.hasAllowableOperations(node, permission);\n    }\n}\n","<form class=\"adf-upload-button-file-container\">\n  <!--Files Upload-->\n  @if (!uploadFolders) {\n    <div>\n      <!--Single Files Upload-->\n      @if (!multipleFiles) {\n        <input\n          class=\"adf-upload-button-file-container-upload-single-file\"\n          id=\"upload-single-file\"\n          data-automation-id=\"upload-single-file\"\n          [type]=\"file ? 'button' : 'file'\"\n          name=\"uploadFiles\"\n          accept=\"{{acceptedFilesType}}\"\n          [attr.disabled]=\"isButtonDisabled()\"\n          [title]=\"tooltip\"\n          (change)=\"onFilesAdded($event)\"\n          (click)=\"onClickUploadButton()\"/>\n        <label tabindex=\"0\" (keydown.enter)=\"onClickUploadButton()\" for=\"upload-single-file\" class=\"adf-upload-button-label\">\n          <mat-icon class=\"adf-upload-button-icon\" adf-icon=\"file_upload\" />\n\n          @if (staticTitle) {\n            <span id=\"upload-single-file-label-static\"> {{ staticTitle }}</span>\n          } @else {\n            <span id=\"upload-single-file-label\">{{ 'FILE_UPLOAD.BUTTON.UPLOAD_FILE' | translate }}</span>\n          }\n        </label>\n      }\n      <!--Multiple Files Upload-->\n      @if (multipleFiles) {\n        <input\n          id=\"upload-multiple-files\"\n          data-automation-id=\"upload-multiple-files\"\n          type=\"file\"\n          name=\"uploadFiles\"\n          multiple=\"multiple\"\n          accept=\"{{acceptedFilesType}}\"\n          [attr.disabled]=\"isButtonDisabled()\"\n          [title]=\"tooltip\"\n          (change)=\"onFilesAdded($event)\"/>\n        <label for=\"upload-multiple-files\" class=\"adf-upload-button-label\">\n          <mat-icon class=\"adf-upload-button-icon\" adf-icon=\"file_upload\" />\n          @if (staticTitle) {\n            <span id=\"upload-multiple-file-label-static\"> {{ staticTitle }}</span>\n          } @else {\n            <span id=\"upload-multiple-file-label\">{{ 'FILE_UPLOAD.BUTTON.UPLOAD_FILE' | translate }}</span>\n          }\n        </label>\n      }\n    </div>\n  }\n\n  <!--Folders Upload-->\n  @if (uploadFolders) {\n    <input\n      id=\"uploadFolder\"\n      data-automation-id=\"uploadFolder\"\n      type=\"file\"\n      name=\"uploadFiles\"\n      multiple=\"multiple\"\n      accept=\"{{acceptedFilesType}}\"\n      webkitdirectory directory\n      [attr.disabled]=\"isButtonDisabled()\"\n      [title]=\"tooltip\"\n      (change)=\"onDirectoryAdded($event)\"/>\n    <label for=\"uploadFolder\" data-automation-id=\"uploadFolder\" class=\"adf-upload-button-label\">\n      <mat-icon class=\"adf-upload-button-icon\" adf-icon=\"file_upload\" />\n      @if (staticTitle) {\n        <span id=\"uploadFolder-label-static\"> {{ staticTitle }}</span>\n      } @else {\n        <span id=\"uploadFolder-label\">{{ 'FILE_UPLOAD.BUTTON.UPLOAD_FOLDER' | translate }}</span>\n      }\n    </label>\n  }\n</form>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { EmptyListComponent, IconModule, NotificationService, ToolbarComponent, ToolbarTitleComponent, TranslationService } from '@alfresco/adf-core';\nimport { Node } from '@alfresco/js-api';\nimport { AllowableOperationsEnum } from '../common/models/allowable-operations.enum';\nimport { ContentService } from '../common/services/content.service';\nimport { UploadService } from '../common/services/upload.service';\nimport { ContentNodeSelectorComponentData } from './content-node-selector.component-data.interface';\nimport { NodeEntryEvent } from '../document-list/components/node.event';\nimport { NodeAction } from '../document-list/models/node-action.enum';\nimport { OverlayContainer } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { DropdownBreadcrumbComponent } from '../breadcrumb/dropdown-breadcrumb.component';\nimport { NodeCounterDirective } from '../directives/node-counter.directive';\nimport { UploadDragAreaComponent } from '../upload/components/upload-drag-area.component';\nimport { FileUploadingDialogComponent } from '../upload/components/file-uploading-dialog.component';\nimport { ContentNodeSelectorPanelComponent } from './content-node-selector-panel/content-node-selector-panel.component';\nimport { UploadButtonComponent } from '../upload/components/upload-button.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-content-node-selector',\n    imports: [\n        CommonModule,\n        MatDialogModule,\n        MatTabsModule,\n        TranslatePipe,\n        ToolbarTitleComponent,\n        ToolbarComponent,\n        DropdownBreadcrumbComponent,\n        NodeCounterDirective,\n        IconModule,\n        UploadDragAreaComponent,\n        FileUploadingDialogComponent,\n        EmptyListComponent,\n        ContentNodeSelectorPanelComponent,\n        UploadButtonComponent,\n        MatButtonModule\n    ],\n    templateUrl: './content-node-selector.component.html',\n    styleUrls: ['./content-node-selector.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class ContentNodeSelectorComponent implements OnInit {\n    private readonly translation = inject(TranslationService);\n    private readonly contentService = inject(ContentService);\n    private readonly notificationService = inject(NotificationService);\n    private readonly uploadService = inject(UploadService);\n    private readonly dialog = inject<MatDialogRef<ContentNodeSelectorComponent>>(MatDialogRef);\n    private readonly overlayContainer = inject(OverlayContainer);\n    data = inject<ContentNodeSelectorComponentData>(MAT_DIALOG_DATA);\n\n    title: string;\n    action: NodeAction;\n    buttonActionName: string;\n    chosenNode: Node[];\n    currentDirectoryId: string;\n    showingSearch = false;\n    hasAllowableOperations = false;\n    isLoading = true;\n    selectedTabIndex: number = 0;\n    uploadStarted: boolean = false;\n\n    emptyFolderImageUrl: string = './assets/images/empty_doc_lib.svg';\n    breadcrumbFolderNode: Node;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    constructor() {\n        const data = this.data;\n\n        this.action = data.actionName ?? NodeAction.CHOOSE;\n        this.buttonActionName = `NODE_SELECTOR.${this.action}`;\n        this.title = data.title;\n        this.currentDirectoryId = data.currentFolderId;\n    }\n\n    ngOnInit() {\n        this.dialog\n            .keydownEvents()\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe((event) => {\n                if (event?.key === 'Escape') {\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    this.close();\n                }\n            });\n\n        this.dialog\n            .backdropClick()\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => {\n                this.close();\n            });\n\n        this.dialog\n            .afterOpened()\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => {\n                this.overlayContainer.getContainerElement().setAttribute('role', 'main');\n            });\n\n        this.uploadService.fileUploadStarting.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            this.uploadStarted = true;\n        });\n    }\n    close() {\n        this.dialog.close();\n        this.overlayContainer.getContainerElement().setAttribute('role', 'region');\n    }\n\n    onSelect(nodeList: Node[]) {\n        this.chosenNode = nodeList;\n    }\n\n    onSiteChange(siteTitle: string) {\n        this.updateTitle(siteTitle);\n    }\n\n    onNavigationChange(pathElement: NodeEntryEvent) {\n        this.currentDirectoryId = pathElement.value.id;\n        this.isLoading = true;\n    }\n\n    onClick(): void {\n        this.data.select.next(this.chosenNode);\n        this.close();\n    }\n\n    updateTitle(siteTitle: string) {\n        if (this.action === NodeAction.CHOOSE && siteTitle) {\n            this.title = this.getTitleTranslation(this.action, siteTitle);\n        }\n    }\n\n    getTitleTranslation(action: NodeAction, name: string): string {\n        return this.translation.instant(`NODE_SELECTOR.${action}_ITEM`, { name: this.translation.instant(name) });\n    }\n\n    getSelectedCount(): number {\n        return this.chosenNode?.length || 0;\n    }\n\n    isCounterVisible(): boolean {\n        return this.action === NodeAction.ATTACH || this.action === NodeAction.CHOOSE;\n    }\n\n    isMultipleSelection(): boolean {\n        return this.data.selectionMode === 'multiple';\n    }\n\n    onError(error) {\n        this.notificationService.showError(error);\n    }\n\n    isChooseButtonDisabled(): boolean {\n        return this.uploadService.isUploading() || !this.hasNodeSelected();\n    }\n\n    hasNodeSelected(): boolean {\n        return this.chosenNode?.length > 0;\n    }\n\n    onShowingSearch(value: boolean) {\n        this.showingSearch = value;\n    }\n\n    onCurrentFolder(currentFolder: Node) {\n        this.hasAllowableOperations = this.contentService.hasAllowableOperations(currentFolder, AllowableOperationsEnum.CREATE);\n        this.breadcrumbFolderNode = currentFolder;\n    }\n\n    isNotAllowedToUpload() {\n        return this.showingSearch || !this.hasAllowableOperations;\n    }\n\n    onFolderLoaded() {\n        this.isLoading = false;\n    }\n\n    onTabSelectionChange(tabIndex: number) {\n        this.selectedTabIndex = tabIndex;\n    }\n\n    isFileServerTabSelected(): boolean {\n        return this.selectedTabIndex === 0;\n    }\n\n    isLocalUploadTabSelected(): boolean {\n        return this.selectedTabIndex === 1;\n    }\n\n    isUploadEnabled(): boolean {\n        return this.canPerformLocalUpload() && this.isLocalUploadTabSelected();\n    }\n\n    canPerformLocalUpload(): boolean {\n        return this.data?.showLocalUploadButton;\n    }\n\n    getWarningMessage(): string {\n        if (this.showingSearch) {\n            return 'NODE_SELECTOR.UPLOAD_BUTTON_SEARCH_WARNING_MESSAGE';\n        }\n        return this.hasNoPermissionToUpload() ? 'NODE_SELECTOR.UPLOAD_BUTTON_PERMISSION_WARNING_MESSAGE' : '';\n    }\n\n    hasNoPermissionToUpload(): boolean {\n        return !this.hasAllowableOperations && !this.showingSearch && !this.isLoading;\n    }\n\n    hasUploadError(): boolean {\n        return this.showingSearch || this.hasNoPermissionToUpload();\n    }\n}\n","<h1 mat-dialog-title class=\"adf-content-node-selector-dialog-title\" data-automation-id=\"content-node-selector-title\">{{title}}</h1>\n<ng-container *ngIf=\"canPerformLocalUpload(); else contentNodePanel\">\n    <mat-tab-group class=\"adf-content-node-selector-dialog-content\"\n                   mat-align-tabs=\"start\"\n                   (selectedIndexChange)=\"onTabSelectionChange($event)\">\n        <mat-tab label=\"{{ 'NODE_SELECTOR.REPOSITORY' | translate }}\">\n            <ng-container *ngTemplateOutlet='contentNodePanel' />\n        </mat-tab>\n        <mat-tab [disabled]=\"isNotAllowedToUpload()\">\n            <div class=\"adf-content-node-selector-local-upload-container\">\n                <div class=\"adf-content-node-selector-local-upload-header\">\n                    <adf-toolbar>\n                        <adf-toolbar-title>\n                            <adf-dropdown-breadcrumb\n                              class=\"adf-content-node-selector-content-breadcrumb\"\n                              [folderNode]=\"breadcrumbFolderNode\"\n                              [rootId]=\"data?.currentFolderId\"\n                              [readOnly]=\"true\"\n                              data-automation-id=\"content-node-selector-upload-breadcrumb\"\n                            />\n                            <ng-container *ngIf=\"isCounterVisible()\" [adf-node-counter]=\"getSelectedCount()\" />\n                        </adf-toolbar-title>\n                    </adf-toolbar>\n                    <ng-template mat-tab-label>\n                        {{ 'NODE_SELECTOR.UPLOAD_FROM_DEVICE' | translate }}\n                        <mat-icon *ngIf=\"hasUploadError()\" data-automation-id=\"adf-content-node-selector-disabled-tab-info-icon\" title=\"{{ getWarningMessage() | translate }}\" adf-icon=\"info\" />\n                    </ng-template>\n                </div>\n                <div class=\"adf-content-node-selector-local-upload-content\">\n                    <adf-upload-drag-area [rootFolderId]=\"currentDirectoryId\">\n                        <div [class.adf-upload-dialog-container]=\"uploadStarted\">\n                            <adf-file-uploading-dialog [alwaysVisible]=\"true\" />\n                        </div>\n                        <adf-empty-list data-automation-id=\"adf-empty-list\" *ngIf=\"!uploadStarted\">\n                            <div class=\"adf-empty-list_template adf-empty-folder\">\n                                <div class=\"adf-empty-folder-drag-drop\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate }}</div>\n                                <div class=\"adf-empty-folder-any-files-here-to-add\">{{ 'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.SUBTITLE' | translate }}</div>\n                                <img [alt]=\"'ADF-DATATABLE.EMPTY.DRAG-AND-DROP.TITLE' | translate\" class=\"adf-empty-folder-image\"\n                                     [src]=\"emptyFolderImageUrl\">\n                            </div>\n                        </adf-empty-list>\n                    </adf-upload-drag-area>\n                </div>\n            </div>\n        </mat-tab>\n    </mat-tab-group>\n</ng-container>\n\n<ng-template #contentNodePanel>\n    <adf-content-node-selector-panel\n      [currentFolderId]=\"data?.currentFolderId\"\n      [restrictRootToCurrentFolderId]=\"data?.restrictRootToCurrentFolderId\"\n      [dropdownHideMyFiles]=\"data?.dropdownHideMyFiles\"\n      [dropdownSiteList]=\"data?.dropdownSiteList\"\n      [rowFilter]=\"data?.rowFilter\"\n      [imageResolver]=\"data?.imageResolver\"\n      [isSelectionValid]=\"data?.isSelectionValid\"\n      [breadcrumbTransform]=\"data?.breadcrumbTransform\"\n      [excludeSiteContent]=\"data?.excludeSiteContent\"\n      [selectionMode]=\"data?.selectionMode\"\n      [where]=\"data?.where\"\n      [showSearch]=\"data?.showSearch\"\n      [showDropdownSiteList]=\"data?.showDropdownSiteList\"\n      [showFilesInResult]=\"data?.showFilesInResult\"\n      [showNodeCounter]=\"isCounterVisible()\"\n      (currentFolder)=\"onCurrentFolder($event)\"\n      (folderLoaded)=\"onFolderLoaded()\"\n      (select)=\"onSelect($event)\"\n      (showingSearch)=\"onShowingSearch($event)\"\n      (siteChange)=\"onSiteChange($event)\"\n      (navigationChange)=\"onNavigationChange($event)\" />\n</ng-template>\n\n\n<mat-dialog-actions class=\"adf-content-node-selector-dialog-actions\">\n    <div>\n        <ng-container *ngIf=\"isUploadEnabled()\">\n            <adf-upload-button\n                [staticTitle]=\"'FORM.FIELD.UPLOAD' | translate\"\n                [multipleFiles]=\"isMultipleSelection()\"\n                [rootFolderId]=\"currentDirectoryId\"\n                [disabled]=\"isNotAllowedToUpload()\"\n                (error)=\"onError($event)\" />\n        </ng-container>\n    </div>\n    <div>\n        <button\n            mat-button\n            (click)=\"close()\"\n            data-automation-id=\"content-node-selector-actions-cancel\">{{ 'NODE_SELECTOR.CANCEL' | translate }}\n        </button>\n\n        <button mat-button\n                [disabled]=\"isChooseButtonDisabled()\"\n                class=\"adf-choose-action\"\n                (click)=\"onClick()\"\n                data-automation-id=\"content-node-selector-actions-choose\">{{ buttonActionName | translate }}\n        </button>\n    </div>\n</mat-dialog-actions>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\nimport { differenceInSeconds } from 'date-fns';\nimport { NodeBodyLock, Node, NodeEntry, NodesApi } from '@alfresco/js-api';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatDatetimepickerModule } from '@mat-datetimepicker/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Component({\n    selector: 'adf-node-lock',\n    imports: [\n        CommonModule,\n        TranslatePipe,\n        MatDialogModule,\n        ReactiveFormsModule,\n        MatCheckboxModule,\n        MatFormFieldModule,\n        MatDatetimepickerModule,\n        MatInputModule,\n        MatButtonModule\n    ],\n    templateUrl: './node-lock.dialog.html',\n    encapsulation: ViewEncapsulation.None\n})\nexport class NodeLockDialogComponent implements OnInit {\n    private readonly formBuilder = inject(UntypedFormBuilder);\n    dialog = inject<MatDialogRef<NodeLockDialogComponent>>(MatDialogRef);\n    private readonly alfrescoApi = inject(AlfrescoApiService);\n    data = inject(MAT_DIALOG_DATA, { optional: true });\n\n    form: UntypedFormGroup;\n    node: Node = null;\n    nodeName: string;\n\n    private _nodesApi: NodesApi;\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.alfrescoApi.getInstance());\n        return this._nodesApi;\n    }\n\n    ngOnInit() {\n        const { node } = this.data;\n        this.nodeName = node.name;\n\n        const isTimeLock = !!node.properties['cm:expiryDate'];\n        const time = isTimeLock ? new Date(node.properties['cm:expiryDate']) : new Date();\n\n        this.form = this.formBuilder.group({\n            isLocked: !!node.properties['cm:lockType'] || node.isLocked,\n            allowOwner: node.properties['cm:lockType'] === 'WRITE_LOCK',\n            isTimeLock,\n            time\n        });\n    }\n\n    private get lockTimeInSeconds(): number {\n        if (this.form.value.isTimeLock) {\n            return differenceInSeconds(new Date(this.form.value.time), Date.now());\n        }\n\n        return 0;\n    }\n\n    private get nodeBodyLock(): NodeBodyLock {\n        return {\n            timeToExpire: this.lockTimeInSeconds,\n            type: this.form.value.allowOwner ? 'ALLOW_OWNER_CHANGES' : 'FULL',\n            lifetime: 'PERSISTENT'\n        };\n    }\n\n    private toggleLock(): Promise<NodeEntry> {\n        const {\n            data: { node }\n        } = this;\n\n        if (this.form.value.isLocked) {\n            return this.nodesApi.lockNode(node.id, this.nodeBodyLock);\n        }\n\n        return this.nodesApi.unlockNode(node.id);\n    }\n\n    submit(): void {\n        this.toggleLock()\n            .then((node: NodeEntry) => {\n                this.data.node.isLocked = this.form.value.isLocked;\n                this.data.node.properties = node.entry.properties;\n                this.dialog.close(node.entry);\n            })\n            .catch((error: any) => this.data.onError(error));\n    }\n}\n","<h2 mat-dialog-title>\n    {{ 'CORE.FILE_DIALOG.FILE_LOCK' | translate }}\n</h2>\n\n<mat-dialog-content>\n    <br />\n    <form [formGroup]=\"form\" (submit)=\"submit()\">\n        <mat-checkbox  data-automation-id=\"adf-lock-node-checkbox\" class=\"adf-lock-file-name\" [title]=\"nodeName\" [formControlName]=\"'isLocked'\" ngDefaultControl>\n            {{ 'CORE.FILE_DIALOG.FILE_LOCK_CHECKBOX' | translate }} <strong>\"{{ nodeName }}\"</strong>\n        </mat-checkbox>\n\n        <br />\n\n        <div *ngIf=\"form.value?.isLocked\">\n            <mat-checkbox class=\"adf-lock-file-name\" [formControlName]=\"'allowOwner'\" ngDefaultControl>\n                {{ 'CORE.FILE_DIALOG.ALLOW_OTHERS_CHECKBOX' | translate }}\n            </mat-checkbox>\n\n            <br />\n\n            <mat-checkbox class=\"adf-lock-file-name\" [formControlName]=\"'isTimeLock'\" ngDefaultControl>\n                {{ 'CORE.FILE_DIALOG.TIME_LOCK_CHECKBOX' | translate }}\n            </mat-checkbox>\n\n            <br />\n\n            <mat-form-field *ngIf=\"form.value?.isTimeLock\">\n                <mat-datetimepicker-toggle [for]=\"datetimePicker\" matSuffix />\n                <mat-datetimepicker #datetimePicker type=\"datetime\" [openOnFocus]=\"true\" [timeInterval]=\"1\" />\n                <input matInput [formControlName]=\"'time'\" [matDatetimepicker]=\"datetimePicker\" required autocomplete=\"false\">\n            </mat-form-field>\n        </div>\n    </form>\n    <br />\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"adf-dialog-buttons\">\n    <span class=\"adf-fill-remaining-space\"></span>\n\n    <button mat-button mat-dialog-close data-automation-id=\"lock-dialog-btn-cancel\">\n        {{ 'CORE.FILE_DIALOG.CANCEL_BUTTON.LABEL' | translate }}\n    </button>\n\n    <button class=\"adf-dialog-action-button\" mat-button (click)=\"submit()\">\n        {{ 'CORE.FILE_DIALOG.SAVE_BUTTON.LABEL' | translate }}\n    </button>\n</mat-dialog-actions>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { EventEmitter, Injectable, Output, inject } from '@angular/core';\nimport { ThumbnailService, TranslationService } from '@alfresco/adf-core';\nimport { Subject, Observable, throwError } from 'rxjs';\nimport { ShareDataRow } from '../document-list/data/share-data-row.model';\nimport { AllowableOperationsEnum } from '../common/models/allowable-operations.enum';\nimport { ContentService } from '../common/services/content.service';\nimport { Node, NodeEntry, SitePaging } from '@alfresco/js-api';\nimport { DocumentListService } from '../document-list/services/document-list.service';\nimport { ContentNodeSelectorComponent } from './content-node-selector.component';\nimport { ContentNodeSelectorComponentData } from './content-node-selector.component-data.interface';\nimport { NodeAction } from '../document-list/models/node-action.enum';\nimport { NodeLockDialogComponent } from '../dialogs/node-lock/node-lock.dialog';\nimport { switchMap } from 'rxjs/operators';\nimport { SitesService } from '../common/services/sites.service';\n\n@Injectable({\n    providedIn: 'root'\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class ContentNodeDialogService {\n    private readonly dialog = inject(MatDialog);\n    private readonly contentService = inject(ContentService);\n    private readonly documentListService = inject(DocumentListService);\n    private readonly siteService = inject(SitesService);\n    private readonly translation = inject(TranslationService);\n    private readonly thumbnailService = inject(ThumbnailService);\n\n    static nonDocumentSiteContent = ['blog', 'calendar', 'dataLists', 'discussions', 'links', 'wiki'];\n\n    /** Emitted when an error occurs. */\n    @Output()\n    error: EventEmitter<any> = new EventEmitter<any>();\n\n    /**\n     * Opens a file browser at a chosen folder location.\n     * shows files and folders in the dialog search result.\n     *\n     * @param folderNodeId ID of the folder to use\n     * @returns Information about the selected file(s)\n     */\n    openFileBrowseDialogByFolderId(folderNodeId: string): Observable<Node[]> {\n        return this.documentListService\n            .getFolderNode(folderNodeId)\n            .pipe(switchMap((nodeEntry: NodeEntry) => this.openUploadFileDialog(NodeAction.CHOOSE, nodeEntry.entry, true)));\n    }\n\n    /**\n     * Opens a lock node dialog.\n     *\n     * @param contentEntry Node to lock\n     * @returns Error/status message (if any)\n     */\n    public openLockNodeDialog(contentEntry: Node): Subject<string> {\n        const observable: Subject<string> = new Subject<string>();\n\n        if (this.contentService.hasAllowableOperations(contentEntry, AllowableOperationsEnum.LOCK)) {\n            this.dialog.open(NodeLockDialogComponent, {\n                data: {\n                    node: contentEntry,\n                    onError: (error) => {\n                        this.error.emit(error);\n                        observable.error(error);\n                    }\n                },\n                width: '400px'\n            });\n        } else {\n            observable.error('OPERATION.FAIL.NODE.NO_PERMISSION');\n        }\n\n        return observable;\n    }\n\n    /**\n     * Opens a file browser at a chosen site location.\n     * shows files and folders in the dialog search result.\n     *\n     * @returns Information about the selected file(s)\n     */\n    openFileBrowseDialogBySite(): Observable<Node[]> {\n        return this.siteService\n            .getSites()\n            .pipe(switchMap((response: SitePaging) => this.openFileBrowseDialogByFolderId(response.list.entries[0].entry.guid)));\n    }\n\n    /**\n     * Opens a file browser at a default myFile location.\n     * shows files and folders in the dialog search result.\n     *\n     * @returns Information about the selected file(s)\n     */\n    openFileBrowseDialogByDefaultLocation(): Observable<Node[]> {\n        return this.openFileBrowseDialogByFolderId('-my-');\n    }\n\n    /**\n     * Opens a folder browser at a chosen site location.\n     *\n     * @returns Information about the selected folder(s)\n     */\n    openFolderBrowseDialogBySite(): Observable<Node[]> {\n        return this.openFolderBrowseDialogByFolderId('-my-');\n    }\n\n    /**\n     * Opens a folder browser at a chosen folder location.\n     *\n     * @param folderNodeId ID of the folder to use\n     * @returns Information about the selected folder(s)\n     */\n    openFolderBrowseDialogByFolderId(folderNodeId: string): Observable<Node[]> {\n        return this.documentListService\n            .getFolderNode(folderNodeId)\n            .pipe(switchMap((node: NodeEntry) => this.openUploadFolderDialog(NodeAction.CHOOSE, node.entry)));\n    }\n\n    /**\n     * Opens a dialog to copy or move an item to a new location.\n     *\n     * @param action Name of the action (eg, \"Copy\" or \"Move\") to show in the title\n     * @param contentEntry Item to be copied or moved\n     * @param permission Permission for the operation\n     * @param excludeSiteContent The site content that should be filtered out\n     * @returns Information about files that were copied/moved\n     */\n    openCopyMoveDialog(action: NodeAction, contentEntry: Node, permission?: string, excludeSiteContent?: string[]): Observable<Node[]> {\n        if (this.contentService.hasAllowableOperations(contentEntry, permission)) {\n            const select = new Subject<Node[]>();\n\n            const data: ContentNodeSelectorComponentData = {\n                title: this.getTitleTranslation(action, contentEntry.name),\n                actionName: action,\n                selectionMode: 'single',\n                currentFolderId: contentEntry.parentId,\n                imageResolver: this.imageResolver.bind(this),\n                where: '(isFolder=true)',\n                isSelectionValid: this.isCopyMoveSelectionValid.bind(this),\n                excludeSiteContent: excludeSiteContent || ContentNodeDialogService.nonDocumentSiteContent,\n                select\n            };\n\n            const dialogRef = this.openContentNodeDialog(data, 'adf-content-node-selector-dialog', '630px');\n            dialogRef.afterClosed().subscribe({ next: () => select.complete() });\n\n            return select;\n        } else {\n            const errors = new Error(JSON.stringify({ error: { statusCode: 403 } }));\n            return throwError(errors);\n        }\n    }\n\n    /**\n     * Gets the translation of the dialog title.\n     *\n     * @param action Name of the action to display in the dialog title\n     * @param name Name of the item on which the action is being performed\n     * @returns Translated version of the title\n     */\n    getTitleTranslation(action: string, name: string): string {\n        return this.translation.instant(`NODE_SELECTOR.${action.toUpperCase()}_ITEM`, { name });\n    }\n\n    /**\n     * Opens a dialog to choose folders to upload.\n     *\n     * @param action Name of the action to show in the title\n     * @param contentEntry  Item to upload\n     * @returns Information about the chosen folder(s)\n     */\n    openUploadFolderDialog(action: NodeAction, contentEntry: Node): Observable<Node[]> {\n        const select = new Subject<Node[]>();\n\n        const data: ContentNodeSelectorComponentData = {\n            title: this.getTitleTranslation(action, this.translation.instant('DROPDOWN.MY_FILES_OPTION')),\n            actionName: action,\n            selectionMode: 'single',\n            currentFolderId: contentEntry.id,\n            imageResolver: this.imageResolver.bind(this),\n            isSelectionValid: this.hasAllowableOperationsOnNodeFolder.bind(this),\n            where: '(isFolder=true)',\n            select\n        };\n\n        const dialogRef = this.openContentNodeDialog(data, 'adf-content-node-selector-dialog', '630px');\n        dialogRef.afterClosed().subscribe({ next: () => select.complete() });\n\n        return select;\n    }\n\n    /**\n     * Opens a dialog to choose a file to upload.\n     *\n     * @param action Name of the action to show in the title\n     * @param contentEntry Item to upload\n     * @param showFilesInResult Show files in dialog search result\n     * @returns Information about the chosen file(s)\n     */\n    openUploadFileDialog(action: NodeAction, contentEntry: Node, showFilesInResult = false): Observable<Node[]> {\n        const select = new Subject<Node[]>();\n\n        const data: ContentNodeSelectorComponentData = {\n            title: this.getTitleTranslation(action, this.translation.instant('DROPDOWN.MY_FILES_OPTION')),\n            actionName: action,\n            selectionMode: 'single',\n            currentFolderId: contentEntry.id,\n            imageResolver: this.imageResolver.bind(this),\n            isSelectionValid: (entry: Node) => entry.isFile,\n            select,\n            showFilesInResult\n        };\n\n        const dialogRef = this.openContentNodeDialog(data, 'adf-content-node-selector-dialog', '630px');\n        dialogRef.afterClosed().subscribe({ next: () => select.complete() });\n\n        return select;\n    }\n\n    private openContentNodeDialog(\n        data: ContentNodeSelectorComponentData,\n        panelClass: string,\n        width: string\n    ): MatDialogRef<ContentNodeSelectorComponent> {\n        return this.dialog.open(ContentNodeSelectorComponent, {\n            data,\n            panelClass,\n            width,\n            disableClose: true\n        });\n    }\n\n    private imageResolver(row: ShareDataRow): string | null {\n        const entry: Node = row.node.entry;\n        if (!this.contentService.hasAllowableOperations(entry, 'create')) {\n            if (this.isNodeFolder(entry)) {\n                return this.thumbnailService.getMimeTypeIcon('disable/folder');\n            }\n        }\n\n        return null;\n    }\n\n    private hasAllowableOperationsOnNodeFolder(entry: Node): boolean {\n        return this.isNodeFolder(entry) && this.contentService.hasAllowableOperations(entry, 'create');\n    }\n\n    private isNodeFolder(entry: Node): boolean {\n        return entry.isFolder;\n    }\n\n    private isCopyMoveSelectionValid(entry: Node): boolean {\n        return this.hasEntityCreatePermission(entry) && !this.isSite(entry);\n    }\n\n    private hasEntityCreatePermission(entry: Node): boolean {\n        return this.contentService.hasAllowableOperations(entry, 'create');\n    }\n\n    private isSite(entry) {\n        return !!entry.guid || entry.nodeType === 'st:site' || entry.nodeType === 'st:sites';\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @angular-eslint/no-input-rename */\n\nimport { Directive, ElementRef, Renderer2, HostListener, Input, AfterViewInit, inject } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { ContentService } from '../common/services/content.service';\nimport { AllowableOperationsEnum } from '../common/models/allowable-operations.enum';\nimport { ContentNodeDialogService } from '../content-node-selector/content-node-dialog.service';\n\n@Directive({\n    standalone: true,\n    selector: '[adf-node-lock]'\n})\nexport class NodeLockDirective implements AfterViewInit {\n    element = inject(ElementRef);\n    private readonly renderer = inject(Renderer2);\n    private readonly contentService = inject(ContentService);\n    private readonly contentNodeDialogService = inject(ContentNodeDialogService);\n\n    /** Node to lock/unlock. */\n    @Input('adf-node-lock')\n    node: Node;\n\n    @HostListener('click', ['$event'])\n    onClick(event) {\n        event.stopPropagation();\n        this.contentNodeDialogService.openLockNodeDialog(this.node);\n    }\n\n    ngAfterViewInit() {\n        const hasAllowableOperations = this.contentService.hasAllowableOperations(this.node, AllowableOperationsEnum.LOCK);\n        this.renderer.setProperty(this.element.nativeElement, 'disabled', !hasAllowableOperations);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Directive, HostListener, Input, OnChanges, Output, EventEmitter, SimpleChanges, inject } from '@angular/core';\nimport { FavoriteBodyCreate, FavoritesApi } from '@alfresco/js-api';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\nimport { LibraryEntity } from '../interfaces/library-entity.interface';\nimport { NotificationService } from '@alfresco/adf-core';\n\n@Directive({\n    standalone: true,\n    selector: '[adf-favorite-library]',\n    exportAs: 'favoriteLibrary'\n})\nexport class LibraryFavoriteDirective implements OnChanges {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n    private readonly notificationService = inject(NotificationService);\n\n    @Input('adf-favorite-library')\n    library: LibraryEntity = null;\n\n    @Output() toggle = new EventEmitter<any>();\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() error = new EventEmitter<any>();\n\n    private targetLibrary = null;\n\n    private _favoritesApi: FavoritesApi;\n    get favoritesApi(): FavoritesApi {\n        this._favoritesApi = this._favoritesApi ?? new FavoritesApi(this.alfrescoApiService.getInstance());\n        return this._favoritesApi;\n    }\n\n    @HostListener('click')\n    onClick() {\n        const guid = this.targetLibrary.entry.guid;\n\n        if (this.targetLibrary.isFavorite) {\n            this.removeFavorite(guid);\n        } else {\n            this.addFavorite({\n                target: {\n                    site: {\n                        guid\n                    }\n                }\n            });\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (!changes.library.currentValue) {\n            this.targetLibrary = null;\n            return;\n        }\n\n        this.targetLibrary = changes.library.currentValue;\n        this.markFavoriteLibrary(changes.library.currentValue);\n    }\n\n    isFavorite(): boolean {\n        return this.targetLibrary?.isFavorite;\n    }\n\n    private async markFavoriteLibrary(library: LibraryEntity) {\n        if (this.targetLibrary.isFavorite === undefined) {\n            try {\n                await this.favoritesApi.getFavoriteSite('-me-', library.entry.id);\n                this.targetLibrary.isFavorite = true;\n            } catch {\n                this.targetLibrary.isFavorite = false;\n            }\n        } else {\n            this.targetLibrary = library;\n        }\n    }\n\n    private addFavorite(favoriteBody: FavoriteBodyCreate) {\n        this.favoritesApi\n            .createFavorite('-me-', favoriteBody)\n            .then((libraryEntry) => {\n                this.targetLibrary.isFavorite = true;\n                this.notificationService.showInfo('NODE_FAVORITE_DIRECTIVE.MESSAGES.NODE_ADDED', null, { name: this.library.entry.title });\n                this.toggle.emit(libraryEntry);\n            })\n            .catch((error) => this.error.emit(error));\n    }\n\n    private removeFavorite(favoriteId: string) {\n        this.favoritesApi\n            .deleteFavorite('-me-', favoriteId)\n            .then((libraryBody) => {\n                this.targetLibrary.isFavorite = false;\n                this.notificationService.showInfo('NODE_FAVORITE_DIRECTIVE.MESSAGES.NODE_REMOVED', null, { name: this.library.entry.title });\n                this.toggle.emit(libraryBody);\n            })\n            .catch((error) => this.error.emit(error));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { filter } from 'rxjs/operators';\nimport { ReplaySubject } from 'rxjs';\nimport { VersionInfo, RepositoryInfo } from '@alfresco/js-api';\nimport { DiscoveryApiService } from '../common/services/discovery-api.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class VersionCompatibilityService {\n    private readonly discoveryApiService = inject(DiscoveryApiService);\n\n    private acsVersion: VersionInfo;\n\n    acsVersionInitialized$ = new ReplaySubject<void>();\n\n    constructor() {\n        this.discoveryApiService.ecmProductInfo$\n            .pipe(filter((acsInfo) => !!acsInfo))\n            .subscribe((acsInfo: RepositoryInfo) => this.initializeAcsVersion(acsInfo.version));\n    }\n\n    private initializeAcsVersion(acsVersion: VersionInfo) {\n        this.acsVersion = acsVersion;\n        this.acsVersionInitialized$.next(undefined);\n    }\n\n    getAcsVersion(): VersionInfo {\n        return this.acsVersion;\n    }\n\n    isVersionSupported(requiredVersion: string): boolean {\n        const parsedRequiredVersion = this.parseVersion(requiredVersion);\n        const currentVersion = this.getAcsVersion();\n\n        let versionSupported = false;\n\n        if (currentVersion) {\n            if (+currentVersion.major > +parsedRequiredVersion.major) {\n                versionSupported = true;\n            } else if (currentVersion.major === parsedRequiredVersion.major && +currentVersion.minor > +parsedRequiredVersion.minor) {\n                versionSupported = true;\n            } else if (\n                currentVersion.major === parsedRequiredVersion.major &&\n                currentVersion.minor === parsedRequiredVersion.minor &&\n                +currentVersion.patch >= +parsedRequiredVersion.patch\n            ) {\n                versionSupported = true;\n            }\n        }\n\n        return versionSupported;\n    }\n\n    private parseVersion(version: string): VersionInfo {\n        const major = version.split('.')[0];\n        const minor = version.split('.')[1] || '0';\n        const patch = version.split('.')[2] || '0';\n\n        return {\n            major,\n            minor,\n            patch\n        } as VersionInfo;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Directive, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, inject } from '@angular/core';\nimport { SiteEntry, SiteMembershipRequestBodyCreate, SiteMembershipRequestEntry, SitesApi } from '@alfresco/js-api';\nimport { BehaviorSubject, from, Observable } from 'rxjs';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\nimport { LibraryMembershipToggleEvent } from '../interfaces/library-membership-toggle-event.interface';\nimport { LibraryMembershipErrorEvent } from '../interfaces/library-membership-error-event.interface';\nimport { VersionCompatibilityService } from '../version-compatibility/version-compatibility.service';\nimport { SitesService } from '../common/services/sites.service';\n\n@Directive({\n    standalone: true,\n    selector: '[adf-library-membership]',\n    exportAs: 'libraryMembership'\n})\nexport class LibraryMembershipDirective implements OnChanges {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n    private readonly sitesService = inject(SitesService);\n    private readonly versionCompatibilityService = inject(VersionCompatibilityService);\n\n    targetSite: any = null;\n\n    isJoinRequested: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n    private _sitesApi: SitesApi;\n    get sitesApi(): SitesApi {\n        this._sitesApi = this._sitesApi ?? new SitesApi(this.alfrescoApiService.getInstance());\n        return this._sitesApi;\n    }\n\n    /** Site for which to toggle the membership request. */\n    @Input('adf-library-membership')\n    selection: SiteEntry = null;\n\n    /** Site for which to toggle the membership request. */\n    @Input()\n    isAdmin = false;\n\n    @Output()\n    toggle = new EventEmitter<LibraryMembershipToggleEvent>();\n\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output()\n    error = new EventEmitter<LibraryMembershipErrorEvent>();\n\n    @HostListener('click')\n    onClick() {\n        this.toggleMembershipRequest();\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (!changes.selection.currentValue?.entry) {\n            this.targetSite = null;\n\n            return;\n        }\n        this.targetSite = changes.selection.currentValue.entry;\n        this.markMembershipRequest();\n    }\n\n    toggleMembershipRequest() {\n        if (!this.targetSite) {\n            return;\n        }\n\n        if (this.targetSite.joinRequested) {\n            this.cancelJoinRequest().subscribe(\n                () => {\n                    this.targetSite.joinRequested = false;\n                    this.isJoinRequested.next(false);\n                    const info = {\n                        updatedEntry: this.targetSite,\n                        shouldReload: false,\n                        i18nKey: 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.INFO.JOIN_CANCELED'\n                    };\n                    this.toggle.emit(info);\n                },\n                (error) => {\n                    const errWithMessage = {\n                        error,\n                        i18nKey: 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.ERRORS.JOIN_CANCEL_FAILED'\n                    };\n                    this.error.emit(errWithMessage);\n                }\n            );\n        }\n\n        if (!this.targetSite.joinRequested && !this.isAdmin) {\n            this.joinLibraryRequest().subscribe(\n                (createdMembership) => {\n                    this.targetSite.joinRequested = true;\n                    this.isJoinRequested.next(true);\n\n                    if (createdMembership.entry?.site?.role) {\n                        const info = {\n                            shouldReload: true,\n                            i18nKey: 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.INFO.JOINED'\n                        };\n                        this.toggle.emit(info);\n                    } else {\n                        const info = {\n                            updatedEntry: this.targetSite,\n                            shouldReload: false,\n                            i18nKey: 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.INFO.JOIN_REQUESTED'\n                        };\n                        this.toggle.emit(info);\n                    }\n                },\n                (error) => {\n                    const errWithMessage = {\n                        error,\n                        i18nKey: 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.ERRORS.JOIN_REQUEST_FAILED'\n                    };\n\n                    const senderEmailCheck = 'Failed to resolve sender mail address';\n                    const receiverEmailCheck = 'All recipients for the mail action were invalid';\n\n                    if (error.message) {\n                        if (error.message.includes(senderEmailCheck)) {\n                            errWithMessage.i18nKey = 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.ERRORS.INVALID_SENDER_EMAIL';\n                        } else if (error.message.includes(receiverEmailCheck)) {\n                            errWithMessage.i18nKey = 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.ERRORS.INVALID_RECEIVER_EMAIL';\n                        }\n                    }\n\n                    this.error.emit(errWithMessage);\n                }\n            );\n        }\n\n        if (this.isAdmin) {\n            this.joinLibrary().subscribe(\n                (createdMembership) => {\n                    if (createdMembership.entry?.role) {\n                        const info = {\n                            shouldReload: true,\n                            i18nKey: 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.INFO.JOINED'\n                        };\n                        this.toggle.emit(info);\n                    }\n                },\n                (error) => {\n                    const errWithMessage = {\n                        error,\n                        i18nKey: 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.ERRORS.JOIN_REQUEST_FAILED'\n                    };\n\n                    const senderEmailCheck = 'Failed to resolve sender mail address';\n                    const receiverEmailCheck = 'All recipients for the mail action were invalid';\n\n                    if (error.message) {\n                        if (error.message.includes(senderEmailCheck)) {\n                            errWithMessage.i18nKey = 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.ERRORS.INVALID_SENDER_EMAIL';\n                        } else if (error.message.includes(receiverEmailCheck)) {\n                            errWithMessage.i18nKey = 'ADF_LIBRARY_MEMBERSHIP_MESSAGES.ERRORS.INVALID_RECEIVER_EMAIL';\n                        }\n                    }\n\n                    this.error.emit(errWithMessage);\n                }\n            );\n        }\n    }\n\n    markMembershipRequest() {\n        if (!this.targetSite) {\n            return;\n        }\n\n        this.getMembershipRequest().subscribe(\n            (data) => {\n                if (data.entry.id === this.targetSite.id) {\n                    this.targetSite.joinRequested = true;\n                    this.isJoinRequested.next(true);\n                }\n            },\n            () => {\n                this.targetSite.joinRequested = false;\n                this.isJoinRequested.next(false);\n            }\n        );\n    }\n\n    private joinLibraryRequest(): Observable<SiteMembershipRequestEntry> {\n        const memberBody = {\n            id: this.targetSite.id\n        } as SiteMembershipRequestBodyCreate;\n\n        if (this.versionCompatibilityService.isVersionSupported('7.0.0')) {\n            memberBody.client = 'workspace';\n        }\n        return from(this.sitesApi.createSiteMembershipRequestForPerson('-me-', memberBody));\n    }\n\n    private joinLibrary() {\n        return this.sitesService.createSiteMembership(this.targetSite.id, {\n            role: 'SiteConsumer',\n            id: '-me-'\n        });\n    }\n\n    private cancelJoinRequest(): Observable<void> {\n        return from(this.sitesApi.deleteSiteMembershipRequestForPerson('-me-', this.targetSite.id));\n    }\n\n    private getMembershipRequest() {\n        return from(this.sitesApi.getSiteMembershipRequestForPerson('-me-', this.targetSite.id));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @angular-eslint/no-input-rename */\n\nimport { Directive, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, inject } from '@angular/core';\nimport { NodeEntry, Node, DeletedNodeEntry, DeletedNode, TrashcanApi, NodesApi } from '@alfresco/js-api';\nimport { Observable, forkJoin, from, of } from 'rxjs';\nimport { TranslationService } from '@alfresco/adf-core';\nimport { map, catchError, retry } from 'rxjs/operators';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\n\ninterface ProcessedNodeData {\n    entry: Node | DeletedNode;\n    status: number;\n}\n\ninterface ProcessStatus {\n    success: ProcessedNodeData[];\n    failed: ProcessedNodeData[];\n\n    someFailed();\n\n    someSucceeded();\n\n    oneFailed();\n\n    oneSucceeded();\n\n    allSucceeded();\n\n    allFailed();\n}\n\n@Directive({\n    standalone: true,\n    selector: '[adf-delete]'\n})\nexport class NodeDeleteDirective implements OnChanges {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n    private readonly translation = inject(TranslationService);\n    private readonly elementRef = inject(ElementRef);\n\n    /** Array of nodes to delete. */\n    @Input('adf-delete')\n    selection: NodeEntry[] | DeletedNodeEntry[];\n\n    /** If true then the nodes are deleted immediately rather than being put in the trash */\n    @Input()\n    permanent: boolean = false;\n\n    /** Emitted when the nodes have been deleted. */\n    @Output()\n    delete: EventEmitter<any> = new EventEmitter();\n\n    private _trashcanApi: TrashcanApi;\n    get trashcanApi(): TrashcanApi {\n        this._trashcanApi = this._trashcanApi ?? new TrashcanApi(this.alfrescoApiService.getInstance());\n        return this._trashcanApi;\n    }\n\n    private _nodesApi: NodesApi;\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.alfrescoApiService.getInstance());\n        return this._nodesApi;\n    }\n\n    @HostListener('click')\n    onClick() {\n        this.process(this.selection);\n    }\n\n    ngOnChanges() {\n        if (!this.selection || (this.selection && this.selection.length === 0)) {\n            this.setDisableAttribute(true);\n        } else {\n            if (!this.elementRef.nativeElement.hasAttribute('adf-check-allowable-operation')) {\n                this.setDisableAttribute(false);\n            }\n        }\n    }\n\n    private setDisableAttribute(disable: boolean) {\n        this.elementRef.nativeElement.disabled = disable;\n    }\n\n    private process(selection: NodeEntry[] | DeletedNodeEntry[]) {\n        if (selection?.length) {\n            const batch = this.getDeleteNodesBatch(selection);\n\n            forkJoin(...batch).subscribe((data: ProcessedNodeData[]) => {\n                const processedItems: ProcessStatus = this.processStatus(data);\n                const message = this.getMessage(processedItems);\n\n                if (message) {\n                    this.delete.emit(message);\n                }\n            });\n        }\n    }\n\n    private getDeleteNodesBatch(selection: NodeEntry[] | DeletedNodeEntry[]): Observable<ProcessedNodeData>[] {\n        return selection.map((node) => this.deleteNode(node));\n    }\n\n    private deleteNode(node: NodeEntry | DeletedNodeEntry): Observable<ProcessedNodeData> {\n        const id = (node.entry as any).nodeId || node.entry.id;\n\n        let promise: Promise<any>;\n\n        if (Object.prototype.hasOwnProperty.call(node.entry, 'archivedAt') && node.entry['archivedAt']) {\n            promise = this.trashcanApi.deleteDeletedNode(id);\n        } else {\n            promise = this.nodesApi.deleteNode(id, { permanent: this.permanent });\n        }\n\n        return from(promise).pipe(\n            retry(3),\n            map(() => ({\n                entry: node.entry,\n                status: 1\n            })),\n            catchError(() =>\n                of({\n                    entry: node.entry,\n                    status: 0\n                })\n            )\n        );\n    }\n\n    private processStatus(data): ProcessStatus {\n        const deleteStatus = {\n            success: [],\n            failed: [],\n            get someFailed() {\n                return !!this.failed.length;\n            },\n            get someSucceeded() {\n                return !!this.success.length;\n            },\n            get oneFailed() {\n                return this.failed.length === 1;\n            },\n            get oneSucceeded() {\n                return this.success.length === 1;\n            },\n            get allSucceeded() {\n                return this.someSucceeded && !this.someFailed;\n            },\n            get allFailed() {\n                return this.someFailed && !this.someSucceeded;\n            }\n        };\n\n        return data.reduce((acc, next) => {\n            if (next.status === 1) {\n                acc.success.push(next);\n            } else {\n                acc.failed.push(next);\n            }\n\n            return acc;\n        }, deleteStatus);\n    }\n\n    private getMessage(status: ProcessStatus): string | null {\n        if (status.allFailed && !status.oneFailed) {\n            return this.translation.instant(\n                'CORE.DELETE_NODE.ERROR_PLURAL',\n                // eslint-disable-next-line id-blacklist\n                { number: status.failed.length }\n            );\n        }\n\n        if (status.allSucceeded && !status.oneSucceeded) {\n            return this.translation.instant(\n                'CORE.DELETE_NODE.PLURAL',\n                // eslint-disable-next-line id-blacklist\n                { number: status.success.length }\n            );\n        }\n\n        if (status.someFailed && status.someSucceeded && !status.oneSucceeded) {\n            return this.translation.instant('CORE.DELETE_NODE.PARTIAL_PLURAL', {\n                success: status.success.length,\n                failed: status.failed.length\n            });\n        }\n\n        if (status.someFailed && status.oneSucceeded) {\n            return this.translation.instant('CORE.DELETE_NODE.PARTIAL_SINGULAR', {\n                success: status.success.length,\n                failed: status.failed.length\n            });\n        }\n\n        if (status.oneFailed && !status.someSucceeded) {\n            return this.translation.instant('CORE.DELETE_NODE.ERROR_SINGULAR', { name: status.failed[0].entry.name });\n        }\n\n        if (status.oneSucceeded && !status.someFailed) {\n            return this.translation.instant('CORE.DELETE_NODE.SINGULAR', { name: status.success[0].entry.name });\n        }\n\n        return null;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @angular-eslint/no-input-rename */\n\nimport { Directive, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, inject } from '@angular/core';\nimport { FavoriteBodyCreate, NodeEntry, SharedLinkEntry, Node, SharedLink, FavoritesApi } from '@alfresco/js-api';\nimport { Observable, from, forkJoin, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\nimport { NotificationService } from '@alfresco/adf-core';\n\n@Directive({\n    standalone: true,\n    selector: '[adf-node-favorite]',\n    exportAs: 'adfFavorite'\n})\nexport class NodeFavoriteDirective implements OnChanges {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n    private readonly notificationService = inject(NotificationService);\n\n    favorites: any[] = [];\n\n    private _favoritesApi: FavoritesApi;\n    get favoritesApi(): FavoritesApi {\n        this._favoritesApi = this._favoritesApi ?? new FavoritesApi(this.alfrescoApiService.getInstance());\n        return this._favoritesApi;\n    }\n\n    /** Array of nodes to toggle as favorites. */\n    @Input('adf-node-favorite')\n    selection: NodeEntry[] = [];\n\n    /** Emitted when the favorite setting is complete. */\n    @Output() toggle = new EventEmitter<any>();\n\n    /** Emitted when the favorite setting fails. */\n    @Output() error = new EventEmitter<any>();\n\n    @HostListener('click')\n    onClick() {\n        this.toggleFavorite();\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (!changes.selection.currentValue.length) {\n            this.favorites = [];\n\n            return;\n        }\n\n        this.markFavoritesNodes(changes.selection.currentValue);\n    }\n\n    toggleFavorite() {\n        if (!this.favorites.length) {\n            return;\n        }\n\n        const every = this.favorites.every((selected) => selected.entry.isFavorite);\n\n        if (every) {\n            const batch = this.favorites.map((selected: NodeEntry | SharedLinkEntry) => {\n                // shared files have nodeId\n                const id = (selected as SharedLinkEntry).entry.nodeId || selected.entry.id;\n\n                return from(this.favoritesApi.deleteFavorite('-me-', id));\n            });\n\n            forkJoin(batch).subscribe({\n                next: () => {\n                    this.favorites.forEach((selected) => (selected.entry.isFavorite = false));\n                    if (this.favorites.length > 1) {\n                        this.notificationService.showInfo('NODE_FAVORITE_DIRECTIVE.MESSAGES.NODES_REMOVED', null, { number: this.favorites.length });\n                    } else {\n                        this.notificationService.showInfo('NODE_FAVORITE_DIRECTIVE.MESSAGES.NODE_REMOVED', null, {\n                            name: this.favorites[0].entry.name\n                        });\n                    }\n                    this.toggle.emit();\n                },\n                error: (error) => this.error.emit(error)\n            });\n        }\n\n        if (!every) {\n            const notFavorite = this.favorites.filter((node) => !node.entry.isFavorite);\n            const body = notFavorite.map((node) => this.createFavoriteBody(node));\n\n            from(this.favoritesApi.createFavorite('-me-', body as any)).subscribe({\n                next: () => {\n                    notFavorite.forEach((selected) => (selected.entry.isFavorite = true));\n                    if (notFavorite.length > 1) {\n                        this.notificationService.showInfo('NODE_FAVORITE_DIRECTIVE.MESSAGES.NODES_ADDED', null, { number: notFavorite.length });\n                    } else {\n                        this.notificationService.showInfo('NODE_FAVORITE_DIRECTIVE.MESSAGES.NODE_ADDED', null, { name: notFavorite[0].entry.name });\n                    }\n                    this.toggle.emit();\n                },\n                error: (error) => this.error.emit(error)\n            });\n        }\n    }\n\n    markFavoritesNodes(selection: NodeEntry[]) {\n        if (selection.length <= this.favorites.length) {\n            this.favorites = this.reduce(this.favorites, selection);\n        }\n\n        const result = this.diff(selection, this.favorites);\n        const batch = this.getProcessBatch(result);\n\n        forkJoin(batch).subscribe((data) => {\n            this.favorites.push(...data);\n        });\n    }\n\n    hasFavorites(): boolean {\n        if (this.favorites && !this.favorites.length) {\n            return false;\n        }\n\n        return this.favorites.every((selected) => selected.entry.isFavorite);\n    }\n\n    private getProcessBatch(selection: NodeEntry[]): Observable<any>[] {\n        return selection.map((selected) => this.getFavorite(selected));\n    }\n\n    private getFavorite(selected: NodeEntry | SharedLinkEntry): Observable<any> {\n        const node: Node | SharedLink = selected.entry;\n\n        // ACS 6.x with 'isFavorite' include\n        if (node && Object.prototype.hasOwnProperty.call(node, 'isFavorite')) {\n            return of(selected);\n        }\n\n        // ACS 5.x and 6.x without 'isFavorite' include\n        const { name, isFile, isFolder } = node as Node;\n        const id = (node as SharedLink).nodeId || node.id;\n\n        const promise = this.favoritesApi.getFavorite('-me-', id);\n\n        return from(promise).pipe(\n            map(() => ({\n                entry: {\n                    id,\n                    isFolder,\n                    isFile,\n                    name,\n                    isFavorite: true\n                }\n            })),\n            catchError(() =>\n                of({\n                    entry: {\n                        id,\n                        isFolder,\n                        isFile,\n                        name,\n                        isFavorite: false\n                    }\n                })\n            )\n        );\n    }\n\n    private createFavoriteBody(node: NodeEntry): FavoriteBodyCreate {\n        const type = this.getNodeType(node);\n        // shared files have nodeId\n        const id = node.entry['nodeId'] || node.entry.id;\n\n        return {\n            target: {\n                [type]: {\n                    guid: id\n                }\n            }\n        };\n    }\n\n    private getNodeType(node: NodeEntry): string {\n        // shared could only be files\n        if (!node.entry.isFile && !node.entry.isFolder) {\n            return 'file';\n        }\n\n        return node.entry.isFile ? 'file' : 'folder';\n    }\n\n    private diff(list: NodeEntry[], patch: any[]): NodeEntry[] {\n        const ids = patch.map((item) => item.entry.id);\n\n        return list.filter((item) => (ids.includes(item.entry.id) ? null : item));\n    }\n\n    private reduce(patch: any[], comparator: NodeEntry[]): any[] {\n        const ids = comparator.map((item) => item.entry.id);\n\n        return patch.filter((item) => (ids.includes(item.entry.id) ? item : null));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @angular-eslint/component-selector, @angular-eslint/no-input-rename */\n\nimport { Directive, EventEmitter, HostListener, Input, Output, inject } from '@angular/core';\nimport { TrashcanApi, DeletedNodeEntry, DeletedNodesPaging } from '@alfresco/js-api';\nimport { Observable, forkJoin, from, of } from 'rxjs';\nimport { tap, mergeMap, map, catchError } from 'rxjs/operators';\nimport { TranslationService } from '@alfresco/adf-core';\nimport { RestoreMessageModel } from '../interfaces/restore-message-model.interface';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\n\n@Directive({\n    standalone: true,\n    selector: '[adf-restore]'\n})\nexport class NodeRestoreDirective {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n    private readonly translation = inject(TranslationService);\n\n    private readonly restoreProcessStatus;\n\n    private _trashcanApi: TrashcanApi;\n    get trashcanApi(): TrashcanApi {\n        this._trashcanApi = this._trashcanApi ?? new TrashcanApi(this.alfrescoApiService.getInstance());\n        return this._trashcanApi;\n    }\n\n    /** Array of deleted nodes to restore. */\n    @Input('adf-restore')\n    selection: DeletedNodeEntry[];\n\n    /** Emitted when restoration is complete. */\n    @Output()\n    restore: EventEmitter<RestoreMessageModel> = new EventEmitter();\n\n    @HostListener('click')\n    onClick() {\n        this.recover(this.selection);\n    }\n\n    constructor() {\n        this.restoreProcessStatus = this.processStatus();\n    }\n\n    private recover(selection: any) {\n        if (!selection.length) {\n            return;\n        }\n\n        const nodesWithPath = this.getNodesWithPath(selection);\n\n        if (selection.length && nodesWithPath.length) {\n            this.restoreNodesBatch(nodesWithPath)\n                .pipe(\n                    tap((restoredNodes) => {\n                        const status = this.processStatus(restoredNodes);\n\n                        this.restoreProcessStatus.fail.push(...status.fail);\n                        this.restoreProcessStatus.success.push(...status.success);\n                    }),\n                    mergeMap(() => this.getDeletedNodes())\n                )\n                .subscribe((deletedNodesList) => {\n                    const { entries: nodeList } = deletedNodesList.list;\n                    const { fail: restoreErrorNodes } = this.restoreProcessStatus;\n                    const selectedNodes = this.diff(restoreErrorNodes, selection, false);\n                    const remainingNodes = this.diff(selectedNodes, nodeList);\n\n                    if (!remainingNodes.length) {\n                        this.notification();\n                    } else {\n                        this.recover(remainingNodes);\n                    }\n                });\n        } else {\n            this.restoreProcessStatus.fail.push(...selection);\n            this.notification();\n            return;\n        }\n    }\n\n    private restoreNodesBatch(batch: DeletedNodeEntry[]): Observable<DeletedNodeEntry[]> {\n        return forkJoin(batch.map((node) => this.restoreNode(node)));\n    }\n\n    private getNodesWithPath(selection): DeletedNodeEntry[] {\n        return selection.filter((node) => node.entry.path);\n    }\n\n    private getDeletedNodes(): Observable<DeletedNodesPaging> {\n        const promise = this.trashcanApi.listDeletedNodes({ include: ['path'] });\n\n        return from(promise);\n    }\n\n    private restoreNode(node): Observable<any> {\n        const { entry } = node;\n\n        const promise = this.trashcanApi.restoreDeletedNode(entry.id);\n\n        return from(promise).pipe(\n            map(() => ({\n                status: 1,\n                entry\n            })),\n            catchError((error) => {\n                const { statusCode } = JSON.parse(error.message).error;\n\n                return of({\n                    status: 0,\n                    statusCode,\n                    entry\n                });\n            })\n        );\n    }\n\n    private diff(selection, list, fromList = true): any {\n        const ids = selection.map((item) => item.entry.id);\n\n        return list.filter((item) => {\n            if (fromList) {\n                return ids.includes(item.entry.id) ? item : null;\n            } else {\n                return !ids.includes(item.entry.id) ? item : null;\n            }\n        });\n    }\n\n    private processStatus(data = []): any {\n        const status = {\n            fail: [],\n            success: [],\n            get someFailed() {\n                return !!this.fail.length;\n            },\n            get someSucceeded() {\n                return !!this.success.length;\n            },\n            get oneFailed() {\n                return this.fail.length === 1;\n            },\n            get oneSucceeded() {\n                return this.success.length === 1;\n            },\n            get allSucceeded() {\n                return this.someSucceeded && !this.someFailed;\n            },\n            get allFailed() {\n                return this.someFailed && !this.someSucceeded;\n            },\n            reset() {\n                this.fail = [];\n                this.success = [];\n            }\n        };\n\n        return data.reduce((acc, node) => {\n            if (node.status) {\n                acc.success.push(node);\n            } else {\n                acc.fail.push(node);\n            }\n\n            return acc;\n        }, status);\n    }\n\n    private getRestoreMessage(): string | null {\n        const { restoreProcessStatus: status } = this;\n\n        if (status.someFailed && !status.oneFailed) {\n            return this.translation.instant('CORE.RESTORE_NODE.PARTIAL_PLURAL', {\n                // eslint-disable-next-line id-blacklist\n                number: status.fail.length\n            });\n        }\n\n        if (status.oneFailed && status.fail[0].statusCode) {\n            if (status.fail[0].statusCode === 409) {\n                return this.translation.instant('CORE.RESTORE_NODE.NODE_EXISTS', {\n                    name: status.fail[0].entry.name\n                });\n            } else {\n                return this.translation.instant('CORE.RESTORE_NODE.GENERIC', {\n                    name: status.fail[0].entry.name\n                });\n            }\n        }\n\n        if (status.oneFailed && !status.fail[0].statusCode) {\n            return this.translation.instant('CORE.RESTORE_NODE.LOCATION_MISSING', {\n                name: status.fail[0].entry.name\n            });\n        }\n\n        if (status.allSucceeded && !status.oneSucceeded) {\n            return this.translation.instant('CORE.RESTORE_NODE.PLURAL');\n        }\n\n        if (status.allSucceeded && status.oneSucceeded) {\n            return this.translation.instant('CORE.RESTORE_NODE.SINGULAR', {\n                name: status.success[0].entry.name\n            });\n        }\n\n        return null;\n    }\n\n    private notification(): void {\n        const status = Object.assign({}, this.restoreProcessStatus);\n\n        const message = this.getRestoreMessage();\n        this.reset();\n\n        const action = status.oneSucceeded && !status.someFailed ? this.translation.instant('CORE.RESTORE_NODE.VIEW') : '';\n\n        let path;\n        if (status.success && status.success.length > 0) {\n            path = status.success[0].entry.path;\n        }\n        this.restore.emit({\n            message,\n            action,\n            path\n        });\n    }\n\n    private reset(): void {\n        this.restoreProcessStatus.reset();\n        this.selection = [];\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { NodeLockDirective } from './node-lock.directive';\nimport { NodeCounterComponent, NodeCounterDirective } from './node-counter.directive';\nimport { AutoFocusDirective } from './auto-focus.directive';\nimport { LibraryFavoriteDirective } from './library-favorite.directive';\nimport { LibraryMembershipDirective } from './library-membership.directive';\nimport { NodeDeleteDirective } from './node-delete.directive';\nimport { NodeFavoriteDirective } from './node-favorite.directive';\nimport { NodeRestoreDirective } from './node-restore.directive';\nimport { NodeDownloadDirective } from './node-download.directive';\n\n/* @deprecated import standalone directives instead */\nexport const CONTENT_DIRECTIVES = [\n    NodeLockDirective,\n    NodeCounterDirective,\n    NodeCounterComponent,\n    AutoFocusDirective,\n    LibraryFavoriteDirective,\n    LibraryMembershipDirective,\n    NodeDeleteDirective,\n    NodeFavoriteDirective,\n    NodeRestoreDirective,\n    NodeDownloadDirective\n];\n\n/** @deprecated import standalone directives instead */\n@NgModule({\n    imports: [...CONTENT_DIRECTIVES],\n    exports: [...CONTENT_DIRECTIVES]\n})\nexport class ContentDirectiveModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './content-directive.module';\nexport * from './node-lock.directive';\nexport * from './node-counter.directive';\nexport * from './auto-focus.directive';\nexport * from './library-favorite.directive';\nexport * from './library-membership.directive';\nexport * from './node-delete.directive';\nexport * from './node-favorite.directive';\nexport * from './node-restore.directive';\nexport * from './node-download.directive';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IconModule, TranslationService } from '@alfresco/adf-core';\nimport { Component, DestroyRef, EventEmitter, inject, Input, OnChanges, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { TagService } from '../services/tag.service';\nimport { TagPaging } from '@alfresco/js-api';\nimport { CommonModule } from '@angular/common';\nimport { MatListModule } from '@angular/material/list';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n *\n * This component, provide a list of the tags relative a node with actions button to add or remove new tag\n */\n\n@Component({\n    selector: 'adf-tag-node-actions-list',\n    imports: [CommonModule, MatListModule, IconModule, MatFormFieldModule, MatInputModule, TranslatePipe, FormsModule, MatButtonModule],\n    templateUrl: './tag-actions.component.html',\n    styleUrls: ['./tag-actions.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-tag-node-actions-list' }\n})\nexport class TagActionsComponent implements OnChanges, OnInit {\n    private readonly tagService = inject(TagService);\n    private readonly translateService = inject(TranslationService);\n\n    /** The identifier of a node. */\n    @Input({ required: true })\n    nodeId: string;\n\n    /** Emitted when a tag is added successfully. */\n    @Output()\n    successAdd: EventEmitter<any> = new EventEmitter();\n\n    /** Emitted when an error occurs. */\n    @Output()\n    error: EventEmitter<any> = new EventEmitter();\n\n    /** Emitted when an action is chosen. */\n    @Output()\n    result = new EventEmitter();\n\n    newTagName: string;\n    tagsEntries: any;\n    errorMsg: string;\n    disableAddTag: boolean = true;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.tagService.refresh.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.refreshTag());\n    }\n\n    ngOnChanges() {\n        return this.refreshTag();\n    }\n\n    refreshTag() {\n        if (this.nodeId) {\n            this.tagService.getTagsByNodeId(this.nodeId).subscribe(\n                (tagPaging: TagPaging) => {\n                    this.tagsEntries = tagPaging.list.entries;\n                    this.disableAddTag = false;\n                    this.result.emit(this.tagsEntries);\n                },\n                () => {\n                    this.tagsEntries = null;\n                    this.disableAddTag = true;\n                    this.result.emit(this.tagsEntries);\n                }\n            );\n        }\n    }\n\n    addTag() {\n        if (this.searchTag(this.newTagName)) {\n            this.errorMsg = this.translateService.instant('TAG.MESSAGES.EXIST');\n            this.error.emit(this.errorMsg);\n        } else {\n            this.tagService.addTag(this.nodeId, this.newTagName).subscribe(() => {\n                this.newTagName = '';\n                this.successAdd.emit(this.nodeId);\n            });\n        }\n    }\n\n    searchTag(searchTagName: string) {\n        if (this.tagsEntries) {\n            return this.tagsEntries.find((currentTag) => searchTagName === currentTag.entry.tag);\n        }\n    }\n\n    cleanErrorMsg() {\n        this.errorMsg = '';\n    }\n\n    removeTag(tag: string) {\n        this.tagService.removeTag(this.nodeId, tag);\n    }\n}\n","<mat-list>\n    <mat-list-item *ngFor=\"let currentEntry of tagsEntries; let idx = index\">\n        <div\n            class=\"adf-tag-actions-container\"\n            id=\"tag_delete_{{ currentEntry.entry.tag }}\"\n            tabindex=\"0\"\n            role=\"button\"\n            (keyup.enter)=\"removeTag(currentEntry.entry.id)\"\n            (click)=\"removeTag(currentEntry.entry.id)\"\n        >\n            <div class=\"adf-tag-actions-delete-text\" id=\"tag_name_{{ currentEntry.entry.tag }}\">{{ currentEntry.entry.tag }}</div>\n            <mat-icon class=\"adf-tag-actions-delete-icon\" adf-icon=\"delete\" />\n        </div>\n    </mat-list-item>\n</mat-list>\n<table class=\"adf-full-width\" cellspacing=\"0\">\n    <tr>\n        <td>\n            <mat-form-field class=\"adf-full-width\">\n                <input\n                    id=\"new-tag-text\"\n                    matInput\n                    placeholder=\"{{ 'TAG.LABEL.NEWTAG' | translate }}\"\n                    type=\"text\"\n                    (keypress)=\"cleanErrorMsg()\"\n                    [(ngModel)]=\"newTagName\"\n                />\n                <mat-hint data-automation-id=\"errorMessage\" *ngIf=\"error\" [ngStyle]=\"{ color: 'red' }\" align=\"start\">{{ errorMsg }} </mat-hint>\n            </mat-form-field>\n        </td>\n        <td>\n            <button id=\"add-tag\" class=\"adf-full-width\" color=\"primary\" (click)=\"addTag()\" [disabled]=\"disableAddTag\" mat-raised-button>\n                {{ 'TAG.BUTTON.ADD' | translate }}\n            </button>\n        </td>\n    </tr>\n</table>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, EventEmitter, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { TagService } from '../services/tag.service';\nimport { IconModule, PaginationModel } from '@alfresco/adf-core';\nimport { TagEntry } from '@alfresco/js-api';\nimport { CommonModule } from '@angular/common';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatButtonModule } from '@angular/material/button';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * This component provide a list of all the tag inside the ECM\n */\n@Component({\n    selector: 'adf-tag-list',\n    imports: [CommonModule, MatChipsModule, MatButtonModule, IconModule],\n    templateUrl: './tag-list.component.html',\n    styleUrls: ['./tag-list.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-tag-list' }\n})\nexport class TagListComponent implements OnInit {\n    private readonly tagService = inject(TagService);\n\n    /** Emitted when a tag is selected. */\n    @Output()\n    result = new EventEmitter();\n\n    /**\n     * Array of tags that are displayed\n     */\n    tagsEntries: TagEntry[] = [];\n\n    /**\n     * Number of items per iteration\n     */\n    size: number = 10;\n\n    defaultPagination: PaginationModel;\n    pagination: PaginationModel;\n\n    isLoading = false;\n    isSizeMinimum = true;\n\n    constructor() {\n        this.defaultPagination = {\n            skipCount: 0,\n            maxItems: this.size,\n            hasMoreItems: false\n        };\n\n        this.pagination = this.defaultPagination;\n\n        this.tagService.refresh.pipe(takeUntilDestroyed()).subscribe(() => {\n            this.tagsEntries = [];\n            this.refreshTag(this.defaultPagination);\n        });\n    }\n\n    ngOnInit() {\n        this.refreshTag(this.defaultPagination);\n    }\n    refreshTag(opts?: any) {\n        this.tagService.getAllTheTags(opts).subscribe((tags) => {\n            this.tagsEntries = this.tagsEntries.concat(tags.list.entries);\n            this.pagination = tags.list.pagination;\n            this.result.emit(this.tagsEntries);\n            this.isLoading = false;\n        });\n    }\n\n    loadMoreTags() {\n        if (this.pagination.hasMoreItems) {\n            this.isLoading = true;\n            this.isSizeMinimum = false;\n\n            this.refreshTag({\n                skipCount: this.pagination.skipCount + this.pagination.count,\n                maxItems: this.size\n            });\n        }\n    }\n\n    loadLessTags() {\n        this.isSizeMinimum = false;\n        this.tagsEntries = this.tagsEntries.slice(0, this.tagsEntries.length - this.pagination.count);\n        this.pagination.skipCount = this.pagination.skipCount - this.pagination.count;\n        this.pagination.hasMoreItems = true;\n\n        if (this.tagsEntries.length <= this.size) {\n            this.isSizeMinimum = true;\n        }\n    }\n}\n","<mat-chip-listbox class=\"adf-tag-chips-list\">\n    <div class=\"adf-list-tag\" *ngFor=\"let currentEntry of tagsEntries; let idx = index\">\n        <mat-chip-option class=\"adf-tag-list-chip\">\n            <span id=\"tag_name_{{idx}}\">{{currentEntry.entry.tag}}</span>\n        </mat-chip-option>\n    </div>\n</mat-chip-listbox>\n\n<div class=\"adf-tag-list-controls\">\n    <button\n        *ngIf=\"!isSizeMinimum\"\n        [disabled]=\"isLoading\"\n        data-automation-id=\"show-fewer-tags\"\n        mat-icon-button\n        (click)=\"loadLessTags()\">\n        <mat-icon adf-icon=\"keyboard_arrow_up\" />\n    </button>\n    <button\n        *ngIf=\"pagination.hasMoreItems\"\n        [disabled]=\"isLoading\"\n        data-automation-id=\"show-more-tags\"\n        mat-icon-button\n        (click)=\"loadMoreTags()\">\n        <mat-icon adf-icon=\"keyboard_arrow_down\" />\n    </button>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, EventEmitter, inject, Input, OnChanges, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { TagService } from '../services/tag.service';\nimport { TagEntry } from '@alfresco/js-api';\nimport { Chip, DynamicChipListComponent } from '@alfresco/adf-core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n *\n * This component, ShowNodeTag a list of the tag on relative a node\n */\n\n@Component({\n    selector: 'adf-tag-node-list',\n    imports: [DynamicChipListComponent],\n    templateUrl: './tag-node-list.component.html',\n    encapsulation: ViewEncapsulation.None\n})\nexport class TagNodeListComponent implements OnChanges, OnInit {\n    private readonly tagService = inject(TagService);\n\n    /** The identifier of a node. */\n    @Input({ required: true })\n    nodeId: string;\n\n    /** Show delete button */\n    @Input()\n    showDelete = true;\n\n    /** Should limit number of tags displayed */\n    @Input()\n    limitTagsDisplayed = false;\n\n    /** Emitted when a tag is selected. */\n    @Output()\n    results = new EventEmitter<TagEntry[]>();\n\n    private _tagChips: Chip[] = [];\n\n    get tagChips(): Chip[] {\n        return this._tagChips;\n    }\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnChanges(): void {\n        this.refreshTag();\n    }\n\n    ngOnInit(): void {\n        this.tagService.refresh.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.refreshTag());\n    }\n\n    refreshTag(): void {\n        if (this.nodeId) {\n            this.tagService.getTagsByNodeId(this.nodeId).subscribe((tagPaging) => {\n                this._tagChips = tagPaging.list.entries.map((tag) => ({\n                    id: tag.entry.id,\n                    name: tag.entry.tag\n                }));\n                this.results.emit(tagPaging.list.entries);\n            });\n        }\n    }\n\n    removeTag(tag: string): void {\n        this.tagService.removeTag(this.nodeId, tag).subscribe(() => {\n            this.refreshTag();\n        });\n    }\n}\n","<adf-dynamic-chip-list\n    [chips]=\"tagChips\"\n    [limitChipsDisplayed]=\"limitTagsDisplayed\"\n    [showDelete]=\"showDelete\"\n    (displayNext)=\"refreshTag()\"\n    (removedChip)=\"removeTag($event)\" />\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Available modes for tags creator.\n * Create mode allows only for creating completely new tags.\n * Create and Assign mode allows for both - creation of new tags and selection of existing tags.\n */\nexport const TagsCreatorMode = {\n    CREATE: 'CREATE',\n    CREATE_AND_ASSIGN: 'CREATE_AND_ASSIGN'\n} as const;\n\nexport type TagsCreatorMode = (typeof TagsCreatorMode)[keyof typeof TagsCreatorMode];\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Chip, DynamicChipListComponent, NotificationService } from '@alfresco/adf-core';\nimport { TagEntry, TagPaging } from '@alfresco/js-api';\nimport {\n    Component,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { EMPTY, forkJoin, Observable, Subject, timer } from 'rxjs';\nimport { debounce, distinctUntilChanged, finalize, first, map, takeUntil, tap } from 'rxjs/operators';\nimport { AutoFocusDirective } from '../../directives';\nimport { TagService } from '../services/tag.service';\nimport { TagsCreatorMode } from './tags-creator-mode';\n\ninterface TagNameControlErrors {\n    duplicatedExistingTag?: boolean;\n    duplicatedAddedTag?: boolean;\n    emptyTag?: boolean;\n    specialCharacters?: boolean;\n}\n\nconst DEFAULT_TAGS_SORTING = {\n    orderBy: 'tag',\n    direction: 'asc'\n};\n\n/**\n * Allows to create multiple tags. That component contains input and two lists. Top list is all created tags, bottom list is searched tags based on input's value.\n */\n@Component({\n    selector: 'adf-tags-creator',\n    imports: [\n        CommonModule,\n        MatInputModule,\n        ReactiveFormsModule,\n        AutoFocusDirective,\n        TranslatePipe,\n        MatChipsModule,\n        MatButtonModule,\n        MatIconModule,\n        MatListModule,\n        MatProgressSpinnerModule,\n        DynamicChipListComponent\n    ],\n    templateUrl: './tags-creator.component.html',\n    styleUrls: ['./tags-creator.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class TagsCreatorComponent implements OnInit, OnDestroy {\n    private readonly tagService = inject(TagService);\n    private readonly notificationService = inject(NotificationService);\n\n    /**\n     * Mode for component.\n     * In Create mode we can't select existing tags, we can only create them.\n     * In Create and Assign mode we can both - create tags and select existing tags.\n     */\n    @Input({ required: true })\n    mode: TagsCreatorMode;\n\n    /**\n     * False if tags can be removed from top list, true otherwise.\n     */\n    @Input()\n    disabledTagsRemoving = false;\n\n    /**\n     * Default top list.\n     *\n     * @param tags tags which should be displayed as default tags for top list.\n     */\n    @Input()\n    set tags(tags: string[]) {\n        this._tags = [...tags];\n        this.tagsToDisplay = this.tags.map((tag) => ({ id: tag, name: tag }));\n        this._initialExistingTags = null;\n        this._existingTags = null;\n        this.loadTags(this.tagNameControl.value);\n        this.tagNameControl.updateValueAndValidity();\n    }\n\n    get tags(): string[] {\n        return this._tags;\n    }\n\n    /**\n     * Decides if input for tags creation/searching should be visible. When input is hidden then panel of existing tags is hidden as well.\n     *\n     * @param tagNameControlVisible true if input should be visible, false otherwise.\n     */\n    @Input()\n    set tagNameControlVisible(tagNameControlVisible: boolean) {\n        this._tagNameControlVisible = tagNameControlVisible;\n        if (tagNameControlVisible) {\n            this._existingTagsPanelVisible = true;\n            setTimeout(() => {\n                this.tagNameInputElement?.nativeElement?.scrollIntoView();\n            });\n        } else {\n            this._existingTagsPanelVisible = false;\n            this.clearTagNameInput();\n        }\n        this.existingTagsPanelVisibilityChange.emit(this.existingTagsPanelVisible);\n    }\n\n    get tagNameControlVisible(): boolean {\n        return this._tagNameControlVisible;\n    }\n\n    /**\n     * Emitted when bottom list is showing or hiding.\n     */\n    @Output()\n    existingTagsPanelVisibilityChange = new EventEmitter<boolean>();\n    /**\n     * Emitted when tags in top list are changed.\n     */\n    @Output()\n    tagsChange = new EventEmitter<string[]>();\n\n    tagsToDisplay: Chip[] = [];\n\n    readonly nameErrorMessagesByErrors = new Map<keyof TagNameControlErrors, string>([\n        ['duplicatedExistingTag', 'EXISTING_TAG'],\n        ['duplicatedAddedTag', 'ALREADY_ADDED_TAG'],\n        ['emptyTag', 'EMPTY_TAG'],\n        ['specialCharacters', 'SPECIAL_CHARACTERS']\n    ]);\n\n    private readonly existingTagsListLimit = 15;\n\n    private readonly exactTagSet$ = new Subject<void>();\n    private _tags: string[] = [];\n    private readonly _tagNameControl = new FormControl<string>(\n        '',\n        [this.validateIfNotAlreadyAdded.bind(this), this.validateEmptyTag, this.validateSpecialCharacters],\n        this.validateIfNotExistingTag.bind(this)\n    );\n    private _tagNameControlVisible = false;\n    private _existingTags: TagEntry[];\n    private _initialExistingTags: TagEntry[];\n    private _tagNameErrorMessageKey = '';\n    private _spinnerVisible = false;\n    private _typing = false;\n    private _tagsListScrollbarVisible = false;\n    private readonly cancelExistingTagsLoading$ = new Subject<void>();\n    private existingExactTag: TagEntry;\n    private _existingTagsPanelVisible: boolean;\n\n    @ViewChild('tagsList')\n    private readonly tagsListElement: ElementRef;\n    @ViewChild('tagNameInput')\n    private readonly tagNameInputElement: ElementRef;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit(): void {\n        this.tagNameControl.valueChanges\n            .pipe(\n                map((name: string) => name.trim()),\n                distinctUntilChanged((previous, current) => {\n                    const valueNotChanged = previous === current;\n                    if (valueNotChanged) {\n                        this.exactTagSet$.next();\n                    }\n                    return valueNotChanged;\n                }),\n                tap((name: string) => {\n                    this._typing = true;\n                    if (name) {\n                        this._spinnerVisible = true;\n                        this._existingTagsPanelVisible = true;\n                    }\n                    this.existingTagsPanelVisibilityChange.emit(this.existingTagsPanelVisible);\n                    this.cancelExistingTagsLoading$.next();\n                    this._initialExistingTags = null;\n                    this._existingTags = null;\n                }),\n                debounce((name: string) => (name ? timer(300) : EMPTY)),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((name: string) => this.onTagNameControlValueChange(name));\n\n        this.tagNameControl.statusChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.setTagNameControlErrorMessageKey());\n\n        this.setTagNameControlErrorMessageKey();\n    }\n\n    ngOnDestroy(): void {\n        this.cancelExistingTagsLoading$.next();\n        this.cancelExistingTagsLoading$.complete();\n    }\n\n    @HostBinding('class.adf-creator-with-existing-tags-panel')\n    get hostClass(): boolean {\n        return this.existingTagsPanelVisible;\n    }\n\n    get tagNameControl(): FormControl<string> {\n        return this._tagNameControl;\n    }\n\n    /*\n     * Returns `true` if tags empty and non editable state, otherwise `false`\n     */\n    get showEmptyTagMessage(): boolean {\n        return this.tags?.length === 0 && !this.tagNameControlVisible;\n    }\n\n    get existingTags(): TagEntry[] {\n        return this._existingTags;\n    }\n\n    get tagNameErrorMessageKey(): string {\n        return this._tagNameErrorMessageKey;\n    }\n\n    get spinnerVisible(): boolean {\n        return this._spinnerVisible;\n    }\n\n    get typing(): boolean {\n        return this._typing;\n    }\n\n    get tagsListScrollbarVisible(): boolean {\n        return this._tagsListScrollbarVisible;\n    }\n\n    get existingTagsPanelVisible(): boolean {\n        return this._existingTagsPanelVisible;\n    }\n\n    /**\n     * Add tags to top list using value which is set in input. Adding tag is not allowed when value in input is invalid\n     * or if user is still typing what means that validation for input is not called yet.\n     */\n    addTag(): void {\n        if (!this._typing && !this.tagNameControl.invalid) {\n            this.tags = [...this.tags, this.tagNameControl.value.trim()];\n            this.clearTagNameInput();\n            this.checkScrollbarVisibility();\n            this.tagsChange.emit(this.tags);\n        }\n    }\n\n    /**\n     * Remove tag from top list. In case that tag was part of search result then that tag is moved to bottom list\n     * (list of existing tags) after removing so user can reselect it again later.\n     *\n     * @param tag tag's name which should be removed from top list.\n     */\n    removeTag(tag: string): void {\n        this.removeTagFromArray(this.tags, tag);\n        this.tags = [...this.tags];\n        this.tagNameControl.updateValueAndValidity();\n        this.updateExistingTagsListOnRemoveFromTagsToConfirm(tag);\n        this.exactTagSet$.next();\n        this.checkScrollbarVisibility();\n        this.tagsChange.emit(this.tags);\n    }\n\n    /**\n     * Called when user selects any tag from list of existing tags. It moves tag from existing tags list to top list.\n     *\n     * @param selectedTag changes\n     */\n    addExistingTagToTagsToAssign(selectedTag: TagEntry): void {\n        if (!this.isOnlyCreateMode()) {\n            this.tags.push(selectedTag.entry.tag);\n            this.removeTagFromArray(this.existingTags, selectedTag);\n            this.tagNameControl.updateValueAndValidity();\n            this.tags = [...this.tags];\n            this.exactTagSet$.next();\n            this.tagsChange.emit(this.tags);\n        }\n    }\n\n    /**\n     * Checks if component is in Create mode.\n     *\n     * @returns `true` if `Create` mode, `false` otherwise.\n     */\n    isOnlyCreateMode(): boolean {\n        return this.mode === TagsCreatorMode.CREATE;\n    }\n\n    private onTagNameControlValueChange(name: string): void {\n        this.tagNameControl.markAsTouched();\n        this.loadTags(name);\n    }\n\n    private loadTags(name: string) {\n        if (name && !this.tagNameControl.hasError('specialCharacters')) {\n            forkJoin({\n                exactResult: this.tagService.findTagByName(name),\n                searchedResult: this.tagService.searchTags(name, DEFAULT_TAGS_SORTING, false, 0, this.existingTagsListLimit)\n            })\n                .pipe(\n                    takeUntil(this.cancelExistingTagsLoading$),\n                    finalize(() => (this._typing = false))\n                )\n                .subscribe({\n                    next: ({ exactResult, searchedResult }: { exactResult: TagEntry; searchedResult: TagPaging }) => {\n                        if (exactResult) {\n                            this.existingExactTag = exactResult;\n                            this.removeExactTagFromSearchedResult(searchedResult);\n                            searchedResult.list.entries.unshift(exactResult);\n                        } else {\n                            this.existingExactTag = null;\n                        }\n\n                        this._initialExistingTags = searchedResult.list.entries;\n                        this.excludeAlreadyAddedTags(this._initialExistingTags);\n                        this.exactTagSet$.next();\n                        this._spinnerVisible = false;\n                    },\n                    error: () => {\n                        this.notificationService.showError('TAG.TAGS_CREATOR.ERRORS.FETCH_TAGS');\n                        this._spinnerVisible = false;\n                    }\n                });\n        } else {\n            this.existingExactTag = null;\n            this._spinnerVisible = false;\n        }\n    }\n\n    private removeExactTagFromSearchedResult(searchedResult: TagPaging): void {\n        const exactTagIndex = searchedResult.list.entries.findIndex((row) => this.compareTags(row.entry.tag, this.existingExactTag.entry.tag));\n\n        if (exactTagIndex > -1) {\n            searchedResult.list.entries.splice(exactTagIndex, 1);\n        }\n    }\n\n    private validateIfNotExistingTag(tagNameControl: FormControl<string>): Observable<TagNameControlErrors | null> {\n        return this.exactTagSet$.pipe(\n            map<void, TagNameControlErrors | null>(() =>\n                this.compareTags(tagNameControl.value, this.existingExactTag?.entry?.tag) ? { duplicatedExistingTag: true } : null\n            ),\n            first()\n        );\n    }\n\n    private validateIfNotAlreadyAdded(tagNameControl: FormControl<string>): TagNameControlErrors | null {\n        return this.tags.some((tag) => this.compareTags(tag, tagNameControl.value)) ? { duplicatedAddedTag: true } : null;\n    }\n\n    private compareTags(tagName1?: string, tagName2?: string): boolean {\n        return tagName1?.trim().toUpperCase() === tagName2?.trim().toUpperCase();\n    }\n\n    private validateEmptyTag(tagNameControl: FormControl<string>): TagNameControlErrors | null {\n        return tagNameControl.value.length && !tagNameControl.value.trim() ? { emptyTag: true } : null;\n    }\n\n    private validateSpecialCharacters(tagNameControl: FormControl<string>): TagNameControlErrors | null {\n        const specialSymbolsRegex = /[{}()^':\"\\\\|<>/?.*]/;\n        return tagNameControl.value.length && specialSymbolsRegex.test(tagNameControl.value) ? { specialCharacters: true } : null;\n    }\n\n    private setTagNameControlErrorMessageKey(): void {\n        this._tagNameErrorMessageKey = this.tagNameControl.invalid\n            ? `TAG.TAGS_CREATOR.ERRORS.${this.nameErrorMessagesByErrors.get(\n                  Object.keys(this.tagNameControl.errors)[0] as keyof TagNameControlErrors\n              )}`\n            : '';\n    }\n\n    private checkScrollbarVisibility(): void {\n        setTimeout(() => {\n            this._tagsListScrollbarVisible = this.tagsListElement.nativeElement.scrollHeight > this.tagsListElement.nativeElement.clientHeight;\n        });\n    }\n\n    private removeTagFromArray<T>(tags: T[], tag: T) {\n        tags.splice(tags.indexOf(tag), 1);\n    }\n\n    private updateExistingTagsListOnRemoveFromTagsToConfirm(tag: string) {\n        const entryForTagAddedToExistingTags = this._initialExistingTags?.find((tagEntry) => tagEntry.entry.tag === tag);\n        if (entryForTagAddedToExistingTags) {\n            this.existingTags.unshift(entryForTagAddedToExistingTags);\n            if (this.existingExactTag) {\n                if (tag !== this.existingExactTag.entry.tag) {\n                    this.removeTagFromArray(this.existingTags, this.existingExactTag);\n                    this.sortExistingTags();\n                    this.existingTags.unshift(this.existingExactTag);\n                }\n            } else {\n                this.sortExistingTags();\n            }\n            this.exactTagSet$.next();\n        }\n    }\n\n    private sortExistingTags() {\n        this.existingTags.sort((tagEntry1, tagEntry2) => tagEntry1.entry.tag.localeCompare(tagEntry2.entry.tag));\n    }\n\n    private excludeAlreadyAddedTags(tags: TagEntry[]) {\n        this._existingTags = tags.filter((tag) => !this.tags.includes(tag.entry.tag));\n    }\n\n    private clearTagNameInput() {\n        this.tagNameControl.setValue('');\n        this.tagNameControl.markAsUntouched();\n    }\n}\n","<div class=\"adf-tags-creation\">\n    @if (tagNameControlVisible) {\n        <mat-form-field class=\"adf-tag-name-field\">\n            <mat-label>{{ 'TAG.TAGS_CREATOR.TAG_SEARCH_PLACEHOLDER' | translate }}</mat-label>\n            <input\n                matInput\n                #tagNameInput\n                autocomplete=\"off\"\n                [formControl]=\"tagNameControl\"\n                (keyup.enter)=\"addTag()\"\n                adf-auto-focus\n            />\n            <mat-error \n                *ngIf=\"tagNameControl.invalid && tagNameControl.touched\"\n                data-automation-id=\"tags-error-message\">\n                {{ tagNameErrorMessageKey | translate }}\n            </mat-error>\n        </mat-form-field>\n    }\n    <p class=\"adf-no-tags-message\" *ngIf=\"showEmptyTagMessage\">\n        {{ 'TAG.TAGS_CREATOR.NO_TAGS_CREATED' | translate }}\n    </p>\n    <div class=\"adf-tags-list\" [class.adf-tags-list-fixed]=\"!tagNameControlVisible\" #tagsList>\n        <ng-container *ngIf=\"tags?.length > 0\">\n            <adf-dynamic-chip-list\n                class=\"adf-tags-chips-container\"\n                [chips]=\"tagsToDisplay\"\n                [disableDelete]=\"disabledTagsRemoving\"\n                (removedChip)=\"removeTag($event)\" />\n        </ng-container>\n    </div>\n</div>\n<div class=\"adf-existing-tags-panel\" *ngIf=\"existingTagsPanelVisible\">\n    <span\n        *ngIf=\"!spinnerVisible || existingTags\"\n        class=\"adf-create-tag-label\"\n        (click)=\"addTag()\"\n        role=\"button\"\n        tabindex=\"0\"\n        (keyup.enter)=\"addTag()\"\n        [hidden]=\"!tagNameControl.value || tagNameControl.invalid || typing\"\n    >\n        {{ 'TAG.TAGS_CREATOR.CREATE_TAG' | translate : { tag: tagNameControl.value } }}\n    </span>\n    <p *ngIf=\"!spinnerVisible && existingTags\" class=\"adf-existing-tags-label\">\n        {{ (isOnlyCreateMode() ? 'TAG.TAGS_CREATOR.EXISTING_TAGS' : 'TAG.TAGS_CREATOR.EXISTING_TAGS_SELECTION') | translate }}\n    </p>\n    <div class=\"adf-tags-list\">\n        <mat-list *ngIf=\"!spinnerVisible && existingTags\" [disabled]=\"isOnlyCreateMode()\">\n            <mat-list-item *ngFor=\"let tagRow of existingTags\" class=\"adf-tag\"\n                           (click)=\"addExistingTagToTagsToAssign(tagRow)\">\n                {{ tagRow.entry.tag }}\n            </mat-list-item>\n            <p *ngIf=\"!existingTags?.length\">{{ 'TAG.TAGS_CREATOR.NO_EXISTING_TAGS' | translate }}</p>\n        </mat-list>\n        <mat-spinner\n            *ngIf=\"spinnerVisible\"\n            class=\"adf-tags-creator-spinner\"\n            [diameter]=\"50\"\n            [attr.aria-label]=\"'TAG.TAGS_CREATOR.TAGS_LOADING' | translate\"\n        />\n    </div>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { TagActionsComponent } from './tag-actions/tag-actions.component';\nimport { TagListComponent } from './tag-list/tag-list.component';\nimport { TagNodeListComponent } from './tag-node-list/tag-node-list.component';\nimport { TagsCreatorComponent } from './tags-creator/tags-creator.component';\n\nexport const CONTENT_TAG_DIRECTIVES = [TagsCreatorComponent, TagActionsComponent, TagListComponent, TagNodeListComponent] as const;\n\n/** @deprecated use `...CONTENT_TAG_DIRECTIVES` instead or import standalone components directly */\n@NgModule({\n    imports: [...CONTENT_TAG_DIRECTIVES],\n    exports: [...CONTENT_TAG_DIRECTIVES]\n})\nexport class TagModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './tag-actions/tag-actions.component';\nexport * from './tag-list/tag-list.component';\nexport * from './tag-node-list/tag-node-list.component';\n\nexport * from './services/tag.service';\n\nexport * from './tag.module';\n\nexport * from './tags-creator/tags-creator-mode';\nexport * from './tags-creator/tags-creator.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, Output, EventEmitter, inject, Injector, runInInjectionContext } from '@angular/core';\nimport { Node, NodeEntry } from '@alfresco/js-api';\nimport { Observable } from 'rxjs';\nimport { switchMap, map } from 'rxjs/operators';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ContentService } from '../../common/services/content.service';\nimport { NodeDownloadDirective } from '../../directives/node-download.directive';\n\nimport { DocumentListService } from './document-list.service';\nimport { ContentNodeDialogService } from '../../content-node-selector/content-node-dialog.service';\nimport { NodeAction } from '../models/node-action.enum';\n\n@Injectable({\n    providedIn: 'root'\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class NodeActionsService {\n    private readonly contentDialogService = inject(ContentNodeDialogService);\n    dialogRef = inject(MatDialog);\n    content = inject(ContentService);\n    private readonly documentListService = inject(DocumentListService);\n    private readonly injector = inject(Injector);\n\n    @Output()\n    error = new EventEmitter<any>();\n\n    downloadNode(node: NodeEntry) {\n        runInInjectionContext(this.injector, () => {\n            new NodeDownloadDirective().downloadNode(node);\n        });\n    }\n\n    /**\n     * Copy content node\n     *\n     * @param contentEntry node to copy\n     * @param permission permission which is needed to apply the action\n     * @returns operation result\n     */\n    copyContent(contentEntry: Node, permission?: string): Observable<string> {\n        return this.doFileOperation(NodeAction.COPY, 'content', contentEntry, permission);\n    }\n\n    /**\n     * Copy folder node\n     *\n     * @param contentEntry node to copy\n     * @param permission permission which is needed to apply the action\n     * @returns operation result\n     */\n    copyFolder(contentEntry: Node, permission?: string): Observable<string> {\n        return this.doFileOperation(NodeAction.COPY, 'folder', contentEntry, permission);\n    }\n\n    /**\n     * Move content node\n     *\n     * @param contentEntry node to move\n     * @param permission permission which is needed to apply the action\n     * @returns operation result\n     */\n    moveContent(contentEntry: Node, permission?: string): Observable<string> {\n        return this.doFileOperation(NodeAction.MOVE, 'content', contentEntry, permission);\n    }\n\n    /**\n     * Move folder node\n     *\n     * @param contentEntry node to move\n     * @param permission permission which is needed to apply the action\n     * @returns operation result\n     */\n    moveFolder(contentEntry: Node, permission?: string): Observable<string> {\n        return this.doFileOperation(NodeAction.MOVE, 'folder', contentEntry, permission);\n    }\n\n    /**\n     * General method for performing the given operation (copy|move)\n     *\n     * @param action the action to perform (copy|move)\n     * @param type type of the content (content|folder)\n     * @param contentEntry the contentEntry which has to have the action performed on\n     * @param permission permission which is needed to apply the action\n     * @returns operation result\n     */\n    private doFileOperation(action: 'COPY' | 'MOVE', type: 'content' | 'folder', contentEntry: Node, permission?: string): Observable<string> {\n        return this.contentDialogService.openCopyMoveDialog(action, contentEntry, permission).pipe(\n            switchMap((selections) => {\n                const selection = selections[0];\n                return this.documentListService[`${action.toLowerCase()}Node`]\n                    .call(this.documentListService, contentEntry.id, selection.id)\n                    .pipe(map(() => `OPERATION.SUCCESS.${type.toUpperCase()}.${action}`));\n            })\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TranslationService } from '@alfresco/adf-core';\nimport { ContentService } from '../../common/services/content.service';\nimport { Injectable, inject } from '@angular/core';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { Observable, Subject, throwError, of } from 'rxjs';\nimport { ContentActionHandler } from '../models/content-action.model';\nimport { PermissionModel } from '../models/permissions.model';\nimport { DocumentListService } from './document-list.service';\nimport { NodeActionsService } from './node-actions.service';\nimport { ContentNodeDialogService } from '../../content-node-selector/content-node-dialog.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DocumentActionsService {\n    private readonly nodeActionsService = inject(NodeActionsService);\n    private readonly contentNodeDialogService = inject(ContentNodeDialogService);\n    private readonly translation = inject(TranslationService);\n    private readonly documentListService = inject(DocumentListService);\n    private readonly contentService = inject(ContentService);\n\n    permissionEvent = new Subject<PermissionModel>();\n    error = new Subject<Error>();\n    success = new Subject<string>();\n\n    private handlers: { [id: string]: ContentActionHandler } = {};\n\n    constructor() {\n        this.setupActionHandlers();\n    }\n\n    /**\n     * Gets the handler for an action.\n     *\n     * @param key Identifier of the action\n     * @returns The handler for the action\n     */\n    getHandler(key: string): ContentActionHandler {\n        if (key) {\n            const lKey = key.toLowerCase();\n            return this.handlers[lKey] || null;\n        }\n        return null;\n    }\n\n    /**\n     * Sets a new handler for an action.\n     *\n     * @param key Identifier of the action\n     * @param handler Handler for the action\n     * @returns False if the key was an empty/null string, true otherwise\n     */\n    setHandler(key: string, handler: ContentActionHandler): boolean {\n        if (key) {\n            const lKey = key.toLowerCase();\n            this.handlers[lKey] = handler;\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Checks if actions can be executed for an item.\n     *\n     * @param nodeEntry Item to receive an action\n     * @returns True if the action can be executed on this item, false otherwise\n     */\n    canExecuteAction(nodeEntry: NodeEntry): boolean {\n        return this.documentListService && nodeEntry && nodeEntry.entry.isFile === true;\n    }\n\n    private setupActionHandlers() {\n        this.handlers['copy'] = this.copyNode.bind(this);\n        this.handlers['move'] = this.moveNode.bind(this);\n        this.handlers['delete'] = this.deleteNode.bind(this);\n        this.handlers['download'] = this.downloadNode.bind(this);\n        this.handlers['lock'] = this.lockNode.bind(this);\n    }\n\n    private lockNode(node: NodeEntry) {\n        return this.contentNodeDialogService.openLockNodeDialog(node.entry);\n    }\n\n    private downloadNode(obj: NodeEntry) {\n        this.nodeActionsService.downloadNode(obj);\n    }\n\n    private copyNode(node: NodeEntry, _target?: any, permission?: string) {\n        const actionObservable = this.nodeActionsService.copyContent(node.entry, permission);\n        this.prepareHandlers(actionObservable);\n        return actionObservable;\n    }\n\n    private moveNode(node: NodeEntry, _target?: any, permission?: string) {\n        const actionObservable = this.nodeActionsService.moveContent(node.entry, permission);\n        this.prepareHandlers(actionObservable);\n        return actionObservable;\n    }\n\n    private prepareHandlers(actionObservable: Observable<string>): void {\n        actionObservable.subscribe((fileOperationMessage) => {\n            this.success.next(fileOperationMessage);\n        }, this.error.next.bind(this.error));\n    }\n\n    private deleteNode(node: NodeEntry, _target?: any, permission?: string): Observable<any> {\n        if (this.canExecuteAction(node)) {\n            if (this.contentService.hasAllowableOperations(node.entry, permission)) {\n                const handlerObservable = this.documentListService.deleteNode(node.entry.id);\n                handlerObservable.subscribe(\n                    () => {\n                        const message = this.translation.instant('CORE.DELETE_NODE.SINGULAR', { name: node.entry.name });\n                        this.success.next(message);\n                    },\n                    () => {\n                        const message = this.translation.instant('CORE.DELETE_NODE.ERROR_SINGULAR', { name: node.entry.name });\n                        this.error.next(message);\n                    }\n                );\n                return handlerObservable;\n            } else {\n                this.permissionEvent.next(\n                    new PermissionModel({\n                        type: 'content',\n                        action: 'delete',\n                        permission\n                    })\n                );\n                return throwError(new Error('No permission to delete'));\n            }\n        }\n\n        return of();\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TranslationService } from '@alfresco/adf-core';\nimport { ContentService } from '../../common/services/content.service';\nimport { Injectable, inject } from '@angular/core';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { Observable, Subject, throwError, of } from 'rxjs';\nimport { ContentActionHandler } from '../models/content-action.model';\nimport { PermissionModel } from '../models/permissions.model';\nimport { DocumentListService } from './document-list.service';\nimport { NodeActionsService } from './node-actions.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class FolderActionsService {\n    private readonly nodeActionsService = inject(NodeActionsService);\n    private readonly documentListService = inject(DocumentListService);\n    private readonly contentService = inject(ContentService);\n    private readonly translation = inject(TranslationService);\n\n    permissionEvent = new Subject<PermissionModel>();\n    error = new Subject<Error>();\n    success = new Subject<string>();\n\n    private handlers: { [id: string]: ContentActionHandler } = {};\n\n    constructor() {\n        this.setupActionHandlers();\n    }\n\n    /**\n     * Gets the handler function for an action.\n     *\n     * @param key Identifier for the action\n     * @returns The handler function\n     */\n    getHandler(key: string): ContentActionHandler {\n        if (key) {\n            const lKey = key.toLowerCase();\n            return this.handlers[lKey] || null;\n        }\n        return null;\n    }\n\n    /**\n     * Sets a new handler function for an action.\n     *\n     * @param key Identifier for the action\n     * @param handler The new handler function\n     * @returns True if the key was a valid action identifier, false otherwise\n     */\n    setHandler(key: string, handler: ContentActionHandler): boolean {\n        if (key) {\n            const lKey = key.toLowerCase();\n            this.handlers[lKey] = handler;\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Checks if an action is available for a particular item.\n     *\n     * @param nodeEntry Item to check\n     * @returns True if the action is available, false otherwise\n     */\n    canExecuteAction(nodeEntry: NodeEntry): boolean {\n        return this.documentListService && nodeEntry && nodeEntry.entry.isFolder === true;\n    }\n\n    private setupActionHandlers() {\n        this.handlers['copy'] = this.copyNode.bind(this);\n        this.handlers['move'] = this.moveNode.bind(this);\n        this.handlers['delete'] = this.deleteNode.bind(this);\n        this.handlers['download'] = this.downloadNode.bind(this);\n    }\n\n    private downloadNode(nodeEntry: NodeEntry) {\n        this.nodeActionsService.downloadNode(nodeEntry);\n    }\n\n    private copyNode(nodeEntry: NodeEntry, target?: any, permission?: string) {\n        const actionObservable = this.nodeActionsService.copyFolder(nodeEntry.entry, permission);\n        this.prepareHandlers(actionObservable, target);\n        return actionObservable;\n    }\n\n    private moveNode(nodeEntry: NodeEntry, target?: any, permission?: string) {\n        const actionObservable = this.nodeActionsService.moveFolder(nodeEntry.entry, permission);\n        this.prepareHandlers(actionObservable, target);\n        return actionObservable;\n    }\n\n    private prepareHandlers(actionObservable: Observable<any>, target?: any): void {\n        actionObservable.subscribe((fileOperationMessage) => {\n            if (target && typeof target.reload === 'function') {\n                target.reload();\n            }\n            this.success.next(fileOperationMessage);\n        }, this.error.next.bind(this.error));\n    }\n\n    private deleteNode(node: NodeEntry, target?: any, permission?: string): Observable<any> {\n        if (this.canExecuteAction(node)) {\n            if (this.contentService.hasAllowableOperations(node.entry, permission)) {\n                const handlerObservable = this.documentListService.deleteNode(node.entry.id);\n                handlerObservable.subscribe(\n                    () => {\n                        if (target && typeof target.reload === 'function') {\n                            target.reload();\n                        }\n\n                        const message = this.translation.instant('CORE.DELETE_NODE.SINGULAR', { name: node.entry.name });\n                        this.success.next(message);\n                    },\n                    () => {\n                        const message = this.translation.instant('CORE.DELETE_NODE.ERROR_SINGULAR', { name: node.entry.name });\n                        this.error.next(message);\n                    }\n                );\n\n                return handlerObservable;\n            } else {\n                this.permissionEvent.next(new PermissionModel({ type: 'folder', action: 'delete', permission }));\n                return throwError(new Error('No permission to delete'));\n            }\n        }\n\n        return of();\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @angular-eslint/component-selector */\n\nimport { Component, inject } from '@angular/core';\nimport { ContentActionModel } from './../../models/content-action.model';\nimport { DocumentListComponent } from './../document-list.component';\n\n@Component({\n    selector: 'content-actions',\n    template: ''\n})\nexport class ContentActionListComponent {\n    private readonly documentList = inject(DocumentListComponent);\n\n    /**\n     * Registers action handler within the parent document list component.\n     *\n     * @param action Action model to register.\n     * @returns `true` if actions was registered, otherwise `false`\n     */\n    registerAction(action: ContentActionModel): boolean {\n        if (this.documentList && action) {\n            this.documentList.actions.push(action);\n            return true;\n        }\n        return false;\n    }\n\n    unregisterAction(action: ContentActionModel): boolean {\n        if (this.documentList && action) {\n            const idx = this.documentList.actions.indexOf(action);\n            if (idx >= 0) {\n                this.documentList.actions.splice(idx, 1);\n                return true;\n            }\n        }\n        return false;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @angular-eslint/component-selector */\n\nimport { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges, OnDestroy, inject } from '@angular/core';\n\nimport { ContentActionHandler } from '../../models/content-action.model';\nimport { DocumentActionsService } from '../../services/document-actions.service';\nimport { FolderActionsService } from '../../services/folder-actions.service';\nimport { ContentActionModel, ContentActionTarget } from './../../models/content-action.model';\nimport { ContentActionListComponent } from './content-action-list.component';\nimport { Subscription } from 'rxjs';\n\n@Component({\n    selector: 'content-action',\n    template: ''\n})\nexport class ContentActionComponent implements OnInit, OnChanges, OnDestroy {\n    private readonly list = inject(ContentActionListComponent);\n    private readonly documentActions = inject(DocumentActionsService);\n    private readonly folderActions = inject(FolderActionsService);\n\n    /** The title of the action as shown in the menu. */\n    @Input()\n    title: string = 'Action';\n\n    /** The name of the icon to display next to the menu command (can be left blank). */\n    @Input()\n    icon: string;\n\n    /** Visibility state (see examples). */\n    @Input()\n    visible: boolean | ((...args) => boolean) = true;\n\n    /** System actions. Can be \"delete\", \"download\", \"copy\" or \"move\". */\n    @Input()\n    handler: string;\n\n    /** Type of item that the action applies to. Can be \"document\" or \"folder\" */\n    @Input()\n    target: string = ContentActionTarget.All;\n\n    /** The permission type. */\n    @Input()\n    permission: string;\n\n    /** Should this action be disabled in the menu if the user doesn't have permission for it? */\n    @Input()\n    disableWithNoPermission: boolean;\n\n    /** Is the menu item disabled? */\n    @Input()\n    disabled: boolean | ((...args) => boolean) = false;\n\n    /** Emitted when the user selects the action from the menu. */\n    @Output()\n    execute = new EventEmitter();\n\n    /** Emitted when a permission error occurs */\n    @Output()\n    permissionEvent = new EventEmitter();\n\n    /**\n     * Emitted when an error occurs during the action.\n     * Applies to copy and move actions.\n     */\n    @Output()\n    error = new EventEmitter();\n\n    /**\n     * Emitted when the action succeeds with the success string message.\n     * Applies to copy, move and delete actions.\n     */\n    @Output()\n    success = new EventEmitter();\n\n    documentActionModel: ContentActionModel;\n    folderActionModel: ContentActionModel;\n\n    private subscriptions: Subscription[] = [];\n\n    ngOnInit() {\n        if (this.target === ContentActionTarget.All) {\n            this.folderActionModel = this.generateAction(ContentActionTarget.Folder);\n            this.documentActionModel = this.generateAction(ContentActionTarget.Document);\n        } else {\n            this.documentActionModel = this.generateAction(this.target);\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.visible && !changes.visible.firstChange) {\n            if (this.documentActionModel) {\n                this.documentActionModel.visible = changes.visible.currentValue;\n            }\n            if (this.folderActionModel) {\n                this.folderActionModel.visible = changes.visible.currentValue;\n            }\n        }\n\n        if (changes.disabled && !changes.disabled.firstChange) {\n            if (this.documentActionModel) {\n                this.documentActionModel.disabled = changes.disabled.currentValue;\n            }\n            if (this.folderActionModel) {\n                this.folderActionModel.disabled = changes.disabled.currentValue;\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n        this.subscriptions = [];\n\n        if (this.documentActionModel) {\n            this.unregister(this.documentActionModel);\n            this.documentActionModel = null;\n        }\n\n        if (this.folderActionModel) {\n            this.unregister(this.folderActionModel);\n            this.folderActionModel = null;\n        }\n    }\n\n    register(model: ContentActionModel): boolean {\n        if (this.list) {\n            return this.list.registerAction(model);\n        }\n        return false;\n    }\n\n    unregister(model: ContentActionModel): boolean {\n        if (this.list) {\n            return this.list.unregisterAction(model);\n        }\n        return false;\n    }\n\n    private generateAction(target: string): ContentActionModel {\n        const model = new ContentActionModel({\n            title: this.title,\n            icon: this.icon,\n            permission: this.permission,\n            disableWithNoPermission: this.disableWithNoPermission,\n            target,\n            disabled: this.disabled,\n            visible: this.visible\n        });\n        if (this.handler) {\n            model.handler = this.getSystemHandler(target, this.handler);\n        }\n\n        if (this.execute) {\n            model.execute = (value: any): void => {\n                this.execute.emit({ value });\n            };\n        }\n\n        this.register(model);\n        return model;\n    }\n\n    getSystemHandler(target: string, name: string): ContentActionHandler {\n        if (target) {\n            target = target.toLowerCase();\n\n            if (target === ContentActionTarget.Document) {\n                if (this.documentActions) {\n                    this.subscriptions.push(\n                        this.documentActions.permissionEvent.subscribe((permission) => {\n                            this.permissionEvent.emit(permission);\n                        }),\n                        this.documentActions.error.subscribe((errors) => {\n                            this.error.emit(errors);\n                        }),\n                        this.documentActions.success.subscribe((message) => {\n                            this.success.emit(message);\n                        })\n                    );\n\n                    return this.documentActions.getHandler(name);\n                }\n                return null;\n            }\n\n            if (target === ContentActionTarget.Folder) {\n                if (this.folderActions) {\n                    this.subscriptions.push(\n                        this.folderActions.permissionEvent.subscribe((permission) => {\n                            this.permissionEvent.emit(permission);\n                        }),\n                        this.folderActions.error.subscribe((errors) => {\n                            this.error.emit(errors);\n                        }),\n                        this.folderActions.success.subscribe((message) => {\n                            this.success.emit(message);\n                        })\n                    );\n\n                    return this.folderActions.getHandler(name);\n                }\n                return null;\n            }\n        }\n        return null;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NodeEntry } from '@alfresco/js-api';\n\n/**\n * Utility class for generating node and library tooltips based on node properties\n */\nexport class NodeTooltipUtils {\n    /**\n     * Generates a tooltip string for a node based on its name, title, and description properties.\n     * The tooltip logic follows these rules:\n     * - If both title and description exist: shows \"title\\ndescription\"\n     * - If only title exists: shows \"name\\ntitle\"\n     * - If only description exists: shows \"name\\ndescription\"\n     * - If neither exists: shows \"name\"\n     * - Removes case-insensitive duplicates while preserving order\n     *\n     * @param node - The node entry to generate tooltip for\n     * @returns The tooltip string with newline-separated lines, or null if node is invalid\n     */\n    static getNodeTooltip(node: NodeEntry): string | null {\n        if (!node?.entry) {\n            return null;\n        }\n\n        const {\n            entry: { properties, name }\n        } = node;\n\n        const title = properties?.['cm:title'];\n        const description = properties?.['cm:description'];\n\n        // Build lines array based on available properties\n        const lines: string[] = [];\n\n        // Determine first line: title if available and different from name, otherwise name\n        if (title && description) {\n            lines.push(title, description);\n        } else if (title) {\n            lines.push(name, title);\n        } else if (description) {\n            lines.push(name, description);\n        } else {\n            lines.push(name);\n        }\n\n        // Remove case-insensitive duplicates while preserving order\n        return this.removeDuplicates(lines).join('\\n');\n    }\n\n    /**\n     * Generates a tooltip string for a library (site) node.\n     * Returns description if available, otherwise title, otherwise empty string.\n     *\n     * @param node - The node entry to generate tooltip for\n     * @returns The tooltip string, or empty string if no description or title is available\n     */\n    static getLibraryTooltip(node: NodeEntry): string {\n        if (!node?.entry) {\n            return '';\n        }\n\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        const { properties, description, title } = node.entry as any;\n\n        // Check both direct properties and cm: properties for compatibility\n        const desc = description || properties?.['cm:description'];\n        const ttl = title || properties?.['cm:title'];\n\n        return desc || ttl || '';\n    }\n\n    /**\n     * Generates a display title for a library (site) node.\n     * If there are duplicate titles in the list, appends the library ID/name in parentheses.\n     *\n     * @param library - The library entry object\n     * @param allEntries - Array of all entries to check for duplicates\n     * @returns The display title, with ID/name appended if duplicate exists\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    static getLibraryTitle(library: any, allEntries: any[]): string {\n        if (!library) {\n            return '';\n        }\n\n        // Support both direct properties and cm: properties\n        const libraryId = library.id;\n        const libraryName = library.name;\n        const libraryTitle = library.title || library.properties?.['cm:title'];\n\n        if (!libraryTitle) {\n            return libraryName || libraryId || '';\n        }\n\n        // Check if there are duplicate titles in the list\n        let isDuplicate = false;\n\n        if (allEntries && allEntries.length > 0) {\n            isDuplicate = allEntries.some((entry) => {\n                const entryId = entry.id;\n                const entryTitle = entry.title || entry.properties?.['cm:title'];\n                return entryId !== libraryId && entryTitle === libraryTitle;\n            });\n        }\n\n        // If duplicate, append the ID or name in parentheses\n        let suffix = libraryId;\n        if (libraryName && libraryName !== libraryTitle) {\n            suffix = libraryName;\n        }\n        return isDuplicate && suffix ? `${libraryTitle} (${suffix})` : libraryTitle;\n    }\n\n    /**\n     * Removes case-insensitive duplicate strings from an array while preserving order\n     *\n     * @param lines - Array of strings to deduplicate\n     * @returns Array with duplicates removed\n     */\n    private static removeDuplicates(lines: string[]): string[] {\n        const seen = new Set<string>();\n        return lines.filter((line) => {\n            const lowerLine = line.toLowerCase();\n            if (seen.has(lowerLine)) {\n                return false;\n            }\n            seen.add(lowerLine);\n            return true;\n        });\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { ShareDataRow } from '../../data/share-data-row.model';\nimport { NodesApiService } from '../../../common/services/nodes-api.service';\nimport { BehaviorSubject } from 'rxjs';\nimport { AsyncPipe } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NodeTooltipUtils } from '../../utils/node-tooltip.utils';\n\n@Component({\n    selector: 'adf-library-name-column',\n    imports: [AsyncPipe, TranslatePipe],\n    template: `\n        <span\n            role=\"link\"\n            [attr.aria-label]=\"\n                'NAME_COLUMN_LINK.ACCESSIBILITY.ARIA_LABEL'\n                    | translate\n                        : {\n                              name: displayText$ | async\n                          }\n            \"\n            class=\"adf-datatable-cell-value\"\n            title=\"{{ displayTooltip$ | async }}\"\n            (click)=\"onClick()\"\n            tabindex=\"0\"\n            (keyup.enter)=\"onClick()\"\n        >\n            {{ displayText$ | async }}\n        </span>\n    `,\n    styleUrls: ['./library-name-column.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'adf-datatable-content-cell adf-datatable-link adf-datatable-library-link adf-library-name-column'\n    }\n})\nexport class LibraryNameColumnComponent implements OnInit {\n    private readonly element = inject(ElementRef);\n    private readonly nodesApiService = inject(NodesApiService);\n\n    @Input({ required: true })\n    context: any;\n\n    displayTooltip$ = new BehaviorSubject<string>('');\n    displayText$ = new BehaviorSubject<string>('');\n    node: NodeEntry;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.updateValue();\n\n        this.nodesApiService.nodeUpdated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((node) => {\n            const row: ShareDataRow = this.context.row;\n            if (row) {\n                const { entry } = row.node;\n\n                if (entry === node) {\n                    row.node = { entry };\n                    this.updateValue();\n                }\n            }\n        });\n    }\n\n    protected updateValue() {\n        this.node = this.context.row.node;\n        const rows: Array<ShareDataRow> = this.context.data.rows || [];\n        if (this.node?.entry) {\n            const allEntries = rows.map((row: ShareDataRow) => row.node.entry);\n            this.displayText$.next(NodeTooltipUtils.getLibraryTitle(this.node.entry, allEntries));\n            this.displayTooltip$.next(NodeTooltipUtils.getLibraryTooltip(this.node));\n        }\n    }\n\n    onClick() {\n        this.element.nativeElement.dispatchEvent(\n            new CustomEvent('name-click', {\n                bubbles: true,\n                detail: {\n                    node: this.node\n                }\n            })\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, Input, OnInit, signal, ViewEncapsulation } from '@angular/core';\nimport { Site } from '@alfresco/js-api';\nimport { ShareDataRow } from '../../data/share-data-row.model';\nimport { NodesApiService } from '../../../common/services/nodes-api.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-library-role-column',\n    imports: [TranslatePipe],\n    template: `\n        <span class=\"adf-datatable-cell-value\" [title]=\"displayText() | translate\">\n            {{ displayText() | translate }}\n        </span>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-library-role-column adf-datatable-content-cell' }\n})\nexport class LibraryRoleColumnComponent implements OnInit {\n    private readonly nodesApiService = inject(NodesApiService);\n\n    @Input({ required: true })\n    context: any;\n\n    private readonly role = signal<string | undefined>(undefined);\n\n    readonly displayText = computed(() => {\n        const roleValue = this.role();\n        switch (roleValue) {\n            case Site.RoleEnum.SiteManager:\n                return 'LIBRARY.ROLE.MANAGER';\n            case Site.RoleEnum.SiteCollaborator:\n                return 'LIBRARY.ROLE.COLLABORATOR';\n            case Site.RoleEnum.SiteContributor:\n                return 'LIBRARY.ROLE.CONTRIBUTOR';\n            case Site.RoleEnum.SiteConsumer:\n                return 'LIBRARY.ROLE.CONSUMER';\n            default:\n                return 'LIBRARY.ROLE.NONE';\n        }\n    });\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.updateValue();\n\n        this.nodesApiService.nodeUpdated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((node) => {\n            const row: ShareDataRow = this.context.row;\n            if (row) {\n                const { entry } = row.node;\n\n                if (entry === node) {\n                    row.node = { entry };\n                    this.updateValue();\n                }\n            }\n        });\n    }\n\n    protected updateValue() {\n        const roleValue = this.context.row.node?.entry.role ?? this.context.row.obj.role;\n        this.role.set(roleValue);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport { NodesApiService } from '../../../common/services/nodes-api.service';\nimport { BehaviorSubject } from 'rxjs';\nimport { Site } from '@alfresco/js-api';\nimport { ShareDataRow } from '../../data/share-data-row.model';\nimport { AsyncPipe } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-library-status-column',\n    imports: [AsyncPipe, TranslatePipe],\n    template: `\n        <span class=\"adf-datatable-cell-value\" title=\"{{ displayText$ | async | translate }}\">\n            {{ displayText$ | async | translate }}\n        </span>\n    `,\n    host: { class: 'adf-library-status-column adf-datatable-content-cell' }\n})\nexport class LibraryStatusColumnComponent implements OnInit {\n    private readonly nodesApiService = inject(NodesApiService);\n\n    @Input({ required: true })\n    context: any;\n\n    displayText$ = new BehaviorSubject<string>('');\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.updateValue();\n\n        this.nodesApiService.nodeUpdated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((node) => {\n            const row: ShareDataRow = this.context.row;\n            if (row) {\n                const { entry } = row.node;\n\n                if (entry === node) {\n                    row.node = { entry };\n                    this.updateValue();\n                }\n            }\n        });\n    }\n\n    protected updateValue() {\n        const visibility = this.context.row.node?.entry.visibility ?? this.context.row.obj.visibility;\n\n        switch (visibility) {\n            case Site.VisibilityEnum.PUBLIC:\n                this.displayText$.next('LIBRARY.VISIBILITY.PUBLIC');\n                break;\n            case Site.VisibilityEnum.PRIVATE:\n                this.displayText$.next('LIBRARY.VISIBILITY.PRIVATE');\n                break;\n            case Site.VisibilityEnum.MODERATED:\n                this.displayText$.next('LIBRARY.VISIBILITY.MODERATED');\n                break;\n            default:\n                this.displayText$.next('UNKNOWN');\n                break;\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChangeDetectionStrategy, Component, computed, DestroyRef, ElementRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { BehaviorSubject } from 'rxjs';\nimport { NodesApiService } from '../../../common/services/nodes-api.service';\nimport { ShareDataRow } from '../../data/share-data-row.model';\nimport { AsyncPipe } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NodeTooltipUtils } from '../../utils/node-tooltip.utils';\n\n@Component({\n    selector: 'adf-name-column',\n    imports: [AsyncPipe, TranslatePipe],\n    template: `\n        <span\n            role=\"link\"\n            [attr.aria-label]=\"\n                'NAME_COLUMN_LINK.ACCESSIBILITY.ARIA_LABEL'\n                    | translate\n                        : {\n                              name: displayText$ | async\n                          }\n            \"\n            class=\"adf-datatable-cell-value\"\n            [title]=\"tooltip()\"\n            (click)=\"onClick()\"\n            tabindex=\"0\"\n            (keyup.enter)=\"onClick()\"\n        >\n            {{ displayText$ | async }}\n        </span>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-datatable-content-cell adf-datatable-link adf-name-column' }\n})\nexport class NameColumnComponent implements OnInit {\n    private readonly element = inject(ElementRef);\n    private readonly nodesApiService = inject(NodesApiService);\n\n    @Input({ required: true })\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    context: any;\n\n    @Input()\n    key = 'name';\n\n    displayText$ = new BehaviorSubject<string>('');\n    node: NodeEntry;\n\n    readonly tooltip = computed(() => NodeTooltipUtils.getNodeTooltip(this.node));\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.updateValue();\n\n        this.nodesApiService.nodeUpdated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((node) => {\n            const row: ShareDataRow = this.context.row;\n            if (row) {\n                const { entry } = row.node;\n\n                if (entry === node) {\n                    row.node = { entry };\n                    this.updateValue();\n                }\n            }\n        });\n    }\n\n    protected updateValue() {\n        this.node = this.context.row.node;\n\n        if (this.node?.entry) {\n            const displayValue = this.context.row.getValue(this.key);\n            this.displayText$.next(displayValue || this.node.entry.id);\n        }\n    }\n\n    onClick() {\n        this.element.nativeElement.dispatchEvent(\n            new CustomEvent('name-click', {\n                bubbles: true,\n                detail: {\n                    node: this.node\n                }\n            })\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ChangeDetectionStrategy, Component, computed, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { ShareDataRow } from '../../data/share-data-row.model';\nimport { NodeTooltipUtils } from '../../utils/node-tooltip.utils';\n\n@Component({\n    selector: 'adf-trashcan-name-column',\n    template: `<span class=\"adf-datatable-cell-value\" [title]=\"tooltip()\">{{ displayText }}</span>`,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-datatable-content-cell adf-trashcan-name-column' }\n})\nexport class TrashcanNameColumnComponent implements OnInit {\n    @Input({ required: true })\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    context: any;\n\n    isLibrary = false;\n    displayText: string;\n    node: NodeEntry;\n\n    readonly tooltip = computed(() => (this.isLibrary ? NodeTooltipUtils.getLibraryTooltip(this.node) : NodeTooltipUtils.getNodeTooltip(this.node)));\n\n    ngOnInit() {\n        this.node = this.context.row.node;\n        const rows: Array<ShareDataRow> = this.context.data.rows || [];\n\n        if (this.node?.entry) {\n            this.isLibrary = this.node.entry.nodeType === 'st:site';\n\n            if (this.isLibrary) {\n                const allEntries = rows.map((row) => row.node.entry);\n                this.displayText = NodeTooltipUtils.getLibraryTitle(this.node.entry, allEntries);\n            } else {\n                this.displayText = this.node.entry.name || this.node.entry.id;\n            }\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DataColumn, DataRow } from '@alfresco/adf-core';\n\nexport type ImageResolver = (row: DataRow, column: DataColumn) => string;\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ShareDataRow } from './share-data-row.model';\n\nexport type RowFilter = (value: ShareDataRow, index: number, array: ShareDataRow[]) => any;\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AllowableOperationsEnum } from '../../common/models/allowable-operations.enum';\n\nexport class PermissionStyleModel {\n    css: string;\n    permission: AllowableOperationsEnum;\n    isFolder: boolean = true;\n    isFile: boolean = true;\n\n    constructor(css: string, permission: AllowableOperationsEnum, isFile: boolean = true, isFolder: boolean = true) {\n        this.css = css;\n        this.permission = permission;\n        this.isFile = isFile;\n        this.isFolder = isFolder;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PaginationModel } from '@alfresco/adf-core';\nimport { Observable } from 'rxjs';\nimport { DocumentLoaderNode } from '../models/document-folder.model';\n\nexport interface DocumentListLoader {\n    loadFolderByNodeId(\n        nodeId: string,\n        pagination: PaginationModel,\n        includeFields: string[],\n        where?: string,\n        filters?: string[]\n    ): Observable<DocumentLoaderNode>;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { ContentActionListComponent } from './components/content-action/content-action-list.component';\nimport { ContentActionComponent } from './components/content-action/content-action.component';\nimport { DocumentListComponent } from './components/document-list.component';\nimport { TrashcanNameColumnComponent } from './components/trashcan-name-column/trashcan-name-column.component';\nimport { LibraryStatusColumnComponent } from './components/library-status-column/library-status-column.component';\nimport { LibraryRoleColumnComponent } from './components/library-role-column/library-role-column.component';\nimport { LibraryNameColumnComponent } from './components/library-name-column/library-name-column.component';\nimport { NameColumnComponent } from './components/name-column/name-column.component';\nimport { FilterHeaderComponent } from './components/filter-header/filter-header.component';\nimport { FileAutoDownloadComponent } from './components/file-auto-download/file-auto-download.component';\n\nexport const DOCUMENT_LIST_DIRECTIVES = [\n    ContentActionComponent,\n    FileAutoDownloadComponent,\n    FilterHeaderComponent,\n    LibraryNameColumnComponent,\n    LibraryRoleColumnComponent,\n    LibraryStatusColumnComponent,\n    NameColumnComponent,\n    TrashcanNameColumnComponent,\n    ContentActionListComponent,\n    DocumentListComponent\n] as const;\n\n/** @deprecated use `...DOCUMENT_LIST_DIRECTIVES` or import standalone components */\n@NgModule({\n    imports: [...DOCUMENT_LIST_DIRECTIVES],\n    exports: [...DOCUMENT_LIST_DIRECTIVES]\n})\nexport class DocumentListModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './components/document-list.component';\nexport * from './components/node.event';\nexport * from './components/content-action/content-action.component';\nexport * from './components/content-action/content-action-list.component';\nexport * from './components/library-name-column/library-name-column.component';\nexport * from './components/library-role-column/library-role-column.component';\nexport * from './components/library-status-column/library-status-column.component';\nexport * from './components/name-column/name-column.component';\nexport * from './components/filter-header/filter-header.component';\nexport * from './components/trashcan-name-column/trashcan-name-column.component';\nexport * from './components/file-auto-download/file-auto-download.component';\n\n// data\nexport * from './data/share-datatable-adapter';\nexport * from './data/share-data-row.model';\nexport * from './data/image-resolver.model';\nexport * from './data/row-filter.model';\n\n// services\nexport * from './services/folder-actions.service';\nexport * from './services/document-actions.service';\nexport * from './services/document-list.service';\nexport * from './services/node-actions.service';\nexport * from './services/custom-resources.service';\nexport * from './services/lock.service';\n\n// models\nexport * from './models/content-action.model';\nexport * from './models/permissions.model';\nexport * from './models/permissions-style.model';\nexport * from './models/node-action.enum';\n\nexport * from './interfaces/document-list-loader.interface';\n\n// utils\nexport * from './utils/node-tooltip.utils';\n\nexport * from './document-list.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, OnChanges, ViewEncapsulation, OnInit } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { UploadButtonComponent } from './upload-button.component';\nimport { AllowableOperationsEnum } from '../../common/models/allowable-operations.enum';\nimport { FileModel } from '../../common/models/file.model';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n    selector: 'adf-upload-version-button',\n    imports: [CommonModule, MatButtonModule, TranslatePipe, MatIconModule],\n    templateUrl: './upload-button.component.html',\n    styleUrls: ['./upload-button.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-upload-version-button' }\n})\nexport class UploadVersionButtonComponent extends UploadButtonComponent implements OnChanges, OnInit {\n    /** (**Required**) The node to be versioned. */\n    @Input()\n    node: Node;\n\n    protected createFileModel(file: File): FileModel {\n        const fileModel = super.createFileModel(\n            file,\n            this.rootFolderId,\n            ((file as any).webkitRelativePath || '').replace(/\\/[^/]*$/, ''),\n            this.node.id\n        );\n\n        if (!this.isFileAcceptable(fileModel)) {\n            const message = this.translationService.instant('FILE_UPLOAD.VERSION.MESSAGES.INCOMPATIBLE_VERSION');\n            this.error.emit(message);\n        }\n\n        return fileModel;\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n        this.checkPermission();\n    }\n\n    checkPermission() {\n        this.permissionValue.next(this.nodeHasPermission(this.node, AllowableOperationsEnum.UPDATE));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { FileUploadingDialogComponent } from './components/file-uploading-dialog.component';\nimport { FileUploadingListRowComponent } from './components/file-uploading-list-row.component';\nimport { FileUploadingListComponent } from './components/file-uploading-list.component';\nimport { UploadButtonComponent } from './components/upload-button.component';\nimport { UploadVersionButtonComponent } from './components/upload-version-button.component';\nimport { UploadDragAreaComponent } from './components/upload-drag-area.component';\nimport { FileDraggableDirective } from './directives/file-draggable.directive';\n\nexport const CONTENT_UPLOAD_DIRECTIVES = [\n    FileDraggableDirective,\n    UploadDragAreaComponent,\n    UploadButtonComponent,\n    UploadVersionButtonComponent,\n    FileUploadingListRowComponent,\n    FileUploadingListComponent,\n    FileUploadingDialogComponent\n] as const;\n\n/** @deprecated use `...CONTENT_UPLOAD_DIRECTIVES` instead or import standalone components directly */\n@NgModule({\n    imports: [...CONTENT_UPLOAD_DIRECTIVES],\n    exports: [...CONTENT_UPLOAD_DIRECTIVES]\n})\nexport class UploadModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './components/upload-button.component';\nexport * from './components/upload-version-button.component';\nexport * from './components/file-uploading-dialog.component';\nexport * from './components/upload-drag-area.component';\nexport * from './components/file-uploading-list.component';\nexport * from './components/file-uploading-list-row.component';\nexport * from './components/upload-files.event';\n\nexport * from './directives/file-draggable.directive';\n\nexport * from './components/base-upload/upload-base';\n\nexport * from './upload.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-check-list.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ViewEncapsulation, Input, inject } from '@angular/core';\nimport { SearchFilterComponent } from '../../components/search-filter/search-filter.component';\nimport { SearchFacetFiltersService } from '../../services/search-facet-filters.service';\nimport { CommonModule } from '@angular/common';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-search-chip-list',\n    imports: [CommonModule, MatChipsModule, TranslatePipe, IconModule],\n    templateUrl: './search-chip-list.component.html',\n    styleUrls: ['./search-chip-list.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-chip-list' }\n})\nexport class SearchChipListComponent {\n    facetFiltersService = inject(SearchFacetFiltersService);\n\n    /**\n     * Search filter to supply the data for the chips.\n     * Not required from 4.5.0 and later versions @deprecated\n     */\n    @Input()\n    searchFilter: SearchFilterComponent;\n\n    /** Flag used to enable the display of a clear-all-filters button. */\n    @Input()\n    clearAll: boolean = false;\n}\n","<mat-chip-listbox>\n    <ng-container *ngIf=\"facetFiltersService.selectedBuckets.length\">\n        <mat-chip-option *ngIf=\"clearAll && facetFiltersService.selectedBuckets.length > 1\"\n            data-automation-id=\"reset-filter\"\n            color=\"primary\"\n            selected\n            class=\"adf-search-chip-list-item\"\n            title=\"{{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.TOOLTIP' | translate }}\"\n            (click)=\"facetFiltersService.resetAllSelectedBuckets()\">\n            {{ 'SEARCH.FILTER.BUTTONS.CLEAR-ALL.LABEL' | translate }}\n        </mat-chip-option>\n\n        <mat-chip-option\n            data-automation-id=\"chip-list-entry\"\n            class=\"adf-search-chip-list-item\"\n            *ngFor=\"let selection of facetFiltersService.selectedBuckets\"\n            [removable]=\"true\"\n            (removed)=\"facetFiltersService.unselectFacetBucket(selection.field, selection.bucket)\">\n            {{ (selection.bucket.display || selection.bucket.label) | translate }}\n            <mat-icon class=\"adf-search-chip-list-item-remove\" adf-icon=\"cancel\" matChipRemove />\n        </mat-chip-option>\n    </ng-container>\n</mat-chip-listbox>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DateRangeType } from './date-range-type';\nimport { InLastDateType } from './in-last-date-type';\n\nexport interface SearchDateRange {\n    dateRangeType: DateRangeType;\n    inLastValueType?: InLastDateType;\n    inLastValue?: string | number;\n    betweenStartDate?: Date;\n    betweenEndDate?: Date;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-date-range/date-range-type';\nexport * from './search-date-range/in-last-date-type';\nexport * from './search-date-range/search-date-range';\nexport * from './search-date-range/search-date-range.component';\nexport * from './search-date-range-tabbed.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-datetime-range.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-filter-autocomplete-chips.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-filter-container.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, EventEmitter, inject, Output, ViewEncapsulation } from '@angular/core';\nimport { SearchQueryBuilderService } from '../../services/search-query-builder.service';\nimport { SearchForm } from '../../models/search-form.interface';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-search-form',\n    imports: [CommonModule, MatButtonModule, TranslatePipe, MatMenuModule, IconModule],\n    templateUrl: './search-form.component.html',\n    styleUrls: ['./search-form.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchFormComponent {\n    private readonly queryBuilder = inject(SearchQueryBuilderService);\n\n    searchForms$ = this.queryBuilder.searchForms;\n\n    /** Emitted when the form change */\n    @Output()\n    formChange: EventEmitter<SearchForm> = new EventEmitter<SearchForm>();\n\n    onSelectionChange(form: SearchForm) {\n        this.queryBuilder.updateSelectedConfiguration(form.id);\n        this.formChange.emit(form);\n    }\n\n    getSelected(forms: SearchForm[]): string {\n        return forms.find((form) => form.selected)?.name;\n    }\n}\n","<ng-container *ngIf=\"searchForms$ | async as forms\">\n\n    <ng-container *ngIf=\"forms.length === 1\">\n        <button class=\"adf-search-form adf-search-form-button\"\n                [disableRipple]=\"true\"\n                mat-button\n                [title]=\"getSelected(forms) | translate\"\n                [attr.aria-label]=\"getSelected(forms) | translate\">\n            <span class=\"adf-search-form-title\">{{ getSelected(forms) | translate }}</span>\n        </button>\n    </ng-container>\n\n    <ng-container  *ngIf=\"forms.length > 1\">\n        <button class=\"adf-search-form adf-search-form-button\"\n                [matMenuTriggerFor]=\"menu\"\n                #menuTrigger=\"matMenuTrigger\"\n                [disableRipple]=\"true\"\n                mat-button\n                [title]=\"getSelected(forms) | translate\"\n                [attr.aria-label]=\"getSelected(forms) | translate\"\n                [matMenuTriggerRestoreFocus]=\"true\">\n\n            <span class=\"adf-search-form-title\">{{ getSelected(forms) | translate }}</span>\n            <mat-icon [class.adf-search-form-icon-selected]=\"menuTrigger.menuOpen\" class=\"adf-search-form-icon\" adf-icon=\"expand_more\" iconPositionEnd />\n        </button>\n\n        <mat-menu #menu=\"matMenu\" class=\"adf-search-form-menu\">\n            <button *ngFor=\"let form of forms\" mat-menu-item tabindex=\"0\" [attr.aria-label]=\"form.name | translate\" (click)=\"onSelectionChange(form)\">\n                {{ form.name | translate }}\n            </button>\n        </mat-menu>\n    </ng-container>\n</ng-container>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-form.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppConfigService } from '@alfresco/adf-core';\nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { SearchConfiguration } from '../../models';\n\n@Component({\n    selector: 'adf-search-input',\n    imports: [CommonModule, MatFormFieldModule, MatInputModule, TranslatePipe],\n    templateUrl: `./search-input.component.html`,\n    styleUrls: ['./search-input.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class SearchInputComponent implements OnInit {\n    private readonly appConfig = inject(AppConfigService);\n\n    @Input()\n    value = '';\n\n    @Input()\n    label = 'SEARCH.INPUT.LABEL';\n\n    @Input()\n    placeholder = 'SEARCH.INPUT.PLACEHOLDER';\n\n    @Input()\n    fields = ['cm:name'];\n\n    @Output()\n    changed = new EventEmitter<string>();\n\n    ngOnInit(): void {\n        const searchConfig = this.appConfig.get<SearchConfiguration>('search') || {};\n        if (searchConfig['app:fields']) {\n            this.fields = searchConfig['app:fields'];\n        }\n    }\n\n    onSearchInputChanged(event: Event) {\n        const input = event.target as HTMLInputElement;\n        const searchTerm = input.value;\n\n        const query = this.formatSearchQuery(searchTerm, this.fields);\n        if (query) {\n            this.changed.emit(decodeURIComponent(query));\n        }\n    }\n\n    private formatSearchQuery(userInput: string, fields = ['cm:name']): string {\n        if (!userInput) {\n            return null;\n        }\n\n        if (/^https?:\\/\\//.test(userInput)) {\n            return this.formatFields(fields, userInput);\n        }\n\n        userInput = userInput.trim();\n\n        if (userInput.includes(':') || userInput.includes('\"')) {\n            return userInput;\n        }\n\n        const words = userInput.split(' ');\n\n        if (words.length > 1) {\n            const separator = words.some(this.isOperator) ? ' ' : ' AND ';\n            return words.map((term) => (this.isOperator(term) ? term : this.formatFields(fields, term))).join(separator);\n        }\n\n        return this.formatFields(fields, userInput);\n    }\n\n    private isOperator(input: string): boolean {\n        if (input) {\n            input = input.trim().toUpperCase();\n\n            const operators = ['AND', 'OR'];\n            return operators.includes(input);\n        }\n        return false;\n    }\n\n    private formatFields(fields: string[], term: string): string {\n        let prefix = '';\n        let suffix = '*';\n\n        if (term.startsWith('=')) {\n            prefix = '=';\n            suffix = '';\n            term = term.substring(1);\n        }\n\n        if (term === '*') {\n            prefix = '';\n            suffix = '';\n        }\n\n        return '(' + fields.map((field) => `${prefix}${field}:\"${term}${suffix}\"`).join(' OR ') + ')';\n    }\n}\n","<div class=\"adf-search-input-container\">\n    <mat-form-field>\n        <mat-label *ngIf=\"label\">{{ label | translate }}</mat-label>\n        <input matInput [placeholder]=\"placeholder | translate\" [value]=\"value\" (change)=\"onSearchInputChanged($event)\" />\n    </mat-form-field>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-input.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-logical-filter.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-number-range.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-panel.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FileSizeOperator } from './file-size-operator.enum';\nimport { FileSizeUnit } from './file-size-unit.enum';\n\nexport interface FileSizeCondition {\n    fileSizeOperator: FileSizeOperator;\n    fileSize?: number;\n    fileSizeUnit: FileSizeUnit;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FileSizeCondition } from './file-size-condition';\n\nexport interface SearchProperties {\n    fileSizeCondition: FileSizeCondition;\n    fileExtensions: string[];\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './file-size-condition';\nexport * from './file-size-operator.enum';\nexport * from './file-size-unit.enum';\nexport * from './search-properties.component';\nexport * from './search-properties';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-radio.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-slider.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-text.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-widget-container.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n    selector: 'adf-empty-search-result',\n    templateUrl: './empty-search-result.component.html',\n    encapsulation: ViewEncapsulation.None\n})\nexport class EmptySearchResultComponent {}\n","<div class=\"adf-empty-search-result\">\n    <ng-content />\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchService } from '../services/search.service';\nimport {\n    AfterContentInit,\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation,\n    inject\n} from '@angular/core';\nimport { NodePaging, ResultSetPaging } from '@alfresco/js-api';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { SearchComponentInterface } from '@alfresco/adf-core';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-search',\n    imports: [CommonModule, TranslatePipe],\n    templateUrl: './search.component.html',\n    styleUrls: ['./search.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    preserveWhitespaces: false,\n    exportAs: 'searchAutocomplete',\n    host: { class: 'adf-search' }\n})\nexport class SearchComponent implements SearchComponentInterface, AfterContentInit, OnChanges {\n    private readonly searchService = inject(SearchService);\n    private readonly _elementRef = inject(ElementRef);\n\n    @ViewChild('panel', { static: true })\n    panel: ElementRef;\n\n    @ContentChild(TemplateRef)\n    template: TemplateRef<any>;\n\n    /** Function that maps an option's value to its display value in the trigger. */\n    @Input()\n    displayWith: ((value: any) => string) | null = null;\n\n    /** Maximum number of results to show in the search. */\n    @Input()\n    maxResults: number = 20;\n\n    /** Number of results to skip from the results pagination. */\n    @Input()\n    skipResults: number = 0;\n\n    /**\n     * Search term to use when executing the search. Updating this value will\n     * run a new search and update the results.\n     */\n    @Input()\n    searchTerm: string = '';\n\n    /** CSS class for display. */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('class')\n    set classList(classList: string) {\n        if (classList?.length) {\n            classList.split(' ').forEach((className) => (this._classList[className.trim()] = true));\n            this._elementRef.nativeElement.className = '';\n        }\n    }\n\n    /** Emitted when search results have fully loaded. */\n    @Output()\n    resultLoaded: EventEmitter<NodePaging> = new EventEmitter();\n\n    /** Emitted when an error occurs. */\n    @Output()\n    error: EventEmitter<any> = new EventEmitter();\n\n    showPanel: boolean = false;\n    results: NodePaging;\n\n    get isOpen(): boolean {\n        return this._isOpen && this.showPanel;\n    }\n\n    set isOpen(value: boolean) {\n        this._isOpen = value;\n    }\n\n    _isOpen: boolean = false;\n    keyPressedStream = new Subject<string>();\n    _classList: { [key: string]: boolean } = {};\n    constructor() {\n        const searchService = this.searchService;\n\n        this.keyPressedStream.pipe(debounceTime(200), takeUntilDestroyed()).subscribe((searchedWord) => {\n            this.loadSearchResults(searchedWord);\n        });\n\n        searchService.dataLoaded.pipe(takeUntilDestroyed()).subscribe(\n            (nodePaging) => this.onSearchDataLoaded(nodePaging),\n            (error) => this.onSearchDataError(error)\n        );\n    }\n\n    ngAfterContentInit() {\n        this.setVisibility();\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.searchTerm?.currentValue) {\n            this.loadSearchResults(changes.searchTerm.currentValue);\n        }\n    }\n    resetResults() {\n        this.cleanResults();\n        this.setVisibility();\n    }\n\n    reload() {\n        this.loadSearchResults(this.searchTerm);\n    }\n\n    private cleanResults() {\n        if (this.results) {\n            this.results = {};\n        }\n    }\n\n    private loadSearchResults(searchTerm?: string) {\n        this.resetResults();\n        if (searchTerm) {\n            this.searchService.search(searchTerm, this.maxResults, this.skipResults).subscribe(\n                (result) => this.onSearchDataLoaded(result),\n                (err) => this.onSearchDataError(err)\n            );\n        } else {\n            this.cleanResults();\n        }\n    }\n\n    onSearchDataLoaded(resultSetPaging: ResultSetPaging) {\n        if (resultSetPaging) {\n            this.results = resultSetPaging as NodePaging;\n            this.resultLoaded.emit(this.results);\n            this.isOpen = true;\n            this.setVisibility();\n        }\n    }\n\n    onSearchDataError(error: { status: number }) {\n        if (error?.status !== 400) {\n            this.results = null;\n            this.error.emit(error);\n        }\n    }\n\n    hidePanel() {\n        if (this.isOpen) {\n            this._classList['adf-search-show'] = false;\n            this._classList['adf-search-hide'] = true;\n            this.isOpen = false;\n        }\n    }\n\n    setVisibility() {\n        this.showPanel = !!this.results && !!this.results.list;\n        this._classList['adf-search-show'] = this.showPanel;\n        this._classList['adf-search-hide'] = !this.showPanel;\n    }\n}\n","<div id=\"adf-search-results-content\" title=\"{{'PERMISSION_MANAGER.ADD-PERMISSION.USER-GROUP-LIST' | translate}}\"\n    [ngClass]=\"_classList\" #panel>\n    <ng-template\n        [ngTemplateOutlet]=\"template\"\n        [ngTemplateOutletContext]=\"{ $implicit: results }\" />\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AuthenticationService, HighlightPipe, SearchTextInputComponent, ThumbnailService } from '@alfresco/adf-core';\nimport {\n    Component,\n    ContentChild,\n    EventEmitter,\n    Input,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation,\n    inject\n} from '@angular/core';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { Subject } from 'rxjs';\nimport { SearchComponent } from './search.component';\nimport { MatListItem, MatListModule } from '@angular/material/list';\nimport { EmptySearchResultComponent } from './empty-search-result.component';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n    selector: 'adf-search-control',\n    imports: [CommonModule, SearchTextInputComponent, SearchComponent, MatListModule, MatIconModule, HighlightPipe, TranslatePipe],\n    templateUrl: './search-control.component.html',\n    styleUrls: ['./search-control.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-search-control' }\n})\nexport class SearchControlComponent {\n    authService = inject(AuthenticationService);\n    private readonly thumbnailService = inject(ThumbnailService);\n\n    /** Toggles highlighting of the search term in the results. */\n    @Input()\n    highlight: boolean = false;\n\n    /** Type of the input field to render, e.g. \"search\" or \"text\" (default). */\n    @Input()\n    inputType: string = 'text';\n\n    /** Toggles \"find-as-you-type\" suggestions for possible matches. */\n    @Input()\n    liveSearchEnabled: boolean = true;\n\n    /** Toggles auto-completion of the search input field. */\n    @Input()\n    autocomplete: boolean = false;\n\n    /**\n     * Toggles whether to use an expanding search control. If false\n     * then a regular input is used.\n     */\n    @Input()\n    expandable: boolean = true;\n\n    /** Maximum number of results to show in the live search. */\n    @Input()\n    liveSearchMaxResults: number = 5;\n\n    /**\n     * Emitted when the search is submitted by pressing the ENTER key.\n     * The search term is provided as the value of the event.\n     */\n    @Output()\n    submit: EventEmitter<any> = new EventEmitter();\n\n    /**\n     * Emitted when the search term is changed. The search term is provided\n     * in the 'value' property of the returned object.  If the term is less\n     * than three characters in length then it is truncated to an empty\n     * string.\n     */\n    @Output()\n    searchChange: EventEmitter<string> = new EventEmitter();\n\n    /** Emitted when a file item from the list of \"find-as-you-type\" results is selected. */\n    @Output()\n    optionClicked: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild('searchTextInput')\n    searchTextInput: SearchTextInputComponent;\n\n    @ViewChild('search')\n    searchAutocomplete: SearchComponent;\n\n    @ViewChildren(MatListItem)\n    private readonly listResultElement: QueryList<MatListItem>;\n\n    @ContentChild(EmptySearchResultComponent)\n    emptySearchTemplate: EmptySearchResultComponent;\n\n    focusSubject = new Subject<FocusEvent>();\n    noSearchResultTemplate: TemplateRef<any> = null;\n    searchTerm: string = '';\n\n    isNoSearchTemplatePresent(): boolean {\n        return !!this.emptySearchTemplate;\n    }\n    isLoggedIn(): boolean {\n        return this.authService.isLoggedIn();\n    }\n\n    inputChange(value: string) {\n        this.searchTerm = value;\n        this.searchChange.emit(value);\n    }\n\n    getMimeTypeIcon(node: NodeEntry): string {\n        const mimeType = this.getMimeType(node);\n        return this.thumbnailService.getMimeTypeIcon(mimeType);\n    }\n\n    getMimeType(node: NodeEntry): string {\n        let mimeType: string;\n\n        if (node.entry.content?.mimeType) {\n            mimeType = node.entry.content.mimeType;\n        }\n        if (node.entry.isFolder) {\n            mimeType = 'folder';\n        }\n        return mimeType;\n    }\n\n    elementClicked(item: any) {\n        if (item.entry) {\n            this.optionClicked.next(item);\n            this.focusSubject.next(new FocusEvent('blur'));\n        }\n    }\n\n    onFocus(event: FocusEvent): void {\n        this.focusSubject.next(event);\n    }\n\n    onBlur(event: FocusEvent): void {\n        const nextElement: any = this.getNextElementSibling(event.target as Element);\n        if (!nextElement && !this.isListElement(event)) {\n            this.focusSubject.next(event);\n        }\n    }\n\n    onSelectFirstResult() {\n        if (this.listResultElement && this.listResultElement.length > 0) {\n            const firstElement = this.listResultElement.first as MatListItem;\n            // eslint-disable-next-line no-underscore-dangle\n            firstElement._hostElement.focus();\n        }\n    }\n\n    onRowArrowDown(event: Event): void {\n        const nextElement: any = this.getNextElementSibling(event.target as Element);\n        if (nextElement) {\n            nextElement.focus();\n        }\n    }\n\n    onRowArrowUp(event: Event): void {\n        const previousElement: any = this.getPreviousElementSibling(event.target as Element);\n        if (previousElement) {\n            previousElement.focus();\n        } else {\n            this.focusSubject.next(new FocusEvent('focus'));\n        }\n    }\n\n    onReset(status: boolean) {\n        if (status) {\n            this.searchAutocomplete.resetResults();\n        }\n    }\n\n    private isListElement(event: any): boolean {\n        return event.relatedTarget?.children[0] && event.relatedTarget.children[0].className === 'mat-list-item-content';\n    }\n\n    private getNextElementSibling(node: Element): Element {\n        return node.nextElementSibling;\n    }\n\n    private getPreviousElementSibling(node: Element): Element {\n        return node.previousElementSibling;\n    }\n}\n","<div *ngIf=\"isLoggedIn()\">\n    <adf-search-text-input  #searchTextInput\n                            [searchTerm]= \"searchTerm\"\n                            [expandable]=\"expandable\"\n                            [autocomplete]=\"autocomplete\"\n                            [liveSearchEnabled]=\"liveSearchEnabled\"\n                            [focusListener]=\"focusSubject.asObservable()\"\n                            [searchAutocomplete]=\"auto\"\n                            (searchChange)=\"inputChange($event)\"\n                            (reset)=\"onReset($event)\"\n                            (selectResult)=\"onSelectFirstResult()\"\n                            (submit)=\"submit.emit($event)\" />\n\n    <adf-search #search\n                #auto=\"searchAutocomplete\"\n                class=\"adf-search-result-autocomplete\"\n                [maxResults]=\"liveSearchMaxResults\">\n        <ng-template let-data>\n            <mat-list *ngIf=\"searchTextInput?.isSearchBarActive()\" id=\"autocomplete-search-result-list\">\n                <mat-list-item\n                    *ngFor=\"let item of data?.list?.entries; let idx = index\"\n                    id=\"result_option_{{idx}}\"\n                    [attr.data-automation-id]=\"'autocomplete_for_' + item.entry.name\"\n                    [tabindex]=\"0\"\n                    (blur)=\"onBlur($event)\"\n                    (keyup.arrowdown)=\"onRowArrowDown($event)\"\n                    (keyup.arrowup)=\"onRowArrowUp($event)\"\n                    class=\"adf-search-autocomplete-item\"\n                    (click)=\"elementClicked(item)\"\n                    (keyup.enter)=\"elementClicked(item)\"\n                    (touchend)=\"elementClicked(item)\">\n                    <!-- This is a comment -->\n                    <mat-icon matListItemLine>\n                        <img [alt]=\"getMimeType(item)\" [src]=\"getMimeTypeIcon(item)\"/>\n                    </mat-icon>\n                    <h4 matListItemTitle id=\"result_name_{{idx}}\"\n                        *ngIf=\"highlight; else elseBlock\"\n                        class=\"adf-search-fixed-text\"\n                        [innerHtml]=\"item.entry.name | highlight: searchTerm\">\n                        {{ item?.entry.name }}\n                    </h4>\n                    <ng-template #elseBlock>\n                        <h4 class=\"adf-search-fixed-text\" matListItemTitle id=\"result_name_{{idx}}\"\n                            [innerHtml]=\"item.entry.name\"></h4>\n                    </ng-template>\n                    <p matListItemLine class=\"adf-search-fixed-text\"> {{item?.entry.createdByUser.displayName}} </p>\n                </mat-list-item>\n                <mat-list-item id=\"search_no_result\"\n                            data-automation-id=\"search_no_result_found\"\n                            *ngIf=\"data?.list?.entries.length === 0\">\n                    <ng-content\n                        selector=\"adf-empty-search-result\"\n                        *ngIf=\"isNoSearchTemplatePresent() else defaultNoResult\" />\n                    <ng-template #defaultNoResult>\n                        <p matListItemLine class=\"adf-search-fixed-text\">{{ 'SEARCH.RESULTS.NONE' | translate:{searchTerm:\n                            searchTerm} }}</p>\n                    </ng-template>\n                </mat-list-item>\n            </mat-list>\n        </ng-template>\n    </adf-search>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search-check-list';\nexport * from './search-chip-autocomplete-input';\nexport * from './search-chip-list/search-chip-list.component';\nexport * from './search-date-range-tabbed';\nexport * from './search-datetime-range';\nexport * from './search-facet-field';\nexport * from './search-filter';\nexport * from './search-filter-autocomplete-chips';\nexport * from './search-filter-chips';\nexport * from './search-filter-container';\nexport * from './search-filter-tabbed';\nexport * from './search-form';\nexport * from './search-input';\nexport * from './search-logical-filter';\nexport * from './search-number-range';\nexport * from './search-panel';\nexport * from './search-properties';\nexport * from './search-radio';\nexport * from './search-slider';\nexport * from './search-text';\nexport * from './search-widget-container';\n\nexport * from './empty-search-result.component';\nexport * from './reset-search.directive';\nexport * from './search-control.component';\nexport * from './search.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UntypedFormControl } from '@angular/forms';\n\nexport class SearchTermValidator {\n    static minAlphanumericChars(minChars: number) {\n        return (control: UntypedFormControl) =>\n            ('' + control.value).replace(/[^0-9a-zA-Z]+/g, '').length >= minChars\n                ? null\n                : {\n                      hasMinAlphanumericChars: false\n                  };\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './live-error-state-matcher';\nexport * from './search-term-validator';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContentInfo, Node, NodePagingList, UserInfo } from '@alfresco/js-api';\n\nexport const fakeSearch = {\n    list: new NodePagingList({\n        pagination: {\n            count: 1,\n            hasMoreItems: false,\n            totalItems: 1,\n            skipCount: 0,\n            maxItems: 100\n        },\n        entries: [\n            {\n                entry: new Node({\n                    id: '123',\n                    name: 'MyDoc',\n                    content: new ContentInfo({ mimeType: 'text/plain' }),\n                    createdByUser: new UserInfo({\n                        displayName: 'John Doe'\n                    }),\n                    modifiedByUser: new UserInfo({\n                        displayName: 'John Doe'\n                    })\n                })\n            }\n        ]\n    })\n};\n\nexport const mockError = {\n    error: {\n        errorKey: 'Search failed',\n        statusCode: 400,\n        briefSummary: '08220082 search failed',\n        stackTrace: 'For security reasons the stack trace is no longer displayed, but the property is kept for previous versions.',\n        descriptionURL: 'https://api-explorer.alfresco.com'\n    }\n};\n\nexport const searchMockApi: any = {\n    findNodes: () => Promise.resolve(fakeSearch)\n};\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './search.service.mock';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface FacetFieldBucket {\n    count: number;\n    display?: string;\n    label: string;\n    filterQuery: string;\n\n    checked?: boolean;\n    field?: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface FacetQuery {\n    label: string;\n    query: string;\n\n    checked?: boolean;\n    count?: number;\n    group?: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Subject } from 'rxjs';\n\nexport interface FacetWidget {\n    /* provide the formatted selected value for chip */\n    displayValue$: Subject<string>;\n    /* reset the value and update the search */\n    reset(): void;\n    /* update the search with field value */\n    submitValues(): void;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface FilterQuery {\n    query: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface FilterSearch {\n    key: string;\n    value: any;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FacetQuery } from './facet-query.interface';\nimport { SearchFilterList } from './search-filter-list.model';\n\nexport class ResponseFacetQueryList extends SearchFilterList<FacetQuery> {\n    constructor(items: FacetQuery[] = [], translationService, pageSize: number = 5) {\n        super(\n            items.filter((item) => item.count > 0),\n            pageSize\n        );\n\n        this.filter = (query: FacetQuery) => {\n            if (this.filterText && query.label) {\n                const pattern = (this.filterText || '').toLowerCase();\n                const label = translationService.instant(query.label).toLowerCase();\n                return label.startsWith(pattern);\n            }\n            return true;\n        };\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchWidgetSettings } from './search-widget-settings.interface';\n\nexport interface SearchCategory {\n    id: string;\n    name: string;\n    columnKey?: string;\n    enabled: boolean;\n    expanded: boolean;\n    component: {\n        selector: string;\n        settings: SearchWidgetSettings;\n    };\n    rules?: {\n        visible: string;\n    };\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FilterQuery } from './filter-query.interface';\nimport { FacetQuery } from './facet-query.interface';\nimport { FacetField, FacetFieldSettings } from './facet-field.interface';\nimport { SearchCategory } from './search-category.interface';\nimport { SearchSortingDefinition } from './search-sorting-definition.interface';\nimport { RequestHighlight } from '@alfresco/js-api';\n\nexport interface SearchConfiguration {\n    id: string;\n    include?: string[];\n    fields?: string[];\n    categories?: SearchCategory[];\n    filterQueries?: FilterQuery[];\n    filterWithContains?: boolean;\n    resetButton?: boolean;\n    facetQueries?: {\n        label?: string;\n        pageSize?: number;\n        expanded?: boolean;\n        mincount?: number;\n        queries: FacetQuery[];\n        settings?: FacetFieldSettings;\n    };\n    facetFields?: {\n        expanded?: boolean;\n        fields: FacetField[];\n    };\n    facetIntervals?: {\n        expanded?: boolean;\n        intervals: FacetField[];\n    };\n    sorting?: {\n        options: SearchSortingDefinition[];\n        defaults: SearchSortingDefinition[];\n    };\n    highlight?: RequestHighlight;\n    name?: string;\n    default?: boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface SearchForm {\n    id: string;\n    index: number;\n    name: string;\n    default: boolean;\n    selected: boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface SearchRange {\n    field: string;\n    start: string;\n    end: string;\n    gap: string;\n    hardend: boolean;\n    other: Array<string>;\n    include: Array<string>;\n    label: string;\n    excludeFilters: Array<string>;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface SearchSortingDefinition {\n    key: string;\n    label: string;\n    type: string;\n    field: string;\n    ascending: boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AutocompleteOption } from './autocomplete-option.interface';\n\nexport interface SearchWidgetSettings {\n    field: string;\n    /* allow the user to update search in every change */\n    allowUpdateOnChange?: boolean;\n    /* allow the user hide default search actions. So widget can have custom actions */\n    hideDefaultAction?: boolean;\n    /* describes the unit of the value i.e byte for better display message */\n    unit?: string;\n    /* describes query format */\n    format?: string;\n    /* allow the user to search only within predefined options */\n    allowOnlyPredefinedValues?: boolean;\n    /* allow the user to predefine autocomplete options */\n    autocompleteOptions?: AutocompleteOption[];\n\n    [indexer: string]: any;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchWidgetSettings } from './search-widget-settings.interface';\nimport { SearchQueryBuilderService } from '../services/search-query-builder.service';\nimport { ReplaySubject } from 'rxjs';\n\nexport interface SearchWidget {\n    id: string;\n    /* optional field control options */\n    settings?: SearchWidgetSettings;\n    context?: SearchQueryBuilderService;\n    isActive?: boolean;\n    startValue: any;\n    /* stream emit value on changes */\n    displayValue$: ReplaySubject<string>;\n    /* reset the value and update the search */\n    reset(): void;\n    /* update the search with field value */\n    submitValues(): void;\n    hasValidValue(): boolean;\n    getCurrentValue(): any;\n    setValue(value: any);\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FacetField } from './facet-field.interface';\n\nexport interface TabbedFacetField {\n    /* array of fields that tabbed facet will consist of */\n    fields: string[];\n    /* label to display for tabbed facet */\n    label: string;\n    /* facets to populate tabbed facet tabs */\n    facets: {\n        [propName: string]: FacetField;\n    };\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './autocomplete-option.interface';\nexport * from './facet-field-bucket.interface';\nexport * from './facet-field.interface';\nexport * from './facet-query.interface';\nexport * from './facet-widget.interface';\nexport * from './filter-query.interface';\nexport * from './filter-search.interface';\nexport * from './response-facet-query-list.model';\nexport * from './search-category.interface';\nexport * from './search-configuration.interface';\nexport * from './search-filter-list.model';\nexport * from './search-form.interface';\nexport * from './search-range.interface';\nexport * from './search-sorting-definition.interface';\nexport * from './search-widget-settings.interface';\nexport * from './search-widget.interface';\nexport * from './tabbed-facet-field.interface';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { SearchControlComponent } from './components/search-control.component';\nimport { SearchComponent } from './components/search.component';\nimport { EmptySearchResultComponent } from './components/empty-search-result.component';\nimport { SearchWidgetContainerComponent } from './components/search-widget-container/search-widget-container.component';\nimport { SearchFilterComponent } from './components/search-filter/search-filter.component';\nimport { SearchFilterCardComponent } from './components/search-filter/search-filter-card/search-filter-card.component';\nimport { SearchChipListComponent } from './components/search-chip-list/search-chip-list.component';\nimport { SearchTextComponent } from './components/search-text/search-text.component';\nimport { SearchChipAutocompleteInputComponent } from './components/search-chip-autocomplete-input/search-chip-autocomplete-input.component';\nimport { SearchFilterAutocompleteChipsComponent } from './components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component';\nimport { SearchRadioComponent } from './components/search-radio/search-radio.component';\nimport { SearchSliderComponent } from './components/search-slider/search-slider.component';\nimport { SearchNumberRangeComponent } from './components/search-number-range/search-number-range.component';\nimport { SearchPanelComponent } from './components/search-panel/search-panel.component';\nimport { SearchCheckListComponent } from './components/search-check-list/search-check-list.component';\nimport { SearchFilterContainerComponent } from './components/search-filter-container/search-filter-container.component';\nimport { SearchDatetimeRangeComponent } from './components/search-datetime-range/search-datetime-range.component';\nimport { SearchFormComponent } from './components/search-form/search-form.component';\nimport { SearchFilterChipsComponent } from './components/search-filter-chips/search-filter-chips.component';\nimport { SearchFilterMenuCardComponent } from './components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component';\nimport { SearchFacetFieldComponent } from './components/search-facet-field/search-facet-field.component';\nimport { SearchWidgetChipComponent } from './components/search-filter-chips/search-widget-chip/search-widget-chip.component';\nimport { SearchFacetChipComponent } from './components/search-filter-chips/search-facet-chip/search-facet-chip.component';\nimport { SearchLogicalFilterComponent } from './components/search-logical-filter/search-logical-filter.component';\nimport { ResetSearchDirective } from './components/reset-search.directive';\nimport { SearchPropertiesComponent } from './components/search-properties/search-properties.component';\nimport { SearchFilterTabbedComponent } from './components/search-filter-tabbed/search-filter-tabbed.component';\nimport { SearchDateRangeComponent } from './components/search-date-range-tabbed/search-date-range/search-date-range.component';\nimport { SearchDateRangeTabbedComponent } from './components/search-date-range-tabbed/search-date-range-tabbed.component';\nimport { SearchFilterTabDirective } from './components/search-filter-tabbed/search-filter-tab.directive';\nimport { SearchFacetChipTabbedComponent } from './components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component';\nimport { SearchFacetTabbedContentComponent } from './components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component';\n\nexport const CONTENT_SEARCH_DIRECTIVES = [\n    SearchCheckListComponent,\n    SearchChipAutocompleteInputComponent,\n    SearchChipListComponent,\n    EmptySearchResultComponent,\n    SearchFilterComponent,\n    SearchFilterCardComponent,\n    SearchWidgetContainerComponent,\n    SearchTextComponent,\n    SearchFilterAutocompleteChipsComponent,\n    SearchDatetimeRangeComponent,\n    SearchFacetFieldComponent,\n    ResetSearchDirective,\n    SearchDateRangeComponent,\n    SearchFilterMenuCardComponent,\n    SearchFacetChipTabbedComponent,\n    SearchFacetTabbedContentComponent,\n    SearchFilterTabbedComponent,\n    SearchFilterTabDirective,\n    SearchDateRangeTabbedComponent,\n    SearchSliderComponent,\n    SearchNumberRangeComponent,\n    SearchPanelComponent,\n    SearchRadioComponent,\n    SearchFilterContainerComponent,\n    SearchFormComponent,\n    SearchFilterChipsComponent,\n    SearchWidgetChipComponent,\n    SearchFacetChipComponent,\n    SearchLogicalFilterComponent,\n    SearchPropertiesComponent,\n    SearchComponent,\n    SearchControlComponent\n] as const;\n\n/** @deprecated use `...CONTENT_SEARCH_DIRECTIVES` or import the specific component */\n@NgModule({\n    imports: [...CONTENT_SEARCH_DIRECTIVES],\n    exports: [...CONTENT_SEARCH_DIRECTIVES]\n})\nexport class SearchModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './components';\nexport * from './forms';\nexport * from './mocks';\nexport * from './models';\nexport * from './services';\nexport * from './search-configuration.token';\nexport * from './search.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './breadcrumb.component';\nexport * from './dropdown-breadcrumb.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\nimport { ContentApi } from '@alfresco/js-api';\nimport { Observable, of } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ContentVersionService {\n    private readonly alfrescoApi = inject(AlfrescoApiService);\n\n    private _contentApi: ContentApi;\n\n    get contentApi(): ContentApi {\n        if (!this._contentApi) {\n            this._contentApi = new ContentApi(this.alfrescoApi.getInstance());\n        }\n        return this._contentApi;\n    }\n\n    /**\n     * Get content URL for the given nodeId and specific version.\n     *\n     * @param nodeId The ID of the node\n     * @param versionId The ID of the version\n     * @param attachment Retrieve content as an attachment for download\n     * @returns The URL address pointing to the content.\n     */\n    getVersionContentUrl(nodeId: string, versionId: string, attachment?: boolean): Observable<string> {\n        let nodeDownloadUrl = this.contentApi.getContentUrl(nodeId, attachment);\n        nodeDownloadUrl = nodeDownloadUrl.replace('/content', '/versions/' + versionId + '/content');\n\n        return of(nodeDownloadUrl);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContentPagingQuery } from '@alfresco/js-api';\nimport { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, forkJoin, Observable, Subject, Subscription } from 'rxjs';\nimport { take, tap } from 'rxjs/operators';\n\nexport abstract class InfiniteScrollDatasource<T> extends DataSource<T> {\n    protected readonly dataStream = new BehaviorSubject<T[]>([]);\n    private readonly isLoading$ = new Subject<boolean>();\n    private readonly subscription = new Subscription();\n    private batchesFetched = 0;\n    private _itemsCount = 0;\n    private _firstItem: T;\n\n    /* Determines size of each batch to be fetched */\n    batchSize = 100;\n\n    /* Observable with initial and on reset loading state */\n    isLoading = this.isLoading$.asObservable();\n\n    get itemsCount(): number {\n        return this._itemsCount;\n    }\n\n    get firstItem(): T {\n        return this._firstItem;\n    }\n\n    abstract getNextBatch(pagingOptions: ContentPagingQuery): Observable<T[]>;\n\n    connect(collectionViewer: CollectionViewer): Observable<T[]> {\n        this.reset();\n        this.subscription.add(\n            collectionViewer.viewChange.subscribe((range) => {\n                if (this.batchesFetched * this.batchSize <= range.end) {\n                    forkJoin([\n                        this.dataStream.asObservable().pipe(take(1)),\n                        this.getNextBatch({ skipCount: this._itemsCount, maxItems: this.batchSize }).pipe(\n                            take(1),\n                            tap((nextBatch) => (this._itemsCount += nextBatch.length))\n                        )\n                    ]).subscribe((batchesArray) => this.dataStream.next([...batchesArray[0], ...batchesArray[1]]));\n                    this.batchesFetched += 1;\n                }\n            })\n        );\n        return this.dataStream;\n    }\n\n    disconnect(): void {\n        this.subscription.unsubscribe();\n    }\n\n    reset(): void {\n        this.isLoading$.next(true);\n        this.dataStream.next([]);\n        this.getNextBatch({ skipCount: 0, maxItems: this.batchSize })\n            .pipe(take(1))\n            .subscribe((firstBatch) => {\n                this._itemsCount = firstBatch.length;\n                this._firstItem = firstBatch[0];\n                this.dataStream.next(firstBatch);\n                this.isLoading$.next(false);\n            });\n        this.batchesFetched = 1;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './infinite-scroll-datasource';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Directive, Input, ViewContainerRef, TemplateRef, inject } from '@angular/core';\nimport { VersionCompatibilityService } from './version-compatibility.service';\nimport { take } from 'rxjs/operators';\n\n@Directive({\n    selector: '[adf-acs-version]'\n})\nexport class VersionCompatibilityDirective {\n    private readonly templateRef = inject<TemplateRef<any>>(TemplateRef);\n    private readonly viewContainer = inject(ViewContainerRef);\n    private readonly versionCompatibilityService = inject(VersionCompatibilityService);\n\n    /** Minimum version required for component to work correctly . */\n    @Input('adf-acs-version')\n    set version(requiredVersion: string) {\n        this.validateAcsVersion(requiredVersion);\n    }\n\n    private validateAcsVersion(requiredVersion: string) {\n        this.versionCompatibilityService.acsVersionInitialized$.pipe(take(1)).subscribe(() => {\n            this.viewContainer.clear();\n            if (requiredVersion && this.versionCompatibilityService.isVersionSupported(requiredVersion)) {\n                this.viewContainer.createEmbeddedView(this.templateRef);\n            }\n        });\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { VersionCompatibilityDirective } from './version-compatibility.directive';\n\n/** @deprecated use `VersionCompatibilityDirective` instead */\n@NgModule({\n    imports: [VersionCompatibilityDirective],\n    exports: [VersionCompatibilityDirective]\n})\nexport class VersionCompatibilityModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './version-compatibility.directive';\nexport * from './version-compatibility.service';\nexport * from './version-compatibility.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ConfirmDialogComponent, IconModule } from '@alfresco/adf-core';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\nimport { Component, DestroyRef, EventEmitter, inject, Input, OnChanges, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ContentApi, ContentPagingQuery, Node, NodeEntry, NodesApi, VersionEntry, VersionsApi } from '@alfresco/js-api';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ContentVersionService } from './content-version.service';\nimport { ContentService } from '../common';\nimport { InfiniteScrollDatasource } from '../infinite-scroll-datasource';\nimport { from, Observable } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { VersionCompatibilityDirective } from '../version-compatibility';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport class VersionListDataSource extends InfiniteScrollDatasource<VersionEntry> {\n    constructor(\n        private readonly versionsApi: VersionsApi,\n        private readonly node: Node\n    ) {\n        super();\n    }\n\n    getNextBatch(pagingOptions: ContentPagingQuery): Observable<VersionEntry[]> {\n        return from(this.versionsApi.listVersionHistory(this.node.id, pagingOptions)).pipe(\n            take(1),\n            map((versionPaging) => versionPaging.list.entries)\n        );\n    }\n}\n\n@Component({\n    selector: 'adf-version-list',\n    imports: [\n        CommonModule,\n        MatProgressBarModule,\n        MatListModule,\n        CdkVirtualScrollViewport,\n        CdkFixedSizeVirtualScroll,\n        CdkVirtualForOf,\n        IconModule,\n        MatMenuModule,\n        TranslatePipe,\n        MatButtonModule,\n        VersionCompatibilityDirective\n    ],\n    templateUrl: './version-list.component.html',\n    styleUrls: ['./version-list.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-version-list' }\n})\nexport class VersionListComponent implements OnChanges, OnInit {\n    private readonly alfrescoApi = inject(AlfrescoApiService);\n    private readonly contentService = inject(ContentService);\n    private readonly contentVersionService = inject(ContentVersionService);\n    private readonly dialog = inject(MatDialog);\n\n    private _contentApi: ContentApi;\n    get contentApi(): ContentApi {\n        this._contentApi = this._contentApi ?? new ContentApi(this.alfrescoApi.getInstance());\n        return this._contentApi;\n    }\n\n    private _versionsApi: VersionsApi;\n    get versionsApi(): VersionsApi {\n        this._versionsApi = this._versionsApi ?? new VersionsApi(this.alfrescoApi.getInstance());\n        return this._versionsApi;\n    }\n\n    private _nodesApi: NodesApi;\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.alfrescoApi.getInstance());\n        return this._nodesApi;\n    }\n\n    versionsDataSource: VersionListDataSource;\n    latestVersion: VersionEntry;\n    isLoading = true;\n\n    /** The target node. */\n    @Input()\n    node: Node;\n\n    /** Toggles showing/hiding of comments */\n    @Input()\n    showComments = true;\n\n    /** Enable/disable downloading a version of the current node. */\n    @Input()\n    allowDownload = true;\n\n    /** Enable/disable viewing a version of the current node. */\n    @Input()\n    allowViewVersions = true;\n\n    /** Toggles showing/hiding of version actions */\n    @Input()\n    showActions = true;\n\n    /** Enable/disable deletion of version */\n    @Input()\n    allowVersionDelete = true;\n\n    /** Emitted when a version is restored */\n    @Output()\n    restored = new EventEmitter<Node>();\n\n    /** Emitted when a version is deleted */\n    @Output()\n    deleted = new EventEmitter<Node>();\n\n    /** Emitted when viewing a version */\n    @Output()\n    viewVersion = new EventEmitter<string>();\n\n    @ViewChild('viewport')\n    viewport: CdkVirtualScrollViewport;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.versionsDataSource = new VersionListDataSource(this.versionsApi, this.node);\n        this.versionsDataSource.isLoading.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isLoading) => {\n            this.isLoading = isLoading;\n            this.latestVersion = this.versionsDataSource.firstItem;\n        });\n    }\n\n    ngOnChanges() {\n        if (this.versionsDataSource) {\n            this.loadVersionHistory();\n        }\n    }\n\n    canUpdate(): boolean {\n        return this.contentService.hasAllowableOperations(this.node, 'update') && this.versionsDataSource.itemsCount > 1;\n    }\n\n    canDelete(): boolean {\n        return this.contentService.hasAllowableOperations(this.node, 'delete') && this.versionsDataSource.itemsCount > 1;\n    }\n\n    restore(versionId: string) {\n        if (this.canUpdate()) {\n            this.versionsApi\n                .revertVersion(this.node.id, versionId, { majorVersion: true, comment: '' })\n                .then(() => this.nodesApi.getNode(this.node.id, { include: ['permissions', 'path', 'isFavorite', 'allowableOperations'] }))\n                .then((node) => this.onVersionRestored(node));\n        }\n    }\n\n    onViewVersion(versionId: string) {\n        this.viewVersion.emit(versionId);\n    }\n\n    loadVersionHistory() {\n        this.viewport.scrollToIndex(0);\n        this.versionsDataSource.reset();\n    }\n\n    downloadVersion(versionId: string) {\n        if (this.allowDownload) {\n            this.contentVersionService\n                .getVersionContentUrl(this.node.id, versionId, true)\n                .pipe(takeUntilDestroyed(this.destroyRef))\n                .subscribe((versionDownloadUrl) => this.downloadContent(versionDownloadUrl));\n        }\n    }\n\n    deleteVersion(versionId: string) {\n        if (this.canUpdate()) {\n            const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n                data: {\n                    title: 'ADF_VERSION_LIST.CONFIRM_DELETE.TITLE',\n                    message: 'ADF_VERSION_LIST.CONFIRM_DELETE.MESSAGE',\n                    yesLabel: 'ADF_VERSION_LIST.CONFIRM_DELETE.YES_LABEL',\n                    noLabel: 'ADF_VERSION_LIST.CONFIRM_DELETE.NO_LABEL'\n                },\n                minWidth: '250px'\n            });\n\n            dialogRef\n                .afterClosed()\n                .pipe(takeUntilDestroyed(this.destroyRef))\n                .subscribe((result) => {\n                    if (result) {\n                        this.versionsApi.deleteVersion(this.node.id, versionId).then(() => this.onVersionDeleted(this.node));\n                    }\n                });\n        }\n    }\n\n    onVersionDeleted(node: any) {\n        this.loadVersionHistory();\n        this.deleted.emit(node);\n    }\n\n    onVersionRestored(node: NodeEntry) {\n        this.loadVersionHistory();\n        this.restored.emit(node?.entry);\n    }\n\n    downloadContent(url: string) {\n        if (url) {\n            const link = document.createElement('a');\n\n            link.style.display = 'none';\n            link.href = url;\n\n            document.body.appendChild(link);\n            link.click();\n            document.body.removeChild(link);\n        }\n    }\n}\n","<mat-progress-bar *ngIf=\"isLoading\" data-automation-id=\"version-history-loading-bar\" mode=\"indeterminate\"\n                  color=\"accent\" />\n<mat-list class=\"adf-version-list adf-version-list-element\" [hidden]=\"isLoading\">\n    <cdk-virtual-scroll-viewport #viewport itemSize=\"88\" class=\"adf-version-list-viewport\" [minBufferPx]=\"440\" [maxBufferPx]=\"528\">\n        <mat-list-item class=\"adf-version-list-item\"\n                       *cdkVirtualFor=\"let version of versionsDataSource; let idx = index; let latestVersion = first\">\n            <mat-icon class=\"adf-version-list-icon\" adf-icon=\"insert_drive_file\" matListItemIcon />\n            <div class=\"adf-version-list-content\">\n                <div class=\"adf-version-list-item-details\">\n                    <p class=\"adf-version-list-item-line adf-version-list-item-name\"\n                       [id]=\"'adf-version-list-item-name-' + version.entry.id\">{{ version.entry.name }}</p>\n                    <p>\n                        <span class=\"adf-version-list-item-line adf-version-list-item-version\"\n                          [id]=\"'adf-version-list-item-version-' + version.entry.id\">{{ version.entry.id }}</span> -\n                        <span class=\"adf-version-list-item-line adf-version-list-item-date\"\n                              [id]=\"'adf-version-list-item-date-' + version.entry.id\">{{ version.entry.modifiedAt | date }}</span>\n                    </p>\n                    <p\n                        [id]=\"'adf-version-list-item-comment-' + version.entry.id\"\n                        class=\"adf-version-list-item-comment\"\n                        *ngIf=\"showComments\"\n                        [title]=\"version.entry.versionComment\">\n                        {{ version.entry.versionComment }}\n                    </p>\n                </div>\n                <ng-container *ngIf=\"showActions\">\n                <mat-menu [id]=\"'adf-version-list-action-menu-' + version.entry.id\"\n                          #versionMenu=\"matMenu\"\n                          yPosition=\"below\"\n                          xPosition=\"before\">\n                    <ng-container *adf-acs-version=\"'7'\">\n                        <button *ngIf=\"allowViewVersions\"\n                                [id]=\"'adf-version-list-action-view-' + version.entry.id\"\n                                mat-menu-item\n                                (click)=\"onViewVersion(version.entry.id)\">\n                            {{ 'ADF_VERSION_LIST.ACTIONS.VIEW' | translate }}\n                        </button>\n                    </ng-container>\n                    <button\n                        [id]=\"'adf-version-list-action-restore-' + version.entry.id\"\n                        [disabled]=\"!canUpdate() || latestVersion\"\n                        mat-menu-item\n                        (click)=\"restore(version.entry.id)\">\n                        {{ 'ADF_VERSION_LIST.ACTIONS.RESTORE' | translate }}\n                    </button>\n                    <button *ngIf=\"allowDownload\"\n                            [id]=\"'adf-version-list-action-download-' + version.entry.id\"\n                            mat-menu-item\n                            (click)=\"downloadVersion(version.entry.id)\">\n                        {{ 'ADF_VERSION_LIST.ACTIONS.DOWNLOAD' | translate }}\n                    </button>\n                    <button\n                        *ngIf=\"allowVersionDelete\"\n                        [disabled]=\"!canDelete()\"\n                        [id]=\"'adf-version-list-action-delete-' + version.entry.id\"\n                        (click)=\"deleteVersion(version.entry.id)\"\n                        mat-menu-item>\n                        {{ 'ADF_VERSION_LIST.ACTIONS.DELETE' | translate }}\n                    </button>\n                </mat-menu>\n                <button mat-icon-button\n                            [matMenuTriggerFor]=\"versionMenu\"\n                            [id]=\"'adf-version-list-action-menu-button-' + version.entry.id\"\n                            title=\"{{ 'ADF_VERSION_LIST.MANAGE_VERSION_OPTIONS' | translate }}\">\n                        <mat-icon adf-icon=\"more_vert\" />\n                    </button>\n                </ng-container>\n            </div>\n        </mat-list-item>\n    </cdk-virtual-scroll-viewport>\n</mat-list>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { FileTypePipe, ThumbnailService } from '@alfresco/adf-core';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n    selector: 'adf-version-comparison',\n    imports: [CommonModule, TranslatePipe, FileTypePipe],\n    templateUrl: './version-comparison.component.html',\n    styleUrls: ['./version-comparison.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class VersionComparisonComponent {\n    thumbnailService = inject(ThumbnailService);\n\n    /** Target node. */\n    @Input({ required: true })\n    node: Node;\n\n    /** New file for updating current version. */\n    @Input({ required: true })\n    newFileVersion: File;\n}\n","<div class=\"adf-version-comparison-content\">\n    <div class=\"adf-version-current\">\n        <p>{{'ADF_VERSION_COMPARISON.CURRENT_VERSION' | translate }}</p>\n        <img [attr.aria-label]=\"'ADF_VERSION_COMPARISON.ACCESSIBILITY.ICON_TEXT' | translate:\n        { type: (node.content.mimeType | fileType | uppercase) | translate  }\"\n             [attr.alt]=\"'ADF_VERSION_COMPARISON.ACCESSIBILITY.ICON_TEXT' | translate:\n             { type: (node.content.mimeType | fileType | uppercase) | translate }\"\n             src=\"{{thumbnailService.getMimeTypeIcon(node.content.mimeType)}}\"/>\n        <p class=\"adf-version-comparison-node-name\" title=\"{{node.name}}\">{{node.name}}</p>\n    </div>\n    <span class=\"material-icons adf-version-arrow-icon\">keyboard_arrow_right</span>\n    <div class=\"adf-version-new\">\n        <p>{{'ADF_VERSION_COMPARISON.NEW_VERSION' | translate }}</p>\n        <img [attr.aria-label]=\"'ADF_VERSION_COMPARISON.ACCESSIBILITY.ICON_TEXT' | translate:\n        { type: (newFileVersion.type | fileType | uppercase) | translate  }\"\n             [attr.alt]=\"'ADF_VERSION_COMPARISON.ACCESSIBILITY.ICON_TEXT' | translate:\n             { type: (newFileVersion.type | fileType | uppercase) | translate }\"\n            src=\"{{thumbnailService.getMimeTypeIcon(newFileVersion.type)}}\"/>\n        <p class=\"adf-version-comparison-file-name\" title=\"{{newFileVersion.name}}\">{{newFileVersion.name}}</p>\n    </div>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { Node, Version } from '@alfresco/js-api';\nimport { ContentService } from '../common/services/content.service';\nimport { UploadService } from '../common/services/upload.service';\nimport { FileUploadErrorEvent, FileUploadEvent } from '../common/events/file.event';\nimport { CommonModule } from '@angular/common';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { UploadVersionButtonComponent } from '../upload';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-version-upload',\n    imports: [\n        CommonModule,\n        MatRadioModule,\n        FormsModule,\n        TranslatePipe,\n        MatFormFieldModule,\n        MatInputModule,\n        MatButtonModule,\n        UploadVersionButtonComponent\n    ],\n    templateUrl: './version-upload.component.html',\n    styleUrls: ['./version-upload.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-version-upload' }\n})\nexport class VersionUploadComponent implements OnInit {\n    private readonly contentService = inject(ContentService);\n    private readonly uploadService = inject(UploadService);\n\n    semanticVersion: string = 'minor';\n    comment: string;\n    uploadVersion: boolean = false;\n    disabled: boolean = false;\n    majorVersion = '2.0';\n    minorVersion = '1.1';\n\n    /** The target node. */\n    @Input({ required: true })\n    node: Node;\n\n    /** New file for updating current version. */\n    @Input()\n    newFileVersion: File;\n\n    /** Toggles showing/hiding upload button. */\n    @Input()\n    showUploadButton: boolean = true;\n\n    /** Toggles showing/hiding of cancel button. */\n    @Input()\n    showCancelButton: boolean = true;\n\n    /** Current version for a target node */\n    @Input()\n    set currentVersion(version: Version) {\n        if (version) {\n            this.minorVersion = this.getNextMinorVersion(version.id);\n            this.majorVersion = this.getNextMajorVersion(version.id);\n        }\n    }\n\n    /** Emitted when the file is uploaded successfully. */\n    @Output()\n    success = new EventEmitter();\n\n    /** Emitted when an error occurs. */\n    @Output()\n    error = new EventEmitter<FileUploadErrorEvent>();\n\n    /** Emitted when an cancelling during upload. */\n    @Output()\n    cancel = new EventEmitter();\n\n    /** Emitted when the version is changed. */\n    @Output()\n    versionChanged = new EventEmitter<boolean>();\n\n    /** Emitted when the comment is changed. */\n    @Output()\n    commentChanged = new EventEmitter<string>();\n\n    /** Emitted when the upload starts */\n    @Output()\n    uploadStarted = new EventEmitter<FileUploadEvent>();\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.uploadService.fileUploadStarting.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event: FileUploadEvent) => {\n            this.disabled = true;\n            this.uploadStarted.emit(event);\n        });\n    }\n\n    canUpload(): boolean {\n        return this.contentService.hasAllowableOperations(this.node, 'update') && !this.disabled;\n    }\n\n    isMajorVersion(): boolean {\n        return this.semanticVersion !== 'minor';\n    }\n\n    cancelUpload() {\n        this.disabled = false;\n        this.cancel.emit();\n    }\n\n    onVersionChange() {\n        this.versionChanged.emit(this.isMajorVersion());\n    }\n\n    onCommentChange() {\n        this.commentChanged.emit(this.comment);\n    }\n\n    onSuccess(event: any) {\n        this.success.emit(event);\n    }\n\n    onError(event: FileUploadErrorEvent) {\n        this.disabled = false;\n        this.error.emit(event);\n    }\n\n    getNextMinorVersion(version: string): string {\n        const { major, minor } = this.getParsedVersion(version);\n        return `${major}.${minor + 1}`;\n    }\n\n    getNextMajorVersion(version: string): string {\n        const { major } = this.getParsedVersion(version);\n        return `${major + 1}.0`;\n    }\n\n    private getParsedVersion(version: string) {\n        const minor = version.indexOf('.') !== -1 ? Number(version.substr(version.indexOf('.') + 1)) : 0;\n        const major = parseInt(version, 10);\n        return { minor, major };\n    }\n}\n","<div class=\"adf-new-version-max-width\">\n    <div id=\"adf-version-type-label\" class=\"adf-version-type-label\">\n        {{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.VERSION_TYPE_LABEL' | translate }}\n    </div>\n    <mat-radio-group\n        class=\"adf-new-version-radio-group\"\n        [(ngModel)]=\"semanticVersion\"\n        (change)=\"onVersionChange()\"\n        [attr.aria-labelledby]=\"'adf-version-type-label'\">\n        <mat-radio-button class=\"adf-new-version-radio-button\" id=\"adf-new-version-minor\" [value]=\"'minor'\">\n            {{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.MINOR' | translate: { version: minorVersion } }}\n        </mat-radio-button>\n        <mat-radio-button class=\"adf-new-version-radio-button\" id=\"adf-new-version-major\" [value]=\"'major'\">\n            {{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.MAJOR' | translate: { version: majorVersion } }}\n        </mat-radio-button>\n    </mat-radio-group>\n    <mat-form-field class=\"adf-new-version-max-width\">\n        <mat-label>{{'ADF_VERSION_LIST.ACTIONS.UPLOAD.COMMENT' | translate}}</mat-label>\n        <textarea matInput\n                  [(ngModel)]=\"comment\"\n                  class=\"adf-new-version-text-area\" id=\"adf-new-version-text-area\"\n                  (change)=\"onCommentChange()\"></textarea>\n    </mat-form-field>\n</div>\n<div class=\"adf-version-upload-buttons\">\n    <adf-upload-version-button *ngIf=\"showUploadButton\"\n        data-automation-id=\"adf-new-version-file-upload\"\n        staticTitle=\"{{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.TITLE' | translate }}\"\n        [node]=\"node\"\n        [disabled]=\"!canUpload()\"\n        [rootFolderId]=\"node.parentId\"\n        tooltip=\"{{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.TOOLTIP' | translate }}\"\n        [comment]=\"comment\"\n        [versioning]=\"true\"\n        [file]=\"newFileVersion\"\n        [majorVersion]=\"isMajorVersion()\"\n        (success)=\"onSuccess($event)\"\n        (error)=\"onError($event)\" />\n    <button mat-raised-button (click)=\"cancelUpload()\" id=\"adf-new-version-cancel\"  *ngIf=\"showCancelButton\" >{{\n        'ADF_VERSION_LIST.ACTIONS.UPLOAD.CANCEL'| translate }}\n    </button>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { VersionListComponent } from './version-list.component';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { ContentService } from '../common/services/content.service';\nimport { NodesApiService } from '../common/services/nodes-api.service';\nimport { FileUploadErrorEvent } from '../common/events/file.event';\nimport { CommonModule } from '@angular/common';\nimport { VersionComparisonComponent } from './version-comparison.component';\nimport { VersionUploadComponent } from './version-upload.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n    selector: 'adf-version-manager',\n    imports: [CommonModule, VersionComparisonComponent, VersionUploadComponent, MatButtonModule, TranslatePipe, VersionListComponent],\n    templateUrl: './version-manager.component.html',\n    styleUrls: ['./version-manager.component.scss'],\n    animations: [\n        trigger('uploadToggle', [\n            state('open', style({ height: '175px', opacity: 1, visibility: 'visible' })),\n            state('close', style({ height: '0%', opacity: 0, visibility: 'hidden' })),\n            transition('open => close', [style({ visibility: 'hidden' }), animate('0.4s cubic-bezier(0.25, 0.8, 0.25, 1)')]),\n            transition('close => open', [style({ visibility: 'visible' }), animate('0.4s cubic-bezier(0.25, 0.8, 0.25, 1)')])\n        ])\n    ],\n    encapsulation: ViewEncapsulation.None\n})\nexport class VersionManagerComponent implements OnInit {\n    private readonly contentService = inject(ContentService);\n    private readonly nodesApiService = inject(NodesApiService);\n\n    /** Target node to manage version history. */\n    @Input({ required: true })\n    node: Node;\n\n    /** New file for updating current version. */\n    @Input()\n    newFileVersion: File;\n\n    /** Toggles showing/hiding of comments. */\n    @Input()\n    showComments = true;\n\n    /** Toggles showing/hiding the version comparison component. */\n    @Input()\n    showVersionComparison = false;\n\n    /** Enable/disable downloading a version of the current node. */\n    @Input()\n    allowDownload = true;\n\n    /** Toggles showing/hiding of version actions. */\n    @Input()\n    showActions = true;\n\n    /** Enable/disable viewing versions of the current node. */\n    @Input()\n    allowViewVersions = true;\n\n    /** Enable/disable deletion of version */\n    @Input()\n    allowVersionDelete = true;\n\n    /** Emitted when a file is uploaded successfully. */\n    @Output()\n    uploadSuccess = new EventEmitter<Node>();\n\n    /** Emitted when an error occurs during upload. */\n    @Output()\n    uploadError = new EventEmitter<FileUploadErrorEvent>();\n\n    /** Emitted when an cancelling during upload. */\n    @Output()\n    uploadCancel = new EventEmitter<boolean>();\n\n    /** Emitted when viewing a version. */\n    @Output()\n    viewVersion = new EventEmitter<string>();\n\n    @ViewChild('versionList', { static: true })\n    versionListComponent: VersionListComponent;\n\n    uploadState: string = 'close';\n\n    ngOnInit() {\n        if (this.newFileVersion) {\n            this.toggleNewVersion();\n        }\n    }\n\n    refresh(node: Node) {\n        this.nodesApiService.nodeUpdated.next(node);\n        this.versionListComponent.loadVersionHistory();\n        this.uploadSuccess.emit(node);\n        this.uploadState = 'close';\n    }\n\n    onUploadSuccess(event: any) {\n        this.showVersionComparison = false;\n        this.newFileVersion = null;\n        this.nodesApiService.nodeUpdated.next(event.value.entry);\n        this.versionListComponent.loadVersionHistory();\n        this.uploadSuccess.emit(event.value.entry);\n        this.uploadState = 'close';\n    }\n\n    onUploadError(event: FileUploadErrorEvent) {\n        this.uploadError.emit(event);\n    }\n\n    onUploadCancel() {\n        this.uploadState = 'close';\n        this.showVersionComparison = false;\n        this.newFileVersion = null;\n        this.uploadCancel.emit(true);\n    }\n\n    onViewVersion(versionId: string) {\n        this.viewVersion.emit(versionId);\n    }\n\n    toggleNewVersion() {\n        this.uploadState = this.uploadState === 'open' ? 'close' : 'open';\n    }\n\n    canUpdate(): boolean {\n        return this.contentService.hasAllowableOperations(this.node, 'update');\n    }\n}\n","<div class=\"adf-new-version-container\">\n    <adf-version-comparison *ngIf=\"showVersionComparison\" [node]=\"node\" [newFileVersion]=\"newFileVersion\" />\n    <div class=\"adf-new-version-uploader-container\" id=\"adf-new-version-uploader-container\" [@uploadToggle]=\"uploadState\">\n        <table class=\"adf-version-upload\" *ngIf=\"uploadState !== 'close' && !versionList.isLoading\">\n            <tr>\n                <td>\n                    <adf-version-upload\n                        id=\"adf-version-upload-button\"\n                        [node]=\"node\"\n                        [newFileVersion]=\"newFileVersion\"\n                        [currentVersion]=\"versionList?.latestVersion?.entry\"\n                        (success)=\"onUploadSuccess($event)\"\n                        (cancel)=\"onUploadCancel()\"\n                        (error)=\"onUploadError($event)\" />\n                </td>\n            </tr>\n        </table>\n    </div>\n    <div class=\"adf-version-list-container\">\n        <div class=\"adf-version-list-table\">\n            <div>\n                <button mat-raised-button\n                        id=\"adf-show-version-upload-button\"\n                        class=\"adf-version-manager-upload-button\"\n                        (click)=\"toggleNewVersion()\" color=\"primary\"\n                        *ngIf=\"uploadState ==='close'\">{{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.ADD' | translate }}\n                </button>\n            </div>\n            <div>\n                <adf-version-list\n                    #versionList\n                    [node]=\"node\"\n                    [allowDownload]=\"allowDownload\"\n                    [showComments]=\"showComments\"\n                    [showActions]=\"showActions\"\n                    [allowViewVersions]=\"allowViewVersions\"\n                    [allowVersionDelete]=\"allowVersionDelete\"\n                    (deleted)=\"refresh($event)\"\n                    (restored)=\"refresh($event)\"\n                    (viewVersion)=\"onViewVersion($event)\" />\n            </div>\n        </div>\n    </div>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { VersionUploadComponent } from './version-upload.component';\nimport { VersionManagerComponent } from './version-manager.component';\nimport { VersionListComponent } from './version-list.component';\nimport { VersionComparisonComponent } from './version-comparison.component';\n\nexport const CONTENT_VERSION_DIRECTIVES = [\n    VersionUploadComponent,\n    VersionManagerComponent,\n    VersionListComponent,\n    VersionComparisonComponent\n] as const;\n\n/** @deprecated use `...CONTENT_VERSION_DIRECTIVES` instead */\n@NgModule({\n    imports: [...CONTENT_VERSION_DIRECTIVES],\n    exports: [...CONTENT_VERSION_DIRECTIVES]\n})\nexport class VersionManagerModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './version-list.component';\nexport * from './version-manager.component';\nexport * from './version-upload.component';\nexport * from './version-comparison.component';\nexport * from './content-version.service';\nexport * from './version-manager.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node, SitePaging } from '@alfresco/js-api';\nimport { Subject } from 'rxjs';\nimport { NodeAction } from '../document-list/models/node-action.enum';\n\nexport interface ContentNodeSelectorComponentData {\n    title: string;\n    actionName?: NodeAction;\n    currentFolderId: string;\n    dropdownHideMyFiles?: boolean;\n    restrictRootToCurrentFolderId?: boolean;\n    dropdownSiteList?: SitePaging;\n    rowFilter?: any;\n    where?: string;\n    imageResolver?: any;\n    selectionMode?: 'multiple' | 'single';\n    isSelectionValid?: (entry: Node) => boolean;\n    breadcrumbTransform?: (node) => any;\n    excludeSiteContent?: string[];\n    select: Subject<Node[]>;\n    showSearch?: boolean;\n    showFilesInResult?: boolean;\n    showDropdownSiteList?: boolean;\n    showLocalUploadButton?: boolean;\n    multipleUpload?: boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { ContentNodeSelectorPanelComponent } from './content-node-selector-panel/content-node-selector-panel.component';\nimport { ContentNodeSelectorComponent } from './content-node-selector.component';\nimport { NameLocationCellComponent } from './name-location-cell/name-location-cell.component';\nimport { DropdownSitesComponent } from './site-dropdown/sites-dropdown.component';\n\nexport const CONTENT_NODE_SELECTOR_DIRECTIVES = [\n    ContentNodeSelectorPanelComponent,\n    NameLocationCellComponent,\n    ContentNodeSelectorComponent,\n    DropdownSitesComponent\n];\n\n/** @deprecated use `...CONTENT_NODE_SELECTOR_DIRECTIVES` or import the individual components */\n@NgModule({\n    imports: [...CONTENT_NODE_SELECTOR_DIRECTIVES],\n    exports: [...CONTENT_NODE_SELECTOR_DIRECTIVES]\n})\nexport class ContentNodeSelectorModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './name-location-cell/name-location-cell.component';\nexport * from './site-dropdown/sites-dropdown.component';\nexport * from './content-node-selector.component-data.interface';\nexport * from './content-node-selector-panel/content-node-selector-panel.component';\nexport * from './content-node-selector.component';\nexport * from './content-node-dialog.service';\nexport * from './content-node-selector-panel/content-node-selector-panel.service';\n\nexport * from './content-node-selector.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UntypedFormControl } from '@angular/forms';\n\nconst I18N_ERRORS_PATH = 'CORE.FOLDER_DIALOG.FOLDER_NAME.ERRORS';\n\nexport const forbidSpecialCharacters = ({ value }: UntypedFormControl) => {\n    // eslint-disable-next-line no-useless-escape\n    const specialCharacters: RegExp = /([\\*\\\"\\<\\>\\\\\\/\\?\\:\\|])/;\n    const isValid: boolean = !specialCharacters.test(value);\n\n    return isValid\n        ? null\n        : {\n              message: `${I18N_ERRORS_PATH}.SPECIAL_CHARACTERS`\n          };\n};\n\nexport const forbidEndingDot = ({ value }: UntypedFormControl) => {\n    const isValid: boolean = (value || '').trim().split('').pop() !== '.';\n\n    return isValid\n        ? null\n        : {\n              message: `${I18N_ERRORS_PATH}.ENDING_DOT`\n          };\n};\n\nexport const forbidOnlySpaces = ({ value }: UntypedFormControl) => {\n    const isValid: boolean = !!(value || '').trim();\n\n    return isValid\n        ? null\n        : {\n              message: `${I18N_ERRORS_PATH}.ONLY_SPACES`\n          };\n};\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Observable } from 'rxjs';\nimport { Component, DestroyRef, EventEmitter, inject, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { Node } from '@alfresco/js-api';\nimport { TranslationService, NotificationService } from '@alfresco/adf-core';\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { forbidEndingDot, forbidOnlySpaces, forbidSpecialCharacters } from './folder-name.validators';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { AutoFocusDirective } from '../../directives';\nimport { MatButtonModule } from '@angular/material/button';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-folder-dialog',\n    imports: [\n        CommonModule,\n        MatDialogModule,\n        TranslatePipe,\n        ReactiveFormsModule,\n        MatFormFieldModule,\n        MatInputModule,\n        AutoFocusDirective,\n        MatButtonModule\n    ],\n    templateUrl: './folder.dialog.html',\n    styleUrls: ['./folder.dialog.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-folder-dialog' }\n})\nexport class FolderDialogComponent implements OnInit {\n    private readonly formBuilder = inject(UntypedFormBuilder);\n    private readonly dialog = inject<MatDialogRef<FolderDialogComponent>>(MatDialogRef);\n    private readonly nodesApi = inject(NodesApiService);\n    private readonly translation = inject(TranslationService);\n    data = inject(MAT_DIALOG_DATA, { optional: true });\n\n    /**\n     * Emitted when the edit/create folder give error for example a folder with same name already exist\n     */\n    @Output()\n    error = new EventEmitter<any>();\n\n    /**\n     * Emitted when the edit/create folder is successfully created/modified\n     */\n    @Output()\n    success = new EventEmitter<Node>();\n\n    form: UntypedFormGroup;\n    folder: Node = null;\n\n    editTitle = 'CORE.FOLDER_DIALOG.EDIT_FOLDER_TITLE';\n    createTitle = 'CORE.FOLDER_DIALOG.CREATE_FOLDER_TITLE';\n    nodeType = 'cm:folder';\n\n    disableSubmitButton = false;\n\n    get editing(): boolean {\n        return !!this.data.folder;\n    }\n\n    get name(): string {\n        return this.getTrimmedValue(this.form.value.name);\n    }\n\n    get title(): string {\n        return this.getTrimmedValue(this.form.value.title);\n    }\n\n    get description(): string {\n        return this.getTrimmedValue(this.form.value.description);\n    }\n\n    private get properties(): { [key: string]: string } {\n        return {\n            'cm:title': this.title,\n            'cm:description': this.description\n        };\n    }\n\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly notificationService = inject(NotificationService);\n\n    constructor() {\n        const data = this.data;\n\n        if (data) {\n            this.editTitle = data.editTitle || this.editTitle;\n            this.createTitle = data.createTitle || this.createTitle;\n            this.nodeType = data.nodeType || this.nodeType;\n        }\n    }\n\n    ngOnInit() {\n        const { folder } = this.data;\n        let name = '';\n        let title = '';\n        let description = '';\n        if (folder) {\n            const { properties } = folder;\n\n            name = folder.name || '';\n            title = properties?.['cm:title'] ?? '';\n            description = properties?.['cm:description'] ?? '';\n        }\n\n        const validators = {\n            name: [Validators.required, forbidSpecialCharacters, forbidEndingDot, forbidOnlySpaces]\n        };\n\n        this.form = this.formBuilder.group({\n            name: [name, validators.name],\n            title: [title],\n            description: [description]\n        });\n\n        this.form.controls['name'].valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => (this.disableSubmitButton = false));\n    }\n\n    submit() {\n        this.disableSubmitButton = true;\n\n        (this.editing ? this.edit() : this.create()).subscribe(\n            (folder: Node) => {\n                const messageKey = this.editing ? 'CORE.FOLDER_DIALOG.FOLDER_UPDATED_SUCCESS' : 'CORE.FOLDER_DIALOG.FOLDER_CREATED_SUCCESS';\n                const message = this.translation.instant(messageKey, { name: folder.name });\n\n                this.notificationService.showInfo(message);\n                this.success.emit(folder);\n                this.dialog.close(folder);\n            },\n            (error) => this.handleError(error)\n        );\n    }\n\n    handleError(error: any): any {\n        let errorMessage = 'CORE.MESSAGES.ERRORS.GENERIC';\n\n        try {\n            const {\n                error: { statusCode }\n            } = JSON.parse(error.message);\n\n            if (statusCode === 409) {\n                errorMessage = 'CORE.MESSAGES.ERRORS.EXISTENT_FOLDER';\n            }\n        } catch {\n            /* Do nothing, keep the original message */\n        }\n\n        this.error.emit(this.translation.instant(errorMessage));\n\n        return error;\n    }\n\n    private create(): Observable<Node> {\n        const parentNodeId = this.data.parentNodeId;\n\n        return this.nodesApi.createFolder(parentNodeId, { name: this.name, properties: this.properties, nodeType: this.nodeType });\n    }\n\n    private edit(): Observable<Node> {\n        const nodeId = this.data.folder.id;\n\n        return this.nodesApi.updateNode(nodeId, { name: this.name, properties: this.properties });\n    }\n\n    private getTrimmedValue(value: string): string {\n        return (value || '').trim();\n    }\n}\n","<h2 data-automation-id=\"adf-folder-dialog-title\" class=\"adf-folder-dialog-title\" mat-dialog-title>\n    {{ (editing ? editTitle : createTitle) | translate }}\n</h2>\n\n<mat-dialog-content class=\"adf-folder-dialog-content\">\n    <form [formGroup]=\"form\" (submit)=\"submit()\">\n        <mat-form-field class=\"adf-full-width adf-folder-dialog-form-field\">\n            <mat-label>{{ 'CORE.FOLDER_DIALOG.FOLDER_NAME.LABEL' | translate }}</mat-label>\n            <input\n                id=\"adf-folder-name-input\"\n                [attr.aria-label]=\"'CORE.FOLDER_DIALOG.FOLDER_NAME.LABEL' | translate\"\n                matInput\n                required\n                [formControlName]=\"'name'\"\n                adf-auto-focus\n            />\n\n            <mat-hint *ngIf=\"form.controls['name'].dirty\">\n                <span *ngIf=\"form.controls['name'].errors?.required\">\n                    {{ 'CORE.FOLDER_DIALOG.FOLDER_NAME.ERRORS.REQUIRED' | translate }}\n                </span>\n\n                <span *ngIf=\"!form.controls['name'].errors?.required && form.controls['name'].errors?.message\">\n                    {{ form.controls['name'].errors?.message | translate }}\n                </span>\n            </mat-hint>\n        </mat-form-field>\n\n        <mat-form-field class=\"adf-full-width adf-folder-dialog-form-field\">\n            <mat-label>{{ 'CORE.FOLDER_DIALOG.FOLDER_TITLE.LABEL' | translate }}</mat-label>\n            <input\n                id=\"adf-folder-title-input\"\n                matInput\n                [attr.aria-label]=\"'CORE.FOLDER_DIALOG.FOLDER_TITLE.LABEL' | translate\"\n                [formControlName]=\"'title'\"\n            />\n        </mat-form-field>\n\n        <mat-form-field class=\"adf-full-width adf-folder-dialog-form-field\">\n            <mat-label>{{ 'CORE.FOLDER_DIALOG.FOLDER_DESCRIPTION.LABEL' | translate }}</mat-label>\n            <textarea\n                id=\"adf-folder-description-input\"\n                matInput\n                [attr.aria-label]=\"'CORE.FOLDER_DIALOG.FOLDER_DESCRIPTION.LABEL' | translate\"\n                rows=\"4\"\n                [formControlName]=\"'description'\">\n            </textarea>\n        </mat-form-field>\n    </form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"adf-dialog-buttons\">\n    <span class=\"adf-fill-remaining-space\"></span>\n\n    <button\n        mat-button\n        id=\"adf-folder-cancel-button\"\n        mat-dialog-close>\n        {{ 'CORE.FOLDER_DIALOG.CANCEL_BUTTON.LABEL' | translate }}\n    </button>\n\n    <button class=\"adf-dialog-action-button\"\n            id=\"adf-folder-create-button\"\n            mat-button\n            (click)=\"submit()\"\n            [disabled]=\"!form.valid || disableSubmitButton\">\n        {{\n        (editing\n        ? 'CORE.FOLDER_DIALOG.UPDATE_BUTTON.LABEL'\n        : 'CORE.FOLDER_DIALOG.CREATE_BUTTON.LABEL'\n        ) | translate\n        }}\n    </button>\n</mat-dialog-actions>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const TreeNodeType = {\n    RegularNode: 'RegularNode',\n    LoadMoreNode: 'LoadMoreNode'\n} as const;\n\nexport type TreeNodeType = (typeof TreeNodeType)[keyof typeof TreeNodeType];\n\nexport interface TreeNode {\n    id: string;\n    nodeName: string;\n    parentId: string;\n    level: number;\n    nodeType: TreeNodeType;\n    hasChildren: boolean;\n    isLoading: boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { DataSource } from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TreeNode } from '../models/tree-node.interface';\nimport { TreeResponse } from '../models/tree-response.interface';\n\n@Injectable({ providedIn: 'root' })\nexport abstract class TreeService<T extends TreeNode> extends DataSource<T> {\n    public readonly treeControl: FlatTreeControl<T>;\n    public treeNodesSource = new BehaviorSubject<T[]>([]);\n\n    get treeNodes(): T[] {\n        return this.treeControl.dataNodes;\n    }\n\n    set treeNodes(nodes: T[]) {\n        this.treeControl.dataNodes = nodes;\n        this.treeNodesSource.next(nodes);\n    }\n\n    constructor() {\n        super();\n        this.treeControl = new FlatTreeControl<T>(\n            (node) => node.level,\n            (node) => node.hasChildren\n        );\n        this.treeNodes = [];\n    }\n\n    public abstract getSubNodes(parentNodeId: string, skipCount?: number, maxItems?: number, searchTerm?: string): Observable<TreeResponse<T>>;\n\n    /**\n     * Expands node applying subnodes to it.\n     *\n     * @param nodeToExpand Node to be expanded\n     * @param subNodes List of nodes that will be added as children of expanded node\n     */\n    public expandNode(nodeToExpand: T, subNodes: T[]): void {\n        if (nodeToExpand != null && subNodes != null && nodeToExpand.hasChildren) {\n            this.treeControl.expand(nodeToExpand);\n            const index: number = this.treeNodes.indexOf(nodeToExpand);\n            this.treeNodes.splice(index + 1, 0, ...subNodes);\n            nodeToExpand.isLoading = false;\n            this.treeNodesSource.next(this.treeNodes);\n        }\n    }\n\n    /**\n     * Collapses a node removing all children from it.\n     *\n     * @param nodeToCollapse Node to be collapsed\n     */\n    public collapseNode(nodeToCollapse: T): void {\n        if (nodeToCollapse?.hasChildren) {\n            this.treeControl.collapse(nodeToCollapse);\n            const children: T[] = this.treeNodes.filter((node: T) => nodeToCollapse.id === node.parentId);\n            children.forEach((child: T) => {\n                this.collapseInnerNode(child);\n            });\n            this.treeNodesSource.next(this.treeNodes);\n        }\n    }\n\n    /**\n     * Append more child nodes to already expanded parent node\n     *\n     * @param nodeToAppend Expanded parent node\n     * @param subNodes List of nodes that will be added as children of expanded node\n     */\n    public appendNodes(nodeToAppend: T, subNodes: T[]): void {\n        if (nodeToAppend != null && subNodes != null) {\n            const lastChild: T = this.treeNodes.filter((treeNode: T) => nodeToAppend.id === treeNode.parentId).pop();\n            const index: number = this.treeNodes.indexOf(lastChild);\n            const children: number = this.treeControl.getDescendants(lastChild).length;\n            this.treeNodes.splice(index + children + 1, 0, ...subNodes);\n            nodeToAppend.isLoading = false;\n            this.treeNodesSource.next(this.treeNodes);\n        }\n    }\n\n    /**\n     * Removes provided node from the tree\n     *\n     * @param node Node to be removed\n     */\n    public removeNode(node: T): void {\n        this.treeNodes.splice(this.treeNodes.indexOf(node), 1);\n    }\n\n    /**\n     * Gets children of the node\n     *\n     * @param parentNode Parent node\n     * @returns children of parent node\n     */\n    public getChildren(parentNode: T): T[] {\n        return this.treeNodes.filter((treeNode: T) => treeNode.parentId === parentNode.id);\n    }\n\n    /**\n     * Checks if tree is empty\n     *\n     * @returns boolean\n     */\n    public isEmpty(): boolean {\n        return !this.treeNodes.length;\n    }\n\n    /**\n     * Gets parent node of given node. If node with parentNodeId is not found it returns undefined.\n     *\n     * @param parentNodeId Id of a parent node to be found\n     * @returns parent node or undefined when not found\n     */\n    public getParentNode(parentNodeId: string): T | undefined {\n        return this.treeNodes.find((treeNode: T) => treeNode.id === parentNodeId);\n    }\n\n    public connect(): Observable<T[]> {\n        return this.treeNodesSource.asObservable();\n    }\n\n    public disconnect(): void {}\n\n    private collapseInnerNode(nodeToCollapse: T): void {\n        const index: number = this.treeNodes.indexOf(nodeToCollapse);\n        this.treeNodes.splice(index, 1);\n        if (nodeToCollapse.hasChildren) {\n            this.treeNodes.filter((node: T) => nodeToCollapse.id === node.parentId).forEach((child: T) => this.collapseInnerNode(child));\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    Component,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChildren,\n    ViewEncapsulation,\n    inject\n} from '@angular/core';\nimport { BehaviorSubject, merge, Observable, Subject } from 'rxjs';\nimport { TreeNode, TreeNodeType } from '../models/tree-node.interface';\nimport { TreeService } from '../services/tree.service';\nimport { ContextMenuDirective, IconModule, PaginationModel, UserPreferencesService } from '@alfresco/adf-core';\nimport { SelectionChange, SelectionModel } from '@angular/cdk/collections';\nimport { TreeResponse } from '../models/tree-response.interface';\nimport { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox';\nimport { TreeContextMenuResult } from '../models/tree-context-menu-result.interface';\nimport { takeUntil } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@Component({\n    selector: 'adf-tree',\n    imports: [\n        CommonModule,\n        TranslatePipe,\n        MatTreeModule,\n        MatProgressSpinnerModule,\n        MatButtonModule,\n        ContextMenuDirective,\n        MatCheckboxModule,\n        MatMenuModule,\n        IconModule\n    ],\n    templateUrl: './tree.component.html',\n    styleUrls: ['./tree.component.scss'],\n    host: { class: 'adf-tree' },\n    encapsulation: ViewEncapsulation.None\n})\nexport class TreeComponent<T extends TreeNode> implements OnInit, OnDestroy {\n    treeService = inject<TreeService<T>>(TreeService);\n    private readonly userPreferenceService = inject(UserPreferencesService);\n\n    /** TemplateRef to provide empty template when no nodes are loaded */\n    @Input()\n    public emptyContentTemplate: TemplateRef<any>;\n\n    /** TemplateRef to provide context menu items for context menu displayed on each row*/\n    @Input()\n    public nodeActionsMenuTemplate: TemplateRef<any>;\n\n    /** Variable defining if tree header should be sticky. By default set to false */\n    @Input()\n    @HostBinding('class.adf-tree-sticky-header')\n    public stickyHeader: boolean = false;\n\n    /** Variable defining if tree nodes should be selectable. By default set to false */\n    @Input()\n    public selectableNodes: boolean = false;\n\n    /** Tree display name */\n    @Input()\n    public displayName: string;\n\n    /** Load more suffix for load more button */\n    @Input()\n    public loadMoreSuffix: string;\n\n    /** Icon shown when node has children and is collapsed. By default set to chevron_right */\n    @Input()\n    public expandIcon: string = 'chevron_right';\n\n    /** Icon shown when node is expanded. By default set to expand_more */\n    @Input()\n    public collapseIcon: string = 'expand_more';\n\n    /** Emitted when pagination has been changed */\n    @Output()\n    public paginationChanged: EventEmitter<PaginationModel> = new EventEmitter();\n\n    /** Emitted when any context menu option is selected */\n    @Output()\n    public contextMenuOptionSelected = new EventEmitter<TreeContextMenuResult<T>>();\n\n    @ViewChildren(MatCheckbox)\n    public nodeCheckboxes: QueryList<MatCheckbox>;\n\n    private readonly loadingRootSource = new BehaviorSubject<boolean>(false);\n    private _contextMenuSource: T;\n    private _contextMenuOptions: any[];\n    private readonly contextMenuOptionsChanged$ = new Subject<void>();\n    public loadingRoot$: Observable<boolean>;\n    public treeNodesSelection = new SelectionModel<T>(true, [], true, (node1: T, node2: T) => node1.id === node2.id);\n\n    set contextMenuSource(contextMenuSource: T) {\n        this._contextMenuSource = contextMenuSource;\n    }\n\n    /** Array of context menu options which should be displayed for each row. */\n    @Input()\n    set contextMenuOptions(contextMenuOptions: any[]) {\n        this.contextMenuOptionsChanged$.next();\n        if (contextMenuOptions) {\n            this._contextMenuOptions = contextMenuOptions.map((option) => {\n                if (!option.subject) {\n                    option = {\n                        ...option,\n                        subject: new Subject()\n                    };\n                }\n                return option;\n            });\n            merge(...this.contextMenuOptions.map((option) => option.subject))\n                .pipe(takeUntil(this.contextMenuOptionsChanged$))\n                .subscribe((option) => {\n                    this.contextMenuOptionSelected.emit({\n                        row: this._contextMenuSource,\n                        contextMenuOption: option\n                    });\n                });\n        } else {\n            this._contextMenuOptions = contextMenuOptions;\n        }\n    }\n\n    get contextMenuOptions(): any[] {\n        return this._contextMenuOptions;\n    }\n\n    ngOnInit(): void {\n        this.loadingRoot$ = this.loadingRootSource.asObservable();\n        this.refreshTree(0, this.userPreferenceService.paginationSize);\n        this.treeNodesSelection.changed.subscribe((selectionChange: SelectionChange<T>) => {\n            this.onTreeSelectionChange(selectionChange);\n        });\n    }\n\n    ngOnDestroy() {\n        this.contextMenuOptionsChanged$.next();\n        this.contextMenuOptionsChanged$.complete();\n    }\n\n    /**\n     * Checks if node is LoadMoreNode node\n     *\n     * @param _idx (unused)\n     * @param node node to be checked\n     * @returns `true` if there are more items to load, otherwise `false`\n     */\n    public isLoadMoreNode(_idx: number, node: T): boolean {\n        return node.nodeType === TreeNodeType.LoadMoreNode;\n    }\n\n    /**\n     * Checks if tree is empty\n     *\n     * @returns boolean\n     */\n    public isEmpty(): boolean {\n        return this.treeService.isEmpty();\n    }\n\n    /**\n     * Returns action icon based on expanded/collapsed node state.\n     *\n     * @param node node to be checked\n     * @returns collapse or expand icon\n     */\n    public expandCollapseIconValue(node: T): string {\n        return this.treeService.treeControl.isExpanded(node) ? this.collapseIcon : this.expandIcon;\n    }\n\n    /**\n     * Refreshes the tree, root nodes are reloaded, tree selection is cleared.\n     *\n     * @param skipCount Number of root nodes to skip.\n     * @param maxItems Maximum number of nodes returned from Observable.\n     * @param searchTerm Specifies if categories should be filtered out by name or not. If not specified then returns categories without filtering.\n     */\n    public refreshTree(skipCount?: number, maxItems?: number, searchTerm?: string): void {\n        this.loadingRootSource.next(true);\n        this.treeNodesSelection.clear();\n        this.treeService.getSubNodes('-root-', skipCount, maxItems, searchTerm).subscribe((response: TreeResponse<T>) => {\n            this.treeService.treeNodes = response.entries;\n            this.treeNodesSelection.deselect(...response.entries);\n            this.paginationChanged.emit(response.pagination);\n            this.loadingRootSource.next(false);\n        });\n    }\n\n    /**\n     * Collapses or expanding the node based on its current state\n     *\n     * @param node node to be collapsed/expanded\n     */\n    public expandCollapseNode(node: T): void {\n        if (node.hasChildren && !node.isLoading) {\n            if (this.treeService.treeControl.isExpanded(node)) {\n                this.treeService.collapseNode(node);\n            } else {\n                node.isLoading = true;\n                this.treeService.getSubNodes(node.id, 0, this.userPreferenceService.paginationSize).subscribe((response: TreeResponse<T>) => {\n                    this.treeService.expandNode(node, response.entries);\n                    node.isLoading = false;\n                    if (this.treeNodesSelection.isSelected(node)) {\n                        //timeout used to update nodeCheckboxes query list after new nodes are added so they can be selected\n                        setTimeout(() => {\n                            this.treeNodesSelection.select(...response.entries);\n                        });\n                    }\n                });\n            }\n        }\n    }\n\n    /**\n     * Loads more subnode for a given parent node\n     *\n     * @param node parent node\n     */\n    public loadMoreSubnodes(node: T): void {\n        node.isLoading = true;\n        const parentNode: T = this.treeService.getParentNode(node.parentId);\n        this.treeService.removeNode(node);\n        const loadedChildren: number = this.treeService.getChildren(parentNode).length;\n        this.treeService\n            .getSubNodes(parentNode.id, loadedChildren, this.userPreferenceService.paginationSize)\n            .subscribe((response: TreeResponse<T>) => {\n                this.treeService.appendNodes(parentNode, response.entries);\n                node.isLoading = false;\n                if (this.treeNodesSelection.isSelected(parentNode)) {\n                    //timeout used to update nodeCheckboxes query list after new nodes are added so they can be selected\n                    setTimeout(() => {\n                        this.treeNodesSelection.select(...response.entries);\n                    });\n                }\n            });\n    }\n\n    /**\n     * When node is selected it selects all its descendants\n     *\n     * @param node selected node\n     */\n    public onNodeSelected(node: T): void {\n        this.treeNodesSelection.toggle(node);\n        const descendants: T[] = this.treeService.treeControl.getDescendants(node).filter(this.isRegularNode);\n        if (descendants.length > 0) {\n            this.treeNodesSelection.isSelected(node)\n                ? this.treeNodesSelection.select(...descendants)\n                : this.treeNodesSelection.deselect(...descendants);\n        }\n        this.checkParentsSelection(node);\n    }\n\n    /**\n     * Checks if all descendants of a node are selected\n     *\n     * @param node selected node\n     * @returns boolean\n     */\n    public descendantsAllSelected(node: T): boolean {\n        const descendants: T[] = this.treeService.treeControl.getDescendants(node).filter(this.isRegularNode);\n        return descendants.length > 0 && descendants.every((descendant: T) => this.treeNodesSelection.isSelected(descendant));\n    }\n\n    /**\n     * Checks if some descendants of a node are selected\n     *\n     * @param node selected node\n     * @returns boolean\n     */\n    public descendantsPartiallySelected(node: T): boolean {\n        const descendants: T[] = this.treeService.treeControl.getDescendants(node).filter(this.isRegularNode);\n        return (\n            descendants.length > 0 &&\n            !this.descendantsAllSelected(node) &&\n            descendants.some((descendant: T) => this.treeNodesSelection.isSelected(descendant))\n        );\n    }\n\n    private checkParentsSelection(node: T): void {\n        let parent: T = this.treeService.getParentNode(node.parentId);\n        while (parent) {\n            this.checkRootNodeSelection(parent);\n            parent = this.treeService.getParentNode(parent.parentId);\n        }\n    }\n\n    private checkRootNodeSelection(node: T): void {\n        const nodeSelected: boolean = this.treeNodesSelection.isSelected(node);\n        const descAllSelected = this.descendantsAllSelected(node);\n        if (nodeSelected && !descAllSelected) {\n            this.treeNodesSelection.deselect(node);\n        } else if (!nodeSelected && descAllSelected) {\n            this.treeNodesSelection.select(node);\n        }\n    }\n\n    private onTreeSelectionChange(selectionChange: SelectionChange<T>): void {\n        selectionChange.removed.forEach((unselectedNode: T) => {\n            if (this.isRegularNode(unselectedNode)) {\n                this.nodeCheckboxes.find((checkbox: MatCheckbox) => checkbox.id === unselectedNode.id).checked = false;\n            }\n        });\n        selectionChange.added.forEach((selectedNode: T) => {\n            if (this.isRegularNode(selectedNode)) {\n                this.nodeCheckboxes.find((checkbox: MatCheckbox) => checkbox.id === selectedNode.id).checked = true;\n            }\n        });\n    }\n\n    private isRegularNode(node: T): boolean {\n        return node.nodeType !== TreeNodeType.LoadMoreNode;\n    }\n}\n","<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                        />\n                        <ng-template #loadMoreIcon>\n                            <mat-icon adf-icon=\"chevron_right\" aria-hidden=\"true\" />\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            >\n                <div class=\"adf-tree-expand-collapse-container\">\n                    <button \n                        *ngIf=\"node.hasChildren\"\n                        class=\"adf-tree-expand-collapse-button\"\n                        (click)=\"expandCollapseNode(node)\"\n                        mat-icon-button\n                    >\n                        <mat-progress-spinner\n                            color=\"primary\"\n                            mode=\"indeterminate\"\n                            [diameter]=\"24\"\n                            *ngIf=\"node.isLoading; else expandCollapseIcon\"\n                        />\n                        <ng-template #expandCollapseIcon>\n                            <mat-icon [adf-icon]=\"expandCollapseIconValue(node)\" aria-hidden=\"true\" />\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 adf-icon=\"more_vert\" />\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","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { TreeComponent } from './components/tree.component';\n\n/** @deprecated use `TreeComponent` standalone component instead */\n@NgModule({\n    imports: [TreeComponent],\n    exports: [TreeComponent]\n})\nexport class TreeModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TreeNode } from './tree-node.interface';\nimport { PaginationModel } from '@alfresco/adf-core';\n\nexport interface TreeResponse<T extends TreeNode> {\n    pagination: PaginationModel;\n    entries: T[];\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface TreeContextMenuResult<T> {\n    row: T;\n    contextMenuOption: any;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './tree.module';\nexport * from './models/tree-response.interface';\nexport * from './models/tree-node.interface';\nexport * from './models/tree-context-menu-result.interface';\nexport * from './services/tree.service';\nexport * from './components/tree.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { TreeNodeType, TreeResponse, TreeService } from '../../tree';\nimport { CategoryNode } from '../models/category-node.interface';\nimport { CategoryService } from './category.service';\nimport { from, Observable } from 'rxjs';\nimport { map, mergeMap, toArray } from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class CategoryTreeDatasourceService extends TreeService<CategoryNode> {\n    private readonly categoryService = inject(CategoryService);\n\n    public getSubNodes(parentNodeId: string, skipCount?: number, maxItems?: number, name?: string): Observable<TreeResponse<CategoryNode>> {\n        return !name\n            ? this.categoryService.getSubcategories(parentNodeId, skipCount, maxItems).pipe(\n                  map((response) => {\n                      const parentNode = this.getParentNode(parentNodeId);\n                      const nodesList: CategoryNode[] = response.list.entries.map((entry) => ({\n                          id: entry.entry.id,\n                          nodeName: entry.entry.name,\n                          parentId: entry.entry.parentId,\n                          hasChildren: entry.entry.hasChildren,\n                          level: parentNode ? parentNode.level + 1 : 0,\n                          isLoading: false,\n                          nodeType: TreeNodeType.RegularNode\n                      }));\n                      if (response.list.pagination.hasMoreItems && parentNode) {\n                          const loadMoreNode: CategoryNode = {\n                              id: 'loadMore',\n                              nodeName: '',\n                              parentId: parentNode.id,\n                              hasChildren: false,\n                              level: parentNode.level + 1,\n                              isLoading: false,\n                              nodeType: TreeNodeType.LoadMoreNode\n                          };\n                          nodesList.push(loadMoreNode);\n                      }\n                      return { entries: nodesList, pagination: response.list.pagination };\n                  })\n              )\n            : this.categoryService.searchCategories(name, skipCount, maxItems).pipe(\n                  mergeMap((pagingResult) => {\n                      const nextAfterGeneralPathPartIndex = 3;\n                      const pathSeparator = '/';\n                      return from(pagingResult.list.entries).pipe(\n                          mergeMap((category) => {\n                              const path = category.entry.path.name.split(pathSeparator).slice(nextAfterGeneralPathPartIndex).join(pathSeparator);\n\n                              return this.categoryService.getCategory(category.entry.id).pipe(\n                                  map((res) => ({\n                                      id: category.entry.id,\n                                      nodeName: path ? `${path}/${category.entry.name}` : category.entry.name,\n                                      parentId: category.entry.parentId,\n                                      level: 0,\n                                      nodeType: TreeNodeType.RegularNode,\n                                      hasChildren: res.entry.hasChildren,\n                                      isLoading: false\n                                  }))\n                              );\n                          }),\n                          toArray(),\n                          map((res) => ({ entries: res, pagination: pagingResult.list.pagination }))\n                      );\n                  })\n              );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TreeNode } from '../../tree/models/tree-node.interface';\n\nexport interface CategoryNode extends TreeNode {\n    description?: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const CategoriesManagementMode = {\n    CRUD: 'CRUD',\n    ASSIGN: 'ASSIGN'\n} as const;\n\nexport type CategoriesManagementMode = (typeof CategoriesManagementMode)[keyof typeof CategoriesManagementMode];\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Category } from '@alfresco/js-api';\nimport {\n    Component,\n    DestroyRef,\n    ElementRef,\n    EventEmitter,\n    inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { EMPTY, Observable, Subject, timer } from 'rxjs';\nimport { debounce, first, map, tap } from 'rxjs/operators';\nimport { CategoriesManagementMode } from './categories-management-mode';\nimport { CategoryService } from '../services/category.service';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { AutoFocusDirective } from '../../directives';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatInputModule } from '@angular/material/input';\nimport { IconModule } from '@alfresco/adf-core';\n\ninterface CategoryNameControlErrors {\n    duplicatedExistingCategory?: boolean;\n    duplicatedCategory?: boolean;\n    emptyCategory?: boolean;\n    required?: boolean;\n    specialCharacters?: boolean;\n    endsWithDot?: boolean;\n}\n\n@Component({\n    selector: 'adf-categories-management',\n    imports: [\n        CommonModule,\n        TranslatePipe,\n        AutoFocusDirective,\n        ReactiveFormsModule,\n        MatFormFieldModule,\n        MatButtonModule,\n        IconModule,\n        MatListModule,\n        MatProgressSpinnerModule,\n        MatInputModule\n    ],\n    templateUrl: './categories-management.component.html',\n    styleUrls: ['./categories-management.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class CategoriesManagementComponent implements OnInit, OnDestroy {\n    private readonly categoryService = inject(CategoryService);\n\n    readonly nameErrorMessagesByErrors = new Map<keyof CategoryNameControlErrors, string>([\n        ['duplicatedExistingCategory', 'ALREADY_EXISTS'],\n        ['duplicatedCategory', 'DUPLICATED_CATEGORY'],\n        ['emptyCategory', 'EMPTY_CATEGORY'],\n        ['required', 'REQUIRED'],\n        ['specialCharacters', 'SPECIAL_CHARACTERS'],\n        ['endsWithDot', 'ENDS_WITH_DOT']\n    ]);\n\n    private readonly existingCategoryLoaded$ = new Subject<void>();\n    private readonly cancelExistingCategoriesLoading$ = new Subject<void>();\n    private readonly _categoryNameControl = new FormControl<string>(\n        '',\n        [\n            this.validateIfNotAlreadyAdded.bind(this),\n            this.validateEmptyCategory,\n            this.validateSpecialCharacters,\n            this.validateEndsWithDot,\n            Validators.required\n        ],\n        this.validateIfNotAlreadyCreated.bind(this)\n    );\n    private _existingCategories: Category[];\n    private _categoryNameErrorMessageKey = '';\n    private _existingCategoriesLoading = false;\n    private _typing = false;\n    private _existingCategoriesPanelVisible: boolean;\n    private _categoryNameControlVisible = false;\n    private readonly existingCategoriesListLimit = 15;\n    initialCategories: Category[] = [];\n    noCategoriesMsg = '';\n    removeCategoryTitle = '';\n    existingCategoriesMsg = '';\n\n    /** Categories to display initially */\n    @Input()\n    categories: Category[] = [];\n\n    /**\n     * Decides if categoryNameControl should be visible. Sets also existing categories panel visibility\n     * and scrolls control into view when visible.\n     *\n     * @param categoryNameControlVisible control visibility.\n     */\n    @Input()\n    set categoryNameControlVisible(categoryNameControlVisible: boolean) {\n        this._categoryNameControlVisible = categoryNameControlVisible;\n        if (categoryNameControlVisible) {\n            setTimeout(() => {\n                this.categoryNameInputElement.nativeElement.scrollIntoView();\n            });\n            this._existingCategoriesPanelVisible = true;\n        } else {\n            this._existingCategoriesPanelVisible = false;\n            this.clearCategoryNameInput();\n        }\n    }\n\n    get categoryNameControlVisible(): boolean {\n        return this._categoryNameControlVisible;\n    }\n\n    /** Emits when classifiable aspect changes */\n    @Input()\n    classifiableChanged: Observable<void>;\n\n    /** Disables remove button in upper categories list */\n    @Input()\n    disableRemoval = false;\n\n    /**\n     * Component mode.\n     * In ASSIGN mode we can only assign/unassign categories from existing list.\n     * In CRUD mode we can create categories.\n     */\n    @Input({ required: true })\n    managementMode: CategoriesManagementMode;\n\n    /** ID of a parent category. New categories will be created under this parent */\n    @Input()\n    parentId: string;\n\n    /** Toggles multiselect mode */\n    @Input()\n    multiSelect = true;\n\n    /** Emits when state of upper categories list changes */\n    @Output()\n    categoriesChange = new EventEmitter<Category[]>();\n\n    /** Emits when categoryNameControl visibility changes */\n    @Output()\n    categoryNameControlVisibleChange = new EventEmitter<boolean>();\n\n    @ViewChild('categoryNameInput')\n    private readonly categoryNameInputElement: ElementRef;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        this.categoryNameControl.valueChanges\n            .pipe(\n                map((name: string) => name.trim()),\n                tap((name: string) => {\n                    this._typing = true;\n                    if (name) {\n                        this._existingCategoriesLoading = true;\n                        this._existingCategoriesPanelVisible = true;\n                    }\n                    this.cancelExistingCategoriesLoading$.next();\n                }),\n                debounce((name: string) => (name ? timer(300) : EMPTY)),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((name: string) => this.onNameControlValueChange(name));\n\n        this.categoryNameControl.statusChanges\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.setCategoryNameControlErrorMessageKey());\n\n        this.setCategoryNameControlErrorMessageKey();\n\n        this.noCategoriesMsg = this.isCRUDMode ? 'CATEGORIES_MANAGEMENT.NO_CATEGORIES_CREATED' : 'CATEGORIES_MANAGEMENT.NO_CATEGORIES_ASSIGNED';\n        this.removeCategoryTitle = this.isCRUDMode ? 'CATEGORIES_MANAGEMENT.DELETE_CATEGORY' : 'CATEGORIES_MANAGEMENT.UNASSIGN_CATEGORY';\n        this.existingCategoriesMsg = this.isCRUDMode ? 'CATEGORIES_MANAGEMENT.EXISTING_CATEGORIES' : 'CATEGORIES_MANAGEMENT.SELECT_EXISTING_CATEGORY';\n\n        if (!this.isCRUDMode) {\n            this._categoryNameControl.removeValidators(Validators.required);\n            this.categories.forEach((category) => this.initialCategories.push(category));\n            if (this.classifiableChanged) {\n                this.classifiableChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n                    this.categories = [];\n                    this.categoryNameControlVisible = false;\n                    this.categoryNameControlVisibleChange.emit(false);\n                });\n            }\n        }\n    }\n\n    ngOnDestroy() {\n        this.cancelExistingCategoriesLoading$.next();\n        this.cancelExistingCategoriesLoading$.complete();\n    }\n\n    get categoryNameControl(): FormControl<string> {\n        return this._categoryNameControl;\n    }\n\n    /*\n     * Returns `true` if categories empty and category panel non editable state, otherwise `false`\n     */\n    get showEmptyCategoryMessage(): boolean {\n        return this.categories.length === 0 && !this.categoryNameControlVisible;\n    }\n\n    get existingCategories(): Category[] {\n        return this._existingCategories;\n    }\n\n    get categoryNameErrorMessageKey(): string {\n        return this._categoryNameErrorMessageKey;\n    }\n\n    get existingCategoriesLoading(): boolean {\n        return this._existingCategoriesLoading;\n    }\n\n    get typing(): boolean {\n        return this._typing;\n    }\n\n    get existingCategoriesPanelVisible(): boolean {\n        return this._existingCategoriesPanelVisible;\n    }\n\n    get isCRUDMode(): boolean {\n        return this.managementMode === CategoriesManagementMode.CRUD;\n    }\n\n    /**\n     * Adds category that has been typed to a categoryNameControl and hides it afterwards.\n     */\n    addCategory() {\n        if (this.isCRUDMode && !this._typing && !this.categoryNameControl.invalid) {\n            const newCatName = this.categoryNameControl.value.trim();\n            const newCat = new Category({ id: newCatName, name: newCatName });\n            this.categories.push(newCat);\n            this.clearCategoryNameInput();\n            this._existingCategories = null;\n            this.categoriesChange.emit(this.categories);\n        }\n    }\n\n    /**\n     * Adds existing category to categories list and removes it from existing categories list.\n     *\n     * @param category - selection list change containing selected category\n     */\n    addCategoryToAssign(category: Category) {\n        if (!(this.isCRUDMode || (!this.multiSelect && this.categories.length > 0))) {\n            const selectedCategory: Category = category;\n            this.categories.push(selectedCategory);\n            this._existingCategories.splice(this._existingCategories.indexOf(selectedCategory), 1);\n            this.categoryNameControl.updateValueAndValidity();\n            this.categoriesChange.emit(this.categories);\n        }\n    }\n\n    /**\n     * Removes the category from categories list and adds it to existing categories list in ASSIGN mode.\n     *\n     * @param category - category to remove\n     */\n    removeCategory(category: Category) {\n        this.categories.splice(this.categories.indexOf(category), 1);\n        if (!this.isCRUDMode && !!this._existingCategories && !this.initialCategories.some((cat) => cat.id === category.id)) {\n            this._existingCategories.push(category);\n            this.sortCategoriesList(this._existingCategories);\n        }\n        this.categoryNameControl.updateValueAndValidity({\n            emitEvent: false\n        });\n        this.categoriesChange.emit(this.categories);\n    }\n\n    private onNameControlValueChange(name: string) {\n        this.categoryNameControl.markAsTouched();\n        if (name) {\n            if (this.isCRUDMode) {\n                this.getChildrenCategories(name);\n            } else {\n                this.searchForExistingCategories(name);\n            }\n        } else {\n            this._existingCategories = null;\n        }\n    }\n\n    private searchForExistingCategories(searchTerm: string) {\n        this.categoryService.searchCategories(searchTerm, 0, this.existingCategoriesListLimit).subscribe((existingCategoriesResult) => {\n            this._existingCategories = existingCategoriesResult.list.entries.map((rowEntry) => {\n                const existingCat = new Category();\n                existingCat.id = rowEntry.entry.id;\n                const path = rowEntry.entry.path.name.split('/').splice(3).join('/');\n                existingCat.name = path ? `${path}/${rowEntry.entry.name}` : rowEntry.entry.name;\n                return existingCat;\n            });\n            this._existingCategories = this._existingCategories.filter(\n                (existingCat) => this.categories.find((category) => existingCat.id === category.id) === undefined\n            );\n            this.sortCategoriesList(this._existingCategories);\n            this._existingCategoriesLoading = false;\n            this._typing = false;\n            this.existingCategoryLoaded$.next();\n        });\n    }\n\n    private getChildrenCategories(searchTerm: string) {\n        this.categoryService.getSubcategories(this.parentId).subscribe((childrenCategories) => {\n            this._existingCategories = childrenCategories.list.entries.map((categoryEntry) => categoryEntry.entry);\n            this._existingCategories = this._existingCategories.filter((existingCat) =>\n                existingCat.name.toLowerCase().includes(searchTerm.toLowerCase())\n            );\n            this.sortCategoriesList(this._existingCategories);\n            this._existingCategoriesLoading = false;\n            this._typing = false;\n            this.existingCategoryLoaded$.next();\n        });\n    }\n\n    private validateIfNotAlreadyAdded(nameControl: FormControl<string>): CategoryNameControlErrors | null {\n        return this.categories?.some((category) => this.compareCategories(category, nameControl.value)) && this.isCRUDMode\n            ? { duplicatedCategory: true }\n            : null;\n    }\n\n    private validateIfNotAlreadyCreated(nameControl: FormControl<string>): Observable<CategoryNameControlErrors | null> {\n        return this.existingCategoryLoaded$.pipe(\n            map<void, CategoryNameControlErrors | null>(() =>\n                this.existingCategories.some((category) => this.compareCategories(category, nameControl.value)) && this.isCRUDMode\n                    ? { duplicatedExistingCategory: true }\n                    : null\n            ),\n            first()\n        );\n    }\n\n    private compareCategories(category1?: Category, cat2Name?: string): boolean {\n        return category1?.name.trim().toUpperCase() === cat2Name?.trim().toUpperCase();\n    }\n\n    private validateEmptyCategory(categoryNameControl: FormControl<string>): CategoryNameControlErrors | null {\n        return categoryNameControl.value.length && !categoryNameControl.value.trim() ? { emptyCategory: true } : null;\n    }\n\n    private validateSpecialCharacters(categoryNameControl: FormControl<string>): CategoryNameControlErrors | null {\n        const specialSymbolsRegex = /[:\"\\\\|<>/?*]/;\n        return categoryNameControl.value.length && specialSymbolsRegex.test(categoryNameControl.value) ? { specialCharacters: true } : null;\n    }\n\n    private validateEndsWithDot(categoryNameControl: FormControl<string>): CategoryNameControlErrors | null {\n        return categoryNameControl.value.trim().endsWith('.') ? { endsWithDot: true } : null;\n    }\n\n    private setCategoryNameControlErrorMessageKey() {\n        this._categoryNameErrorMessageKey = this.categoryNameControl.invalid\n            ? `CATEGORIES_MANAGEMENT.ERRORS.${this.nameErrorMessagesByErrors.get(\n                  Object.keys(this.categoryNameControl.errors)[0] as keyof CategoryNameControlErrors\n              )}`\n            : '';\n    }\n\n    private sortCategoriesList(categoriesList: Category[]) {\n        categoriesList.sort((category1, category2) => category1.name.localeCompare(category2.name));\n    }\n\n    private clearCategoryNameInput() {\n        this.categoryNameControl.setValue('');\n        this.categoryNameControl.markAsUntouched();\n    }\n}\n","<div class=\"adf-categories-management\">\n    @if (categoryNameControlVisible) {\n        <mat-form-field class=\"adf-category-name-field\">\n            <mat-label>{{ 'CATEGORIES_MANAGEMENT.CATEGORIES_SEARCH_PLACEHOLDER' | translate }}</mat-label>\n            <input\n                matInput\n                #categoryNameInput\n                autocomplete=\"off\"\n                [formControl]=\"categoryNameControl\"\n                (keyup.enter)=\"addCategory()\"\n                adf-auto-focus\n            />\n            <mat-error \n                *ngIf=\"categoryNameControl.invalid && categoryNameControl.touched\"\n                data-automation-id=\"categories-error-message\">\n                {{ categoryNameErrorMessageKey | translate }}\n            </mat-error>\n        </mat-form-field>\n    }\n    <div class=\"adf-categories-list\" *ngIf=\"categories?.length > 0\" [class.adf-categories-list-fixed]=\"!categoryNameControlVisible\">\n        <span\n            *ngFor=\"let category of categories\"\n            [class.adf-categories-padded]=\"!isCRUDMode\"\n            class=\"adf-assigned-categories\">\n            {{ category.name }}\n            <button\n                data-automation-id=\"categories-remove-category-button\"\n                mat-icon-button\n                (click)=\"removeCategory(category)\"\n                [attr.title]=\"removeCategoryTitle | translate\"\n                [disabled]=\"disableRemoval\">\n                <mat-icon adf-icon=\"remove\" />\n            </button>\n        </span>\n    </div>\n    <p *ngIf=\"showEmptyCategoryMessage\" class=\"adf-no-categories-message\">\n        {{ noCategoriesMsg | translate }}\n    </p>\n</div>\n<div class=\"adf-existing-categories-panel\" *ngIf=\"existingCategoriesPanelVisible\">\n    <ng-container *ngIf=\"isCRUDMode && (!existingCategoriesLoading || existingCategories)\">\n        <span class=\"adf-create-category-label\"\n            (click)=\"addCategory()\"\n            tabindex=\"0\"\n            role=\"button\"\n            (keyup.enter)=\"addCategory()\"\n            [hidden]=\"categoryNameControl.invalid || typing\">\n            {{ 'CATEGORIES_MANAGEMENT.GENERIC_CREATE' | translate : { name: categoryNameControl.value } }}\n        </span>\n    </ng-container>\n    <div *ngIf=\"categoryNameControlVisible\" class=\"adf-categories-list\">\n        <ng-container *ngIf=\"!existingCategoriesLoading && existingCategories\">\n            <p class=\"adf-existing-categories-label\">\n                {{ existingCategoriesMsg | translate }}\n            </p>\n            <mat-list\n                [disabled]=\"isCRUDMode || !multiSelect && categories.length > 0\"\n                class=\"adf-categories-management-list\">\n                <mat-list-item\n                    *ngFor=\"let category of existingCategories\"\n                    class=\"adf-category\"\n                    (click)='addCategoryToAssign(category)'>\n                        {{ category.name }}\n                </mat-list-item>\n                <p *ngIf=\"!existingCategories?.length && !existingCategoriesLoading\"\n                   data-automation-id=\"no-categories-message\">\n                    {{ 'CATEGORIES_MANAGEMENT.NO_EXISTING_CATEGORIES' | translate }}\n                </p>\n            </mat-list>\n        </ng-container>\n        <mat-spinner\n            *ngIf=\"existingCategoriesLoading\"\n            [diameter]=\"50\"\n            class=\"adf-categories-management-spinner\"\n            [attr.aria-label]=\"'CATEGORIES_MANAGEMENT.LOADING' | translate\" />\n    </div>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { CategoriesManagementComponent } from './categories-management/categories-management.component';\n\n/** @deprecated use `CategoriesManagementComponent` standalone component instead */\n@NgModule({\n    imports: [CategoriesManagementComponent],\n    exports: [CategoriesManagementComponent]\n})\nexport class CategoriesModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './services/category.service';\nexport * from './services/category-tree-datasource.service';\nexport * from './models/category-node.interface';\nexport * from './category.module';\nexport * from './categories-management/categories-management.component';\nexport * from './categories-management/categories-management-mode';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { Category } from '@alfresco/js-api';\nimport { CategoriesManagementComponent, CategoriesManagementMode } from '../../category';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nexport interface CategorySelectorDialogOptions {\n    select: Subject<Category[]>;\n    multiSelect?: boolean;\n}\n\n@Component({\n    selector: 'adf-category-selector-dialog',\n    imports: [CommonModule, MatDialogModule, TranslatePipe, CategoriesManagementComponent, MatButtonModule],\n    templateUrl: './category-selector.dialog.html',\n    styleUrls: ['./category-selector.dialog.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class CategorySelectorDialogComponent implements OnInit {\n    private readonly dialog = inject<MatDialogRef<CategorySelectorDialogComponent, boolean>>(MatDialogRef);\n    private readonly options = inject<CategorySelectorDialogOptions>(MAT_DIALOG_DATA);\n\n    categories: Category[] = [];\n    categoriesManagementMode = CategoriesManagementMode.ASSIGN;\n    multiSelect = true;\n\n    ngOnInit() {\n        this.multiSelect = this.options.multiSelect ?? true;\n    }\n\n    selectCategories() {\n        this.options.select.next(this.categories);\n        this.dialog.close(true);\n    }\n}\n","<h1 mat-dialog-title>\n  {{ 'CATEGORIES_MANAGEMENT.SELECT_EXISTING_CATEGORY' | translate }}\n</h1>\n\n<mat-dialog-content class=\"adf-dialog-content\">\n    <adf-categories-management\n            (categoriesChange)=\"categories = $event\"\n            [categoryNameControlVisible]=\"true\"\n            [managementMode]=\"categoriesManagementMode\"\n            [multiSelect]=\"multiSelect\" />\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n    <button\n            data-automation-id=\"category-selector-dialog-cancel-button\"\n            mat-button\n            mat-dialog-close>\n        {{ 'NODE_SELECTOR.CANCEL' | translate }}\n    </button>\n    <button\n            (click)=\"selectCategories()\"\n            [disabled]=\"!categories.length\"\n            color=\"primary\"\n            data-automation-id=\"category-selector-dialog-select-button\"\n            mat-button>\n        {{ 'NODE_SELECTOR.CHOOSE' | translate }}\n    </button>\n</mat-dialog-actions>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { from, Observable } from 'rxjs';\nimport { Component, DestroyRef, EventEmitter, inject, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport {\n    AbstractControl,\n    FormsModule,\n    ReactiveFormsModule,\n    UntypedFormBuilder,\n    UntypedFormControl,\n    UntypedFormGroup,\n    ValidationErrors,\n    Validators\n} from '@angular/forms';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { QueriesApi, SiteBodyCreate, SiteEntry, SitePaging } from '@alfresco/js-api';\nimport { NotificationService } from '@alfresco/adf-core';\nimport { debounceTime, finalize, map, mergeMap, take } from 'rxjs/operators';\nimport { SitesService } from '../../common/services/sites.service';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { AutoFocusDirective } from '../../directives';\nimport { MatRadioChange, MatRadioModule } from '@angular/material/radio';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AlfrescoApiService } from '../../services';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\ninterface VisibilityOption {\n    value: string;\n    label: string;\n    disabled: boolean;\n}\n\n@Component({\n    selector: 'adf-library-dialog',\n    imports: [\n        CommonModule,\n        MatDialogModule,\n        TranslatePipe,\n        ReactiveFormsModule,\n        MatFormFieldModule,\n        MatInputModule,\n        AutoFocusDirective,\n        MatRadioModule,\n        FormsModule,\n        MatButtonModule\n    ],\n    styleUrls: ['./library.dialog.scss'],\n    templateUrl: './library.dialog.html',\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-library-dialog' }\n})\nexport class LibraryDialogComponent implements OnInit {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n    private readonly sitesService = inject(SitesService);\n    private readonly formBuilder = inject(UntypedFormBuilder);\n    private readonly dialog = inject<MatDialogRef<LibraryDialogComponent>>(MatDialogRef);\n    private readonly notificationService = inject(NotificationService);\n\n    /** Emitted when an error occurs. */\n    @Output()\n    error = new EventEmitter<any>();\n\n    /**\n     * Emitted when the new library is created successfully. The\n     * event parameter is a SiteEntry object with the details of the\n     * newly-created library.\n     */\n    @Output()\n    success = new EventEmitter<SiteEntry>();\n\n    createTitle = 'LIBRARY.DIALOG.CREATE_TITLE';\n    libraryTitleExists = false;\n    form: UntypedFormGroup;\n    visibilityOption: string;\n    visibilityOptions: VisibilityOption[] = [\n        { value: 'PUBLIC', label: 'LIBRARY.VISIBILITY.PUBLIC', disabled: false },\n        { value: 'PRIVATE', label: 'LIBRARY.VISIBILITY.PRIVATE', disabled: false },\n        {\n            value: 'MODERATED',\n            label: 'LIBRARY.VISIBILITY.MODERATED',\n            disabled: false\n        }\n    ];\n    disableCreateButton = false;\n\n    _queriesApi: QueriesApi;\n    get queriesApi(): QueriesApi {\n        this._queriesApi = this._queriesApi ?? new QueriesApi(this.alfrescoApiService.getInstance());\n        return this._queriesApi;\n    }\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit() {\n        const validators = {\n            id: [Validators.required, Validators.maxLength(72), this.forbidSpecialCharacters],\n            title: [Validators.required, this.forbidOnlySpaces, this.minLengthTrimmed, Validators.maxLength(256)],\n            description: [Validators.maxLength(512)]\n        };\n\n        this.form = this.formBuilder.group({\n            title: [null, validators.title],\n            id: [null, validators.id, this.createSiteIdValidator()],\n            description: ['', validators.description]\n        });\n\n        this.visibilityOption = this.visibilityOptions[0].value;\n\n        this.form.controls['title'].valueChanges\n            .pipe(take(1), takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.form.controls['title'].markAsTouched());\n\n        this.form.controls['title'].valueChanges\n            .pipe(\n                debounceTime(500),\n                mergeMap((title) => from(this.checkLibraryNameExists(title)).pipe(map(() => title))),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((title: string) => {\n                if (!this.form.controls['id'].dirty && this.canGenerateId(title)) {\n                    this.form.patchValue({ id: this.sanitize(title.trim()) });\n                    this.form.controls['id'].markAsTouched();\n                }\n            });\n    }\n\n    get title(): string {\n        const { title } = this.form.value;\n\n        return (title || '').trim();\n    }\n\n    get id(): string {\n        const { id } = this.form.value;\n\n        return (id || '').trim();\n    }\n\n    get description(): string {\n        const { description } = this.form.value;\n\n        return (description || '').trim();\n    }\n\n    get visibility(): string {\n        return this.visibilityOption || '';\n    }\n\n    submit() {\n        const { form, dialog } = this;\n\n        if (!form.valid) {\n            return;\n        }\n\n        this.disableCreateButton = true;\n        this.create()\n            .pipe(finalize(() => (this.disableCreateButton = false)))\n            .subscribe({\n                next: (node: SiteEntry) => {\n                    this.success.emit(node);\n                    dialog.close(node);\n                },\n                error: (error) => this.handleError(error)\n            });\n    }\n\n    visibilityChangeHandler(event: MatRadioChange) {\n        this.visibilityOption = event.value;\n    }\n\n    private create(): Observable<SiteEntry> {\n        const { title, id, description, visibility } = this;\n        const siteBody = {\n            id,\n            title,\n            description,\n            visibility\n        } as SiteBodyCreate;\n\n        return this.sitesService.createSite(siteBody);\n    }\n\n    private sanitize(input: string) {\n        return input.replace(/[\\s\\s]+/g, '-').replace(/[^A-Za-z0-9-]/g, '');\n    }\n\n    private canGenerateId(title) {\n        return Boolean(title.replace(/[^A-Za-z0-9-]/g, '').length);\n    }\n\n    private handleError(error: any): any {\n        const errorMessage = 'CORE.MESSAGES.ERRORS.GENERIC';\n\n        try {\n            const {\n                error: { statusCode }\n            } = JSON.parse(error.message);\n\n            if (statusCode === 409) {\n                this.form.controls['id'].setErrors({\n                    message: 'LIBRARY.ERRORS.CONFLICT'\n                });\n            } else {\n                this.notificationService.showError(errorMessage);\n            }\n        } catch {\n            this.notificationService.showError(errorMessage);\n        }\n\n        return error;\n    }\n\n    private async checkLibraryNameExists(libraryTitle: string) {\n        const entries = (await this.findLibraryByTitle(libraryTitle)).list.entries;\n\n        if (entries.length) {\n            this.libraryTitleExists = entries[0].entry.title.toLowerCase() === libraryTitle.toLowerCase();\n        } else {\n            this.libraryTitleExists = false;\n        }\n    }\n\n    private async findLibraryByTitle(libraryTitle: string): Promise<SitePaging> {\n        try {\n            return await this.queriesApi.findSites(libraryTitle, {\n                maxItems: 1,\n                fields: ['title']\n            });\n        } catch {\n            return new SitePaging({ list: { entries: [], pagination: {} } });\n        }\n    }\n\n    private forbidSpecialCharacters({ value }: UntypedFormControl): ValidationErrors | null {\n        if (value === null || value.length === 0) {\n            return null;\n        }\n\n        const validCharacters: RegExp = /[^A-Za-z0-9-]/;\n        const isValid = !validCharacters.test(value);\n\n        return isValid\n            ? null\n            : {\n                  message: 'LIBRARY.ERRORS.ILLEGAL_CHARACTERS'\n              };\n    }\n\n    private forbidOnlySpaces({ value }: UntypedFormControl): ValidationErrors | null {\n        if (value === null || value.length === 0) {\n            return null;\n        }\n\n        const isValid = !!value.trim();\n\n        return isValid\n            ? null\n            : {\n                  message: 'LIBRARY.ERRORS.ONLY_SPACES'\n              };\n    }\n\n    private minLengthTrimmed({ value }: UntypedFormControl): ValidationErrors | null {\n        if (value === null || value.length === 0) {\n            return null;\n        }\n\n        const isValid = value.trim().length !== 1;\n\n        return isValid\n            ? null\n            : {\n                  message: 'LIBRARY.ERRORS.TITLE_TOO_SHORT'\n              };\n    }\n\n    private createSiteIdValidator(): (control: AbstractControl) => Promise<ValidationErrors | null> {\n        let timer;\n\n        return (control: AbstractControl) => {\n            if (timer) {\n                clearTimeout(timer);\n            }\n            return new Promise((resolve) => {\n                timer = setTimeout(() => {\n                    this.checkSite(control.value, resolve);\n                }, 300);\n            });\n        };\n    }\n\n    private checkSite(siteId: string, resolve: (result: ValidationErrors | null) => void): void {\n        this.sitesService.getSite(siteId).subscribe({\n            next: () => resolve({ message: 'LIBRARY.ERRORS.EXISTENT_SITE' }),\n            error: () => resolve(null)\n        });\n    }\n}\n","<h2 mat-dialog-title>{{ createTitle | translate }}</h2>\n\n<mat-dialog-content class=\"adf-library-dialog-content\">\n  <form novalidate [formGroup]=\"form\" (submit)=\"submit()\">\n    <mat-form-field class=\"adf-library-dialog-form-field\">\n      <mat-label>{{ 'LIBRARY.DIALOG.FORM.NAME' | translate }}</mat-label>\n      <input\n        required\n        matInput\n        formControlName=\"title\"\n        autocomplete=\"off\"\n        adf-auto-focus\n      />\n      @if (libraryTitleExists) {\n        <mat-hint>{{ 'LIBRARY.HINTS.SITE_TITLE_EXISTS' | translate }}</mat-hint>\n      }\n      @if (form.controls['title'].errors?.maxlength) {\n        <mat-error>{{ 'LIBRARY.ERRORS.TITLE_TOO_LONG' | translate }}</mat-error>\n      }\n      @else if (form.controls['title'].errors?.message) {\n        <mat-error>{{ form.controls['title'].errors?.message | translate }}</mat-error>\n      }\n      @else if (form.controls['title'].errors?.required) {\n        <mat-error>{{ 'LIBRARY.ERRORS.NAME_REQUIRED' | translate }}</mat-error>\n      }\n    </mat-form-field>\n\n    <mat-form-field class=\"adf-library-dialog-form-field\">\n      <mat-label>{{ 'LIBRARY.DIALOG.FORM.SITE_ID' | translate }}</mat-label>\n      <input\n        required\n        matInput\n        formControlName=\"id\"\n        autocomplete=\"off\"\n      />\n\n      @if (form.controls['id'].errors?.message) {\n        <mat-error>{{ form.controls['id'].errors?.message | translate }}</mat-error>\n      }\n      @else if (form.controls['id'].errors?.maxlength) {\n        <mat-error>{{ 'LIBRARY.ERRORS.ID_TOO_LONG' | translate }}</mat-error>\n      }\n      @else if (form.controls['id'].errors?.required) {\n        <mat-error>{{ 'LIBRARY.ERRORS.ID_REQUIRED' | translate }}</mat-error>\n      }\n    </mat-form-field>\n\n    <mat-form-field class=\"adf-library-dialog-form-field adf-library-dialog-form-field-description\">\n      <mat-label>{{ 'LIBRARY.DIALOG.FORM.DESCRIPTION' | translate }}</mat-label>\n      <textarea\n        matInput\n        rows=\"3\"\n        formControlName=\"description\"\n      ></textarea>\n      @if (form.controls['description'].errors?.maxlength) {\n        <mat-error>{{ 'LIBRARY.ERRORS.DESCRIPTION_TOO_LONG' | translate }}</mat-error>\n      }\n    </mat-form-field>\n\n    <span id=\"visibility-label\" class=\"adf-library-dialog-visibility-label\">{{ 'LIBRARY.DIALOG.FORM.VISIBILITY' | translate }}</span>\n\n    <mat-radio-group\n      class=\"adf-library-dialog-radio-group\"\n      [ngModelOptions]=\"{ standalone: true }\"\n      [(ngModel)]=\"visibilityOption\"\n      (change)=\"visibilityChangeHandler($event)\"\n      aria-labelledby=\"visibility-label\"\n    >\n      @for (option of visibilityOptions; track option.value) {\n        <mat-radio-button\n          color=\"primary\"\n          class=\"adf-library-dialog-radio-group-button\"\n          [disabled]=\"option.disabled\"\n          [attr.data-automation-id]=\"option.value\"\n          [value]=\"option.value\"\n          [checked]=\"visibilityOption === option.value\"\n        >\n          {{ option.label | translate }}\n        </mat-radio-button>\n      }\n    </mat-radio-group>\n  </form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"adf-action-buttons\">\n  <button class=\"adf-action-button\" mat-button mat-dialog-close data-automation-id=\"cancel-library-id\">\n    {{ 'LIBRARY.DIALOG.CANCEL' | translate }}\n  </button>\n\n  <button\n    color=\"primary\"\n    class=\"adf-action-button\"\n    mat-button\n    (click)=\"submit()\"\n    [disabled]=\"!form.valid || disableCreateButton\"\n    data-automation-id=\"create-library-id\"\n  >\n    {{ 'LIBRARY.DIALOG.CREATE' | translate }}\n  </button>\n</mat-dialog-actions>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { FolderDialogComponent } from './folder/folder.dialog';\nimport { NodeLockDialogComponent } from './node-lock/node-lock.dialog';\nimport { LibraryDialogComponent } from './library/library.dialog';\nimport { CategorySelectorDialogComponent } from './category-selector/category-selector.dialog';\nimport { DownloadZipDialogComponent } from './download-zip/download-zip.dialog';\n\n/** @deprecated use standalone component imports instead */\nexport const CONTENT_DIALOG_DIRECTIVES = [\n    DownloadZipDialogComponent,\n    FolderDialogComponent,\n    NodeLockDialogComponent,\n    LibraryDialogComponent,\n    CategorySelectorDialogComponent\n];\n\n/** @deprecated use standalone component imports instead */\n@NgModule({\n    imports: [...CONTENT_DIALOG_DIRECTIVES],\n    exports: [...CONTENT_DIALOG_DIRECTIVES]\n})\nexport class DialogModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { DownloadZipDialogComponent } from './download-zip.dialog';\n\n/** @deprecated use DownloadZipDialogComponent instead */\n@NgModule({\n    declarations: [],\n    imports: [DownloadZipDialogComponent],\n    exports: [DownloadZipDialogComponent]\n})\nexport class DownloadZipDialogModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './folder/folder.dialog';\nexport * from './node-lock/node-lock.dialog';\nexport * from './category-selector/category-selector.dialog';\n\nexport * from './dialog.module';\nexport * from './library/library.dialog';\n\nexport * from './download-zip/download-zip.dialog';\nexport * from './download-zip/download-zip.dialog.module';\n\nexport * from './folder/folder-name.validators';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { CardViewDateItemModel, CardViewItemMatchValidator, CardViewTextItemModel, FileSizePipe } from '@alfresco/adf-core';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class BasicPropertiesService {\n    private readonly injector = inject(Injector);\n\n    getProperties(node: Node) {\n        const sizeInBytes = node.content ? node.content.sizeInBytes : '';\n        const mimeTypeName = node.content ? node.content.mimeTypeName : '';\n        const author = node.properties ? node.properties['cm:author'] : '';\n        const description = node.properties ? node.properties['cm:description'] : '';\n        const title = node.properties ? node.properties['cm:title'] : '';\n\n        return [\n            new CardViewTextItemModel({\n                label: 'CORE.METADATA.BASIC.NAME',\n                value: node.name,\n                key: 'properties.cm:name',\n                editable: true,\n                validators: [new CardViewItemMatchValidator('[\\\\/\\\\*\\\\\\\\\"\\\\\\\\:|?<>]')]\n            }),\n            new CardViewTextItemModel({\n                label: 'CORE.METADATA.BASIC.TITLE',\n                value: title,\n                key: 'properties.cm:title',\n                editable: true\n            }),\n            new CardViewTextItemModel({\n                label: 'CORE.METADATA.BASIC.CREATOR',\n                value: node.createdByUser.displayName,\n                key: 'createdByUser.displayName',\n                editable: false\n            }),\n            new CardViewDateItemModel({\n                label: 'CORE.METADATA.BASIC.CREATED_DATE',\n                value: node.createdAt,\n                key: 'createdAt',\n                editable: false,\n                format: 'mediumDate'\n            }),\n            new CardViewTextItemModel({\n                label: 'CORE.METADATA.BASIC.SIZE',\n                value: sizeInBytes,\n                key: 'content.sizeInBytes',\n                pipes: [{ pipe: runInInjectionContext(this.injector, () => new FileSizePipe()) }],\n                editable: false\n            }),\n            new CardViewTextItemModel({\n                label: 'CORE.METADATA.BASIC.MODIFIER',\n                value: node.modifiedByUser.displayName,\n                key: 'modifiedByUser.displayName',\n                editable: false\n            }),\n            new CardViewDateItemModel({\n                label: 'CORE.METADATA.BASIC.MODIFIED_DATE',\n                value: node.modifiedAt,\n                key: 'modifiedAt',\n                editable: false,\n                format: 'mediumDate'\n            }),\n            new CardViewTextItemModel({\n                label: 'CORE.METADATA.BASIC.MIMETYPE',\n                value: mimeTypeName,\n                key: 'content.mimeTypeName',\n                editable: false\n            }),\n            new CardViewTextItemModel({\n                label: 'CORE.METADATA.BASIC.AUTHOR',\n                value: author,\n                key: 'properties.cm:author',\n                editable: true\n            }),\n            new CardViewTextItemModel({\n                label: 'CORE.METADATA.BASIC.DESCRIPTION',\n                value: description,\n                key: 'properties.cm:description',\n                multiline: true,\n                editable: true\n            })\n        ];\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'multiValue'\n})\nexport class MultiValuePipe implements PipeTransform {\n    static DEFAULT_SEPARATOR = ', ';\n\n    transform(values: any | any[], valueSeparator: string = MultiValuePipe.DEFAULT_SEPARATOR): string {\n        if (values && values instanceof Array) {\n            return values.join(valueSeparator);\n        }\n\n        return values;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';\nimport {\n    AppConfigService,\n    CardViewBoolItemModel,\n    CardViewDateItemModel,\n    CardViewDatetimeItemModel,\n    CardViewFloatItemModel,\n    CardViewIntItemModel,\n    CardViewItem,\n    CardViewItemProperties,\n    CardViewLongItemModel,\n    CardViewSelectItemModel,\n    CardViewTextItemModel,\n    DecimalNumberPipe,\n    LogService\n} from '@alfresco/adf-core';\nimport { CardViewGroup, OrganisedPropertyGroup, Property } from '../interfaces/content-metadata.interfaces';\nimport { of } from 'rxjs';\nimport { Constraint, Definition, Property as PropertyBase } from '@alfresco/js-api';\nimport { MultiValuePipe } from './pipes/multi-value.pipe';\n\nconst D_TEXT = 'd:text';\nconst D_MLTEXT = 'd:mltext';\nconst D_DATE = 'd:date';\nconst D_DATETIME = 'd:datetime';\nconst D_INT = 'd:int';\nconst D_LONG = 'd:long';\nconst D_FLOAT = 'd:float';\nconst D_DOUBLE = 'd:double';\nconst D_BOOLEAN = 'd:boolean';\n\nexport const RECOGNISED_ECM_TYPES = [D_TEXT, D_MLTEXT, D_DATE, D_DATETIME, D_INT, D_LONG, D_FLOAT, D_DOUBLE, D_BOOLEAN];\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PropertyGroupTranslatorService {\n    private readonly appConfig = inject(AppConfigService);\n    private readonly logService = inject(LogService);\n\n    valueSeparator: string;\n\n    private readonly injector = inject(Injector);\n\n    constructor() {\n        this.valueSeparator = this.appConfig.get<string>('content-metadata.multi-value-pipe-separator');\n    }\n\n    public translateToCardViewGroups(propertyGroups: OrganisedPropertyGroup[], propertyValues, definition: Definition): CardViewGroup[] {\n        return propertyGroups.map((propertyGroup) => {\n            const translatedPropertyGroup: any = Object.assign({}, propertyGroup);\n            translatedPropertyGroup.properties = this.translateArray(propertyGroup.properties, propertyValues, definition);\n            translatedPropertyGroup.editable = translatedPropertyGroup.properties.some((property) => property.editable);\n            return translatedPropertyGroup;\n        });\n    }\n\n    public translateProperty(property: PropertyBase, startValue?: any, allowEditing: boolean = false): CardViewItem {\n        this.checkECMTypeValidity(property.dataType);\n\n        const prefix = 'properties.';\n\n        const propertyDefinition: CardViewItemProperties = {\n            label: property.title || property.id,\n            value: startValue ? startValue : property.defaultValue,\n            key: `${prefix}${property.id}`,\n            default: property.defaultValue,\n            editable: property.isProtected ? false : allowEditing,\n            constraints: property?.constraints\n        };\n\n        return this.transform(propertyDefinition, property.dataType, property.isMultiValued);\n    }\n\n    private translateArray(properties: Property[], propertyValues: any, definition: Definition): CardViewItem[] {\n        return properties.map((property) => this.translate(property, propertyValues, this.getPropertyConstraints(property.name, definition)));\n    }\n\n    private translate(property: Property, propertyValues: any, constraints: Constraint[]): CardViewItem {\n        let propertyValue: any;\n        if (propertyValues && !this.isEmpty(propertyValues[property.name])) {\n            propertyValue = propertyValues[property.name];\n        }\n\n        this.checkECMTypeValidity(property.dataType);\n\n        const prefix = 'properties.';\n\n        const propertyDefinition: CardViewItemProperties = {\n            label: property.title || property.name,\n            value: propertyValue,\n            key: `${prefix}${property.name}`,\n            default: property.defaultValue,\n            editable: property.protected ? false : property.editable !== undefined ? property.editable : true,\n            constraints\n        };\n\n        return this.transform(propertyDefinition, property.dataType, property.multiValued);\n    }\n\n    private transform(propertyDefinition: CardViewItemProperties, dataType: string, isMultiValued: boolean): CardViewItem {\n        let cardViewItemProperty: CardViewItem;\n\n        if (this.isListOfValues(propertyDefinition.constraints)) {\n            const options = propertyDefinition.constraints[0].parameters.allowedValues.map((value) => ({ key: value, label: value }));\n            const properties = Object.assign(propertyDefinition, { options$: of(options) });\n\n            cardViewItemProperty = new CardViewSelectItemModel(properties);\n        } else {\n            switch (dataType) {\n                case D_MLTEXT:\n                    cardViewItemProperty = new CardViewTextItemModel(\n                        Object.assign(propertyDefinition, {\n                            multiline: true\n                        })\n                    );\n                    break;\n\n                case D_INT:\n                    cardViewItemProperty = new CardViewIntItemModel(\n                        Object.assign(propertyDefinition, {\n                            multivalued: isMultiValued,\n                            pipes: [{ pipe: new MultiValuePipe(), params: [this.valueSeparator] }]\n                        })\n                    );\n                    break;\n\n                case D_LONG:\n                    cardViewItemProperty = new CardViewLongItemModel(\n                        Object.assign(propertyDefinition, {\n                            multivalued: isMultiValued,\n                            pipes: [{ pipe: new MultiValuePipe(), params: [this.valueSeparator] }]\n                        })\n                    );\n                    break;\n\n                case D_FLOAT:\n                case D_DOUBLE:\n                    cardViewItemProperty = new CardViewFloatItemModel(\n                        Object.assign(propertyDefinition, {\n                            multivalued: isMultiValued,\n                            pipes: [{ pipe: this.getDecimalNumberPipe() }, { pipe: new MultiValuePipe(), params: [this.valueSeparator] }]\n                        })\n                    );\n                    break;\n\n                case D_DATE:\n                    cardViewItemProperty = new CardViewDateItemModel(\n                        Object.assign(propertyDefinition, {\n                            multivalued: isMultiValued,\n                            pipes: [{ pipe: new MultiValuePipe(), params: [this.valueSeparator] }]\n                        })\n                    );\n                    break;\n\n                case D_DATETIME:\n                    cardViewItemProperty = new CardViewDatetimeItemModel(\n                        Object.assign(propertyDefinition, {\n                            multivalued: isMultiValued,\n                            pipes: [{ pipe: new MultiValuePipe(), params: [this.valueSeparator] }]\n                        })\n                    );\n                    break;\n\n                case D_BOOLEAN:\n                    cardViewItemProperty = new CardViewBoolItemModel(propertyDefinition);\n                    break;\n\n                case D_TEXT:\n                default:\n                    cardViewItemProperty = new CardViewTextItemModel(\n                        Object.assign(propertyDefinition, {\n                            multivalued: isMultiValued,\n                            multiline: isMultiValued,\n                            pipes: [{ pipe: new MultiValuePipe(), params: [this.valueSeparator] }]\n                        })\n                    );\n            }\n        }\n\n        return cardViewItemProperty;\n    }\n\n    private isListOfValues(constraint: Constraint[]): boolean {\n        return constraint?.[0]?.type === 'LIST';\n    }\n\n    private getPropertyConstraints(propertyName: string, definition: Definition): Constraint[] {\n        return definition?.properties.find((item) => item.id === propertyName)?.constraints ?? [];\n    }\n\n    private checkECMTypeValidity(ecmPropertyType: string) {\n        if (RECOGNISED_ECM_TYPES.indexOf(ecmPropertyType) === -1) {\n            this.logService.error(`Unknown type for mapping: ${ecmPropertyType}`);\n        }\n    }\n\n    private isEmpty(value: any): boolean {\n        return value === undefined || value === null || value === '';\n    }\n\n    private getDecimalNumberPipe(): DecimalNumberPipe {\n        let decimalNumberPipe: DecimalNumberPipe;\n        runInInjectionContext(this.injector, () => {\n            decimalNumberPipe = new DecimalNumberPipe();\n        });\n        return decimalNumberPipe;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PropertyGroup, Property, PropertyGroupContainer } from '../../interfaces/content-metadata.interfaces';\n\nconst emptyGroup = {\n    properties: {}\n};\n\nconst convertObjectToArray = (object: any): Property[] => Object.keys(object).map((key) => object[key]);\nexport const getGroup = (propertyGroups: PropertyGroupContainer, groupName: string): PropertyGroup | undefined => propertyGroups[groupName];\n\nexport const getProperty = (propertyGroups: PropertyGroupContainer, groupName: string, propertyName: string): Property | Property[] | undefined => {\n    const groupDefinition = getGroup(propertyGroups, groupName) || emptyGroup;\n    let propertyDefinitions;\n\n    if (propertyName === '*') {\n        propertyDefinitions = convertObjectToArray(groupDefinition.properties);\n    } else {\n        propertyDefinitions = groupDefinition.properties[propertyName];\n    }\n\n    return propertyDefinitions;\n};\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContentMetadataConfig, OrganisedPropertyGroup, PropertyGroupContainer, Property } from '../../interfaces/content-metadata.interfaces';\nimport { getGroup, getProperty } from './property-group-reader';\n\nexport class AspectOrientedConfigService implements ContentMetadataConfig {\n    constructor(private readonly config: any) {}\n\n    public isGroupAllowed(groupName: string): boolean {\n        if (this.isIncludeAllEnabled()) {\n            return true;\n        }\n        const groupNames = Object.keys(this.config);\n        return groupNames.indexOf(groupName) !== -1;\n    }\n\n    public reorganiseByConfig(propertyGroups: PropertyGroupContainer): OrganisedPropertyGroup[] {\n        const aspects = this.config;\n        const aspectNames = Object.keys(aspects);\n\n        return aspectNames\n            .reduce((groupAccumulator, aspectName) => {\n                const newGroup = this.getOrganisedPropertyGroup(propertyGroups, aspectName);\n                return groupAccumulator.concat(newGroup);\n            }, [])\n            .filter((organisedPropertyGroup) => organisedPropertyGroup.properties.length > 0);\n    }\n\n    public appendAllPreset(propertyGroups: PropertyGroupContainer): OrganisedPropertyGroup[] {\n        const groups = Object.keys(propertyGroups).map((groupName) => {\n            const propertyGroup = propertyGroups[groupName];\n            const properties = propertyGroup.properties;\n\n            if (this.isAspectReadOnly(groupName)) {\n                Object.keys(properties).map((propertyName) => this.setReadOnlyProperty(properties[propertyName]));\n            }\n\n            return Object.assign({}, propertyGroup, {\n                properties: Object.keys(properties).map((propertyName) => {\n                    if (this.isPropertyReadOnly(propertyName)) {\n                        this.setReadOnlyProperty(properties[propertyName]);\n                    }\n                    return properties[propertyName];\n                })\n            });\n        });\n\n        return groups;\n    }\n\n    private setReadOnlyProperty(property: Property) {\n        property.editable = false;\n    }\n\n    private isPropertyReadOnly(propertyName: string): boolean {\n        const readOnlyAspects = this.config.readOnlyProperties;\n\n        if (Array.isArray(readOnlyAspects)) {\n            return readOnlyAspects.includes(propertyName);\n        } else {\n            return readOnlyAspects === propertyName;\n        }\n    }\n\n    private isAspectReadOnly(propertyGroupName: string): boolean {\n        const readOnlyAspects = this.config.readOnlyAspects;\n\n        if (Array.isArray(readOnlyAspects)) {\n            return readOnlyAspects.includes(propertyGroupName);\n        } else {\n            return readOnlyAspects === propertyGroupName;\n        }\n    }\n\n    public filterExcludedPreset(propertyGroups: OrganisedPropertyGroup[]): OrganisedPropertyGroup[] {\n        if (this.config.exclude) {\n            return propertyGroups.filter((preset) => !this.config.exclude.includes(preset.name));\n        }\n        return propertyGroups;\n    }\n\n    public isIncludeAllEnabled() {\n        return this.config.includeAll;\n    }\n\n    private getOrganisedPropertyGroup(propertyGroups, aspectName) {\n        const group = getGroup(propertyGroups, aspectName);\n        let newGroup = [];\n\n        if (group) {\n            const aspectProperties = this.config[aspectName];\n            let properties;\n\n            if (aspectProperties === '*') {\n                properties = getProperty(propertyGroups, aspectName, aspectProperties);\n            } else {\n                properties = aspectProperties\n                    .map((propertyName) => getProperty(propertyGroups, aspectName, propertyName))\n                    .filter((props) => props !== undefined);\n            }\n\n            newGroup = [{ title: group.title, properties }];\n        }\n\n        return newGroup;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContentMetadataConfig, OrganisedPropertyGroup, PropertyGroupContainer } from '../../interfaces/content-metadata.interfaces';\n\nexport class IndifferentConfigService implements ContentMetadataConfig {\n    isGroupAllowed(): boolean {\n        return true;\n    }\n\n    reorganiseByConfig(propertyGroups: PropertyGroupContainer): OrganisedPropertyGroup[] {\n        return Object.keys(propertyGroups).map((groupName) => {\n            const propertyGroup = propertyGroups[groupName];\n            const properties = propertyGroup.properties;\n\n            return Object.assign({}, propertyGroup, {\n                properties: Object.keys(properties).map((propertyName) => properties[propertyName])\n            });\n        });\n    }\n\n    filterExcludedPreset(propertyGroups: OrganisedPropertyGroup[]): OrganisedPropertyGroup[] {\n        return propertyGroups;\n    }\n\n    appendAllPreset(): OrganisedPropertyGroup[] {\n        return [];\n    }\n\n    isIncludeAllEnabled(): boolean {\n        return true;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    ContentMetadataConfig,\n    LayoutOrientedConfigItem,\n    OrganisedPropertyGroup,\n    PropertyGroupContainer,\n    Property\n} from '../../interfaces/content-metadata.interfaces';\nimport { getProperty } from './property-group-reader';\n\nexport class LayoutOrientedConfigService implements ContentMetadataConfig {\n    constructor(private readonly config: any) {}\n\n    public isGroupAllowed(groupName: string): boolean {\n        if (this.isIncludeAllEnabled()) {\n            return true;\n        }\n        return this.getMatchingGroups(groupName).length > 0;\n    }\n\n    public reorganiseByConfig(propertyGroups: PropertyGroupContainer): OrganisedPropertyGroup[] {\n        const layoutBlocks = this.config.filter((itemsGroup) => itemsGroup.items);\n\n        const organisedPropertyGroup = layoutBlocks.map((layoutBlock) => {\n            const flattenedItems = this.flattenItems(layoutBlock.items);\n            const properties = flattenedItems.reduce((props, explodedItem) => {\n                const isProperty = typeof explodedItem.property === 'object';\n                const propertyName = isProperty ? explodedItem.property.name : explodedItem.property;\n                let property = getProperty(propertyGroups, explodedItem.groupName, propertyName) || [];\n                if (isProperty) {\n                    property = this.setPropertyTitle(property, explodedItem.property);\n                }\n                property = this.setEditableProperty(property, explodedItem);\n                return props.concat(property);\n            }, []);\n\n            return {\n                title: layoutBlock.title,\n                properties\n            };\n        });\n\n        return organisedPropertyGroup;\n    }\n\n    public appendAllPreset(propertyGroups: PropertyGroupContainer): OrganisedPropertyGroup[] {\n        return Object.keys(propertyGroups).map((groupName) => {\n            const propertyGroup = propertyGroups[groupName];\n            const properties = propertyGroup.properties;\n\n            return Object.assign({}, propertyGroup, {\n                properties: Object.keys(properties).map((propertyName) => properties[propertyName])\n            });\n        });\n    }\n\n    public filterExcludedPreset(propertyGroups: OrganisedPropertyGroup[]): OrganisedPropertyGroup[] {\n        let excludedConfig = this.config\n            .map((config) => config.exclude)\n            .filter((exclude) => exclude !== undefined)\n            .flat();\n\n        if (excludedConfig === undefined) {\n            excludedConfig = [];\n        } else if (typeof excludedConfig === 'string') {\n            excludedConfig = [excludedConfig];\n        }\n\n        return propertyGroups.filter((props) => !excludedConfig.includes(props.name));\n    }\n\n    public isIncludeAllEnabled() {\n        const includeAllProperty = this.config.map((config) => config.includeAll).find((includeAll) => includeAll !== undefined);\n\n        return includeAllProperty !== undefined ? includeAllProperty : false;\n    }\n\n    private setEditableProperty(propertyGroup: Property | Property[], itemConfig): Property | Property[] {\n        if (Array.isArray(propertyGroup)) {\n            propertyGroup.forEach((property) => (property.editable = itemConfig.editable !== undefined ? itemConfig.editable : true));\n        } else {\n            propertyGroup.editable = itemConfig.editable !== undefined ? itemConfig.editable : true;\n        }\n\n        return propertyGroup;\n    }\n\n    private setPropertyTitle(item: Property | Property[], property: Property): Property | Property[] {\n        if (!Array.isArray(item)) {\n            return { ...item, ...(item.name === property.name && !!property.title && { title: property.title }) };\n        }\n        return item;\n    }\n\n    private flattenItems(items) {\n        return items.reduce((accumulator, item) => {\n            const properties = Array.isArray(item.properties) ? item.properties : [item.properties];\n            const flattenedProperties = properties.map((property) => ({\n                groupName: item.aspect || item.type,\n                property,\n                editable: item.editable\n            }));\n\n            return accumulator.concat(flattenedProperties);\n        }, []);\n    }\n\n    private getMatchingGroups(groupName: string): LayoutOrientedConfigItem[] {\n        return this.config\n            .map((layoutBlock) => layoutBlock.items)\n            .reduce((accumulator, items) => accumulator.concat(items), [])\n            .filter((item) => item.aspect === groupName || item.type === groupName);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { AppConfigService, LogService } from '@alfresco/adf-core';\nimport { AspectOrientedConfigService } from './aspect-oriented-config.service';\nimport { IndifferentConfigService } from './indifferent-config.service';\nimport { LayoutOrientedConfigService } from './layout-oriented-config.service';\nimport { PresetConfig, ContentMetadataConfig } from '../../interfaces/content-metadata.interfaces';\n\nconst INDIFFERENT_PRESET = '*';\nconst DEFAULT_PRESET_NAME = 'default';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ContentMetadataConfigFactory {\n    private readonly appConfigService = inject(AppConfigService);\n    private readonly logService = inject(LogService);\n\n    public get(presetName: string = 'default'): ContentMetadataConfig {\n        let presetConfig: PresetConfig;\n        try {\n            presetConfig = this.appConfigService.config['content-metadata'].presets[presetName];\n        } catch {\n            if (presetName !== DEFAULT_PRESET_NAME) {\n                this.logService.error(`No content-metadata preset for: ${presetName}`);\n            }\n            presetConfig = INDIFFERENT_PRESET;\n        }\n\n        return this.createConfig(presetConfig);\n    }\n\n    public createConfig(presetConfig: PresetConfig): ContentMetadataConfig {\n        let config: ContentMetadataConfig;\n\n        if (this.isLayoutOrientedPreset(presetConfig)) {\n            config = new LayoutOrientedConfigService(presetConfig);\n        } else if (this.isAspectOrientedPreset(presetConfig)) {\n            config = new AspectOrientedConfigService(presetConfig);\n        } else {\n            config = new IndifferentConfigService();\n        }\n\n        Object.freeze(config);\n        return config;\n    }\n\n    private isAspectOrientedPreset(presetConfig: PresetConfig): boolean {\n        return this.isObject(presetConfig);\n    }\n\n    private isLayoutOrientedPreset(presetConfig: PresetConfig): boolean {\n        return Array.isArray(presetConfig);\n    }\n\n    private isObject(x: any): boolean {\n        return x != null && typeof x === 'object';\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { Observable, defer, forkJoin } from 'rxjs';\nimport { PropertyGroup, PropertyGroupContainer } from '../interfaces/content-metadata.interfaces';\nimport { map } from 'rxjs/operators';\nimport { ClassesApi } from '@alfresco/js-api';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PropertyDescriptorsService {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n\n    private _classesApi: ClassesApi;\n    get classesApi(): ClassesApi {\n        this._classesApi = this._classesApi ?? new ClassesApi(this.alfrescoApiService.getInstance());\n        return this._classesApi;\n    }\n\n    load(groupNames: string[]): Observable<PropertyGroupContainer> {\n        const groupFetchStreams = groupNames\n            .map((groupName) => groupName.replace(':', '_'))\n            .map((groupName) => defer(() => this.classesApi.getClass(groupName)));\n\n        return forkJoin(groupFetchStreams).pipe(map(this.convertToObject));\n    }\n\n    private convertToObject(propertyGroupsArray: PropertyGroup[]): PropertyGroupContainer {\n        return propertyGroupsArray.reduce(\n            (propertyGroups, propertyGroup) =>\n                Object.assign({}, propertyGroups, {\n                    [propertyGroup.name]: propertyGroup\n                }),\n            {}\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TypeEntry, TypePaging, TypesApi } from '@alfresco/js-api';\nimport { Injectable, inject } from '@angular/core';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\nimport { from, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ContentTypeService {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n\n    private _typesApi: TypesApi;\n    get typesApi(): TypesApi {\n        this._typesApi = this._typesApi ?? new TypesApi(this.alfrescoApiService.getInstance());\n        return this._typesApi;\n    }\n\n    getContentTypeByPrefix(prefixedType: string): Observable<TypeEntry> {\n        return from(this.typesApi.getType(prefixedType));\n    }\n\n    getContentTypeChildren(nodeType: string): Observable<TypeEntry[]> {\n        const where = `(parentId in ('${nodeType}') and not namespaceUri matches('http://www.alfresco.*'))`;\n        const opts: any = {\n            where,\n            include: ['properties']\n        };\n        return from(this.typesApi.listTypes(opts)).pipe(map((result: TypePaging) => result.list.entries));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TypeEntry } from '@alfresco/js-api';\nimport { Component, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { ContentTypeDialogComponentData } from './content-type-metadata.interface';\nimport { ContentTypeService } from './content-type.service';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n    selector: 'adf-content-type-dialog',\n    imports: [CommonModule, MatDialogModule, TranslatePipe, MatExpansionModule, MatTableModule, MatButtonModule],\n    templateUrl: './content-type-dialog.component.html',\n    styleUrls: ['./content-type-dialog.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class ContentTypeDialogComponent implements OnInit {\n    private readonly dialog = inject<MatDialogRef<ContentTypeDialogComponent>>(MatDialogRef);\n    data = inject<ContentTypeDialogComponentData>(MAT_DIALOG_DATA);\n    private readonly contentTypeService = inject(ContentTypeService);\n\n    title: string;\n    description: string;\n    nodeType: string;\n    confirmMessage: string;\n\n    currentContentType: TypeEntry;\n    typeProperties: any[] = [];\n\n    propertyColumns: string[] = ['name', 'title', 'dataType'];\n\n    constructor() {\n        const data = this.data;\n\n        this.title = data.title;\n        this.description = data.description;\n        this.confirmMessage = data.confirmMessage;\n        this.nodeType = data.nodeType;\n\n        this.contentTypeService.getContentTypeByPrefix(this.nodeType).subscribe((contentTypeEntry) => {\n            this.currentContentType = contentTypeEntry;\n            this.typeProperties = this.currentContentType.entry.properties.filter((property) =>\n                property.id.startsWith(this.currentContentType.entry.model.namespacePrefix)\n            );\n        });\n    }\n\n    ngOnInit() {\n        this.dialog.backdropClick().subscribe(() => {\n            this.close();\n        });\n    }\n\n    close() {\n        this.data.select.complete();\n    }\n\n    onCancel() {\n        this.close();\n    }\n\n    onApply() {\n        this.data.select.next(true);\n        this.close();\n    }\n}\n","<div class=\"adf-content-type-dialog\">\n    <h2 mat-dialog-title class=\"adf-content-type-dialog-title\" data-automation-id=\"content-type-dialog-title\">{{title |\n        translate}}</h2>\n    <mat-dialog-content class=\"mat-typography adf-content-type-dialog-content\"\n        data-automation-id=\"content-type-dialog-content\">\n        <h4 data-automation-id=\"content-type-dialog-description\">{{description | translate}}</h4>\n        <p data-automation-id=\"content-type-dialog-confirm-message\">{{confirmMessage | translate}}</p>\n        <mat-accordion>\n            <mat-expansion-panel class=\"adf-content-type-accordion\">\n                <mat-expansion-panel-header>\n                    <mat-panel-title>\n                        {{'CORE.METADATA.CONTENT_TYPE.DIALOG.VIEW_DETAILS' | translate}}\n                    </mat-panel-title>\n                </mat-expansion-panel-header>\n                <table mat-table [dataSource]=\"typeProperties\"\n                    *ngIf=\"typeProperties?.length > 0\" class=\"adf-content-type-table\">\n                    <ng-container matColumnDef=\"name\">\n                        <th mat-header-cell *matHeaderCellDef> {{'CORE.METADATA.CONTENT_TYPE.DIALOG.PROPERTY.NAME' |\n                            translate}} </th>\n                        <td mat-cell *matCellDef=\"let property\"> {{property.id}} </td>\n                    </ng-container>\n                    <ng-container matColumnDef=\"title\">\n                        <th mat-header-cell *matHeaderCellDef>\n                            {{'CORE.METADATA.CONTENT_TYPE.DIALOG.PROPERTY.DESCRIPTION' | translate}} </th>\n                        <td mat-cell *matCellDef=\"let property\"> {{property.title}} </td>\n                    </ng-container>\n                    <ng-container matColumnDef=\"dataType\">\n                        <th mat-header-cell *matHeaderCellDef> {{'CORE.METADATA.CONTENT_TYPE.DIALOG.PROPERTY.DATA_TYPE'\n                            | translate}} </th>\n                        <td mat-cell *matCellDef=\"let property\"> {{property.dataType}} </td>\n                    </ng-container>\n                    <tr mat-header-row *matHeaderRowDef=\"propertyColumns\"></tr>\n                    <tr mat-row *matRowDef=\"let row; columns: propertyColumns;\"></tr>\n                </table>\n            </mat-expansion-panel>\n        </mat-accordion>\n    </mat-dialog-content>\n    <mat-dialog-actions align=\"end\">\n        <button mat-button mat-dialog-close\n            id=\"content-type-dialog-actions-cancel\">{{'CORE.METADATA.CONTENT_TYPE.DIALOG.CANCEL' | translate }}</button>\n        <button mat-button class=\"adf-content-type-dialog-apply-button\" id=\"content-type-dialog-apply-button\"\n            [mat-dialog-close]=\"true\" (click)=\"onApply()\">{{'CORE.METADATA.CONTENT_TYPE.DIALOG.APPLY' |\n            translate}}</button>\n    </mat-dialog-actions>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { CardViewItem, CardViewSelectItemModel, CardViewSelectItemOption, CardViewTextItemModel } from '@alfresco/adf-core';\nimport { Observable, of, Subject, zip } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { ContentTypeDialogComponent } from '../../content-type/content-type-dialog.component';\nimport { ContentTypeDialogComponentData } from '../../content-type/content-type-metadata.interface';\nimport { ContentTypeService } from '../../content-type/content-type.service';\nimport { Node, Property, TypeEntry } from '@alfresco/js-api';\nimport { PropertyGroupTranslatorService } from './property-groups-translator.service';\nimport { VersionCompatibilityService } from '../../version-compatibility/version-compatibility.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ContentTypePropertiesService {\n    private readonly contentTypeService = inject(ContentTypeService);\n    private readonly dialog = inject(MatDialog);\n    private readonly versionCompatibilityService = inject(VersionCompatibilityService);\n    private readonly propertyGroupTranslatorService = inject(PropertyGroupTranslatorService);\n\n    getContentTypeCardItem(node: Node): Observable<CardViewItem[]> {\n        if (this.versionCompatibilityService.isVersionSupported('7')) {\n            return this.contentTypeService.getContentTypeByPrefix(node.nodeType).pipe(\n                map((contentType) => {\n                    const contentTypesOptions$ = this.getContentTypesAsSelectOption(contentType);\n                    const contentTypeCard = this.buildContentTypeSelectCardModel(contentType.entry.id, contentTypesOptions$);\n                    const filteredProperties = this.getContentTypeSpecificProperties(contentType);\n                    const propertiesCard = this.buildCardItemsFromPropertyList(filteredProperties, node.properties);\n                    return [contentTypeCard, ...propertiesCard];\n                })\n            );\n        } else {\n            return of([this.buildContentTypeTextCardModel(node.nodeType)]);\n        }\n    }\n\n    buildCardItemsFromPropertyList(properties: Property[], currentProperties: any): CardViewItem[] {\n        return properties.map((property) => {\n            const propertyValue = currentProperties ? currentProperties[property.id] : null;\n            return this.buildCardItemFromProperty(property, propertyValue);\n        });\n    }\n\n    private buildCardItemFromProperty(property: Property, propertyValue: any): CardViewItem {\n        return this.propertyGroupTranslatorService.translateProperty(property, propertyValue, true);\n    }\n\n    private getContentTypeSpecificProperties(contentType: TypeEntry): Property[] {\n        return contentType.entry.properties.filter((property) => property.id.startsWith(contentType.entry.model.namespacePrefix));\n    }\n\n    private buildContentTypeTextCardModel(currentValue: string): CardViewTextItemModel {\n        const contentTypeCard = new CardViewTextItemModel({\n            label: 'CORE.METADATA.BASIC.CONTENT_TYPE',\n            value: currentValue,\n            key: 'nodeType',\n            editable: false\n        });\n\n        return contentTypeCard;\n    }\n\n    private buildContentTypeSelectCardModel(\n        currentValue: string,\n        options$: Observable<CardViewSelectItemOption<string>[]>\n    ): CardViewSelectItemModel<string> {\n        const contentTypeCard = new CardViewSelectItemModel({\n            label: 'CORE.METADATA.BASIC.CONTENT_TYPE',\n            value: currentValue,\n            key: 'nodeType',\n            editable: true,\n            options$,\n            displayNoneOption: false\n        });\n\n        return contentTypeCard;\n    }\n\n    private getContentTypesAsSelectOption(currentType: TypeEntry): Observable<CardViewSelectItemOption<string>[]> {\n        const childrenTypes$ = this.contentTypeService.getContentTypeChildren(currentType.entry.id);\n        return zip(childrenTypes$, of(currentType)).pipe(\n            distinctUntilChanged(),\n            map(([contentTypesEntries, currentContentType]) => {\n                const updatedTypes = this.appendCurrentType(currentContentType, contentTypesEntries);\n                return updatedTypes.map((contentType) => ({ key: contentType.entry.id, label: contentType.entry.title ?? contentType.entry.id }));\n            })\n        );\n    }\n\n    private appendCurrentType(currentType: TypeEntry, contentTypesEntries: TypeEntry[]): TypeEntry[] {\n        const resultTypes = [...contentTypesEntries];\n        const currentTypePresent = contentTypesEntries.find((type) => type.entry.id === currentType.entry.id);\n        if (!currentTypePresent) {\n            resultTypes.push(currentType);\n        }\n        return resultTypes;\n    }\n\n    openContentTypeDialogConfirm(nodeType): Observable<boolean> {\n        const select = new Subject<boolean>();\n        select.subscribe({\n            complete: this.close.bind(this)\n        });\n\n        const data: ContentTypeDialogComponentData = {\n            title: 'CORE.METADATA.CONTENT_TYPE.DIALOG.TITLE',\n            description: 'CORE.METADATA.CONTENT_TYPE.DIALOG.DESCRIPTION',\n            confirmMessage: 'CORE.METADATA.CONTENT_TYPE.DIALOG.CONFIRM',\n            select,\n            nodeType\n        };\n\n        this.openDialog(data, 'adf-content-type-dialog', '600px');\n        return select;\n    }\n\n    close() {\n        this.dialog.closeAll();\n    }\n\n    private openDialog(data: ContentTypeDialogComponentData, panelClass: string, width: string) {\n        this.dialog.open(ContentTypeDialogComponent, {\n            data,\n            panelClass,\n            width,\n            disableClose: true\n        });\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { BasicPropertiesService } from './basic-properties.service';\nimport { Observable, of, iif, Subject } from 'rxjs';\nimport { PropertyGroupTranslatorService } from './property-groups-translator.service';\nimport { CardViewItem } from '@alfresco/adf-core';\nimport { CardViewGroup, OrganisedPropertyGroup, PresetConfig } from '../interfaces/content-metadata.interfaces';\nimport { ContentMetadataConfigFactory } from './config/content-metadata-config.factory';\nimport { PropertyDescriptorsService } from './property-descriptors.service';\nimport { map, switchMap } from 'rxjs/operators';\nimport { ContentTypePropertiesService } from './content-type-property.service';\n@Injectable({\n    providedIn: 'root'\n})\nexport class ContentMetadataService {\n    private readonly basicPropertiesService = inject(BasicPropertiesService);\n    private readonly contentMetadataConfigFactory = inject(ContentMetadataConfigFactory);\n    private readonly propertyGroupTranslatorService = inject(PropertyGroupTranslatorService);\n    private readonly propertyDescriptorsService = inject(PropertyDescriptorsService);\n    private readonly contentTypePropertyService = inject(ContentTypePropertiesService);\n\n    error = new Subject<{ statusCode: number; message: string }>();\n\n    getBasicProperties(node: Node): Observable<CardViewItem[]> {\n        return of(this.basicPropertiesService.getProperties(node));\n    }\n\n    getContentTypeProperty(node: Node): Observable<CardViewItem[]> {\n        return this.contentTypePropertyService.getContentTypeCardItem(node);\n    }\n\n    openConfirmDialog(changedProperties): Observable<any> {\n        return this.contentTypePropertyService.openContentTypeDialogConfirm(changedProperties.nodeType);\n    }\n\n    getGroupedProperties(node: Node, preset: string | PresetConfig = 'default'): Observable<CardViewGroup[]> {\n        let groupedProperties = of([]);\n\n        if (node.aspectNames) {\n            let contentMetadataConfig;\n            if (typeof preset === 'string') {\n                contentMetadataConfig = this.contentMetadataConfigFactory.get(preset);\n            } else {\n                contentMetadataConfig = this.contentMetadataConfigFactory.createConfig(preset);\n            }\n\n            const groupNames = node.aspectNames.concat(node.nodeType).filter((groupName) => contentMetadataConfig.isGroupAllowed(groupName));\n\n            if (groupNames.length > 0) {\n                groupedProperties = this.propertyDescriptorsService.load(groupNames).pipe(\n                    switchMap((groups) =>\n                        iif(\n                            () => contentMetadataConfig.isIncludeAllEnabled(),\n                            of(contentMetadataConfig.appendAllPreset(groups).concat(contentMetadataConfig.reorganiseByConfig(groups))),\n                            of(contentMetadataConfig.reorganiseByConfig(groups))\n                        )\n                    ),\n                    map((groups) => contentMetadataConfig.filterExcludedPreset(groups)),\n                    map((groups) => this.filterEmptyPreset(groups)),\n                    map((groups) => this.setTitleToNameIfNotSet(groups)),\n                    map((groups) => this.propertyGroupTranslatorService.translateToCardViewGroups(groups, node.properties, node.definition))\n                );\n            }\n        }\n\n        return groupedProperties;\n    }\n\n    setTitleToNameIfNotSet(propertyGroups: OrganisedPropertyGroup[]): OrganisedPropertyGroup[] {\n        const propertyGroupsTitles = [];\n        propertyGroups.map((propertyGroup) => {\n            const title = propertyGroup.title;\n            const name = propertyGroup.name;\n            if (title) {\n                if (propertyGroupsTitles.includes(title)) {\n                    propertyGroup.title = name ? `${title} (${name})` : title;\n                } else {\n                    propertyGroup.title = title;\n                }\n                propertyGroupsTitles.push(title);\n            } else {\n                propertyGroup.title = name;\n                propertyGroupsTitles.push(name);\n            }\n        });\n        return propertyGroups;\n    }\n\n    filterEmptyPreset(propertyGroups: OrganisedPropertyGroup[]): OrganisedPropertyGroup[] {\n        return propertyGroups.filter((props) => props.properties.length);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IconModule } from '@alfresco/adf-core';\nimport { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n    standalone: true,\n    imports: [CommonModule, IconModule, MatExpansionModule, TranslatePipe],\n    selector: 'adf-content-metadata-header',\n    encapsulation: ViewEncapsulation.None,\n    styles: [\n        `\n            adf-content-metadata-header {\n                display: flex;\n                align-items: center;\n                width: 100%;\n            }\n\n            .adf-metadata-properties-title {\n                display: block;\n                overflow: hidden;\n                text-overflow: ellipsis;\n                font-weight: 700;\n                font-size: 15px;\n                padding-left: 12px;\n            }\n        `\n    ],\n    template: `\n        <ng-container>\n            <mat-icon [adf-icon]=\"expanded ? 'expand_more' : 'chevron_right'\" />\n            <mat-panel-title *ngIf=\"title\" class=\"adf-metadata-properties-title\" [title]=\"title | translate\">{{ title | translate }}</mat-panel-title>\n            <ng-content />\n        </ng-container>\n    `\n})\nexport class ContentMetadataHeaderComponent {\n    @Input() title: string = null;\n    @Input() expanded = true;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, inject, Input, OnChanges, OnInit, SimpleChanges, ViewEncapsulation } from '@angular/core';\nimport { Category, CategoryEntry, CategoryLinkBody, CategoryPaging, Node, TagBody, TagEntry, TagPaging } from '@alfresco/js-api';\nimport { forkJoin, Observable, of, Subject, zip } from 'rxjs';\nimport {\n    AppConfigService,\n    CardViewBaseItemModel,\n    CardViewComponent,\n    CardViewItem,\n    Chip,\n    DynamicChipListComponent,\n    IconModule,\n    NotificationService,\n    TranslationService,\n    UpdateNotification\n} from '@alfresco/adf-core';\nimport { ContentMetadataService } from '../../services/content-metadata.service';\nimport { CardViewGroup, ContentMetadataCustomPanel, ContentMetadataPanel, PresetConfig } from '../../interfaces/content-metadata.interfaces';\nimport { catchError, debounceTime, map } from 'rxjs/operators';\nimport { CardViewContentUpdateService } from '../../../common/services/card-view-content-update.service';\nimport { NodesApiService } from '../../../common/services/nodes-api.service';\nimport { TagsCreatorMode } from '../../../tag/tags-creator/tags-creator-mode';\nimport { TagService } from '../../../tag/services/tag.service';\nimport { CategoryService } from '../../../category/services/category.service';\nimport { CategoriesManagementMode } from '../../../category/categories-management/categories-management-mode';\nimport { AllowableOperationsEnum } from '../../../common/models/allowable-operations.enum';\nimport { ContentService } from '../../../common/services/content.service';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { DynamicExtensionComponent } from '@alfresco/adf-extensions';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { TagsCreatorComponent } from '../../../tag';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ContentMetadataHeaderComponent } from './content-metadata-header.component';\nimport { CategoriesManagementComponent } from '../../../category/categories-management/categories-management.component';\n\nconst DEFAULT_SEPARATOR = ', ';\n\nconst DefaultPanels = {\n    PROPERTIES: 'Properties',\n    TAGS: 'Tags',\n    CATEGORIES: 'Categories'\n} as const;\n\nexport type DefaultPanels = (typeof DefaultPanels)[keyof typeof DefaultPanels];\n\n@Component({\n    selector: 'adf-content-metadata',\n    imports: [\n        CommonModule,\n        MatExpansionModule,\n        ContentMetadataHeaderComponent,\n        MatButtonModule,\n        TranslatePipe,\n        IconModule,\n        MatChipsModule,\n        CategoriesManagementComponent,\n        DynamicExtensionComponent,\n        MatProgressBarModule,\n        TagsCreatorComponent,\n        CardViewComponent,\n        DynamicChipListComponent\n    ],\n    templateUrl: './content-metadata.component.html',\n    styleUrls: ['./content-metadata.component.scss'],\n    host: { class: 'adf-content-metadata' },\n    encapsulation: ViewEncapsulation.None\n})\nexport class ContentMetadataComponent implements OnChanges, OnInit {\n    private readonly contentMetadataService = inject(ContentMetadataService);\n    private readonly cardViewContentUpdateService = inject(CardViewContentUpdateService);\n    private readonly nodesApiService = inject(NodesApiService);\n    private readonly translationService = inject(TranslationService);\n    private readonly appConfig = inject(AppConfigService);\n    private readonly tagService = inject(TagService);\n    private readonly categoryService = inject(CategoryService);\n    private readonly contentService = inject(ContentService);\n    private readonly notificationService = inject(NotificationService);\n\n    /** (required) The node entity to fetch metadata about */\n    @Input({ required: true })\n    node: Node;\n\n    /** Toggles whether to display empty values in the card view */\n    @Input()\n    displayEmpty: boolean = false;\n\n    /**\n     * Toggles between expanded (ie, full information) and collapsed\n     * (ie, reduced information) in the display\n     */\n    @Input()\n    expanded: boolean = false;\n\n    /** The multi parameter of the underlying material expansion panel, set to true to allow multi accordion to be expanded at the same time */\n    @Input()\n    multi = false;\n\n    /** Name or configuration of the metadata preset, which defines aspects and their properties */\n    @Input({ required: true })\n    preset: string | PresetConfig;\n\n    /** Toggles whether the metadata properties should be shown */\n    @Input()\n    displayDefaultProperties: boolean = true;\n\n    /** (optional) shows the given aspect in the expanded  card */\n    @Input()\n    displayAspect: string = null;\n\n    /** Toggles whether or not to enable copy to clipboard action. */\n    @Input()\n    copyToClipboardAction: boolean = true;\n\n    /** Toggles whether or not to enable chips for multivalued properties. */\n    @Input()\n    useChipsForMultiValueProperty: boolean = true;\n\n    /** True if tags should be displayed, false otherwise */\n    @Input()\n    displayTags = false;\n\n    /** True if categories should be displayed, false otherwise */\n    @Input()\n    displayCategories = false;\n\n    /** List of custom metadata panels to be displayed with registered custom components */\n    @Input()\n    customPanels: ContentMetadataCustomPanel[] = [];\n\n    /**\n     * (optional) This flag sets the metadata in read-only mode,\n     * preventing changes.\n     */\n    @Input()\n    readOnly = false;\n\n    private _assignedTags: string[] = [];\n    private assignedTagsEntries: TagEntry[] = [];\n    private readonly _tagsCreatorMode = TagsCreatorMode.CREATE_AND_ASSIGN;\n    private _tags: string[] = [];\n    private targetProperty: CardViewBaseItemModel;\n    private readonly classifiableChangedSubject = new Subject<void>();\n    private _saving = false;\n\n    DefaultPanels = DefaultPanels;\n    multiValueSeparator: string;\n    basicProperties$: Observable<CardViewItem[]>;\n    groupedProperties$: Observable<CardViewGroup[]>;\n\n    tagsToDisplay: Chip[];\n    changedProperties = {};\n    hasMetadataChanged = false;\n    assignedCategories: Category[] = [];\n    categories: Category[] = [];\n    categoriesManagementMode = CategoriesManagementMode.ASSIGN;\n    classifiableChanged = this.classifiableChangedSubject.asObservable();\n    editing = false;\n    invalidProperties = new Set<string>();\n    editedPanelTitle = '';\n    currentPanel: ContentMetadataPanel = {\n        expanded: false,\n        panelTitle: ''\n    };\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    constructor() {\n        this.copyToClipboardAction = this.appConfig.get<boolean>('content-metadata.copy-to-clipboard-action');\n        this.multiValueSeparator = this.appConfig.get<string>('content-metadata.multi-value-pipe-separator') || DEFAULT_SEPARATOR;\n        this.useChipsForMultiValueProperty = this.appConfig.get<boolean>('content-metadata.multi-value-chips');\n    }\n\n    ngOnInit() {\n        this.cardViewContentUpdateService.itemUpdated$\n            .pipe(debounceTime(500), takeUntilDestroyed(this.destroyRef))\n            .subscribe((updatedNode: UpdateNotification) => {\n                this.hasMetadataChanged = true;\n                this.targetProperty = updatedNode.target;\n                this.updateInvalidProperties();\n                this.updateChanges(updatedNode.changed);\n            });\n\n        this.cardViewContentUpdateService.updatedAspect$.pipe(debounceTime(500), takeUntilDestroyed(this.destroyRef)).subscribe((node) => {\n            this.node.aspectNames = node?.aspectNames;\n            this.loadProperties(node);\n        });\n\n        this.loadProperties(this.node);\n        this.verifyAllowableOperations();\n\n        this.currentPanel.panelTitle = this.displayAspect ?? this.DefaultPanels.PROPERTIES;\n        this.currentPanel.expanded = true;\n    }\n\n    private verifyAllowableOperations() {\n        if (!this.node?.allowableOperations || !this.contentService.hasAllowableOperations(this.node, AllowableOperationsEnum.UPDATE)) {\n            this.readOnly = true;\n        }\n    }\n\n    get assignedTags(): string[] {\n        return this._assignedTags;\n    }\n\n    set tags(tags: string[]) {\n        this._tags = tags;\n        this.tagsToDisplay = this.tags.map((tag) => ({ id: tag, name: tag }));\n    }\n\n    get tags(): string[] {\n        return this._tags;\n    }\n\n    get tagsCreatorMode(): TagsCreatorMode {\n        return this._tagsCreatorMode;\n    }\n\n    get saving(): boolean {\n        return this._saving;\n    }\n\n    isPanelEditing(panelTitle: string): boolean {\n        return (\n            this.editing &&\n            ((this.currentPanel.panelTitle === panelTitle && this.editedPanelTitle === panelTitle) || this.editedPanelTitle === panelTitle)\n        );\n    }\n\n    protected handleUpdateError(error: Error) {\n        let statusCode = 0;\n\n        try {\n            statusCode = JSON.parse(error.message).error.statusCode;\n        } catch {\n            /* empty */\n        }\n\n        let message = `METADATA.ERRORS.${statusCode}`;\n\n        if (this.translationService.instant(message) === message) {\n            message = 'METADATA.ERRORS.GENERIC';\n        }\n\n        this.contentMetadataService.error.next({\n            statusCode,\n            message\n        });\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.node && !changes.node.firstChange) {\n            this.loadProperties(changes.node.currentValue);\n        }\n\n        if (changes.readOnly?.currentValue) {\n            this.resetEditing();\n            this.loadProperties(this.node);\n        }\n\n        if (changes.displayAspect?.currentValue) {\n            this.currentPanel.panelTitle = changes.displayAspect.currentValue;\n            this.currentPanel.expanded = true;\n        }\n\n        if (changes.displayDefaultProperties?.currentValue) {\n            this.expandPanel(this.DefaultPanels.PROPERTIES);\n        }\n    }\n\n    updateChanges(updatedNodeChanges) {\n        Object.keys(updatedNodeChanges).map((propertyGroup: string) => {\n            if (typeof updatedNodeChanges[propertyGroup] === 'object') {\n                this.changedProperties[propertyGroup] = {\n                    ...this.changedProperties[propertyGroup],\n                    ...updatedNodeChanges[propertyGroup]\n                };\n            } else {\n                this.changedProperties[propertyGroup] = updatedNodeChanges[propertyGroup];\n            }\n        });\n    }\n\n    saveChanges(event?: MouseEvent) {\n        event?.stopPropagation();\n        this.resetEditing();\n        this._saving = true;\n\n        if (this.hasContentTypeChanged(this.changedProperties)) {\n            this.contentMetadataService.openConfirmDialog(this.changedProperties).subscribe(() => {\n                this.updateNode();\n            });\n        } else {\n            this.updateNode();\n        }\n    }\n\n    /**\n     * Register all tags which should be assigned to node. Please note that they are just in \"register\" state and are not yet saved\n     * until button for saving data is clicked. Calling that function causes that save button is enabled.\n     *\n     * @param tags array of tags to register, they are not saved yet until we click save button.\n     */\n    storeTagsToAssign(tags: string[]) {\n        this.tags = tags;\n        this._assignedTags = tags;\n        this.hasMetadataChanged = true;\n    }\n\n    /**\n     * Store all categories that node should be assigned to. Please note that they are just in \"stored\" state and are not yet saved\n     * until button for saving data is clicked. Calling that function causes that save button is enabled.\n     *\n     * @param categoriesToAssign array of categories to store.\n     */\n    storeCategoriesToAssign(categoriesToAssign: Category[]) {\n        this.categories = categoriesToAssign;\n        this.hasMetadataChanged = true;\n    }\n\n    revertChanges() {\n        this.changedProperties = {};\n        this.hasMetadataChanged = false;\n    }\n\n    get showEmptyTagMessage(): boolean {\n        return this.tags?.length === 0 && !this.isPanelEditing('Tags');\n    }\n\n    get showEmptyCategoryMessage(): boolean {\n        return this.categories?.length === 0 && !this.isPanelEditing('Categories');\n    }\n\n    toggleGroupEditing(panelTitle: string, event?: MouseEvent) {\n        event?.stopPropagation();\n        if (this.editing && this.hasMetadataChanged) {\n            this.notificationService.showError('METADATA.BASIC.SAVE_OR_DISCARD_CHANGES');\n            return;\n        }\n        this.editing = true;\n        this.editedPanelTitle = panelTitle;\n        this.expandPanel(panelTitle);\n    }\n\n    cancelGroupEditing(panelTitle: string, event?: MouseEvent) {\n        event?.stopPropagation();\n        this.resetEditing();\n        this.revertChanges();\n        const loadBasicProps = panelTitle === this.DefaultPanels.PROPERTIES;\n        const loadTags = panelTitle === this.DefaultPanels.TAGS;\n        const loadCategories = panelTitle === this.DefaultPanels.CATEGORIES;\n        const loadGroupedProps = !loadBasicProps && !loadTags && !loadCategories;\n        this.loadProperties(this.node, loadBasicProps, loadGroupedProps, loadTags, loadCategories);\n    }\n\n    expandPanel(panelTitle: string) {\n        this.currentPanel.panelTitle = panelTitle;\n        this.currentPanel.expanded = true;\n    }\n\n    closePanel(panelTitle: string) {\n        if (this.currentPanel.panelTitle === panelTitle) {\n            this.currentPanel.expanded = false;\n        }\n    }\n\n    resetEditing() {\n        this.editing = false;\n        this.editedPanelTitle = '';\n    }\n\n    showGroup(group: CardViewGroup): boolean {\n        const properties = group.properties.filter((property) => !this.isEmpty(property.displayValue));\n\n        return properties.length > 0;\n    }\n\n    keyDown(event: KeyboardEvent) {\n        if (event.keyCode === 37 || event.keyCode === 39) {\n            // ArrowLeft && ArrowRight\n            event.stopPropagation();\n        }\n    }\n\n    private updateNode() {\n        forkJoin({\n            updatedNode: this.nodesApiService.updateNode(this.node.id, this.changedProperties),\n            ...(this.displayTags ? this.saveTags() : {}),\n            ...(this.displayCategories ? this.saveCategories() : {})\n        })\n            .pipe(\n                catchError((err) => {\n                    this.cardViewContentUpdateService.updateElement(this.targetProperty);\n                    this.handleUpdateError(err);\n                    this._saving = false;\n                    this.revertChanges();\n                    this.loadProperties(this.node);\n                    return of(null);\n                })\n            )\n            .subscribe((result: any) => {\n                if (result) {\n                    this.updateUndefinedNodeProperties(result.updatedNode);\n                    if (this.hasContentTypeChanged(this.changedProperties)) {\n                        this.cardViewContentUpdateService.updateNodeAspect(this.node);\n                    }\n                    this.revertChanges();\n                    Object.assign(this.node, result.updatedNode);\n                    this.nodesApiService.nodeUpdated.next(this.node);\n                    if (Object.keys(result).length > 1 && this.displayTags) {\n                        this.loadTagsForNode(this.node.id);\n                    }\n                    if (Object.keys(result).length > 1 && this.displayCategories) {\n                        this.loadCategoriesForNode(this.node.id);\n                    }\n                }\n                this._saving = false;\n            });\n    }\n\n    private hasContentTypeChanged(changedProperties): boolean {\n        return !!changedProperties?.nodeType;\n    }\n\n    private updateUndefinedNodeProperties(node: Node): void {\n        if (!node.properties) {\n            node.properties = {};\n        }\n    }\n\n    private loadProperties(node: Node, loadBasicProps = true, loadGroupedProps = true, loadTags = true, loadCategories = true) {\n        if (node) {\n            if (loadBasicProps) {\n                this.basicProperties$ = this.getProperties(node);\n            }\n            if (loadGroupedProps) {\n                this.groupedProperties$ = this.contentMetadataService.getGroupedProperties(node, this.preset);\n            }\n\n            if (this.displayTags && loadTags) {\n                this.loadTagsForNode(node.id);\n            }\n\n            if (this.displayCategories && loadCategories) {\n                this.loadCategoriesForNode(node.id);\n\n                const aspectNames = node.aspectNames || [];\n                if (!aspectNames.includes('generalclassifiable')) {\n                    this.categories = [];\n                    this.classifiableChangedSubject.next();\n                }\n            }\n        }\n    }\n\n    private getProperties(node: Node) {\n        const properties$ = this.contentMetadataService.getBasicProperties(node);\n        const contentTypeProperty$ = this.contentMetadataService.getContentTypeProperty(node);\n        return zip(properties$, contentTypeProperty$).pipe(\n            map(([properties, contentTypeProperty]) => {\n                const filteredProperties = contentTypeProperty.filter(\n                    (property) => properties.findIndex((baseProperty) => baseProperty.key === property.key) === -1\n                );\n                return [...properties, ...filteredProperties];\n            })\n        );\n    }\n\n    private isEmpty(value: any): boolean {\n        return value === undefined || value === null || value === '';\n    }\n\n    private loadCategoriesForNode(nodeId: string) {\n        this.assignedCategories = [];\n        this.categoryService.getCategoryLinksForNode(nodeId).subscribe((categoryPaging) => {\n            this.categories = categoryPaging.list.entries.map((categoryEntry) => {\n                const path = categoryEntry.entry.path ? categoryEntry.entry.path.split('/').splice(3).join('/') : null;\n                categoryEntry.entry.name = path ? `${path}/${categoryEntry.entry.name}` : categoryEntry.entry.name;\n                return categoryEntry.entry;\n            });\n            this.assignedCategories = [...this.categories];\n        });\n    }\n\n    private saveCategories(): { [key: string]: Observable<CategoryPaging | CategoryEntry | void> } {\n        const observables: { [key: string]: Observable<CategoryPaging | CategoryEntry | void> } = {};\n        if (this.categories) {\n            this.assignedCategories.forEach((assignedCategory) => {\n                if (this.categories.every((category) => category.name !== assignedCategory.name)) {\n                    observables[`Removing ${assignedCategory.id}`] = this.categoryService.unlinkNodeFromCategory(this.node.id, assignedCategory.id);\n                }\n            });\n            const categoryLinkBodies = this.categories.map((category) => {\n                const categoryLinkBody = new CategoryLinkBody();\n                categoryLinkBody.categoryId = category.id;\n                return categoryLinkBody;\n            });\n            if (categoryLinkBodies.length > 0) {\n                observables['LinkingCategories'] = this.categoryService.linkNodeToCategory(this.node.id, categoryLinkBodies);\n            }\n        }\n        return observables;\n    }\n\n    private loadTagsForNode(id: string) {\n        this.tagService.getTagsByNodeId(id).subscribe((tagPaging) => {\n            this.assignedTagsEntries = tagPaging.list.entries;\n            this.tags = tagPaging.list.entries.map((tagEntry) => tagEntry.entry.tag);\n            this._assignedTags = [...this.tags];\n        });\n    }\n\n    private saveTags(): { [key: string]: Observable<TagPaging | TagEntry | void> } {\n        const observables: { [key: string]: Observable<TagPaging | TagEntry | void> } = {};\n        if (this.tags) {\n            this.assignedTagsEntries.forEach((tagEntry) => {\n                if (!this.tags.some((tag) => tagEntry.entry.tag === tag)) {\n                    observables[`${tagEntry.entry.id}Removing`] = this.tagService.removeTag(this.node.id, tagEntry.entry.id);\n                }\n            });\n            if (this.tags.length) {\n                observables.tagsAssigning = this.tagService.assignTagsToNode(\n                    this.node.id,\n                    this.tags.map((tag) => {\n                        const tagBody = new TagBody();\n                        tagBody.tag = tag;\n                        return tagBody;\n                    })\n                );\n            }\n        }\n        return observables;\n    }\n\n    private updateInvalidProperties() {\n        if (this.targetProperty?.isValidValue === false) {\n            this.invalidProperties.add(this.targetProperty.key);\n        } else if (this.targetProperty?.isValidValue === true) {\n            this.invalidProperties.delete(this.targetProperty.key);\n        }\n    }\n}\n","<mat-accordion displayMode=\"flat\" [multi]=\"multi\" class=\"adf-metadata-properties\">\n    <mat-expansion-panel\n        *ngIf=\"displayDefaultProperties\"\n        class=\"adf-content-metadata-panel\"\n        [expanded]=\"currentPanel.panelTitle === DefaultPanels.PROPERTIES && currentPanel.expanded\"\n        (opened)=\"expandPanel(DefaultPanels.PROPERTIES)\"\n        (closed)=\"closePanel(DefaultPanels.PROPERTIES)\"\n        [attr.data-automation-id]=\"'adf-metadata-group-properties'\"\n        hideToggle>\n        <mat-expansion-panel-header\n            class=\"adf-metadata-properties-header\"\n            [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.SECTION' | translate: { sectionName: ('CORE.METADATA.BASIC.HEADER' | translate) }\"\n            [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === DefaultPanels.PROPERTIES && currentPanel.expanded\">\n            <adf-content-metadata-header\n                [title]=\"'CORE.METADATA.BASIC.HEADER'\"\n                [expanded]=\"currentPanel.panelTitle === DefaultPanels.PROPERTIES && currentPanel.expanded\">\n                <button\n                    *ngIf=\"!readOnly && !isPanelEditing(DefaultPanels.PROPERTIES)\"\n                    mat-icon-button\n                    (click)=\"toggleGroupEditing(DefaultPanels.PROPERTIES, $event)\"\n                    [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n                    [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate: { sectionName: ('CORE.METADATA.BASIC.HEADER' | translate) }\"\n                    data-automation-id=\"meta-data-general-info-edit\"\n                    class=\"adf-edit-icon-buttons\">\n                    <mat-icon adf-icon=\"mode_edit\" />\n                </button>\n                <div *ngIf=\"isPanelEditing(DefaultPanels.PROPERTIES)\" class=\"adf-metadata-action-buttons\">\n                    <button\n                        mat-icon-button\n                        [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n                        (click)=\"cancelGroupEditing(DefaultPanels.PROPERTIES, $event)\"\n                        data-automation-id=\"reset-metadata\"\n                        class=\"adf-metadata-action-buttons-clear\">\n                        <mat-icon adf-icon=\"clear\" />\n                    </button>\n                    <button\n                        mat-icon-button\n                        [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n                        (click)=\"saveChanges($event)\"\n                        color=\"primary\"\n                        data-automation-id=\"save-general-info-metadata\"\n                        [disabled]=\"!hasMetadataChanged || invalidProperties.size > 0\">\n                        <mat-icon adf-icon=\"check\" />\n                    </button>\n                </div>\n            </adf-content-metadata-header>\n        </mat-expansion-panel-header>\n        <adf-card-view\n            class=\"adf-metadata-properties-expansion-panel\"\n            (keydown)=\"keyDown($event)\"\n            [properties]=\"basicProperties$ | async\"\n            [editable]=\"!readOnly && isPanelEditing(DefaultPanels.PROPERTIES)\"\n            [displayEmpty]=\"displayEmpty\"\n            [copyToClipboardAction]=\"copyToClipboardAction\"\n            [useChipsForMultiValueProperty]=\"useChipsForMultiValueProperty\"\n            [multiValueSeparator]=\"multiValueSeparator\" />\n    </mat-expansion-panel>\n\n    <ng-container *ngIf=\"displayTags\">\n        <mat-expansion-panel\n            hideToggle\n            [expanded]=\"currentPanel.panelTitle === DefaultPanels.TAGS && currentPanel.expanded\"\n            (opened)=\"expandPanel(DefaultPanels.TAGS)\"\n            (closed)=\"closePanel(DefaultPanels.TAGS)\"\n            class=\"adf-content-metadata-panel\"\n            data-automation-id=\"adf-content-metadata-tags-panel\">\n            <mat-expansion-panel-header\n                class=\"adf-metadata-properties-header\"\n                [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.SECTION' | translate: { sectionName: ('METADATA.BASIC.TAGS' | translate) }\"\n                [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === DefaultPanels.TAGS && currentPanel.expanded\">\n                <adf-content-metadata-header [title]=\"'METADATA.BASIC.TAGS'\" [expanded]=\"currentPanel.panelTitle === DefaultPanels.TAGS && currentPanel.expanded\">\n                    <button\n                        *ngIf=\"!readOnly && !isPanelEditing(DefaultPanels.TAGS)\"\n                        mat-icon-button\n                        (click)=\"toggleGroupEditing(DefaultPanels.TAGS, $event)\"\n                        [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n                        [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate: { sectionName: ('METADATA.BASIC.TAGS' | translate) }\"\n                        data-automation-id=\"showing-tag-input-button\"\n                        class=\"adf-edit-icon-buttons\">\n                        <mat-icon adf-icon=\"mode_edit\" />\n                    </button>\n                    <div *ngIf=\"isPanelEditing(DefaultPanels.TAGS)\" class=\"adf-metadata-action-buttons\">\n                        <button\n                            mat-icon-button\n                            [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n                            (click)=\"cancelGroupEditing(DefaultPanels.TAGS, $event)\"\n                            data-automation-id=\"reset-tags-metadata\"\n                            class=\"adf-metadata-action-buttons-clear\">\n                            <mat-icon adf-icon=\"clear\" />\n                        </button>\n                        <button\n                            mat-icon-button\n                            [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n                            (click)=\"saveChanges($event)\"\n                            color=\"primary\"\n                            data-automation-id=\"save-tags-metadata\"\n                            [disabled]=\"!hasMetadataChanged\">\n                            <mat-icon adf-icon=\"check\" />\n                        </button>\n                    </div>\n                </adf-content-metadata-header>\n            </mat-expansion-panel-header>\n            <div *ngIf=\"currentPanel.panelTitle === DefaultPanels.TAGS && editedPanelTitle !== DefaultPanels.TAGS\"\n                 class=\"adf-metadata-properties-tags\">\n                <adf-dynamic-chip-list [chips]=\"tagsToDisplay\" [showDelete]=\"false\" />\n            </div>\n            <div *ngIf=\"showEmptyTagMessage\" class=\"adf-metadata-no-item-added\">\n                {{ 'METADATA.BASIC.NO_TAGS_ADDED' | translate }}\n            </div>\n            <adf-tags-creator\n                *ngIf=\"!readOnly && isPanelEditing(DefaultPanels.TAGS)\"\n                class=\"adf-metadata-properties-tags\"\n                [tagNameControlVisible]=\"editing\"\n                (tagsChange)=\"storeTagsToAssign($event)\"\n                [mode]=\"tagsCreatorMode\"\n                [tags]=\"assignedTags\"\n                [disabledTagsRemoving]=\"saving\" />\n        </mat-expansion-panel>\n    </ng-container>\n\n    <ng-container *ngIf=\"displayCategories\">\n        <mat-expansion-panel\n            hideToggle\n            [expanded]=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && currentPanel.expanded\"\n            (opened)=\"expandPanel(DefaultPanels.CATEGORIES)\"\n            (closed)=\"closePanel(DefaultPanels.CATEGORIES)\"\n            class=\"adf-content-metadata-panel\"\n            data-automation-id=\"adf-content-metadata-categories-panel\">\n            <mat-expansion-panel-header\n                class=\"adf-metadata-properties-header\"\n                [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.SECTION' | translate: { sectionName: ('CATEGORIES_MANAGEMENT.CATEGORIES_TITLE' | translate) }\"\n                [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && currentPanel.expanded\">\n                <adf-content-metadata-header\n                    [title]=\"'CATEGORIES_MANAGEMENT.CATEGORIES_TITLE'\"\n                    [expanded]=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && currentPanel.expanded\">\n                    <button\n                        *ngIf=\"!readOnly && !isPanelEditing(DefaultPanels.CATEGORIES)\"\n                        mat-icon-button\n                        (click)=\"toggleGroupEditing(DefaultPanels.CATEGORIES, $event)\"\n                        [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n                        [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate: { sectionName: ('CATEGORIES_MANAGEMENT.CATEGORIES_TITLE' | translate) }\"\n                        data-automation-id=\"meta-data-categories-edit\"\n                        class=\"adf-categories-button adf-edit-icon-buttons\">\n                        <mat-icon adf-icon=\"mode_edit\" />\n                    </button>\n                    <div *ngIf=\"isPanelEditing(DefaultPanels.CATEGORIES)\" class=\"adf-metadata-action-buttons\">\n                        <button\n                            mat-icon-button\n                            [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n                            (click)=\"cancelGroupEditing(DefaultPanels.CATEGORIES, $event)\"\n                            data-automation-id=\"reset-metadata\"\n                            class=\"adf-metadata-action-buttons-clear\">\n                            <mat-icon adf-icon=\"clear\" />\n                        </button>\n                        <button\n                            mat-icon-button\n                            [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n                            (click)=\"saveChanges($event)\"\n                            color=\"primary\"\n                            data-automation-id=\"save-categories-metadata\"\n                            [disabled]=\"!hasMetadataChanged\">\n                            <mat-icon adf-icon=\"check\" />\n                        </button>\n                    </div>\n                </adf-content-metadata-header>\n            </mat-expansion-panel-header>\n            <div *ngIf=\"currentPanel.panelTitle === DefaultPanels.CATEGORIES && editedPanelTitle !== DefaultPanels.CATEGORIES\">\n                <p *ngFor=\"let category of categories\" class=\"adf-metadata-categories\">{{ category.name }}</p>\n            </div>\n            <div *ngIf=\"showEmptyCategoryMessage\" class=\"adf-metadata-no-item-added\">\n                {{ 'CATEGORIES_MANAGEMENT.NO_CATEGORIES_ADDED' | translate }}\n            </div>\n            <adf-categories-management\n                *ngIf=\"!readOnly && isPanelEditing(DefaultPanels.CATEGORIES)\"\n                class=\"adf-metadata-categories-header\"\n                [categoryNameControlVisible]=\"editing\"\n                [disableRemoval]=\"saving\"\n                [categories]=\"categories\"\n                [managementMode]=\"categoriesManagementMode\"\n                [classifiableChanged]=\"classifiableChanged\"\n                (categoriesChange)=\"storeCategoriesToAssign($event)\" />\n        </mat-expansion-panel>\n    </ng-container>\n\n    <mat-expansion-panel\n        *ngFor=\"let customPanel of customPanels\"\n        [expanded]=\"currentPanel.panelTitle === customPanel.panelTitle && currentPanel.expanded\"\n        (opened)=\"expandPanel(customPanel.panelTitle)\"\n        (closed)=\"closePanel(customPanel.panelTitle)\"\n        class=\"adf-content-metadata-panel\"\n        hideToggle>\n        <mat-expansion-panel-header\n            class=\"adf-metadata-properties-header\"\n            [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.SECTION' | translate: { sectionName: (customPanel.panelTitle | translate) }\"\n            [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === customPanel.panelTitle && currentPanel.expanded\">\n            <adf-content-metadata-header\n                class=\"adf-metadata-custom-panel-title\"\n                [title]=\"customPanel.panelTitle\"\n                [expanded]=\"currentPanel.panelTitle === customPanel.panelTitle && currentPanel.expanded\" />\n        </mat-expansion-panel-header>\n        <adf-dynamic-component [id]=\"customPanel.component\" [data]=\"{ node }\" />\n    </mat-expansion-panel>\n\n    <ng-container *ngIf=\"groupedProperties$ | async; else loading; let groupedProperties\">\n        <div *ngFor=\"let group of groupedProperties; let first = first\" class=\"adf-metadata-grouped-properties-container\">\n            <mat-expansion-panel\n                [attr.data-automation-id]=\"'adf-metadata-group-' + group.title\"\n                [expanded]=\"multi ? !displayDefaultProperties && first || group.expanded : !displayDefaultProperties && first || currentPanel.panelTitle === group.title && currentPanel.expanded\"\n                (opened)=\"expandPanel(group.title); group.expanded = true\"\n                (closed)=\"closePanel(group.title); group.expanded = false\"\n                class=\"adf-content-metadata-panel\"\n                hideToggle>\n                <mat-expansion-panel-header\n                    class=\"adf-metadata-properties-header\"\n                    [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.SECTION' | translate: { sectionName: (group.title | translate) }\"\n                    [class.adf-metadata-properties-header-expanded]=\"currentPanel.panelTitle === group.title && currentPanel.expanded\">\n                    <adf-content-metadata-header [title]=\"group.title\" [expanded]=\"currentPanel.panelTitle === group.title && currentPanel.expanded\">\n                        <button\n                            *ngIf=\"group.editable && !this.readOnly && !isPanelEditing(group.title)\"\n                            mat-icon-button\n                            [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT' | translate\"\n                            [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT' | translate: { sectionName: (group.title | translate) }\"\n                            data-automation-id=\"meta-data-card-toggle-edit\"\n                            class=\"adf-edit-icon-buttons\"\n                            (click)=\"toggleGroupEditing(group.title, $event)\">\n                            <mat-icon adf-icon=\"mode_edit\" />\n                        </button>\n                        <div class=\"adf-metadata-action-buttons\" *ngIf=\"group.editable && isPanelEditing(group.title)\">\n                            <button\n                                mat-icon-button\n                                [attr.title]=\"'CORE.METADATA.ACTIONS.CANCEL' | translate\"\n                                (click)=\"cancelGroupEditing(group.title, $event)\"\n                                data-automation-id=\"reset-metadata\"\n                                class=\"adf-metadata-action-buttons-clear\">\n                                <mat-icon adf-icon=\"clear\" />\n                            </button>\n                            <button\n                                mat-icon-button\n                                [attr.title]=\"'CORE.METADATA.ACTIONS.SAVE' | translate\"\n                                (click)=\"saveChanges($event)\"\n                                color=\"primary\"\n                                data-automation-id=\"save-metadata\"\n                                [disabled]=\"!hasMetadataChanged || invalidProperties.size > 0\">\n                                <mat-icon adf-icon=\"check\" />\n                            </button>\n                        </div>\n                    </adf-content-metadata-header>\n                </mat-expansion-panel-header>\n                <div *ngIf=\"!showGroup(group) && !displayEmpty && group.editable && editedPanelTitle !== group.title\" class=\"adf-metadata-no-item-added\">\n                    {{ 'METADATA.BASIC.NO_ITEMS_MESSAGE' | translate : { groupTitle: group.title | translate } }}\n                </div>\n                <adf-card-view\n                    class=\"adf-metadata-properties-expansion-panel\"\n                    (keydown)=\"keyDown($event)\"\n                    [properties]=\"group.properties\"\n                    [editable]=\"!readOnly && group.editable && isPanelEditing(group.title)\"\n                    [displayEmpty]=\"displayEmpty\"\n                    [copyToClipboardAction]=\"copyToClipboardAction\"\n                    [useChipsForMultiValueProperty]=\"useChipsForMultiValueProperty\"\n                    [multiValueSeparator]=\"multiValueSeparator\" />\n            </mat-expansion-panel>\n        </div>\n    </ng-container>\n\n    <ng-template #loading>\n        <mat-progress-bar mode=\"indeterminate\" [attr.aria-label]=\"'DATA_LOADING' | translate\" />\n    </ng-template>\n</mat-accordion>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { AppConfigService } from '@alfresco/adf-core';\nimport { from, Observable, of, zip } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { AspectEntry, AspectPaging, AspectsApi, ListAspectsOpts } from '@alfresco/js-api';\nimport { CustomAspectPaging } from '../interfaces/custom-aspect-paging.interface';\n\nexport const StandardAspectsWhere = `(modelId in ('cm:contentmodel', 'emailserver:emailserverModel', 'smf:smartFolder', 'app:applicationmodel' ))`;\nexport const CustomAspectsWhere = `(not namespaceUri matches('http://www.alfresco.*'))`;\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AspectListService {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n    private readonly appConfigService = inject(AppConfigService);\n\n    private _aspectsApi: AspectsApi;\n    get aspectsApi(): AspectsApi {\n        this._aspectsApi = this._aspectsApi ?? new AspectsApi(this.alfrescoApiService.getInstance());\n        return this._aspectsApi;\n    }\n\n    getAllAspects(standardOpts?: ListAspectsOpts, customOpts?: ListAspectsOpts): Observable<CustomAspectPaging> {\n        const visibleAspectList = this.getVisibleAspects();\n        const standardAspects$ = this.getAspects(visibleAspectList, standardOpts);\n        const customAspects$ = this.getAspects(visibleAspectList, customOpts);\n        return zip(standardAspects$, customAspects$).pipe(\n            map(([standardAspectPaging, customAspectPaging]) => ({ standardAspectPaging, customAspectPaging }))\n        );\n    }\n\n    getAspects(whiteList: string[], opts?: ListAspectsOpts): Observable<AspectPaging> {\n        return from(this.aspectsApi.listAspects(opts)).pipe(\n            map((result) => {\n                if (result?.list?.entries) {\n                    result.list.entries = this.filterAspectByConfig(whiteList, result.list.entries);\n                }\n                return result;\n            }),\n            catchError(() => of({ list: { entries: [] } }))\n        );\n    }\n\n    private filterAspectByConfig(visibleAspectList: string[], aspectEntries: AspectEntry[]): AspectEntry[] {\n        let result = aspectEntries ? aspectEntries : [];\n        if (visibleAspectList?.length > 0 && aspectEntries) {\n            result = aspectEntries.filter((value) => visibleAspectList.includes(value?.entry?.id));\n        }\n        return result;\n    }\n\n    getVisibleAspects(): string[] {\n        let visibleAspectList: string[] = [];\n        const aspectVisibleConfig = this.appConfigService.get('aspect-visible');\n        if (aspectVisibleConfig) {\n            for (const aspectGroup of Object.keys(aspectVisibleConfig)) {\n                visibleAspectList = visibleAspectList.concat(aspectVisibleConfig[aspectGroup]);\n            }\n        }\n        return visibleAspectList;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { NodesApiService } from '../common/services/nodes-api.service';\nimport { EMPTY, Observable, zip } from 'rxjs';\nimport { concatMap, expand, map, reduce, take, tap } from 'rxjs/operators';\nimport { AspectListService, CustomAspectsWhere, StandardAspectsWhere } from './services/aspect-list.service';\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\nimport { AspectEntry, ContentPagingQuery, ListAspectsOpts } from '@alfresco/js-api';\nimport { CommonModule } from '@angular/common';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTableModule } from '@angular/material/table';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-aspect-list',\n    imports: [CommonModule, MatExpansionModule, MatCheckboxModule, MatTableModule, TranslatePipe, MatProgressSpinnerModule],\n    templateUrl: './aspect-list.component.html',\n    styleUrls: ['./aspect-list.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class AspectListComponent implements OnInit {\n    private readonly aspectListService = inject(AspectListService);\n    private readonly nodeApiService = inject(NodesApiService);\n\n    /** Node Id of the node that we want to update */\n    @Input({ required: true })\n    nodeId: string = '';\n\n    /** List of aspects' ids which should not be displayed. */\n    @Input()\n    excludedAspects?: string[] = [];\n\n    /** Emitted every time the user select a new aspect */\n    @Output()\n    valueChanged: EventEmitter<string[]> = new EventEmitter<string[]>();\n\n    /** Emitted every time the number of selected aspects changes */\n    @Output()\n    updateCounter: EventEmitter<number> = new EventEmitter<number>();\n\n    propertyColumns: string[] = ['name', 'title', 'dataType'];\n    aspects$: Observable<AspectEntry[]> = null;\n    nodeAspects: string[] = [];\n    nodeAspectStatus: string[] = [];\n    notDisplayedAspects: string[] = [];\n    hasEqualAspect: boolean = true;\n    isPanelOpen: boolean[] = [];\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    private customAspectsLoaded = 0;\n    private standardAspectsLoaded = 0;\n    private hasMoreAspects = false;\n\n    ngOnInit(): void {\n        let aspects$: Observable<AspectEntry[]>;\n        if (this.nodeId) {\n            const node$ = this.nodeApiService.getNode(this.nodeId);\n            const customAspect$ = this.aspectListService\n                .getAspects(this.aspectListService.getVisibleAspects(), {\n                    where: CustomAspectsWhere,\n                    include: ['properties'],\n                    skipCount: 0,\n                    maxItems: 100\n                })\n                .pipe(map((customAspects) => customAspects?.list?.entries.flatMap((customAspect) => customAspect.entry.id)));\n            aspects$ = zip(node$, customAspect$).pipe(\n                tap(([node, customAspects]) => {\n                    this.nodeAspects = node.aspectNames.filter(\n                        (aspect) => this.aspectListService.getVisibleAspects().includes(aspect) || customAspects.includes(aspect)\n                    );\n                    this.nodeAspectStatus = [...this.nodeAspects];\n                    this.notDisplayedAspects = node.aspectNames.filter(\n                        (aspect) => !this.aspectListService.getVisibleAspects().includes(aspect) && !customAspects.includes(aspect)\n                    );\n                    this.valueChanged.emit([...this.nodeAspects, ...this.notDisplayedAspects]);\n                    this.updateCounter.emit(this.nodeAspects.length);\n                }),\n                concatMap(() => this.loadAspects({ skipCount: this.standardAspectsLoaded }, { skipCount: this.customAspectsLoaded })),\n                takeUntilDestroyed(this.destroyRef)\n            );\n        } else {\n            aspects$ = this.loadAspects({ skipCount: this.standardAspectsLoaded }, { skipCount: this.customAspectsLoaded });\n        }\n        this.aspects$ = aspects$.pipe(\n            expand(() =>\n                this.hasMoreAspects ? this.loadAspects({ skipCount: this.standardAspectsLoaded }, { skipCount: this.customAspectsLoaded }) : EMPTY\n            ),\n            map((aspects) => aspects.filter((aspect) => !this.excludedAspects.includes(aspect.entry.id))),\n            reduce((acc, aspects) => [...acc, ...aspects])\n        );\n    }\n\n    onCheckBoxClick(event: Event) {\n        event.stopImmediatePropagation();\n    }\n\n    onChange(change: MatCheckboxChange, prefixedName: string) {\n        if (change.checked) {\n            this.nodeAspects.push(prefixedName);\n        } else {\n            this.nodeAspects.splice(this.nodeAspects.indexOf(prefixedName), 1);\n        }\n        this.updateEqualityOfAspectList();\n        this.valueChanged.emit([...this.nodeAspects, ...this.notDisplayedAspects]);\n        this.updateCounter.emit(this.nodeAspects.length);\n    }\n\n    reset() {\n        if (this.nodeAspectStatus && this.nodeAspectStatus.length > 0) {\n            this.nodeAspects.splice(0, this.nodeAspects.length, ...this.nodeAspectStatus);\n            this.hasEqualAspect = true;\n            this.valueChanged.emit([...this.nodeAspects, ...this.notDisplayedAspects]);\n            this.updateCounter.emit(this.nodeAspects.length);\n        } else {\n            this.clear();\n        }\n    }\n\n    clear() {\n        this.nodeAspects = [];\n        this.updateEqualityOfAspectList();\n        this.valueChanged.emit([...this.nodeAspects, ...this.notDisplayedAspects]);\n        this.updateCounter.emit(this.nodeAspects.length);\n    }\n\n    getId(aspect: any): string {\n        return aspect?.entry?.title ? aspect?.entry?.title : aspect?.entry?.id.replace(':', '-');\n    }\n\n    getTitle(aspect: any): string {\n        return aspect?.entry?.title ? aspect?.entry?.title : aspect?.entry?.id;\n    }\n\n    private updateEqualityOfAspectList() {\n        if (this.nodeAspectStatus.length !== this.nodeAspects.length) {\n            this.hasEqualAspect = false;\n        } else {\n            this.hasEqualAspect = this.nodeAspects.every((aspect) => this.nodeAspectStatus.includes(aspect));\n        }\n    }\n\n    private loadAspects(standardAspectsPagination?: ContentPagingQuery, customAspectsPagination?: ContentPagingQuery): Observable<AspectEntry[]> {\n        const standardAspectOpts: ListAspectsOpts = {\n            where: StandardAspectsWhere,\n            include: ['properties'],\n            skipCount: standardAspectsPagination?.skipCount ?? 0,\n            maxItems: 100\n        };\n        const customAspectOpts: ListAspectsOpts = {\n            where: CustomAspectsWhere,\n            include: ['properties'],\n            skipCount: customAspectsPagination?.skipCount ?? 0,\n            maxItems: 100\n        };\n        return this.aspectListService.getAllAspects(standardAspectOpts, customAspectOpts).pipe(\n            take(1),\n            tap((aspectsPaging) => {\n                this.customAspectsLoaded += aspectsPaging.customAspectPaging?.list?.pagination?.count ?? 0;\n                this.standardAspectsLoaded += aspectsPaging.standardAspectPaging?.list?.pagination?.count ?? 0;\n                this.hasMoreAspects =\n                    aspectsPaging.customAspectPaging?.list?.pagination?.hasMoreItems ||\n                    aspectsPaging.standardAspectPaging?.list?.pagination?.hasMoreItems;\n            }),\n            map((aspectsPaging) => [\n                ...(aspectsPaging.standardAspectPaging?.list?.entries ?? []),\n                ...(aspectsPaging.customAspectPaging?.list?.entries ?? [])\n            ])\n        );\n    }\n}\n","<div id=\"aspect-list-container\" class=\"adf-aspect-list-container\" *ngIf=\"aspects$ | async as aspects; else loading\">\n    <mat-accordion class=\"adf-accordion-aspect-list\">\n        <div class=\"adf-accordion-aspect-list-item\"\n             *ngFor=\"let aspect of aspects; let colIndex = index\"\n             [ngClass]=\"{'adf-hover' : !isPanelOpen[colIndex]}\">\n            <mat-checkbox class=\"adf-aspect-list-check-button\" [id]=\"'aspect-list-'+colIndex+'-check'\"\n                          [checked]=\"nodeAspects?.includes(aspect?.entry?.id)\"\n                          (click)=\"onCheckBoxClick($event)\"\n                          [aria-label]=\"getTitle(aspect)\"\n                          (change)=\"onChange($event, aspect?.entry?.id)\"/>\n            <mat-expansion-panel [id]=\"'aspect-list-'+getId(aspect)\"\n                                 class=\"adf-accordion-aspect-list-expansion-panel\"\n                                 (opened)=\"isPanelOpen[colIndex] = true\"\n                                 (afterCollapse)=\"isPanelOpen[colIndex] = false\"\n            >\n                <mat-expansion-panel-header class='adf-accordion-aspect-list-expansion-panel-header'\n                                            [id]=\"'aspect-list-'+(getId(aspect))+'header'\">\n                    <mat-panel-title class=\"adf-accordion-aspect-list-expansion-panel-header-title\">\n                        {{getTitle(aspect)}}\n                    </mat-panel-title>\n                    <mat-panel-description\n                        class=\"adf-accordion-aspect-list-expansion-panel-header-description\"\n                        aria-hidden=\"true\"\n                        [id]=\"'aspect-list-'+colIndex+'-title'\"\n                        [title]=\"getTitle(aspect)\">\n                        {{getTitle(aspect)}}\n                    </mat-panel-description>\n                </mat-expansion-panel-header>\n                <p class=\"adf-property-paragraph\" [id]=\"'aspect-list-'+colIndex+'-description'\"> {{aspect?.entry?.description}}</p>\n\n                <table mat-table [dataSource]=\"aspect?.entry?.properties\" *ngIf=\"aspect?.entry?.properties?.length > 0\" class=\"adf-aspect-property-table\" [id]=\"'aspect-list-'+colIndex+'-properties-table'\">\n                    <ng-container matColumnDef=\"name\">\n                      <th class=\"adf-aspect-property-table-column-name\" mat-header-cell *matHeaderCellDef> {{'ADF-ASPECT-LIST.PROPERTY_NAME' | translate}} </th>\n                      <td class=\"adf-aspect-property-table-column-name adf-aspect-property-table-cell\" mat-cell *matCellDef=\"let property\"> {{property.id}} </td>\n                    </ng-container>\n                    <ng-container matColumnDef=\"title\">\n                      <th class=\"adf-aspect-property-table-column-title\" mat-header-cell *matHeaderCellDef> {{'ADF-ASPECT-LIST.DESCRIPTION' | translate}} </th>\n                      <td class=\"adf-aspect-property-table-column-title adf-aspect-property-table-cell\" mat-cell *matCellDef=\"let property\"> {{property.title}} </td>\n                    </ng-container>\n                    <ng-container matColumnDef=\"dataType\">\n                      <th class=\"adf-aspect-property-table-column-data-type\" mat-header-cell *matHeaderCellDef> {{'ADF-ASPECT-LIST.DATA_TYPE' | translate}} </th>\n                      <td class=\"adf-aspect-property-table-column-data-type adf-aspect-property-table-cell\" mat-cell *matCellDef=\"let property\"> {{property.dataType}} </td>\n                    </ng-container>\n                    <tr mat-header-row *matHeaderRowDef=\"propertyColumns\"></tr>\n                    <tr mat-row *matRowDef=\"let row; columns: propertyColumns;\"></tr>\n                  </table>\n            </mat-expansion-panel>\n        </div>\n    </mat-accordion>\n</div>\n\n<ng-template #loading>\n    <div class=\"adf-aspect-list-spinner\">\n       <mat-progress-spinner mode=\"indeterminate\" id=\"adf-aspect-spinner\" />\n    </div>\n</ng-template>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { AspectListDialogComponentData } from './aspect-list-dialog-data.interface';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AspectListComponent } from './aspect-list.component';\nimport { AutoFocusDirective } from '../directives/auto-focus.directive';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n    selector: 'adf-aspect-list-dialog',\n    imports: [CommonModule, MatDialogModule, TranslatePipe, MatButtonModule, AspectListComponent, AutoFocusDirective],\n    templateUrl: './aspect-list-dialog.component.html',\n    styleUrls: ['./aspect-list-dialog.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class AspectListDialogComponent implements OnInit {\n    private readonly dialog = inject<MatDialogRef<AspectListDialogComponent>>(MatDialogRef);\n    data = inject<AspectListDialogComponentData>(MAT_DIALOG_DATA);\n\n    title: string;\n    description: string;\n    currentNodeId: string;\n    overTableMessage: string;\n    counter = 0;\n\n    currentAspectSelection: string[] = [];\n\n    constructor() {\n        const data = this.data;\n\n        this.title = data.title;\n        this.description = data.description;\n        this.overTableMessage = data.overTableMessage;\n        this.currentNodeId = data.nodeId;\n    }\n\n    ngOnInit() {\n        this.dialog.backdropClick().subscribe(() => {\n            this.close();\n        });\n        this.dialog.keydownEvents().subscribe((event) => {\n            // Esc\n            if (event.keyCode === 27) {\n                event.preventDefault();\n                event.stopImmediatePropagation();\n                this.close();\n            }\n        });\n    }\n\n    onValueChanged(aspectList: string[]) {\n        this.currentAspectSelection = aspectList;\n    }\n\n    onUpdateCounter(count: number) {\n        this.counter = count;\n    }\n\n    close() {\n        this.data.select.complete();\n    }\n\n    onCancel() {\n        this.close();\n    }\n\n    onApply() {\n        this.data.select.next(this.currentAspectSelection);\n        this.close();\n    }\n}\n","<div mat-dialog-title data-automation-id=\"aspect-list-dialog-title\" class=\"adf-aspect-list-dialog\">\n    <h1 class=\"adf-aspect-list-dialog-title\">{{title | translate}}</h1>\n    <div class=\"adf-aspect-list-dialog-description\">{{description | translate}}</div>\n</div>\n\n<div class=\"adf-aspect-list-dialog-information\">\n    <p id=\"aspect-list-dialog-over-table-message\">{{overTableMessage | translate}}</p>\n    <p id=\"aspect-list-dialog-counter\" aria-live=\"polite\">{{counter}}\n        {{'ADF-ASPECT-LIST.DIALOG.SELECTED' | translate}}</p>\n</div>\n<mat-dialog-content class=\"adf-aspect-dialog-content\">\n    <adf-aspect-list #aspectList (valueChanged)=\"onValueChanged($event)\" (updateCounter)=\"onUpdateCounter($event)\" [nodeId]=\"currentNodeId\" [excludedAspects]=\"data.excludedAspects\" />\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"adf-aspect-list-dialog\">\n    <div>\n        <button mat-button (click)=\"aspectList.reset()\" id=\"aspect-list-dialog-actions-reset\"\n            data-automation-id=\"aspect-list-dialog-actions-reset\">{{\n            'ADF-ASPECT-LIST.DIALOG.RESET' | translate }}\n        </button>\n\n        <button mat-button (click)=\"aspectList.clear()\" id=\"aspect-list-dialog-actions-clear\"\n            data-automation-id=\"aspect-list-dialog-actions-clear\">{{\n            'ADF-ASPECT-LIST.DIALOG.CLEAR' | translate }}\n        </button>\n    </div>\n    <div>\n        <button mat-button adf-auto-focus (click)=\"onCancel()\" id=\"aspect-list-dialog-actions-cancel\"\n            data-automation-id=\"aspect-list-dialog-actions-cancel\">{{\n            'ADF-ASPECT-LIST.DIALOG.CANCEL' | translate }}\n        </button>\n\n        <button mat-button (click)=\"onApply()\" id=\"aspect-list-dialog-actions-apply\"\n            [disabled]=\"aspectList.hasEqualAspect\"\n            data-automation-id=\"aspect-list-dialog-actions-apply\">{{\n            'ADF-ASPECT-LIST.DIALOG.APPLY' | translate }}\n        </button>\n    </div>\n</mat-dialog-actions>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Observable, Subject } from 'rxjs';\nimport { AspectListDialogComponentData } from '../aspect-list-dialog-data.interface';\nimport { AspectListDialogComponent } from '../aspect-list-dialog.component';\nimport { OverlayContainer } from '@angular/cdk/overlay';\nimport { TagService } from '../../tag';\nimport { CategoryService } from '../../category';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DialogAspectListService {\n    private readonly dialog = inject(MatDialog);\n    private readonly overlayContainer = inject(OverlayContainer);\n    private readonly tagService = inject(TagService);\n    private readonly categoryService = inject(CategoryService);\n\n    openAspectListDialog(nodeId?: string, selectorAutoFocusedOnClose?: string): Observable<string[]> {\n        const select = new Subject<string[]>();\n        select.subscribe({\n            complete: this.close.bind(this)\n        });\n\n        const data: AspectListDialogComponentData = {\n            title: 'ADF-ASPECT-LIST.DIALOG.TITLE',\n            description: 'ADF-ASPECT-LIST.DIALOG.DESCRIPTION',\n            overTableMessage: 'ADF-ASPECT-LIST.DIALOG.OVER-TABLE-MESSAGE',\n            select,\n            nodeId,\n            excludedAspects: [\n                ...(this.tagService.areTagsEnabled() ? [] : ['cm:taggable']),\n                ...(this.categoryService.areCategoriesEnabled() ? [] : ['cm:generalclassifiable'])\n            ]\n        };\n\n        this.openDialog(data, 'adf-aspect-list-dialog', '750px', selectorAutoFocusedOnClose);\n        return select;\n    }\n\n    private openDialog(data: AspectListDialogComponentData, panelClass: string, width: string, selectorAutoFocusedOnClose?: string) {\n        this.dialog\n            .open(AspectListDialogComponent, {\n                data,\n                panelClass,\n                width,\n                role: 'dialog',\n                disableClose: true\n            })\n            .afterClosed()\n            .subscribe(() => this.focusOnClose(selectorAutoFocusedOnClose));\n        this.overlayContainer.getContainerElement().setAttribute('role', 'main');\n    }\n\n    close() {\n        this.dialog.closeAll();\n        this.overlayContainer.getContainerElement().setAttribute('role', 'region');\n    }\n\n    private focusOnClose(selectorAutoFocusedOnClose: string): void {\n        if (selectorAutoFocusedOnClose) {\n            document.querySelector<HTMLElement>(selectorAutoFocusedOnClose)?.focus();\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { DialogAspectListService } from './dialog-aspect-list.service';\nimport { CardViewContentUpdateService } from '../../common/services/card-view-content-update.service';\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { TagService } from '../../tag/services/tag.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NodeAspectService {\n    private readonly nodesApiService = inject(NodesApiService);\n    private readonly dialogAspectListService = inject(DialogAspectListService);\n    private readonly cardViewContentUpdateService = inject(CardViewContentUpdateService);\n    private readonly tagService = inject(TagService);\n\n    updateNodeAspects(nodeId: string, selectorAutoFocusedOnClose?: string) {\n        this.dialogAspectListService.openAspectListDialog(nodeId, selectorAutoFocusedOnClose).subscribe((aspectList) => {\n            this.nodesApiService.updateNode(nodeId, { aspectNames: [...aspectList] }).subscribe((updatedNode) => {\n                this.nodesApiService.nodeUpdated.next(updatedNode);\n                this.cardViewContentUpdateService.updateNodeAspect(updatedNode);\n                this.tagService.refresh.emit();\n            });\n        });\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { NodeAspectService } from '../../../aspect-list/services/node-aspect.service';\nimport { ContentMetadataCustomPanel, PresetConfig } from '../../interfaces/content-metadata.interfaces';\nimport { VersionCompatibilityService } from '../../../version-compatibility/version-compatibility.service';\nimport { ContentService } from '../../../common/services/content.service';\nimport { AllowableOperationsEnum } from '../../../common/models/allowable-operations.enum';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { ContentMetadataComponent } from '../content-metadata/content-metadata.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-content-metadata-card',\n    imports: [CommonModule, MatCardModule, ContentMetadataComponent, MatButtonModule, IconModule, TranslatePipe],\n    templateUrl: './content-metadata-card.component.html',\n    styleUrls: ['./content-metadata-card.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-content-metadata-card' }\n})\nexport class ContentMetadataCardComponent implements OnChanges {\n    private readonly contentService = inject(ContentService);\n    private readonly nodeAspectService = inject(NodeAspectService);\n    private readonly versionCompatibilityService = inject(VersionCompatibilityService);\n\n    /** (required) The node entity to fetch metadata about */\n    @Input({ required: true })\n    node: Node;\n\n    /**\n     * This flag displays/hides empty metadata\n     * fields.\n     */\n    @Input()\n    displayEmpty?: boolean = false;\n\n    /**\n     * This flag displays desired aspect when open for the first time fields.\n     */\n    @Input()\n    displayAspect?: string = null;\n\n    /** Display tags in the card */\n    @Input()\n    displayTags = true;\n\n    /** Display categories in the card */\n    @Input()\n    displayCategories = true;\n\n    /**\n     * Name or configuration of the metadata preset, which defines aspects\n     * and their properties.\n     */\n    @Input({ required: true })\n    preset: string | PresetConfig;\n\n    /**\n     * This flag sets the metadata in read only mode preventing changes.\n     */\n    @Input()\n    readOnly? = false;\n\n    /**\n     * This flag allows the component to display more\n     * than one accordion at a time.\n     */\n    @Input()\n    multi? = false;\n\n    /** This flag toggles editable of content. */\n    @Input()\n    editable? = false;\n\n    /** List of custom metadata panels to be displayed with registered custom components */\n    @Input()\n    customPanels: ContentMetadataCustomPanel[];\n\n    private _displayDefaultProperties: boolean = true;\n\n    /**\n     * This flag displays/hides the metadata properties.\n     */\n    @Input()\n    set displayDefaultProperties(value: boolean) {\n        this._displayDefaultProperties = value;\n        this.onDisplayDefaultPropertiesChange();\n    }\n\n    get displayDefaultProperties(): boolean {\n        return this._displayDefaultProperties;\n    }\n\n    expanded: boolean;\n\n    editAspectSupported = false;\n\n    constructor() {\n        this.editAspectSupported = this.versionCompatibilityService.isVersionSupported('7');\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.displayAspect?.currentValue) {\n            this.expanded = true;\n        }\n    }\n\n    onDisplayDefaultPropertiesChange(): void {\n        this.expanded = !this._displayDefaultProperties;\n    }\n\n    hasAllowableOperations() {\n        return this.contentService.hasAllowableOperations(this.node, AllowableOperationsEnum.UPDATE);\n    }\n\n    openAspectDialog() {\n        this.nodeAspectService.updateNodeAspects(this.node.id);\n    }\n\n    isEditAspectSupported(): boolean {\n        return !this.readOnly && this.hasAllowableOperations() && this.editAspectSupported;\n    }\n}\n","<mat-card appearance=\"outlined\" *ngIf=\"node\" class=\"adf-content-metadata-card-view\">\n    <mat-card-content class=\"adf-content-metadata-card-view-content\">\n        <adf-content-metadata\n            [displayDefaultProperties]=\"displayDefaultProperties\"\n            [expanded]=\"expanded\"\n            [node]=\"node\"\n            [displayEmpty]=\"displayEmpty\"\n            [readOnly]=\"!editable\"\n            [multi]=\"multi\"\n            [displayAspect]=\"displayAspect\"\n            [preset]=\"preset\"\n            [displayTags]=\"displayTags\"\n            [displayCategories]=\"displayCategories\"\n            [customPanels]=\"customPanels\" />\n    </mat-card-content>\n    <mat-card-footer class=\"adf-content-metadata-card-footer adf-content-metadata-card-view-footer\">\n        <div>\n            <button *ngIf=\"isEditAspectSupported()\"\n                mat-icon-button\n                (click)=\"openAspectDialog()\"\n                [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT_ASPECTS' | translate\"\n                [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT_ASPECTS' | translate\"\n                data-automation-id=\"meta-data-card-edit-aspect\">\n                <mat-icon adf-icon=\"menu\" />\n            </button>\n        </div>\n    </mat-card-footer>\n</mat-card>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport declare interface AspectOrientedConfig {\n    [key: string]: string | string[] | boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface Property {\n    name: string;\n    title: string;\n    description?: string;\n    dataType: string;\n    defaultValue?: any;\n    mandatory: boolean;\n    multiValued: boolean;\n    editable?: boolean;\n    protected?: boolean;\n    enforced?: boolean;\n    indexed?: boolean;\n    url?: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Property } from './property.interface';\n\nexport interface PropertyGroup {\n    name: string;\n    title: string;\n    description?: string;\n    properties: {\n        [key: string]: Property;\n    };\n}\n\nexport interface PropertyGroupContainer {\n    [key: string]: PropertyGroup;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Property } from './property.interface';\n\nexport interface OrganisedPropertyGroup {\n    title: string;\n    name?: string;\n    properties: Property[];\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CardViewItem } from '@alfresco/adf-core';\n\nexport interface CardViewGroup {\n    title: string;\n    properties: CardViewItem[];\n    editable: boolean;\n    expanded?: boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PropertyGroupContainer } from './property-group.interface';\nimport { OrganisedPropertyGroup } from './organised-property-group.interface';\n\nexport interface ContentMetadataConfig {\n    isGroupAllowed(groupName: string): boolean;\n    reorganiseByConfig(propertyGroups: PropertyGroupContainer): OrganisedPropertyGroup[];\n    filterExcludedPreset(propertyGroups: OrganisedPropertyGroup[]): OrganisedPropertyGroup[];\n    appendAllPreset(propertyGroups: PropertyGroupContainer): OrganisedPropertyGroup[];\n    isIncludeAllEnabled(): boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport declare type InDifferentConfig = '*';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Property } from './property.interface';\n\nexport interface LayoutOrientedConfigItem {\n    aspect?: string;\n    type?: string;\n    properties: string | string[] | Property[];\n    includeAll?: boolean;\n    exclude?: string | string[];\n    editable?: boolean;\n}\n\nexport interface LayoutOrientedConfigLayoutBlock {\n    title: string;\n    items: LayoutOrientedConfigItem[];\n}\n\nexport type LayoutOrientedConfig = Array<LayoutOrientedConfigLayoutBlock>;\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InDifferentConfig } from './indifferent-config.interface';\nimport { AspectOrientedConfig } from './aspect-oriented-config.interface';\nimport { LayoutOrientedConfig } from './layout-oriented-config.interface';\n\nexport declare type PresetConfig = InDifferentConfig | AspectOrientedConfig | LayoutOrientedConfig;\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContentMetadataPanel } from './content-metadata-panel.interface';\n\nexport interface ContentMetadataCustomPanel extends ContentMetadataPanel {\n    component: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface ContentMetadataPanel {\n    panelTitle: string;\n    expanded?: boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './aspect-oriented-config.interface';\nexport * from './property.interface';\nexport * from './property-group.interface';\nexport * from './organised-property-group.interface';\nexport * from './card-view-group.interface';\nexport * from './content-metadata-config.interface';\nexport * from './indifferent-config.interface';\nexport * from './layout-oriented-config.interface';\nexport * from './preset-config.interface';\nexport * from './content-metadata-custom-panel.interface';\nexport * from './content-metadata-panel.interface';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { ContentMetadataComponent } from './components/content-metadata/content-metadata.component';\nimport { ContentMetadataCardComponent } from './components/content-metadata-card/content-metadata-card.component';\nimport { ContentMetadataHeaderComponent } from './components/content-metadata/content-metadata-header.component';\n\nexport const CONTENT_METADATA_DIRECTIVES = [ContentMetadataComponent, ContentMetadataCardComponent, ContentMetadataHeaderComponent] as const;\n\n/** @deprecated use `...CONTENT_METADATA_DIRECTIVES` instead */\n@NgModule({\n    imports: [...CONTENT_METADATA_DIRECTIVES],\n    exports: [...CONTENT_METADATA_DIRECTIVES]\n})\nexport class ContentMetadataModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './components/content-metadata/content-metadata.component';\nexport * from './components/content-metadata/content-metadata-header.component';\nexport * from './components/content-metadata-card/content-metadata-card.component';\n\nexport * from './services/basic-properties.service';\nexport * from './services/content-metadata.service';\nexport * from './services/property-descriptors.service';\nexport * from './services/property-groups-translator.service';\nexport * from './services/config/content-metadata-config.factory';\nexport * from './services/content-type-property.service';\nexport * from './services/config/indifferent-config.service';\nexport * from './services/config/layout-oriented-config.service';\nexport * from './services/config/aspect-oriented-config.service';\n\nexport * from './interfaces/content-metadata.interfaces';\n\nexport * from './content-metadata.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PermissionElement } from '@alfresco/js-api';\n\nexport class PermissionDisplayModel implements PermissionElement {\n    authorityId?: string;\n    name?: string;\n    accessStatus?: 'ALLOWED' | 'DENIED' | string;\n    isInherited: boolean = false;\n    icon: string;\n    readonly?: boolean;\n\n    constructor(obj?: any) {\n        if (obj) {\n            this.authorityId = obj.authorityId;\n            this.name = obj.name;\n            this.accessStatus = obj.accessStatus;\n            this.isInherited = obj.isInherited !== null && obj.isInherited !== undefined ? obj.isInherited : false;\n            this.icon = obj.icon ? obj.icon : 'vpn_key';\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { TranslationService } from '@alfresco/adf-core';\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { EcmUserModel } from '../../common/models/ecm-user.model';\nimport { Group, GroupMemberPaging, GroupsApi, Node, PathElement, PermissionElement, SearchRequest } from '@alfresco/js-api';\nimport { SearchService } from '../../search/services/search.service';\nimport { Injectable, inject } from '@angular/core';\nimport { forkJoin, from, Observable, of, throwError } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\nimport { PermissionDisplayModel } from '../models/permission.model';\nimport { RoleModel } from '../models/role.model';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NodePermissionService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly searchApiService = inject(SearchService);\n    private readonly nodeService = inject(NodesApiService);\n    private readonly translation = inject(TranslationService);\n\n    private _groupsApi: GroupsApi;\n    get groupsApi(): GroupsApi {\n        this._groupsApi = this._groupsApi ?? new GroupsApi(this.apiService.getInstance());\n        return this._groupsApi;\n    }\n\n    /**\n     * Gets a list of roles for the current node.\n     *\n     * @param node The target node\n     * @returns Array of strings representing the roles\n     */\n    getNodeRoles(node: Node): Observable<string[]> {\n        if (node.path.elements.some((el) => el.nodeType === 'st:site' || el.nodeType === 'st:sites')) {\n            const searchRequest = this.buildRetrieveSiteQueryBody(node.path.elements);\n            return this.searchApiService.searchByQueryBody(searchRequest).pipe(\n                switchMap((siteNodeList) => {\n                    const siteName = siteNodeList.list.entries[0].entry.name;\n                    return this.getGroupMembersBySiteName(siteName);\n                })\n            );\n        } else {\n            return of(node.permissions?.settable);\n        }\n    }\n\n    /**\n     * Get permissions for a given node\n     *\n     * @param node Node to check permissions for\n     * @returns list of permission models\n     */\n    getNodePermissions(node: Node): PermissionDisplayModel[] {\n        const result: PermissionDisplayModel[] = [];\n\n        if (node?.permissions?.locallySet) {\n            node.permissions.locallySet.map((permissionElement) => {\n                result.push(new PermissionDisplayModel(permissionElement));\n            });\n        }\n\n        if (node?.permissions?.inherited) {\n            node.permissions.inherited.map((permissionElement) => {\n                const permissionInherited = new PermissionDisplayModel(permissionElement);\n                permissionInherited.isInherited = true;\n                result.push(permissionInherited);\n            });\n        }\n        return result;\n    }\n\n    /**\n     * Updates the permission role for a node.\n     *\n     * @param node Target node\n     * @param updatedPermissionRole Permission role to update or add\n     * @returns Node with updated permission\n     */\n    updatePermissionRole(node: Node, updatedPermissionRole: PermissionElement): Observable<Node> {\n        const permissionBody = { permissions: { locallySet: [] } };\n        const index = node.permissions.locallySet.map((permission) => permission.authorityId).indexOf(updatedPermissionRole.authorityId);\n        permissionBody.permissions.locallySet = permissionBody.permissions.locallySet.concat(node.permissions.locallySet);\n        if (index !== -1) {\n            permissionBody.permissions.locallySet[index] = updatedPermissionRole;\n        } else {\n            permissionBody.permissions.locallySet.push(updatedPermissionRole);\n        }\n        return this.nodeService.updateNode(node.id, permissionBody);\n    }\n\n    /**\n     * Update permissions for a node.\n     *\n     * @param nodeId ID of the target node\n     * @param permissionList New permission settings\n     * @returns Node with updated permissions\n     */\n    updateNodePermissions(nodeId: string, permissionList: PermissionElement[]): Observable<Node> {\n        return this.nodeService.getNode(nodeId).pipe(switchMap((node) => this.updateLocallySetPermissions(node, permissionList)));\n    }\n\n    /**\n     * Updates the locally set permissions for a node.\n     *\n     * @param node ID of the target node\n     * @param permissions Permission settings\n     * @returns Node with updated permissions\n     */\n    updateLocallySetPermissions(node: Node, permissions: PermissionElement[]): Observable<Node> {\n        const permissionBody = { permissions: { locallySet: [] } };\n        const permissionList = permissions;\n        const duplicatedPermissions = this.getDuplicatedPermissions(node.permissions.locallySet, permissionList);\n        if (duplicatedPermissions.length > 0) {\n            const list = duplicatedPermissions\n                .map((permission) => 'authority -> ' + permission.authorityId + ' / role -> ' + permission.name)\n                .join(', ');\n            const duplicatePermissionMessage: string = this.translation.instant('PERMISSION_MANAGER.ERROR.DUPLICATE-PERMISSION', { list });\n            return throwError(duplicatePermissionMessage);\n        }\n        permissionBody.permissions.locallySet = node.permissions.locallySet ? node.permissions.locallySet.concat(permissionList) : permissionList;\n        return this.nodeService.updateNode(node.id, permissionBody);\n    }\n\n    private getDuplicatedPermissions(nodeLocallySet: PermissionElement[], permissionListAdded: PermissionElement[]): PermissionElement[] {\n        const duplicatePermissions: PermissionElement[] = [];\n        if (nodeLocallySet) {\n            permissionListAdded.forEach((permission) => {\n                const duplicate = nodeLocallySet.find((localPermission) => this.isEqualPermission(localPermission, permission));\n                if (duplicate) {\n                    duplicatePermissions.push(duplicate);\n                }\n            });\n        }\n        return duplicatePermissions;\n    }\n\n    private isEqualPermission(oldPermission: PermissionElement, newPermission: PermissionElement): boolean {\n        return (\n            oldPermission.accessStatus === newPermission.accessStatus &&\n            oldPermission.authorityId === newPermission.authorityId &&\n            oldPermission.name === newPermission.name\n        );\n    }\n\n    /**\n     * Removes a permission setting from a node.\n     *\n     * @param node ID of the target node\n     * @param permissionToRemove Permission setting to remove\n     * @returns Node with modified permissions\n     */\n    removePermission(node: Node, permissionToRemove: PermissionElement): Observable<Node> {\n        const permissionBody = { permissions: { locallySet: [] } };\n        const index = node.permissions.locallySet.map((permission) => permission.authorityId).indexOf(permissionToRemove.authorityId);\n\n        if (index !== -1) {\n            node.permissions.locallySet.splice(index, 1);\n            permissionBody.permissions.locallySet = node.permissions.locallySet;\n            return this.nodeService.updateNode(node.id, permissionBody);\n        } else {\n            return of(node);\n        }\n    }\n\n    private getGroupMembersBySiteName(siteName: string): Observable<string[]> {\n        const groupName = 'GROUP_site_' + siteName;\n        return this.getGroupMemberByGroupName(groupName).pipe(\n            map((groupMemberPaging) => {\n                const displayResult: string[] = [];\n                groupMemberPaging.list.entries.forEach((member) => {\n                    displayResult.push(this.formattedRoleName(member.entry.displayName, 'site_' + siteName));\n                });\n                return displayResult;\n            })\n        );\n    }\n\n    /**\n     * Gets all members related to a group name.\n     *\n     * @param groupName Name of group to look for members\n     * @param opts Extra options supported by JS-API\n     * @returns List of members\n     */\n    getGroupMemberByGroupName(groupName: string, opts?: any): Observable<GroupMemberPaging> {\n        return from(this.groupsApi.listGroupMemberships(groupName, opts));\n    }\n\n    private formattedRoleName(displayName, siteName): string {\n        return displayName.replace(siteName + '_', '');\n    }\n\n    private buildRetrieveSiteQueryBody(nodePath: PathElement[]): SearchRequest {\n        const pathNames = nodePath.map((node) => 'name: \"' + node.name + '\"');\n        const builtPathNames = pathNames.join(' OR ');\n\n        return {\n            query: {\n                query: builtPathNames\n            },\n            paging: {\n                maxItems: 100,\n                skipCount: 0\n            },\n            include: ['aspectNames', 'properties'],\n            filterQueries: [\n                {\n                    query: `TYPE:'st:site'`\n                }\n            ]\n        };\n    }\n\n    getLocalPermissions(node: Node): PermissionDisplayModel[] {\n        const result: PermissionDisplayModel[] = [];\n\n        if (node?.permissions?.locallySet) {\n            node.permissions.locallySet.forEach((permissionElement) => {\n                result.push(new PermissionDisplayModel(permissionElement));\n            });\n        }\n\n        return result;\n    }\n\n    getInheritedPermission(node: Node): PermissionDisplayModel[] {\n        const result: PermissionDisplayModel[] = [];\n\n        if (node?.permissions?.inherited) {\n            node.permissions.inherited.forEach((permissionElement) => {\n                const permissionInherited = new PermissionDisplayModel(permissionElement);\n                permissionInherited.isInherited = true;\n                result.push(permissionInherited);\n            });\n        }\n        return result;\n    }\n\n    /**\n     * Removes permissions setting from a node.\n     *\n     * @param node target node with permission\n     * @param permissions Permissions to remove\n     * @returns Node with modified permissions\n     */\n    removePermissions(node: Node, permissions: PermissionElement[]): Observable<Node> {\n        const permissionBody = { permissions: { locallySet: [] } };\n\n        permissions.forEach((permission) => {\n            const index = node.permissions.locallySet.findIndex((locallySet) => locallySet.authorityId === permission.authorityId);\n            if (index !== -1) {\n                node.permissions.locallySet.splice(index, 1);\n            }\n        });\n        permissionBody.permissions.locallySet = node.permissions.locallySet;\n        return this.nodeService.updateNode(node.id, permissionBody);\n    }\n\n    /**\n     * updates permissions setting from a node.\n     *\n     * @param node target node with permission\n     * @param permissions Permissions to update\n     * @returns Node with modified permissions\n     */\n    updatePermissions(node: Node, permissions: PermissionElement[]): Observable<Node> {\n        const permissionBody = { permissions: { locallySet: [] } };\n        permissionBody.permissions.locallySet = permissions;\n        return this.nodeService.updateNode(node.id, permissionBody);\n    }\n\n    /**\n     * Gets all node detail for nodeId along with settable permissions.\n     *\n     * @param nodeId Id of the node\n     * @returns node and it's associated roles { node: Node; roles: RoleModel[] }\n     */\n    getNodeWithRoles(nodeId: string): Observable<{ node: Node; roles: RoleModel[] }> {\n        return this.nodeService.getNode(nodeId).pipe(\n            switchMap((node) =>\n                forkJoin({\n                    node: of(node),\n                    roles: this.getNodeRoles(node).pipe(\n                        catchError(() => of(node.permissions?.settable)),\n                        map((_roles) => _roles.map((role) => ({ role, label: role })))\n                    )\n                })\n            )\n        );\n    }\n\n    transformNodeToUserPerson(node: Node): { person: EcmUserModel; group: Group } {\n        let person = null;\n        let group: Group = null;\n        if (node.nodeType === 'cm:person') {\n            const firstName = node.properties['cm:firstName'];\n            const lastName = node.properties['cm:lastName'];\n            const email = node.properties['cm:email'];\n            const id = node.properties['cm:userName'];\n            person = new EcmUserModel({ id, firstName, lastName, email });\n        }\n\n        if (node.nodeType === 'cm:authorityContainer') {\n            const displayName = node.properties['cm:authorityDisplayName'] || node.properties['cm:authorityName'];\n            const id = node.properties['cm:authorityName'];\n            group = { displayName, id };\n        }\n        return { person, group };\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Group, Node, NodeEntry, PermissionElement } from '@alfresco/js-api';\nimport { PermissionDisplayModel } from './permission.model';\nimport { RoleModel } from './role.model';\nimport { EcmUserModel } from '../../common/models/ecm-user.model';\n\nexport interface NodePermissionsModel {\n    node: Node;\n    roles: RoleModel[];\n    inheritedPermissions: PermissionDisplayModel[];\n    localPermissions: PermissionDisplayModel[];\n}\n\nexport class MemberModel {\n    id: string;\n    role: string;\n    accessStatus: 'ALLOWED' | 'DENIED' | string;\n    entry: {\n        person?: EcmUserModel;\n        group?: Group;\n    };\n    readonly: boolean = false;\n\n    constructor(input?) {\n        if (input) {\n            Object.assign(this, input);\n        }\n    }\n\n    static parseFromSearchResult({ entry }: NodeEntry): MemberModel {\n        const result = new MemberModel();\n\n        if (entry.nodeType === 'cm:person') {\n            const person = new EcmUserModel({\n                firstName: entry.properties['cm:firstName'],\n                lastName: entry.properties['cm:lastName'],\n                email: entry.properties['cm:email'],\n                id: entry.properties['cm:userName']\n            });\n\n            result.id = person.id;\n            result.entry = { person };\n            result.accessStatus = 'ALLOWED';\n\n            return result;\n        }\n\n        if (entry.nodeType === 'cm:authorityContainer') {\n            const group: Group = {\n                id: entry.properties['cm:authorityName'],\n                displayName: entry.properties['cm:authorityDisplayName'] || entry.properties['cm:authorityName']\n            };\n\n            result.id = group.id;\n            result.entry = { group };\n            result.accessStatus = 'ALLOWED';\n\n            return result;\n        }\n        return null;\n    }\n\n    toPermissionElement(): PermissionElement {\n        return {\n            authorityId: this.id,\n            name: this.role,\n            accessStatus: this.accessStatus\n        };\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchRequest } from '@alfresco/js-api';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { SearchConfigurationInterface } from '../../../common/interfaces/search-configuration.interface';\n\nexport const SEARCH_QUERY_TOKEN = new InjectionToken<QueryProvider>('Alfresco Search Query Token');\nexport interface QueryProvider {\n    query: string;\n}\n\n@Injectable()\nexport class SearchPermissionConfigurationService implements SearchConfigurationInterface {\n    private readonly queryProvider = inject<QueryProvider>(SEARCH_QUERY_TOKEN, { optional: true });\n\n    public generateQueryBody(searchTerm: string, maxResults: number, skipCount: number): SearchRequest {\n        return {\n            query: {\n                query: this.getQuery(searchTerm)\n            },\n            include: ['properties', 'aspectNames'],\n            paging: {\n                maxItems: maxResults,\n                skipCount\n            },\n            filterQueries: [\n                /* eslint-disable-next-line */\n                { query: \"TYPE:'cm:authority'\" }\n            ]\n        };\n    }\n\n    private getQuery(searchTerm: string) {\n        let query: string;\n        if (this.queryProvider?.query) {\n            query = this.queryProvider.query.replace(new RegExp(/\\${([^}]+)}/g), searchTerm);\n        } else {\n            query = `(userName:*${searchTerm}* OR email:*${searchTerm}* OR firstName:*${searchTerm}* OR lastName:*${searchTerm}* OR authorityName:*${searchTerm}* OR authorityDisplayName:*${searchTerm}*) AND PATH:\"//cm:APP.DEFAULT/*\"`;\n        }\n        return query;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IconModule, InitialUsernamePipe, User } from '@alfresco/adf-core';\nimport { Group, NodeEntry } from '@alfresco/js-api';\nimport { Component, Input, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { NodePermissionService } from '../../services/node-permission.service';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n    selector: 'adf-user-icon-column',\n    imports: [CommonModule, IconModule, InitialUsernamePipe, TranslatePipe],\n    template: `\n        @if (!isSelected) {\n            <div class=\"adf-cell-value\" [attr.id]=\"group ? 'group-icon' : 'person-icon'\">\n                @if (displayText$ | async; as user) {\n                    @if (group) {\n                        <mat-icon class=\"adf-group-icon\" adf-icon=\"people_alt_outline\" />\n                        <span class=\"cdk-visually-hidden\">{{ 'USER_ICON.GROUP_ICON_ALT' | translate }}</span>\n                    } @else {\n                        <div [outerHTML]=\"user | usernameInitials: 'adf-people-initial'\"></div>\n                    }\n                }\n            </div>\n        } @else {\n            <div class=\"adf-cell-value\">\n                <mat-icon class=\"adf-people-select-icon adf-datatable-selected\" svgIcon=\"selected\" />\n                <span class=\"cdk-visually-hidden\">{{ 'USER_ICON.GROUP_USER_SELECTED_ALT' | translate }}</span>\n            </div>\n        }\n    `,\n    styleUrls: ['./user-icon-column.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-user-icon-column adf-datatable-content-cell' }\n})\nexport class UserIconColumnComponent implements OnInit {\n    private readonly nodePermissionService = inject(NodePermissionService);\n\n    @Input()\n    context: any;\n\n    @Input()\n    node: NodeEntry;\n\n    @Input()\n    selected: boolean = false;\n\n    displayText$ = new BehaviorSubject<User | Group>(null);\n    group = false;\n\n    get isSelected(): boolean {\n        return this.context?.row?.isSelected || this.selected;\n    }\n\n    ngOnInit() {\n        if (this.context) {\n            const { person, group, authorityId } = this.context.row.obj?.entry ?? this.context.row.obj;\n            this.group = this.isGroup(group, authorityId);\n            const user = person ? new User(person) : undefined;\n            this.displayText$.next(user || group || { displayName: authorityId });\n        }\n\n        if (this.node) {\n            const { person, group } = this.nodePermissionService.transformNodeToUserPerson(this.node.entry);\n            this.group = this.isGroup(group, null);\n            const user = person ? new User(person) : undefined;\n            this.displayText$.next(user || group);\n        }\n    }\n\n    private isGroup(group, authorityId): boolean {\n        return !!group || authorityId?.startsWith('GROUP_') || authorityId?.startsWith('ROLE_');\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchConfigurationService } from '../../../search/services/search-configuration.service';\nimport { SearchService } from '../../../search/services/search.service';\nimport { Node, NodeEntry } from '@alfresco/js-api';\nimport { Component, EventEmitter, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\nimport { debounceTime } from 'rxjs/operators';\nimport { SearchPermissionConfigurationService } from './search-config-permission.service';\nimport { SearchComponent } from '../../../search/components/search.component';\nimport { MatListModule, MatSelectionList } from '@angular/material/list';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { UserIconColumnComponent } from '../user-icon-column/user-icon-column.component';\nimport { MatIconButton } from '@angular/material/button';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-add-permission-panel',\n    imports: [\n        CommonModule,\n        MatFormFieldModule,\n        MatInputModule,\n        TranslatePipe,\n        ReactiveFormsModule,\n        IconModule,\n        MatListModule,\n        UserIconColumnComponent,\n        SearchComponent,\n        MatIconButton\n    ],\n    templateUrl: './add-permission-panel.component.html',\n    styleUrls: ['./add-permission-panel.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    providers: [{ provide: SearchConfigurationService, useClass: SearchPermissionConfigurationService }, SearchService]\n})\nexport class AddPermissionPanelComponent {\n    @ViewChild('search', { static: true })\n    search: SearchComponent;\n\n    @ViewChild(MatSelectionList, { static: false })\n    matSelectionList: MatSelectionList;\n\n    /** Emitted when a permission list item is selected. */\n    @Output()\n    select: EventEmitter<NodeEntry[]> = new EventEmitter();\n\n    searchInput: UntypedFormControl = new UntypedFormControl();\n    searchedWord = '';\n    debounceSearch: number = 200;\n\n    selectedItems: NodeEntry[] = [];\n\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    EVERYONE: NodeEntry = new NodeEntry({\n        entry: new Node({ nodeType: 'cm:authorityContainer', properties: { 'cm:authorityName': 'GROUP_EVERYONE' } })\n    });\n\n    constructor() {\n        this.searchInput.valueChanges.pipe(debounceTime(this.debounceSearch)).subscribe((searchValue) => {\n            const selectionOptions = this.matSelectionList.selectedOptions.selected.map((option) => option.value);\n            this.selectedItems.push(...selectionOptions);\n            this.matSelectionList.deselectAll();\n            this.searchedWord = searchValue;\n            if (!searchValue) {\n                this.search.resetResults();\n            }\n        });\n    }\n\n    onSelectionChange() {\n        const currentSelection = this.matSelectionList.selectedOptions.selected.map((option) => option.value);\n        const uniqueSelection = [...currentSelection, ...this.selectedItems].reduce((uniquesElements, currentElement) => {\n            const isExist = uniquesElements.find((uniqueElement) => uniqueElement.entry.id === currentElement.entry.id);\n            if (!isExist) {\n                uniquesElements.push(currentElement);\n            }\n            return uniquesElements;\n        }, []);\n        this.select.emit(uniqueSelection);\n    }\n\n    clearSearch() {\n        this.searchedWord = '';\n        this.selectedItems.splice(0, this.selectedItems.length);\n        this.search.resetResults();\n    }\n}\n","<mat-form-field class=\"adf-permission-search-input\">\n    <mat-label>{{ 'SEARCH.INPUT.LABEL' | translate }}</mat-label>\n    <input\n        matInput\n        id=\"searchInput\"\n        class=\"adf-permission-search-input-control\"\n        [formControl]=\"searchInput\"\n        type=\"text\"\n        title=\"{{ 'PERMISSION_MANAGER.ADD-PERMISSION.SEARCH' | translate }}\"\n        placeholder=\"{{ 'PERMISSION_MANAGER.ADD-PERMISSION.SEARCH' | translate }}\"\n        [attr.aria-label]=\"'PERMISSION_MANAGER.ADD-PERMISSION.SEARCH' | translate\"\n        [value]=\"searchedWord\"\n    />\n    <button\n        matSuffix\n        mat-icon-button\n        *ngIf=\"searchedWord?.length > 0\"\n        data-automation-id=\"adf-permission-clear-input\"\n        id=\"adf-permission-clear-input\"\n        class=\"adf-permission-search-input-clear-button\"\n        (click)=\"clearSearch()\"\n        [attr.aria-label]=\"'COMMON.CLEAR' | translate\"\n        [attr.title]=\"'COMMON.CLEAR' | translate\"\n    >\n        <mat-icon class=\"adf-permission-search-icon\" adf-icon=\"clear\" />\n    </button>\n\n    <mat-icon *ngIf=\"searchedWord?.length === 0\" class=\"adf-permission-search-icon\" data-automation-id=\"adf-permission-search-icon\" adf-icon=\"search\" matSuffix />\n</mat-form-field>\n\n<div *ngIf=\"searchedWord?.length === 0\" class=\"adf-permission-start-message\" id=\"adf-add-permission-type-search\">\n    <span>{{ 'PERMISSION_MANAGER.ADD-PERMISSION.TYPE-MESSAGE' | translate }}</span>\n</div>\n\n<adf-search\n    #search\n    [searchTerm]=\"searchedWord\"\n    id=\"adf-add-permission-authority-results\"\n    class=\"adf-permission-result-list\"\n    [class.adf-permission-result-list-search]=\"searchedWord.length === 0\"\n>\n    <ng-template let-data>\n        <mat-selection-list\n            class=\"adf-permission-result-list-elements\"\n            title=\"{{ 'PERMISSION_MANAGER.ADD-PERMISSION.USER-GROUP-LIST' | translate }}\"\n            tabindex=\"0\"\n            [attr.aria-label]=\"'PERMISSION_MANAGER.ADD-PERMISSION.USER-GROUP-LIST' | translate\"\n            (selectionChange)=\"onSelectionChange()\"\n        >\n            <mat-list-option id=\"adf-add-permission-group-everyone\" #eveyone [disableRipple]=\"true\" [value]=\"EVERYONE\">\n                <div class=\"adf-list-option-item\">\n                    <adf-user-icon-column [node]=\"EVERYONE\" id=\"add-group-icon\" [selected]=\"eveyone.selected\" />\n                    <p class=\"adf-result-name\">\n                        {{ 'PERMISSION_MANAGER.ADD-PERMISSION.EVERYONE' | translate }}\n                    </p>\n                </div>\n            </mat-list-option>\n\n            <mat-list-option\n                *ngFor=\"let item of data?.list?.entries; let idx = index\"\n                [disableRipple]=\"true\"\n                [value]=\"item\"\n                id=\"result_option_{{ idx }}\"\n                #option\n            >\n                <div class=\"adf-list-option-item\">\n                    <adf-user-icon-column [node]=\"item\" [selected]=\"option.selected\" />\n                    <p class=\"adf-result-name\">\n                        <ng-container *ngIf=\"item.entry?.properties['cm:authorityDisplayName']; else authorityName\">\n                            {{ item.entry.properties['cm:authorityDisplayName'] }}\n                        </ng-container>\n                        <ng-template #authorityName>\n                            <ng-container *ngIf=\"item.entry?.properties['cm:authorityName']; else owner\">\n                                {{ item.entry.properties['cm:authorityName'] }}\n                            </ng-container>\n                        </ng-template>\n                        <ng-template #owner>\n                            {{ item.entry?.properties['cm:firstName'] ? item.entry?.properties['cm:firstName'] : '' }}\n                            {{ item.entry?.properties['cm:lastName'] ? item.entry?.properties['cm:lastName'] : '' }}\n                        </ng-template>\n                    </p>\n                </div>\n            </mat-list-option>\n        </mat-selection-list>\n    </ng-template>\n</adf-search>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, Input, OnInit, ViewEncapsulation, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { Group, NodeEntry } from '@alfresco/js-api';\nimport { NodePermissionService } from '../../services/node-permission.service';\nimport { EcmUserModel } from '../../../common/models/ecm-user.model';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n    selector: 'adf-user-name-column',\n    imports: [CommonModule],\n    template: `\n        <div class=\"adf-ellipsis-cell\" [attr.data-automation-id]=\"displayText$ | async\">\n            <span class=\"adf-user-name-column\" title=\"{{ displayText$ | async }}\"> {{ displayText$ | async }}</span>\n            <br />\n            <span class=\"adf-user-email-column\" title=\"{{ subTitleText$ | async }}\" *ngIf=\"subTitleText$ | async\">\n                {{ subTitleText$ | async }}\n            </span>\n        </div>\n    `,\n    styleUrls: ['./user-name-column.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-user-name-column adf-datatable-content-cell adf-expand-cell-5 adf-ellipsis-cell' }\n})\nexport class UserNameColumnComponent implements OnInit {\n    private readonly nodePermissionService = inject(NodePermissionService);\n\n    @Input()\n    context: any;\n\n    @Input()\n    node: NodeEntry;\n\n    displayText$ = new BehaviorSubject<string>('');\n    subTitleText$ = new BehaviorSubject<string>('');\n\n    ngOnInit() {\n        if (this.context != null) {\n            const { person, group, authorityId } = this.context.row.obj?.entry ?? this.context.row.obj;\n            const permissionGroup = authorityId ? ({ displayName: authorityId } as Group) : null;\n            this.updatePerson(person);\n            this.updateGroup(group || permissionGroup);\n        }\n\n        if (this.node) {\n            const { person, group } = this.nodePermissionService.transformNodeToUserPerson(this.node.entry);\n            this.updatePerson(person);\n            this.updateGroup(group);\n        }\n    }\n\n    private updatePerson(person: EcmUserModel) {\n        if (person) {\n            this.displayText$.next(`${person.firstName ?? ''} ${person.lastName ?? ''}`);\n            this.subTitleText$.next(person.email ?? '');\n        }\n    }\n\n    private updateGroup(group: Group) {\n        if (group) {\n            this.displayText$.next(group.displayName || group.id);\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\nimport { RoleModel } from '../../models/role.model';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nexport interface RoleModelOption {\n    label: string;\n    role: string;\n}\n\n@Component({\n    selector: 'adf-user-role-column',\n    imports: [MatFormFieldModule, MatSelectModule, TranslatePipe],\n    template: `\n        @if (!readonly) {\n            <mat-form-field class=\"adf-role-selector-field\">\n                <mat-select\n                    class=\"adf-role-selector\"\n                    (click)=\"$event.stopPropagation()\"\n                    [placeholder]=\"placeholder | translate\"\n                    [value]=\"value\"\n                    (selectionChange)=\"onRoleChanged($event.value)\"\n                    (keyup.arrowdown)=\"$event.stopPropagation()\"\n                    (keyup.arrowup)=\"$event.stopPropagation()\"\n                >\n                    @for (option of options; track $index) {\n                        <mat-option [value]=\"option.role\">\n                            {{ option.label | translate }}\n                        </mat-option>\n                    }\n                </mat-select>\n            </mat-form-field>\n        } @else {\n            <span class=\"adf-datatable-cell-value adf-readonly-role\" [title]=\"i18nValue | translate\">\n                {{ i18nValue | translate }}\n            </span>\n        }\n    `,\n    encapsulation: ViewEncapsulation.None,\n    host: { class: 'adf-user-role-column adf-datatable-content-cell adf-expand-cell-4' },\n    styleUrls: ['./user-role-column.component.scss']\n})\nexport class UserRoleColumnComponent implements OnChanges {\n    @Input()\n    roles: RoleModel[];\n\n    @Input()\n    value: string;\n\n    @Input()\n    readonly = false;\n\n    @Input()\n    placeholder: string = 'PERMISSION_MANAGER.LABELS.SELECT-ROLE';\n\n    @Output()\n    roleChanged = new EventEmitter<string>();\n\n    i18nValue: string;\n\n    /* dropdown options, including i18n support */\n    options: RoleModelOption[] = [];\n\n    onRoleChanged(newRole: string) {\n        this.value = newRole;\n        this.roleChanged.emit(newRole);\n    }\n\n    private i18nRoleValue(value: string): string {\n        if (value) {\n            return `ADF.ROLES.${value.toUpperCase()}`;\n        }\n        return value;\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.value) {\n            this.i18nValue = this.i18nRoleValue(changes.value.currentValue);\n        }\n\n        if (changes.roles) {\n            const roles: RoleModel[] = changes.roles.currentValue || [];\n            this.options = roles.map((role) => ({ label: this.i18nRoleValue(role.label), role: role.role }));\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { NodeEntry, PermissionElement } from '@alfresco/js-api';\nimport { AddPermissionDialogData } from './add-permission-dialog-data.interface';\nimport { MemberModel } from '../../models/member.model';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { DataColumnComponent, DataColumnListComponent, DataTableComponent, DateColumnHeaderComponent, IconModule } from '@alfresco/adf-core';\nimport { AddPermissionPanelComponent } from './add-permission-panel.component';\nimport { UserIconColumnComponent } from '../user-icon-column/user-icon-column.component';\nimport { UserNameColumnComponent } from '../user-name-column/user-name-column.component';\nimport { UserRoleColumnComponent } from '../user-role-column/user-role-column.component';\n\n@Component({\n    selector: 'adf-add-permission-dialog',\n    imports: [\n        CommonModule,\n        MatDialogModule,\n        MatButtonModule,\n        TranslatePipe,\n        DataTableComponent,\n        DataColumnListComponent,\n        DataColumnComponent,\n        DateColumnHeaderComponent,\n        IconModule,\n        AddPermissionPanelComponent,\n        UserIconColumnComponent,\n        UserNameColumnComponent,\n        UserRoleColumnComponent\n    ],\n    templateUrl: './add-permission-dialog.component.html',\n    styleUrls: ['./add-permission-dialog.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class AddPermissionDialogComponent {\n    data = inject<AddPermissionDialogData>(MAT_DIALOG_DATA);\n    private readonly dialogRef = inject<MatDialogRef<AddPermissionDialogComponent>>(MatDialogRef);\n\n    isSearchActive = true;\n    selectedMembers: MemberModel[] = [];\n\n    private readonly existingMembers: PermissionElement[] = [];\n    currentSelection: NodeEntry[] = [];\n\n    constructor() {\n        this.existingMembers = this.data.node.permissions.locallySet || [];\n    }\n\n    onSelect(items: NodeEntry[]) {\n        this.currentSelection = items;\n    }\n\n    onAddClicked() {\n        const selection = this.selectedMembers.filter((member) => !member.readonly).map((member) => member.toPermissionElement());\n        this.data.confirm.next(selection);\n        this.data.confirm.complete();\n    }\n\n    onSearchAddClicked() {\n        const newMembers = this.currentSelection\n            .map((item) => MemberModel.parseFromSearchResult(item))\n            .filter(({ id }) => !this.selectedMembers.find((member) => member.id === id));\n        this.selectedMembers = this.selectedMembers.concat(newMembers);\n\n        this.selectedMembers.forEach((member) => {\n            const existingMember = this.existingMembers.find(({ authorityId }) => authorityId === member.id);\n            if (existingMember) {\n                member.role = existingMember.name;\n                member.accessStatus = existingMember.accessStatus;\n                member.readonly = true; // make role non editable\n            }\n        });\n        this.disableSearch();\n    }\n\n    canCloseDialog() {\n        if (this.selectedMembers.length) {\n            this.disableSearch();\n        } else {\n            this.dialogRef.close();\n        }\n    }\n\n    enableSearch() {\n        this.isSearchActive = true;\n    }\n\n    disableSearch() {\n        this.isSearchActive = false;\n    }\n\n    onBulkUpdate(role: string) {\n        this.selectedMembers.filter((member) => !member.readonly).forEach((member) => (member.role = role));\n    }\n\n    onMemberDelete({ id }: MemberModel) {\n        const index = this.selectedMembers.findIndex((member) => member.id === id);\n        this.selectedMembers.splice(index, 1);\n        if (this.selectedMembers.length === 0) {\n            this.enableSearch();\n            this.currentSelection = [];\n        }\n    }\n\n    onMemberUpdate(role: string, member: MemberModel) {\n        const memberInstance = this.selectedMembers.find(({ id }) => id === member.id);\n        memberInstance.role = role;\n    }\n\n    isValid(): boolean {\n        return this.selectedMembers.filter(({ readonly }) => !readonly).length && this.selectedMembers.every(({ role }) => !!role);\n    }\n}\n","<h2 mat-dialog-title\n    class='adf-add-permission-dialog-title'\n    id=\"add-permission-dialog-title\"\n    [attr.aria-label]=\"'PERMISSION_MANAGER.ADD-PERMISSION.BASE_DIALOG_SCREEN_READER_TITLE' | translate\">\n    {{ (data?.title ? data?.title : \"PERMISSION_MANAGER.ADD-PERMISSION.BASE-DIALOG-TITLE\") | translate }}\n</h2>\n\n<ng-container *ngIf=\"!isSearchActive\">\n    <mat-dialog-content class=\"adf-add-permission-dialog-content\">\n        <button mat-button (click)=\"enableSearch()\" class=\"adf-search-user-button\">\n            {{ \"PERMISSION_MANAGER.ADD-PERMISSION.SEARCH\" | translate }}\n            <span class=\"adf-toolbar--spacer\"></span>\n            <mat-icon iconPositionEnd adf-icon=\"search\" />\n        </button>\n\n        <div class=\"adf-new-permission-table\">\n            <adf-datatable [rows]=\"selectedMembers\"\n                           class=\"adf-datatable-permission\"\n                           selectionMode=\"none\"\n                           [stickyHeader]=\"true\"\n                           data-automation-id=\"adf-user-role-selection-table\"\n                           *ngIf=\"selectedMembers.length\">\n                <data-columns>\n                    <data-column class=\"adf-datatable-cell--image adf-authority-icon-column\" key=\"$thumbunail\" [sortable]=\"false\">\n                        <ng-template let-context>\n                            <adf-user-icon-column [context]=\"context\" />\n                        </ng-template>\n                    </data-column>\n\n                    <data-column class=\"adf-ellipsis-cell adf-expand-cell-5\"\n                                 [title]=\"'PERMISSION_MANAGER.COLUMN.NAME' | translate:{count:selectedMembers.length}\"\n                                 key=\"id\">\n                        <ng-template let-context>\n                            <adf-user-name-column [context]=\"context\" />\n                        </ng-template>\n                    </data-column>\n\n                    <data-column class=\"adf-ellipsis-cell adf-expand-cell-3\"\n                                 title=\"PERMISSION_MANAGER.PERMISSION_DISPLAY.ROLE\"\n                                 key=\"role\"\n                                 [sortable]=\"false\">\n                        <ng-template let-entry=\"$implicit\">\n                            <adf-user-role-column [readonly]=\"entry.row.obj.readonly\"\n                                                  [value]=\"entry.data.getValue(entry.row, entry.col)\"\n                                                  [roles]=\"data.roles\"\n                                                  id=\"adf-select-role-permission\"\n                                                  (roleChanged)=\"onMemberUpdate($event, entry.row.obj)\" />\n                        </ng-template>\n\n                        <adf-data-column-header>\n                            <ng-template>\n                                <adf-user-role-column  class=\"adf-permission-role-column-header\"\n                                                       placeholder=\"PERMISSION_MANAGER.COLUMN.BULK-ROLE\"\n                                                       [roles]=\"data.roles\"\n                                                       id=\"adf-bulk-select-role-permission\"\n                                                       (roleChanged)=\"onBulkUpdate($event)\" />\n                            </ng-template>\n                        </adf-data-column-header>\n                    </data-column>\n\n                    <data-column class=\"adf-datatable-cell adf-delete-permission-column\" key=\"\" [sortable]=\"false\">\n                        <ng-template let-entry=\"$implicit\">\n                            <button mat-icon-button\n                                    class=\"adf-add-member-action\"\n                                    [style.display]=\"entry.row.obj.readonly ? 'none': 'block'\"\n                                    (click)=\"onMemberDelete(entry.row.obj)\"\n                                    [attr.aria-label]=\"'PERMISSION_MANAGER.ADD-PERMISSION.REMOVE_USER_GROUP' | translate\"\n                                    [attr.title]=\"'PERMISSION_MANAGER.ADD-PERMISSION.REMOVE_USER_GROUP' | translate\"\n                                    data-automation-id=\"adf-delete-permission-button\">\n                                <mat-icon adf-icon=\"highlight_off\" />\n                            </button>\n                        </ng-template>\n                    </data-column>\n                </data-columns>\n            </adf-datatable>\n        </div>\n\n    </mat-dialog-content>\n\n    <mat-dialog-actions class=\"adf-add-permission-dialog-actions\">\n        <button mat-button\n                mat-dialog-close\n                data-automation-id=\"add-permission-dialog-close-button\">\n            {{ \"PERMISSION_MANAGER.ADD-PERMISSION.CLOSE-ACTION\" | translate }}\n        </button>\n        <button mat-button\n                data-automation-id=\"add-permission-dialog-confirm-button\"\n                [mat-dialog-close]=\"true\"\n                class=\"adf-choose-action\"\n                [disabled]=\"!isValid()\"\n                (click)=\"onAddClicked()\">\n            {{ \"PERMISSION_MANAGER.ADD-PERMISSION.ADD-ACTION\" | translate }}\n        </button>\n    </mat-dialog-actions>\n</ng-container>\n\n<ng-container *ngIf=\"isSearchActive\">\n    <mat-dialog-content class=\"adf-add-permission-dialog-content\">\n        <adf-add-permission-panel class=\"adf-search-container\" (select)=\"onSelect($event)\" />\n    </mat-dialog-content>\n\n    <mat-dialog-actions class=\"adf-add-permission-dialog-actions\">\n            <button mat-button\n                    (click)=\"canCloseDialog()\"\n                    data-automation-id=\"add-permission-dialog-close-button\">\n                {{ \"PERMISSION_MANAGER.ADD-PERMISSION.CLOSE-ACTION\" | translate }}\n            </button>\n            <button mat-button\n                    data-automation-id=\"add-permission-dialog-confirm-button\"\n                    [disabled]=\"!currentSelection.length\"\n                    (click)=\"onSearchAddClicked()\">\n                {{ \"PERMISSION_MANAGER.ADD-PERMISSION.SELECT-ACTION\" | translate }}\n            </button>\n    </mat-dialog-actions>\n</ng-container>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node, PermissionElement } from '@alfresco/js-api';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, Subject, throwError } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { NodePermissionService } from './node-permission.service';\nimport { AddPermissionDialogComponent } from '../components/add-permission/add-permission-dialog.component';\nimport { AddPermissionDialogData } from '../components/add-permission/add-permission-dialog-data.interface';\nimport { RoleModel } from '../models/role.model';\nimport { ContentService } from '../../common/services/content.service';\nimport { AllowableOperationsEnum } from '../../common/models/allowable-operations.enum';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NodePermissionDialogService {\n    private readonly dialog = inject(MatDialog);\n    private readonly nodePermissionService = inject(NodePermissionService);\n    private readonly contentService = inject(ContentService);\n\n    /**\n     * Opens a dialog to add permissions to a node.\n     *\n     * @param node target node\n     * @param roles settable roles for the node\n     * @param title Dialog title\n     * @returns Node with updated permissions\n     */\n    openAddPermissionDialog(node: Node, roles: RoleModel[], title?: string): Observable<PermissionElement[]> {\n        if (this.contentService.hasAllowableOperations(node, AllowableOperationsEnum.UPDATEPERMISSIONS)) {\n            const confirm = new Subject<PermissionElement[]>();\n\n            confirm.subscribe({\n                complete: this.close.bind(this)\n            });\n\n            const data: AddPermissionDialogData = {\n                node,\n                title,\n                confirm,\n                roles\n            };\n\n            this.openDialog(data, 'adf-add-permission-dialog', '800px');\n            return confirm;\n        } else {\n            const errors = new Error(JSON.stringify({ error: { statusCode: 403 } }));\n            errors.message = 'PERMISSION_MANAGER.ERROR.NOT-ALLOWED';\n            return throwError(errors);\n        }\n    }\n\n    private openDialog(data: any, currentPanelClass: string, chosenWidth: string) {\n        this.dialog.open(AddPermissionDialogComponent, { data, panelClass: currentPanelClass, width: chosenWidth, restoreFocus: true });\n    }\n\n    /**\n     * Closes the currently-open dialog.\n     */\n    close() {\n        this.dialog.closeAll();\n    }\n\n    /**\n     * Opens a dialog to update permissions for a node.\n     *\n     * @param nodeId ID of the target node\n     * @param title Dialog title\n     * @returns Node with updated permissions\n     */\n    updateNodePermissionByDialog(nodeId?: string, title?: string): Observable<Node> {\n        return this.nodePermissionService\n            .getNodeWithRoles(nodeId)\n            .pipe(\n                switchMap(({ node, roles }) =>\n                    this.openAddPermissionDialog(node, roles, title).pipe(\n                        switchMap((selection) => this.nodePermissionService.updateNodePermissions(nodeId, selection))\n                    )\n                )\n            );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NotificationService } from '@alfresco/adf-core';\nimport { Node, PermissionElement } from '@alfresco/js-api';\nimport { EventEmitter, Injectable, inject } from '@angular/core';\nimport { MatSlideToggleChange } from '@angular/material/slide-toggle';\nimport { BehaviorSubject, forkJoin, Observable, of, Subject } from 'rxjs';\nimport { finalize, map, switchMap } from 'rxjs/operators';\nimport { RoleModel } from '../../models/role.model';\nimport { PermissionDisplayModel } from '../../models/permission.model';\nimport { NodePermissionsModel } from '../../models/member.model';\nimport { NodePermissionService } from '../../services/node-permission.service';\nimport { NodePermissionDialogService } from '../../services/node-permission-dialog.service';\nimport { NodesApiService } from '../../../common/services/nodes-api.service';\nimport { ContentService } from '../../../common/services/content.service';\nimport { AllowableOperationsEnum } from '../../../common/models/allowable-operations.enum';\n\nconst SITE_MANAGER_ROLE = 'SiteManager';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PermissionListService {\n    private readonly nodeService = inject(NodesApiService);\n    private readonly nodePermissionService = inject(NodePermissionService);\n    private readonly nodePermissionDialogService = inject(NodePermissionDialogService);\n    private readonly contentService = inject(ContentService);\n    private readonly notificationService = inject(NotificationService);\n\n    updated = new EventEmitter<PermissionDisplayModel>();\n    errored = new EventEmitter<PermissionDisplayModel>();\n\n    loading$: BehaviorSubject<boolean> = new BehaviorSubject(true);\n    error$: Subject<boolean> = new Subject();\n    nodeWithRoles$: Subject<{ node: Node; roles: RoleModel[] }> = new Subject();\n    data$: Observable<NodePermissionsModel> = this.nodeWithRoles$.pipe(\n        map(({ node, roles }) => {\n            const nodeLocalPermissions = this.nodePermissionService.getLocalPermissions(node);\n            const localPermissions = this.updateReadOnlyPermission(node, nodeLocalPermissions);\n            return {\n                node,\n                roles,\n                localPermissions,\n                inheritedPermissions: this.nodePermissionService.getInheritedPermission(node)\n            };\n        })\n    );\n\n    private node: Node;\n    private roles: RoleModel[];\n\n    fetchPermission(nodeId: string) {\n        this.loading$.next(true);\n        this.nodePermissionService\n            .getNodeWithRoles(nodeId)\n            .pipe(finalize(() => this.loading$.next(false)))\n            .subscribe(\n                ({ node, roles }) => {\n                    this.node = node;\n                    this.roles = roles;\n                    this.nodeWithRoles$.next({ node, roles });\n                },\n                () => this.error$.next(true)\n            );\n    }\n\n    toggleInherited(change: MatSlideToggleChange) {\n        if (this.contentService.hasAllowableOperations(this.node, AllowableOperationsEnum.UPDATEPERMISSIONS)) {\n            let updateLocalPermission$: Observable<Node> = of(null);\n            const nodeBody = {\n                permissions: {\n                    isInheritanceEnabled: !this.node.permissions.isInheritanceEnabled\n                }\n            };\n\n            const authorityId = this.getManagerAuthority(this.node);\n            if (authorityId) {\n                const permissions = [...(this.node.permissions.locallySet || []), { authorityId, name: SITE_MANAGER_ROLE, accessStatus: 'ALLOWED' }];\n                updateLocalPermission$ = this.nodePermissionService.updatePermissions(this.node, permissions);\n            }\n\n            updateLocalPermission$.pipe(switchMap(() => this.nodeService.updateNode(this.node.id, nodeBody, { include: ['permissions'] }))).subscribe(\n                (nodeUpdated: Node) => {\n                    const message = nodeUpdated.permissions.isInheritanceEnabled\n                        ? 'PERMISSION_MANAGER.MESSAGE.INHERIT-ENABLE-SUCCESS'\n                        : 'PERMISSION_MANAGER.MESSAGE.INHERIT-DISABLE-SUCCESS';\n                    this.notificationService.showInfo(message);\n                    nodeUpdated.permissions.inherited = nodeUpdated.permissions?.inherited ?? [];\n                    this.reloadNode(nodeUpdated);\n                },\n                () => {\n                    change.source.checked = this.node.permissions.isInheritanceEnabled;\n                    this.notificationService.showWarning('PERMISSION_MANAGER.MESSAGE.TOGGLE-PERMISSION-FAILED');\n                }\n            );\n        } else {\n            change.source.checked = this.node.permissions.isInheritanceEnabled;\n            this.notificationService.showError('PERMISSION_MANAGER.ERROR.NOT-ALLOWED');\n        }\n    }\n\n    updateNodePermissionByDialog() {\n        this.nodePermissionDialogService\n            .openAddPermissionDialog(this.node, this.roles, 'PERMISSION_MANAGER.ADD-PERMISSION.TITLE')\n            .pipe(\n                switchMap((selection) => {\n                    const total = selection.length;\n                    const group = selection.filter(({ authorityId }) => this.isGroup(authorityId)).length;\n                    return forkJoin({\n                        user: of(total - group),\n                        group: of(group),\n                        node: this.nodePermissionService.updateNodePermissions(this.node.id, selection)\n                    });\n                })\n            )\n            .subscribe(\n                ({ user, group, node }) => {\n                    this.notificationService.showInfo('PERMISSION_MANAGER.MESSAGE.PERMISSION-ADD-SUCCESS', null, { user, group });\n                    this.reloadNode(node);\n                },\n                () => {\n                    this.notificationService.showError('PERMISSION_MANAGER.MESSAGE.PERMISSION-ADD-FAIL');\n                    this.reloadNode();\n                }\n            );\n    }\n\n    deletePermissions(permissions: PermissionElement[]) {\n        this.nodePermissionService.removePermissions(this.node, permissions).subscribe(\n            (node) => {\n                const total = permissions.length;\n                const group = permissions.filter(({ authorityId }) => this.isGroup(authorityId)).length;\n                this.notificationService.showInfo('PERMISSION_MANAGER.MESSAGE.PERMISSION-BULK-DELETE-SUCCESS', null, { user: total - group, group });\n                this.reloadNode(node);\n            },\n            () => {\n                this.notificationService.showError('PERMISSION_MANAGER.MESSAGE.PERMISSION-DELETE-FAIL');\n                this.reloadNode();\n            }\n        );\n    }\n\n    updateRole(role: string, permission: PermissionDisplayModel) {\n        const updatedPermissionRole = this.buildUpdatedPermission(role, permission);\n        this.nodePermissionService.updatePermissionRole(this.node, updatedPermissionRole).subscribe(\n            (node) => {\n                this.notificationService.showInfo('PERMISSION_MANAGER.MESSAGE.PERMISSION-UPDATE-SUCCESS');\n                this.reloadNode(node);\n                this.updated.emit(permission);\n            },\n            () => {\n                this.notificationService.showError('PERMISSION_MANAGER.MESSAGE.PERMISSION-UPDATE-FAIL');\n                this.reloadNode();\n                this.errored.emit(permission);\n            }\n        );\n    }\n\n    bulkRoleUpdate(role: string) {\n        const permissions = [...this.node.permissions.locallySet].map((permission) => this.buildUpdatedPermission(role, permission));\n        this.nodePermissionService.updatePermissions(this.node, permissions).subscribe(\n            (node) => {\n                const total = permissions.length;\n                const group = permissions.filter(({ authorityId }) => this.isGroup(authorityId)).length;\n                this.notificationService.showInfo('PERMISSION_MANAGER.MESSAGE.PERMISSION-BULK-UPDATE-SUCCESS', null, { user: total - group, group });\n                this.reloadNode(node);\n            },\n            () => {\n                this.notificationService.showError('PERMISSION_MANAGER.MESSAGE.PERMISSION-UPDATE-FAIL');\n                this.reloadNode();\n            }\n        );\n    }\n\n    deletePermission(permission: PermissionDisplayModel) {\n        const cloneNode = { ...this.node, permissions: { ...this.node.permissions, locallySet: [...this.node.permissions.locallySet] } };\n        this.nodePermissionService.removePermission(cloneNode, permission).subscribe(\n            (node) => {\n                this.notificationService.showInfo('PERMISSION_MANAGER.MESSAGE.PERMISSION-DELETE-SUCCESS');\n                if (!node.permissions.locallySet) {\n                    node.permissions.locallySet = [];\n                }\n                this.reloadNode(node);\n            },\n            () => {\n                this.notificationService.showError('PERMISSION_MANAGER.MESSAGE.PERMISSION-DELETE-FAIL');\n                this.reloadNode();\n            }\n        );\n    }\n\n    private buildUpdatedPermission(role: string, permission: PermissionElement): PermissionElement {\n        return {\n            accessStatus: permission.accessStatus,\n            name: this.canUpdateThePermission(this.node, permission) ? role : permission.name,\n            authorityId: permission.authorityId\n        };\n    }\n\n    private reloadNode(node?: Node) {\n        if (node != null) {\n            Object.assign(this.node.permissions, node.permissions);\n        }\n        this.nodeWithRoles$.next({ node: this.node, roles: this.roles });\n    }\n\n    getManagerAuthority(node: Node): string {\n        const sitePath = node.path.elements.find((path) => path.nodeType === 'st:site');\n        let hasLocalManagerPermission = false;\n        let authorityId: string;\n        if (sitePath) {\n            authorityId = `GROUP_site_${sitePath.name}_${SITE_MANAGER_ROLE}`;\n            hasLocalManagerPermission = !!node.permissions.locallySet?.find(\n                (permission) => permission.authorityId === authorityId && permission.name === SITE_MANAGER_ROLE\n            );\n        }\n\n        if (!hasLocalManagerPermission && authorityId) {\n            return authorityId;\n        }\n        return null;\n    }\n\n    updateReadOnlyPermission(node: Node, permissions: PermissionDisplayModel[]): PermissionDisplayModel[] {\n        permissions.forEach((permission) => {\n            if (!this.canUpdateThePermission(node, permission)) {\n                permission.readonly = true;\n            }\n        });\n        return permissions;\n    }\n\n    canUpdateThePermission(node: Node, permission: PermissionElement): boolean {\n        const sitePath = node.path.elements.find((path) => path.nodeType === 'st:site');\n        if (!node.permissions.isInheritanceEnabled && sitePath) {\n            const authorityId = `GROUP_site_${sitePath.name}_${SITE_MANAGER_ROLE}`;\n            return !(permission.authorityId === authorityId && permission.name === SITE_MANAGER_ROLE);\n        }\n        return true;\n    }\n\n    private isGroup(authorityId) {\n        return authorityId.startsWith('GROUP_') || authorityId.startsWith('ROLE_');\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node } from '@alfresco/js-api';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n    selector: 'adf-node-path-column',\n    imports: [CommonModule],\n    template: `\n        <span class=\"adf-user-name-column adf-datatable-cell-value\" title=\"{{ displayText$ | async }}\">\n            {{ displayText$ | async }}\n        </span>\n    `,\n    host: { class: 'adf-node-path-column adf-datatable-content-cell' }\n})\nexport class NodePathColumnComponent implements OnInit {\n    @Input()\n    node: Node;\n\n    displayText$ = new BehaviorSubject<string>('');\n\n    ngOnInit() {\n        this.updateValue();\n    }\n\n    protected updateValue() {\n        this.displayText$.next(this.node.path.name);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { PermissionDisplayModel } from '../../models/permission.model';\nimport { RoleModel } from '../../models/role.model';\nimport { CommonModule } from '@angular/common';\nimport {\n    DataColumnComponent,\n    DataColumnListComponent,\n    DataTableComponent,\n    DateColumnHeaderComponent,\n    EmptyContentComponent,\n    IconModule,\n    NoContentTemplateDirective\n} from '@alfresco/adf-core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { UserIconColumnComponent } from '../user-icon-column/user-icon-column.component';\nimport { UserNameColumnComponent } from '../user-name-column/user-name-column.component';\nimport { NodePathColumnComponent } from '../node-path-column/node-path-column.component';\nimport { UserRoleColumnComponent } from '../user-role-column/user-role-column.component';\n\n@Component({\n    selector: 'adf-permission-container',\n    imports: [\n        CommonModule,\n        DataTableComponent,\n        DataColumnListComponent,\n        DataColumnComponent,\n        TranslatePipe,\n        DateColumnHeaderComponent,\n        MatButtonModule,\n        IconModule,\n        NoContentTemplateDirective,\n        EmptyContentComponent,\n        UserIconColumnComponent,\n        UserNameColumnComponent,\n        NodePathColumnComponent,\n        UserRoleColumnComponent\n    ],\n    templateUrl: './permission-container.component.html',\n    styleUrls: ['./permission-container.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class PermissionContainerComponent implements OnChanges {\n    @Input({ required: true })\n    node: Node;\n\n    @Input()\n    permissions: PermissionDisplayModel[] = [];\n\n    @Input()\n    roles!: RoleModel[];\n\n    @Input()\n    isReadOnly = false;\n\n    @Input()\n    showLocation = false;\n\n    @Input()\n    selectionMode = 'multiple'; // none|single|multiple\n\n    /** Emitted when the permission is updated. */\n    @Output()\n    update = new EventEmitter<{ role: string; permission: PermissionDisplayModel }>();\n\n    @Output()\n    updateAll = new EventEmitter<string>();\n\n    /** Emitted when the permission is updated. */\n    @Output()\n    delete = new EventEmitter<PermissionDisplayModel>();\n\n    /** Emitted when an error occurs. */\n    @Output()\n    error = new EventEmitter<any>();\n\n    bulkSelectionRole: string;\n\n    ngOnChanges(): void {\n        this.bulkSelectionRole = '';\n    }\n\n    updateRole(role: string, permission: PermissionDisplayModel) {\n        this.update.emit({ role, permission });\n    }\n\n    bulkRoleUpdate(role: string) {\n        this.updateAll.emit(role);\n    }\n\n    removePermission(event: Event, permissionRow: PermissionDisplayModel) {\n        event.stopPropagation();\n        this.delete.emit(permissionRow);\n    }\n}\n","<adf-datatable class=\"adf-datatable-permission\"\n               id=\"adf-permission-display-container\"\n               [rows]=\"permissions\"\n               [stickyHeader]=\"true\"\n               [selectionMode]=\"selectionMode\">\n\n    <data-columns>\n        <data-column class=\"adf-datatable-cell--image adf-authority-icon-column\" key=\"$thumbunail\" [sortable]=\"false\">\n            <ng-template let-context>\n                <adf-user-icon-column [context]=\"context\" />\n            </ng-template>\n        </data-column>\n\n        <data-column class=\"adf-ellipsis-cell adf-expand-cell-5\"\n                     [title]=\"'PERMISSION_MANAGER.COLUMN.NAME' | translate:{count:permissions.length}\"\n                     key=\"authorityId\">\n            <ng-template let-context>\n                <adf-user-name-column [context]=\"context\" />\n            </ng-template>\n        </data-column>d\n\n        <data-column class=\"adf-ellipsis-cell adf-expand-cell-5\"\n                     title=\"PERMISSION_MANAGER.COLUMN.LOCATION\"\n                     key=\"location\"\n                     *ngIf=\"node && showLocation\">\n            <ng-template>\n                <adf-node-path-column [node]=\"node\" />\n            </ng-template>\n        </data-column>\n\n        <data-column\n            class=\"adf-ellipsis-cell adf-expand-cell-3\"\n            title=\"PERMISSION_MANAGER.PERMISSION_DISPLAY.ROLE\"\n            key=\"name\"\n            [sortable]=\"false\">\n            <ng-template let-entry=\"$implicit\">\n                <adf-user-role-column [readonly]=\"entry.row.obj.readonly || isReadOnly\"\n                                      [placeholder]=\"entry.data.getValue(entry.row, entry.col)\"\n                                      [value]=\"entry.data.getValue(entry.row, entry.col)\"\n                                      [roles]=\"roles\"\n                                      id=\"adf-select-role-permission\"\n                                      (roleChanged)=\"updateRole($event, entry.row.obj)\" />\n            </ng-template>\n\n            <adf-data-column-header *ngIf=\"!isReadOnly\">\n                <ng-template>\n                    <adf-user-role-column class=\"adf-permission-role-column-header\"\n                                          placeholder=\"PERMISSION_MANAGER.COLUMN.BULK-ROLE\"\n                                          [roles]=\"roles\"\n                                          [value]=\"bulkSelectionRole\"\n                                          id=\"adf-bulk-select-role-permission\"\n                                          (roleChanged)=\"bulkRoleUpdate($event)\" />\n                </ng-template>\n            </adf-data-column-header>\n        </data-column>\n\n        <data-column class=\"adf-datatable-cell adf-delete-permission-column\" key=\"\" *ngIf=\"!isReadOnly\" [sortable]=\"false\">\n            <ng-template let-entry=\"$implicit\">\n                <button mat-icon-button\n                        [disabled]=\"entry.row.obj.readonly\"\n                        (click)=\"removePermission($event, entry.row.obj)\"\n                        (keydown.enter)=\"removePermission($event, entry.row.obj)\"\n                        [attr.data-automation-id]=\"'adf-delete-permission-button-' + entry.row.obj.authorityId\"\n                        [attr.aria-label]=\"'PERMISSION_MANAGER.ACTION.DELETE' | translate\">\n                    <mat-icon adf-icon=\"delete_outline\" />\n                </button>\n            </ng-template>\n        </data-column>\n    </data-columns>\n\n    <adf-no-content-template>\n        <ng-template>\n            <adf-empty-content\n                id=\"adf-no-permissions-template\"\n                icon=\"supervisor_account\"\n                [title]=\"'PERMISSION_MANAGER.MESSAGE.EMPTY-PERMISSION' | translate\"\n                [subtitle]=\"'PERMISSION_MANAGER.MESSAGE.EMPTY-SUBTITLE' | translate\" />\n        </ng-template>\n    </adf-no-content-template>\n\n</adf-datatable>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    AfterViewInit,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    HostListener,\n    inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    TemplateRef,\n    ViewContainerRef\n} from '@angular/core';\nimport { ConnectionPositionPair, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n    selector: '[adf-pop-over]',\n    exportAs: 'adfPopOver'\n})\nexport class PopOverDirective implements OnInit, OnDestroy, AfterViewInit {\n    private readonly element = inject(ElementRef);\n    private readonly overlay = inject(Overlay);\n    private readonly vcr = inject(ViewContainerRef);\n    private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n\n    get open(): boolean {\n        return this._open;\n    }\n\n    @Input('adf-pop-over') popOver!: TemplateRef<any>;\n    @Input() target!: HTMLElement;\n    @Input() panelClass = 'adf-permission-pop-over';\n    @Input() autofocusedElementSelector: string;\n\n    private _open = false;\n    private overlayRef!: OverlayRef;\n    private focusTrap: ConfigurableFocusTrap;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    ngOnInit(): void {\n        this.createOverlay();\n    }\n\n    ngAfterViewInit(): void {\n        this.element.nativeElement.addEventListener('click', () => this.toggleOverlay());\n        this.element.nativeElement.addEventListener('keydown', this.preventDefaultForEnter);\n    }\n\n    ngOnDestroy(): void {\n        this.element.nativeElement.removeEventListener('keydown', this.preventDefaultForEnter);\n        this.detachOverlay();\n    }\n\n    private createOverlay(): void {\n        const scrollStrategy = this.overlay.scrollStrategies.reposition();\n        const positionStrategy = this.overlay\n            .position()\n            .flexibleConnectedTo(this.target)\n            .withPositions([\n                new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),\n                new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' })\n            ])\n            .withPush(false);\n\n        this.overlayRef = this.overlay.create({\n            positionStrategy,\n            scrollStrategy,\n            hasBackdrop: true,\n            backdropClass: 'cdk-overlay-transparent-backdrop',\n            panelClass: this.panelClass\n        });\n\n        this.overlayRef\n            .backdropClick()\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => {\n                this.detachOverlay();\n            });\n    }\n\n    @HostListener('keyup.enter')\n    private toggleOverlay(): void {\n        if (!this.overlayRef.hasAttached()) {\n            this.attachOverlay();\n        } else {\n            this.detachOverlay();\n        }\n    }\n\n    private attachOverlay(): void {\n        if (!this.overlayRef.hasAttached()) {\n            const periodSelectorPortal = new TemplatePortal(this.popOver, this.vcr);\n\n            this.overlayRef.attach(periodSelectorPortal);\n            this._open = true;\n            if (this.autofocusedElementSelector) {\n                this.overlayRef.overlayElement.querySelector<HTMLElement>(this.autofocusedElementSelector).focus();\n            }\n\n            if (this.popOver && !this.focusTrap) {\n                this.focusTrap = this.focusTrapFactory.create(this.overlayRef.overlayElement);\n            }\n        }\n    }\n\n    @HostListener('document:keyup.esc')\n    private detachOverlay(): void {\n        if (this.overlayRef.hasAttached()) {\n            this.overlayRef.detach();\n            this._open = false;\n\n            this.focusTrap.destroy();\n            this.focusTrap = null;\n\n            this.element.nativeElement.focus();\n        }\n    }\n\n    private preventDefaultForEnter(event: KeyboardEvent): void {\n        if (event.key === 'Enter') {\n            event.preventDefault();\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IconModule, ObjectDataRow } from '@alfresco/adf-core';\nimport { PermissionElement } from '@alfresco/js-api';\nimport { Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { PermissionDisplayModel } from '../../models/permission.model';\nimport { PermissionListService } from './permission-list.service';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { PermissionContainerComponent } from '../permission-container/permission-container.component';\nimport { PopOverDirective } from '../pop-over.directive';\nimport { AllowableOperationsEnum, ContentService } from '../../../common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-permission-list',\n    imports: [\n        CommonModule,\n        MatCardModule,\n        MatProgressSpinnerModule,\n        IconModule,\n        MatSlideToggleModule,\n        TranslatePipe,\n        MatButtonModule,\n        PermissionContainerComponent,\n        PopOverDirective\n    ],\n    templateUrl: './permission-list.component.html',\n    styleUrls: ['./permission-list.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class PermissionListComponent implements OnInit {\n    readonly permissionList = inject(PermissionListService);\n    private readonly contentService = inject(ContentService);\n\n    /** ID of the node whose permissions you want to show. */\n    @Input({ required: true })\n    nodeId: string;\n\n    /** Emitted when the permission is updated. */\n    @Output()\n    update: EventEmitter<PermissionElement>;\n\n    /** Emitted when an error occurs. */\n    @Output()\n    error: EventEmitter<any>;\n\n    selectedPermissions: PermissionDisplayModel[] = [];\n\n    private _updatePermissionsAllowed = false;\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    get updatePermissionsAllowed(): boolean {\n        return this._updatePermissionsAllowed;\n    }\n\n    constructor() {\n        this.error = this.permissionList.errored;\n        this.update = this.permissionList.updated;\n    }\n\n    ngOnInit(): void {\n        this.permissionList.fetchPermission(this.nodeId);\n        this.permissionList.data$\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(\n                (model) =>\n                    (this._updatePermissionsAllowed = this.contentService.hasAllowableOperations(\n                        model.node,\n                        AllowableOperationsEnum.UPDATEPERMISSIONS\n                    ))\n            );\n    }\n\n    openAddPermissionDialog() {\n        this.permissionList.updateNodePermissionByDialog();\n    }\n\n    onSelect(selections: ObjectDataRow[]) {\n        this.selectedPermissions = selections.map((selection) => selection['obj']).filter((permission) => !permission.readonly);\n    }\n\n    deleteSelection() {\n        this.permissionList.deletePermissions(this.selectedPermissions);\n        this.selectedPermissions = [];\n    }\n\n    updatePermission({ role, permission }) {\n        this.permissionList.updateRole(role, permission);\n    }\n\n    deletePermission(permission: PermissionDisplayModel) {\n        this.selectedPermissions = [];\n        this.permissionList.deletePermission(permission);\n    }\n\n    updateAllPermission(role: string) {\n        this.permissionList.bulkRoleUpdate(role);\n        this.selectedPermissions = [];\n    }\n}\n","<mat-card class=\"adf-permission-card\" id=\"adf-permission-manager-card\">\n    <div *ngIf=\"(permissionList.data$ | async) === null && permissionList.loading$ | async\" class=\"adf-permission-loader\">\n        <mat-progress-spinner [color]=\"'primary'\" [mode]=\"'indeterminate'\" />\n    </div>\n\n    <ng-container *ngIf=\"permissionList.error$ | async\">\n        <div class=\"adf-no-permission__template\" id=\"adf-permission-manager-error\">\n            <mat-icon color=\"warn\" adf-icon=\"error\" />\n            <p class=\"adf-no-permission__template--text\">{{ 'PERMISSION_MANAGER.ERROR.NOT-FOUND'| translate }}</p>\n        </div>\n    </ng-container>\n\n    <ng-container *ngIf=\"permissionList.data$ | async as model\">\n        <div class=\"adf-permission-container\" #target>\n\n            <div class=\"adf-permission-header\">\n                <span class=\"adf-inherit-container\">\n                    <h3 class=\"adf-inherit-container-header\">\n                        {{'PERMISSION_MANAGER.LABELS.INHERITED-PERMISSIONS' | translate }}\n\n                        {{ (model.node.permissions.isInheritanceEnabled ? \"PERMISSION_MANAGER.LABELS.ON\" : \"PERMISSION_MANAGER.LABELS.OFF\") | translate }}\n                    </h3>\n\n                    <mat-slide-toggle\n                        *ngIf=\"updatePermissionsAllowed\"\n                        class=\"adf-inherit-toggle\"\n                        title=\"{{'PERMISSION_MANAGER.LABELS.INHERITED_PERMISSION_TOGGLE' | translate }}\"\n                        color=\"primary\"\n                        aria-label=\"{{'PERMISSION_MANAGER.LABELS.INHERITED_PERMISSION_TOGGLE' | translate}}\"\n                        data-automation-id=\"adf-inherit-toggle-button\"\n                        [checked]=\"model.node.permissions.isInheritanceEnabled\"\n                        (change)=\"permissionList.toggleInherited($event)\" />\n                </span>\n\n                <span class=\"adf-inherit-subtitle\" title=\"total\">\n                    {{'PERMISSION_MANAGER.LABELS.INHERITED-SUBTITLE' | translate: { count: model.inheritedPermissions.length } }}\n                </span>\n            </div>\n\n            <button\n                mat-flat-button\n                data-automation-id=\"permission-info-button\"\n                class=\"adf-permission-visibility-toggle\"\n                [adf-pop-over]=\"inheritedPermission\"\n                [target]=\"target\"\n                #popOver=\"adfPopOver\"\n                *ngIf=\"model.node.permissions.isInheritanceEnabled\">\n                {{ (popOver.open ? 'PERMISSION_MANAGER.LABELS.HIDE' : 'PERMISSION_MANAGER.LABELS.SHOW') | translate }}\n                <mat-icon class=\"adf-permission-visibility-toggle-icon\" [adf-icon]=\"popOver.open ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\" iconPositionEnd />\n            </button>\n        </div>\n\n        <ng-template #inheritedPermission>\n            <div class=\"adf-pop-over-card\">\n                <adf-permission-container\n                    data-automation-id=\"adf-inherited-permission\"\n                    [isReadOnly]=\"true\"\n                    [node]=\"model.node\"\n                    [permissions]=\"model.inheritedPermissions\"\n                    [showLocation]=\"true\"\n                    [selectionMode]=\"'none'\"\n                    [roles]=\"model.roles\" />\n            </div>\n        </ng-template>\n\n        <mat-card-content class=\"adf-local-permission-container\">\n            <section class=\"adf-permission-content-header\">\n                <h3>{{'PERMISSION_MANAGER.LABELS.DIRECT-PERMISSIONS' | translate }}</h3>\n\n                <div class=\"adf-toolbar--spacer\"></div>\n\n                <ng-container *ngIf=\"updatePermissionsAllowed\">\n                    <button\n                        mat-icon-button\n                        title=\"{{'PERMISSION_MANAGER.ACTION.ADD-PERMISSION' | translate}}\"\n                        (click)=\"openAddPermissionDialog()\"\n                        class=\"adf-add-permission-button\"\n                        data-automation-id=\"adf-add-permission-button\">\n                        <mat-icon adf-icon=\"person_add_outline\" />\n                    </button>\n\n                    <button\n                        mat-icon-button\n                        title=\"{{'PERMISSION_MANAGER.ACTION.DELETE' | translate}}\"\n                        [disabled]=\"!selectedPermissions?.length\"\n                        (click)=\"deleteSelection()\"\n                        data-automation-id=\"adf-delete-selected-permission\">\n                        <mat-icon adf-icon=\"delete_outline\" />\n                    </button>\n                </ng-container>\n            </section>\n\n            <adf-permission-container\n                class=\"adf-permission-list\"\n                data-automation-id=\"adf-locally-set-permission\"\n                [node]=\"model.node\"\n                [permissions]=\"model.localPermissions\"\n                (update)=\"updatePermission($event)\"\n                (delete)=\"deletePermission($event)\"\n                (updateAll)=\"updateAllPermission($event)\"\n                (row-select)=\"onSelect($any($event).detail.selection)\"\n                (row-unselect)=\"onSelect($any($event).detail.selection)\"\n                [roles]=\"model.roles\"\n                [isReadOnly]=\"!updatePermissionsAllowed\"/>\n\n        </mat-card-content>\n    </ng-container>\n</mat-card>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable @angular-eslint/no-input-rename */\nimport { Directive, Input, Output, EventEmitter, inject } from '@angular/core';\nimport { Node } from '@alfresco/js-api';\nimport { ContentService } from '../../common/services/content.service';\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { AllowableOperationsEnum } from '../../common/models/allowable-operations.enum';\n\n@Directive({\n    selector: 'button[adf-inherit-permission], mat-button-toggle[adf-inherit-permission]',\n    host: {\n        role: 'button',\n        '(click)': 'onInheritPermissionClicked()'\n    }\n})\nexport class InheritPermissionDirective {\n    private readonly nodeService = inject(NodesApiService);\n    private readonly contentService = inject(ContentService);\n\n    /** ID of the node to add/remove inherited permissions. */\n    @Input()\n    nodeId: string;\n\n    /** Emitted when the node is updated. */\n    @Output()\n    updated: EventEmitter<Node> = new EventEmitter<Node>();\n\n    /** Emitted when an error occurs. */\n    @Output()\n    error: EventEmitter<any> = new EventEmitter<any>();\n\n    onInheritPermissionClicked() {\n        this.nodeService.getNode(this.nodeId).subscribe((node: Node) => {\n            if (this.contentService.hasAllowableOperations(node, AllowableOperationsEnum.UPDATEPERMISSIONS)) {\n                const nodeBody = { permissions: { isInheritanceEnabled: !node?.['permissions']?.['isInheritanceEnabled'] || false } };\n                this.nodeService.updateNode(this.nodeId, nodeBody, { include: ['permissions'] }).subscribe(\n                    (nodeUpdated: Node) => {\n                        this.updated.emit(nodeUpdated);\n                    },\n                    (error) => this.error.emit(error)\n                );\n            } else {\n                this.error.emit('PERMISSION_MANAGER.ERROR.NOT-ALLOWED');\n            }\n        });\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node, PermissionElement } from '@alfresco/js-api';\nimport { Subject } from 'rxjs';\nimport { RoleModel } from '../../models/role.model';\n\nexport interface AddPermissionDialogData {\n    title?: string;\n    node: Node;\n    roles: RoleModel[];\n    confirm: Subject<PermissionElement[]>;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node, NodeEntry, PermissionElement } from '@alfresco/js-api';\nimport { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { NodePermissionService } from '../../services/node-permission.service';\nimport { RoleModel } from '../../models/role.model';\nimport { ContentService } from '../../../common/services/content.service';\nimport { AllowableOperationsEnum } from '../../../common/models/allowable-operations.enum';\nimport { CommonModule } from '@angular/common';\nimport { AddPermissionPanelComponent } from './add-permission-panel.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n    selector: 'adf-add-permission',\n    imports: [CommonModule, AddPermissionPanelComponent, MatButtonModule, TranslatePipe],\n    templateUrl: './add-permission.component.html',\n    styleUrls: ['./add-permission.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\n/*\n * @deprecated in 4.4.0, use adf-add-permission-panel instead.\n */\nexport class AddPermissionComponent implements OnInit {\n    private readonly nodePermissionService = inject(NodePermissionService);\n    private readonly contentService = inject(ContentService);\n\n    /** ID of the target node. */\n    @Input({ required: true })\n    nodeId: string;\n\n    /** Emitted when the node is updated successfully. */\n    @Output()\n    success = new EventEmitter<Node>();\n\n    /** Emitted when an error occurs during the update. */\n    @Output()\n    error = new EventEmitter<any>();\n\n    selectedItems: NodeEntry[] = [];\n    currentNode: Node;\n    currentNodeRoles: RoleModel[];\n\n    ngOnInit(): void {\n        this.nodePermissionService.getNodeWithRoles(this.nodeId).subscribe(({ node, roles }) => {\n            this.currentNode = node;\n            this.currentNodeRoles = roles;\n        });\n    }\n\n    onSelect(selection: NodeEntry[]) {\n        this.selectedItems = selection;\n    }\n\n    isAddEnabled(): boolean {\n        return (\n            this.contentService.hasAllowableOperations(this.currentNode, AllowableOperationsEnum.UPDATEPERMISSIONS) && this.selectedItems.length !== 0\n        );\n    }\n\n    applySelection() {\n        if (this.contentService.hasAllowableOperations(this.currentNode, AllowableOperationsEnum.UPDATEPERMISSIONS)) {\n            const permissions = this.transformNodeToPermissionElement(this.selectedItems, this.currentNodeRoles[0].role);\n            this.nodePermissionService.updateNodePermissions(this.nodeId, permissions).subscribe(\n                (node) => {\n                    this.success.emit(node);\n                },\n                (error) => {\n                    this.error.emit(error);\n                }\n            );\n        }\n    }\n\n    private transformNodeToPermissionElement(nodes: NodeEntry[], role: string): PermissionElement[] {\n        return nodes.map((node) => ({\n            authorityId: node.entry.properties['cm:authorityName'] ?? node.entry.properties['cm:userName'],\n            name: role,\n            accessStatus: 'ALLOWED'\n        }));\n    }\n}\n","<adf-add-permission-panel (select)=\"onSelect($event)\" />\n<div id=\"adf-add-permission-actions\">\n   <button mat-button\n          id=\"adf-add-permission-action-button\"\n          class=\"adf-permission-action\"\n          [disabled]=\"!isAddEnabled()\"\n          (click)=\"applySelection()\">\n     {{'PERMISSION_MANAGER.ADD-PERMISSION.ADD-ACTION' | translate}}\n    </button>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface RoleModel {\n    label: string;\n    role: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { PermissionListComponent } from './components/permission-list/permission-list.component';\nimport { AddPermissionComponent } from './components/add-permission/add-permission.component';\nimport { AddPermissionDialogComponent } from './components/add-permission/add-permission-dialog.component';\nimport { InheritPermissionDirective } from './components/inherited-button.directive';\nimport { AddPermissionPanelComponent } from './components/add-permission/add-permission-panel.component';\nimport { UserNameColumnComponent } from './components/user-name-column/user-name-column.component';\nimport { UserIconColumnComponent } from './components/user-icon-column/user-icon-column.component';\nimport { UserRoleColumnComponent } from './components/user-role-column/user-role-column.component';\nimport { NodePathColumnComponent } from './components/node-path-column/node-path-column.component';\nimport { PopOverDirective } from './components/pop-over.directive';\nimport { PermissionContainerComponent } from './components/permission-container/permission-container.component';\n\nexport const CONTENT_PERMISSION_MANAGER_DIRECTIVES = [\n    AddPermissionPanelComponent,\n    AddPermissionComponent,\n    AddPermissionDialogComponent,\n    NodePathColumnComponent,\n    PermissionContainerComponent,\n    PermissionListComponent,\n    UserNameColumnComponent,\n    UserIconColumnComponent,\n    UserRoleColumnComponent,\n    InheritPermissionDirective,\n    PopOverDirective\n] as const;\n\n/** @deprecated use `...CONTENT_PERMISSION_MANAGER_DIRECTIVES` or import the standalone components directly */\n@NgModule({\n    imports: [...CONTENT_PERMISSION_MANAGER_DIRECTIVES],\n    exports: [...CONTENT_PERMISSION_MANAGER_DIRECTIVES]\n})\nexport class PermissionManagerModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './components/permission-list/permission-list.component';\nexport * from './components/inherited-button.directive';\nexport * from './models/permission.model';\nexport * from './services/node-permission-dialog.service';\nexport * from './services/node-permission.service';\nexport * from './components/add-permission/add-permission-dialog-data.interface';\nexport * from './components/add-permission/add-permission-panel.component';\nexport * from './components/add-permission/add-permission.component';\nexport * from './components/add-permission/add-permission-dialog.component';\nexport * from './components/add-permission/search-config-permission.service';\nexport * from './components/user-icon-column/user-icon-column.component';\nexport * from './components/user-name-column/user-name-column.component';\nexport * from './components/user-role-column/user-role-column.component';\nexport * from './components/node-path-column/node-path-column.component';\nexport * from './components/permission-container/permission-container.component';\nexport * from './components/pop-over.directive';\nexport * from './models/member.model';\nexport * from './models/role.model';\n\nexport * from './permission-manager.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NodeEntry } from '@alfresco/js-api';\n\nexport interface ContentNodeShareSettings {\n    baseShareUrl: string;\n    node: NodeEntry;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { NodePaging, SharedLinkBodyCreate, SharedLinkEntry, SharedlinksApi } from '@alfresco/js-api';\nimport { Observable, from, of, Subject } from 'rxjs';\nimport { UserPreferencesService } from '@alfresco/adf-core';\nimport { catchError } from 'rxjs/operators';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SharedLinksApiService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly preferences = inject(UserPreferencesService);\n\n    error = new Subject<{ statusCode: number; message: string }>();\n\n    private _sharedLinksApi: SharedlinksApi;\n    get sharedLinksApi(): SharedlinksApi {\n        this._sharedLinksApi = this._sharedLinksApi ?? new SharedlinksApi(this.apiService.getInstance());\n        return this._sharedLinksApi;\n    }\n\n    /**\n     * Gets shared links available to the current user.\n     *\n     * @param options Options supported by JS-API\n     * @returns List of shared links\n     */\n    getSharedLinks(options: any = {}): Observable<NodePaging> {\n        const defaultOptions = {\n            maxItems: this.preferences.paginationSize,\n            skipCount: 0,\n            include: ['properties', 'allowableOperations']\n        };\n        const queryOptions = Object.assign({}, defaultOptions, options);\n        const promise = this.sharedLinksApi.listSharedLinks(queryOptions);\n\n        return from(promise).pipe(catchError((err) => of(err)));\n    }\n\n    /**\n     * Creates a shared link available to the current user.\n     *\n     * @param nodeId ID of the node to link to\n     * @param sharedLinkWithExpirySettings shared link with nodeId and expiryDate\n     * @param options Options supported by JS-API\n     * @returns The shared link just created\n     */\n    createSharedLinks(nodeId: string, sharedLinkWithExpirySettings?: SharedLinkBodyCreate, options: any = {}): Observable<SharedLinkEntry> {\n        const promise = this.sharedLinksApi.createSharedLink(sharedLinkWithExpirySettings ? sharedLinkWithExpirySettings : { nodeId }, options);\n\n        return from(promise).pipe(catchError((err) => of(err)));\n    }\n\n    /**\n     * Deletes a shared link.\n     *\n     * @param sharedId ID of the link to delete\n     * @returns Null response notifying when the operation is complete\n     */\n    deleteSharedLink(sharedId: string): Observable<any | Error> {\n        const promise = this.sharedLinksApi.deleteSharedLink(sharedId);\n\n        return from(promise).pipe(catchError((err: Error) => of(err)));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, OnInit, ViewChild, ViewEncapsulation, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatSlideToggleChange, MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ContentService } from '../common/services/content.service';\nimport { SharedLinksApiService } from './services/shared-links-api.service';\nimport { SharedLinkBodyCreate } from '@alfresco/js-api';\nimport { ClipboardDirective, ConfirmDialogComponent, IconModule } from '@alfresco/adf-core';\nimport { ContentNodeShareSettings } from './content-node-share.settings';\nimport { RenditionService } from '../common/services/rendition.service';\nimport { add, endOfDay, format, isBefore } from 'date-fns';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\n\ninterface SharedDialogFormProps {\n    sharedUrl: FormControl<string>;\n    time: FormControl<Date>;\n}\n\n@Component({\n    selector: 'adf-share-dialog',\n    imports: [\n        CommonModule,\n        TranslatePipe,\n        IconModule,\n        MatDialogModule,\n        ReactiveFormsModule,\n        MatSlideToggleModule,\n        MatFormFieldModule,\n        MatDatepickerModule,\n        MatInputModule,\n        MatButtonModule,\n        ClipboardDirective\n    ],\n    templateUrl: './content-node-share.dialog.html',\n    styleUrls: ['./content-node-share.dialog.scss'],\n    host: { class: 'adf-share-dialog' },\n    encapsulation: ViewEncapsulation.None\n})\nexport class ShareDialogComponent implements OnInit {\n    private readonly sharedLinksApiService = inject(SharedLinksApiService);\n    private readonly dialogRef = inject<MatDialogRef<ShareDialogComponent>>(MatDialogRef);\n    private readonly dialog = inject(MatDialog);\n    private readonly contentService = inject(ContentService);\n    private readonly renditionService = inject(RenditionService);\n    data = inject<ContentNodeShareSettings>(MAT_DIALOG_DATA);\n\n    private readonly minDateValidator = (control: FormControl<Date>): any =>\n        isBefore(endOfDay(new Date(control.value)), this.minDate) ? { invalidDate: true } : null;\n\n    minDate = add(new Date(), { days: 1 });\n    sharedId: string;\n    fileName: string;\n    baseShareUrl: string;\n    isFileShared = false;\n    isDisabled = false;\n    isLinkWithExpiryDate = false;\n    form = new FormGroup<SharedDialogFormProps>({\n        sharedUrl: new FormControl(''),\n        time: new FormControl({ value: null, disabled: true }, [Validators.required, this.minDateValidator])\n    });\n    isExpiryDateToggleChecked: boolean;\n\n    @ViewChild('slideToggleExpirationDate', { static: true })\n    slideToggleExpirationDate;\n\n    ngOnInit() {\n        if (this.data.node?.entry) {\n            this.fileName = this.data.node.entry.name;\n            this.baseShareUrl = this.data.baseShareUrl;\n\n            const properties = this.data.node.entry.properties;\n\n            if (!properties?.['qshare:sharedId']) {\n                this.createSharedLinks(this.data.node.entry.id);\n            } else {\n                this.sharedId = properties['qshare:sharedId'];\n                this.isFileShared = true;\n\n                const expiryDate = this.updateForm();\n                this.isExpiryDateToggleChecked = this.isLinkWithExpiryDate = !!expiryDate;\n                this.isLinkWithExpiryDate ? this.time.enable() : this.time.disable();\n            }\n        }\n    }\n\n    onTimeChanged() {\n        if (this.time.valid) {\n            this.updateNode(this.time.value);\n        }\n    }\n\n    get time(): FormControl<Date> {\n        return this.form.controls['time'];\n    }\n    onSlideShareChange(event: MatSlideToggleChange) {\n        if (event.checked) {\n            this.createSharedLinks(this.data.node.entry.id);\n        } else {\n            this.openConfirmationDialog();\n        }\n    }\n\n    get canUpdate() {\n        const { entry } = this.data.node;\n\n        if (entry?.allowableOperations) {\n            return this.contentService.hasAllowableOperations(entry, 'update');\n        }\n\n        return true;\n    }\n\n    onToggleExpirationDate(slideToggle: MatSlideToggleChange) {\n        if (slideToggle.checked) {\n            this.time.enable();\n            this.isExpiryDateToggleChecked = true;\n        } else {\n            this.time.disable();\n            this.time.setValue(null);\n            this.deleteSharedLink(this.sharedId, true);\n        }\n    }\n\n    onDatePickerClosed() {\n        this.onTimeChanged();\n        if (!this.time.value) {\n            this.slideToggleExpirationDate.checked = false;\n        }\n    }\n\n    preventIncorrectCharacters(e: KeyboardEvent): boolean {\n        const regex = /[^\\d/.-]/;\n        return e.key.length === 1 ? !regex.test(e.key) : true;\n    }\n\n    private openConfirmationDialog() {\n        this.isFileShared = false;\n\n        this.dialog\n            .open(ConfirmDialogComponent, {\n                data: {\n                    title: 'SHARE.CONFIRMATION.DIALOG-TITLE',\n                    message: 'SHARE.CONFIRMATION.MESSAGE',\n                    yesLabel: 'SHARE.CONFIRMATION.REMOVE',\n                    noLabel: 'SHARE.CONFIRMATION.CANCEL'\n                },\n                minWidth: '250px',\n                closeOnNavigation: true\n            })\n            .beforeClosed()\n            .subscribe((deleteSharedLink) => {\n                if (deleteSharedLink) {\n                    this.deleteSharedLink(this.sharedId);\n                } else {\n                    this.isFileShared = true;\n                }\n            });\n    }\n\n    private createSharedLinks(nodeId: string, sharedLinkWithExpirySettings?: SharedLinkBodyCreate) {\n        this.isDisabled = true;\n\n        this.sharedLinksApiService.createSharedLinks(nodeId, sharedLinkWithExpirySettings).subscribe(\n            (sharedLink) => {\n                if (sharedLink.entry) {\n                    this.sharedId = sharedLink.entry.id;\n                    if (this.data.node.entry.properties) {\n                        this.data.node.entry.properties['qshare:sharedId'] = this.sharedId;\n                    } else {\n                        this.data.node.entry.properties = {\n                            'qshare:sharedId': this.sharedId\n                        };\n                    }\n                    this.isDisabled = false;\n                    this.isFileShared = true;\n\n                    // eslint-disable-next-line\n                    this.renditionService.getNodeRendition(this.data.node.entry.id);\n\n                    this.updateForm();\n                }\n            },\n            () => {\n                this.isDisabled = false;\n                this.isFileShared = false;\n            }\n        );\n    }\n\n    deleteSharedLink(sharedId: string, dialogOpenFlag?: boolean) {\n        this.isDisabled = true;\n\n        this.sharedLinksApiService.deleteSharedLink(sharedId).subscribe((response: any) => {\n            if (response instanceof Error) {\n                this.isDisabled = false;\n                this.isFileShared = true;\n                this.handleError(response);\n            } else {\n                if (this.data.node.entry.properties) {\n                    this.data.node.entry.properties['qshare:sharedId'] = null;\n                    this.data.node.entry.properties['qshare:expiryDate'] = null;\n                }\n                if (dialogOpenFlag) {\n                    this.createSharedLinks(this.data.node.entry.id);\n                    this.isExpiryDateToggleChecked = false;\n                    this.isLinkWithExpiryDate = false;\n                } else {\n                    this.dialogRef.close(false);\n                }\n            }\n        });\n    }\n\n    private handleError(error: Error) {\n        let message = 'SHARE.UNSHARE_ERROR';\n        let statusCode = 0;\n\n        try {\n            statusCode = JSON.parse(error.message).error.statusCode;\n        } catch {\n            /* empty */\n        }\n\n        if (statusCode === 403) {\n            message = 'SHARE.UNSHARE_PERMISSION_ERROR';\n        }\n\n        this.sharedLinksApiService.error.next({\n            statusCode,\n            message\n        });\n    }\n\n    private updateForm(): Date {\n        const { entry } = this.data.node;\n        let expiryDate = null;\n\n        if (entry?.properties) {\n            expiryDate = entry.properties['qshare:expiryDate'];\n        }\n\n        this.form.setValue(\n            {\n                sharedUrl: `${this.baseShareUrl}${this.sharedId}`,\n                time: expiryDate ? new Date(expiryDate) : null\n            },\n            { emitEvent: false }\n        );\n\n        return expiryDate;\n    }\n\n    private updateNode(date: Date) {\n        let expiryDate: Date | string;\n        if (date) {\n            expiryDate = format(endOfDay(new Date(date)), `yyyy-MM-dd'T'HH:mm:ss.SSSxx`);\n        } else {\n            expiryDate = null;\n        }\n\n        if (this.sharedId && expiryDate) {\n            this.isDisabled = true;\n\n            this.sharedLinksApiService.deleteSharedLink(this.sharedId).subscribe((response: any) => {\n                if (response instanceof Error) {\n                    this.isDisabled = false;\n                    this.isFileShared = true;\n                    this.handleError(response);\n                } else {\n                    this.sharedLinkWithExpirySettings(expiryDate as Date);\n                    this.isLinkWithExpiryDate = true;\n                    this.updateEntryExpiryDate(date);\n                }\n            });\n        }\n    }\n\n    private sharedLinkWithExpirySettings(expiryDate: Date) {\n        const nodeObject: SharedLinkBodyCreate = {\n            nodeId: this.data.node.entry.id,\n            expiresAt: expiryDate as Date\n        };\n        this.createSharedLinks(this.data.node.entry.id, nodeObject);\n    }\n\n    private updateEntryExpiryDate(date: Date) {\n        const { properties } = this.data.node.entry;\n\n        if (properties) {\n            properties['qshare:expiryDate'] = date ? new Date(date) : null;\n        }\n    }\n}\n","<div class=\"adf-share-link__dialog-content\">\n    <div class=\"adf-share-link__dialog-container\">\n        <div class=\"adf-share-link--header adf-share-link--row\">\n            <div\n                data-automation-id=\"adf-share-dialog-title\"\n                class=\"adf-share-link__title adf-share-link__label adf-share-link__heading\"\n                role=\"heading\"\n                aria-level=\"1\">\n                {{ 'SHARE.DIALOG-TITLE' | translate }} {{ fileName }}\n            </div>\n            <mat-icon mat-dialog-close class=\"adf-share-link__close adf-share-link__icon\" adf-icon=\"close\" />\n        </div>\n        <mat-dialog-content class=\"adf-share-link--dialog-content\">\n            <hr class=\"adf-share-link__separation-line\" aria-hidden=\"true\" />\n            <form [formGroup]=\"form\" class=\"adf-share-link__form\">\n                <div class=\"adf-share-link--row adf-share-link--row-sharable\">\n                    <mat-icon class=\"adf-share-link__icon\" adf-icon=\"timer\" />\n                    <div class=\"adf-share-link__label adf-sharable-link\">{{ 'SHARE.LINK-EXPIRY-DATE' | translate }}\n                    </div>\n                    <mat-slide-toggle\n                        #slideToggleExpirationDate\n                        [disabled]=\"!canUpdate\"\n                        color=\"primary\"\n                        data-automation-id=\"adf-expire-toggle\"\n                        aria-label=\"{{ 'SHARE.EXPIRES' | translate }}\"\n                        [checked]=\"!!time.value\"\n                        (change)=\"onToggleExpirationDate($event)\" />\n                </div>\n                <div\n                    [style.display]=\"isExpiryDateToggleChecked ? 'block' : 'none'\"\n                    data-automation-id=\"adf-slide-toggle-checked\">\n                    <mat-form-field class=\"adf-full-width\" data-automation-id=\"adf-content-share-expiration-field\">\n                        <mat-label>{{ 'SHARE.EXPIRATION-PLACEHOLDER' | translate }}</mat-label>\n                        <mat-datepicker-toggle\n                            [disabled]=\"time.disabled\"\n                            [for]=\"datePicker\"\n                            matSuffix />\n                        <mat-datepicker\n                            #datePicker\n                            (closed)=\"onDatePickerClosed()\" />\n                        <input\n                            class=\"adf-share-link__input\"\n                            #datePickerInput\n                            matInput\n                            [attr.aria-label]=\"'SHARE.EXPIRATION-LABEL' | translate\"\n                            [min]=\"minDate\"\n                            formControlName=\"time\"\n                            (keydown)=\"preventIncorrectCharacters($event)\"\n                            (blur)=\"onTimeChanged()\"\n                            (keydown.enter)=\"datePickerInput.blur()\"\n                            [matDatepicker]=\"datePicker\"/>\n                        <mat-error *ngIf=\"time.errors?.['invalidDate'] && (time.dirty || time.touched)\"\n                                   data-automation-id=\"adf-share-link-input-warning\">{{ 'SHARE.INVALID_DATE_ERROR' | translate }}</mat-error>\n                    </mat-form-field>\n                </div>\n                <p class=\"adf-share-link__info adf-share-link__para\">{{ 'SHARE.SHARE-LINK' | translate }}</p>\n                <div class=\"adf-share-link--row adf-share-link--sharable-container\">\n                    <mat-slide-toggle\n                        color=\"primary\"\n                        data-automation-id=\"adf-share-toggle\"\n                        class=\"adf-share-link--row__slide-toggle\"\n                        aria-label=\"{{ 'SHARE.TITLE' | translate }}\"\n                        [checked]=\"isFileShared\"\n                        [disabled]=\"!canUpdate || isDisabled\"\n                        (change)=\"onSlideShareChange($event)\" />\n                    <div class=\"adf-share-link__label adf-sharable-link\">{{ 'SHARE.SHARABLE-LINK-CREATED' | translate }}\n                    </div>\n                </div>\n                <mat-form-field\n                    class=\"adf-full-width adf-share-link__form--field\"\n                    data-automation-id=\"adf-content-share-public-link-field\"\n                    [ngClass]=\"isLinkWithExpiryDate? 'adf-share-link__border-color' : ''\">\n                    <input\n                        #sharedLinkInput\n                        data-automation-id=\"adf-share-link\"\n                        class=\"adf-share-link__input\"\n                        matInput\n                        placeholder=\"{{ 'SHARE.PUBLIC-LINK' | translate }}\"\n                        [attr.aria-label]=\"'SHARE.PUBLIC-LINK' | translate\"\n                        formControlName=\"sharedUrl\"\n                        readonly=\"readonly\">\n                    <mat-icon\n                        class=\"adf-input-action adf-share-link__icon adf-share-link__copy-icon\"\n                        role=\"button\"\n                        matSuffix\n                        [clipboard-notification]=\"'SHARE.CLIPBOARD-MESSAGE' | translate\"\n                        [adf-clipboard]\n                        [attr.aria-label]=\"'SHARE.COPY_BUTTON_LABEL' | translate\"\n                        [target]=\"sharedLinkInput\"\n                        tabindex=\"0\"\n                        adf-icon=\"content_copy\"\n                    />\n                </mat-form-field>\n                <p class=\"adf-share-link__warn adf-share-link__para\" *ngIf=\"isLinkWithExpiryDate\">\n                    {{ 'SHARE.LINK-WITH-EXPIRY-SETTINGS' | translate }}\n                </p>\n                <div class=\"adf-share-link--row\">\n                    <mat-icon class=\"adf-share-link__icon\" adf-icon=\"public\" />\n                    <p\n                        class=\"adf-share-link__info adf-sharable-link adf-share-link__public-content adf-share-link__para\">\n                        {{ 'SHARE.PUBLIC-CONTENT' | translate }}\n                    </p>\n                </div>\n            </form>\n            <hr class=\"adf-share-link__separation-line\" aria-hidden=\"true\" />\n        </mat-dialog-content>\n        <div class=\"adf-share-link__actions\" mat-dialog-actions>\n            <button data-automation-id=\"adf-share-dialog-close\" mat-button color=\"primary\" mat-dialog-close>\n                {{ 'SHARE.CLOSE' | translate }}\n            </button>\n        </div>\n    </div>\n</div>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DestroyRef, Directive, HostListener, inject, Input, NgZone, OnChanges } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NodeEntry, NodesApi } from '@alfresco/js-api';\n\nimport { ShareDialogComponent } from './content-node-share.dialog';\nimport { from, Observable } from 'rxjs';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n    selector: '[adf-share]',\n    exportAs: 'adfShare'\n})\nexport class NodeSharedDirective implements OnChanges {\n    private readonly dialog = inject(MatDialog);\n    private readonly zone = inject(NgZone);\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n\n    isFile: boolean = false;\n    isShared: boolean = false;\n\n    /** Node to share. */\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    @Input('adf-share')\n    node: NodeEntry;\n\n    /** Prefix to add to the generated link. */\n    @Input()\n    baseShareUrl: string;\n\n    _nodesApi: NodesApi;\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.alfrescoApiService.getInstance());\n        return this._nodesApi;\n    }\n\n    private readonly destroyRef = inject(DestroyRef);\n    shareNode(nodeEntry: NodeEntry) {\n        if (nodeEntry?.entry?.isFile) {\n            // shared and favorite\n            const nodeId = nodeEntry.entry['nodeId'] || nodeEntry.entry['guid'];\n\n            if (nodeId) {\n                this.getNodeInfo(nodeId).subscribe((node) => {\n                    this.openShareLinkDialog(node);\n                });\n            } else {\n                this.openShareLinkDialog(nodeEntry);\n            }\n        }\n    }\n\n    private getNodeInfo(nodeId: string): Observable<NodeEntry> {\n        const options = {\n            include: ['allowableOperations']\n        };\n\n        return from(this.nodesApi.getNode(nodeId, options));\n    }\n\n    private openShareLinkDialog(node: NodeEntry) {\n        this.dialog.open(ShareDialogComponent, {\n            width: '600px',\n            panelClass: 'adf-share-link-dialog',\n            data: {\n                node,\n                baseShareUrl: this.baseShareUrl\n            }\n        });\n    }\n\n    ngOnChanges() {\n        this.zone.onStable.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n            if (this.node?.entry) {\n                this.isFile = this.node.entry.isFile;\n                this.isShared = this.node.entry.properties ? this.node.entry.properties['qshare:sharedId'] : false;\n            }\n        });\n    }\n\n    @HostListener('click')\n    onClick() {\n        if (this.node) {\n            this.shareNode(this.node);\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { ShareDialogComponent } from './content-node-share.dialog';\nimport { NodeSharedDirective } from './content-node-share.directive';\n\nexport const CONTENT_NODE_SHARE_DIRECTIVES = [ShareDialogComponent, NodeSharedDirective] as const;\n\n/** @deprecated use `...CONTENT_NODE_SHARE_DIRECTIVES` or import each directive individually */\n@NgModule({\n    imports: [...CONTENT_NODE_SHARE_DIRECTIVES],\n    exports: [...CONTENT_NODE_SHARE_DIRECTIVES]\n})\nexport class ContentNodeShareModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './content-node-share.settings';\nexport * from './content-node-share.dialog';\nexport * from './content-node-share.directive';\n\nexport * from './services/shared-links-api.service';\n\nexport * from './content-node-share.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NodeEntry } from '@alfresco/js-api';\n\nexport class TreeBaseNode {\n    name: string;\n    nodeId: string;\n    level: number;\n    expandable = true;\n    node: NodeEntry;\n\n    constructor(nodeEntry: NodeEntry, level?: number, expandable?: boolean) {\n        this.name = nodeEntry.entry.name;\n        this.nodeId = nodeEntry.entry.id;\n        this.level = level ? level : 0;\n        this.expandable = expandable ? expandable : true;\n        this.node = nodeEntry ? new NodeEntry(nodeEntry) : undefined;\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { TreeBaseNode } from '../models/tree-view.model';\nimport { NodePaging, NodeEntry } from '@alfresco/js-api';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class TreeViewService {\n    private readonly nodeApi = inject(NodesApiService);\n\n    getTreeNodes(nodeId: string): Observable<TreeBaseNode[]> {\n        return this.nodeApi.getNodeChildren(nodeId).pipe(\n            map((nodePage: NodePaging) => nodePage.list.entries.filter((node) => (node.entry.isFolder ? node : null))),\n            map((nodes: NodeEntry[]) => nodes.map((node) => new TreeBaseNode(node)))\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { CollectionViewer, SelectionChange } from '@angular/cdk/collections';\nimport { BehaviorSubject, merge, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { TreeBaseNode } from '../models/tree-view.model';\nimport { TreeViewService } from '../services/tree-view.service';\n\n@Injectable()\nexport class TreeViewDataSource {\n    private readonly treeControl = inject<FlatTreeControl<TreeBaseNode>>(FlatTreeControl);\n    private readonly treeViewService = inject(TreeViewService);\n\n    treeNodes: TreeBaseNode[];\n    dataChange = new BehaviorSubject<TreeBaseNode[]>([]);\n    childrenSubscription = null;\n    changeSubscription = null;\n\n    get data(): TreeBaseNode[] {\n        return this.treeNodes;\n    }\n\n    set data(value: TreeBaseNode[]) {\n        this.treeControl.dataNodes = value;\n        this.dataChange.next(value);\n    }\n\n    constructor() {\n        this.dataChange.subscribe((treeNodes) => (this.treeNodes = treeNodes));\n    }\n\n    connect(collectionViewer: CollectionViewer): Observable<TreeBaseNode[]> {\n        this.changeSubscription = this.treeControl.expansionModel.changed.subscribe((change) => {\n            if ((change as SelectionChange<TreeBaseNode>).added && (change as SelectionChange<TreeBaseNode>).added.length > 0) {\n                this.expandTreeNodes(change as SelectionChange<TreeBaseNode>);\n            } else if ((change as SelectionChange<TreeBaseNode>).removed) {\n                this.reduceTreeNodes(change as SelectionChange<TreeBaseNode>);\n            }\n        });\n        return merge(collectionViewer.viewChange, this.dataChange).pipe(map(() => this.data));\n    }\n\n    disconnect() {\n        if (this.childrenSubscription) {\n            this.childrenSubscription.unsubscribe();\n        }\n        if (this.changeSubscription) {\n            this.changeSubscription.unsubscribe();\n        }\n    }\n\n    private expandTreeNodes(change: SelectionChange<TreeBaseNode>) {\n        change.added.forEach((node) => this.expandNode(node));\n    }\n\n    private reduceTreeNodes(change: SelectionChange<TreeBaseNode>) {\n        change.removed\n            .slice()\n            .reverse()\n            .forEach((node) => this.toggleNode(node));\n    }\n\n    private expandNode(node: TreeBaseNode) {\n        this.childrenSubscription = this.treeViewService.getTreeNodes(node.nodeId).subscribe((children) => {\n            const index = this.data.indexOf(node);\n            if (!children || index < 0) {\n                node.expandable = false;\n                return;\n            }\n            const nodes = children.map((actualNode) => {\n                actualNode.level = node.level + 1;\n                return actualNode;\n            });\n            this.data.splice(index + 1, 0, ...nodes);\n            this.dataChange.next(this.data);\n        });\n    }\n\n    toggleNode(node: TreeBaseNode) {\n        const index = this.data.indexOf(node);\n        let count = 0;\n        for (let i = index + 1; i < this.data.length && this.data[i].level > node.level; i++, count++) {\n            /* empty */\n        }\n        this.data.splice(index + 1, count);\n        this.dataChange.next(this.data);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, inject, Injector, runInInjectionContext } from '@angular/core';\nimport { TreeBaseNode } from '../models/tree-view.model';\nimport { TreeViewDataSource } from '../data/tree-view-datasource';\nimport { TreeViewService } from '../services/tree-view.service';\nimport { NodeEntry } from '@alfresco/js-api';\nimport { CommonModule } from '@angular/common';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { IconModule } from '@alfresco/adf-core';\n\n@Component({\n    selector: 'adf-tree-view-list',\n    imports: [CommonModule, MatTreeModule, MatButtonModule, IconModule, TranslatePipe],\n    templateUrl: './tree-view.component.html',\n    styleUrls: ['./tree-view.component.scss']\n})\nexport class TreeViewComponent implements OnChanges {\n    private readonly treeViewService = inject(TreeViewService);\n    private readonly injector = inject(Injector);\n\n    /** Identifier of the node to display. */\n    @Input({ required: true })\n    nodeId: string;\n\n    /** Emitted when a node in the tree view is clicked. */\n    @Output()\n    nodeClicked: EventEmitter<NodeEntry> = new EventEmitter();\n\n    /** Emitted when an invalid node id is given. */\n    @Output()\n    error: EventEmitter<any> = new EventEmitter();\n\n    treeControl: FlatTreeControl<TreeBaseNode>;\n    dataSource: TreeViewDataSource;\n\n    constructor() {\n        this.treeControl = new FlatTreeControl<TreeBaseNode>(this.getLevel, this.isExpandable);\n        this.dataSource = runInInjectionContext(this.injector, () => {\n            const injector = Injector.create({\n                providers: [{ provide: FlatTreeControl, useValue: this.treeControl }],\n                parent: this.injector\n            });\n            return runInInjectionContext(injector, () => new TreeViewDataSource());\n        });\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes['nodeId']?.currentValue && changes['nodeId'].currentValue !== changes['nodeId'].previousValue) {\n            this.loadTreeNode();\n        } else {\n            this.dataSource.data = [];\n        }\n    }\n\n    onNodeClicked(node: NodeEntry) {\n        this.nodeClicked.emit(node);\n    }\n\n    getLevel = (node: TreeBaseNode) => node.level;\n\n    isExpandable = (node: TreeBaseNode) => node.expandable;\n\n    hasChild = (_: number, nodeData: TreeBaseNode) => nodeData.expandable;\n\n    private loadTreeNode() {\n        this.treeViewService.getTreeNodes(this.nodeId).subscribe(\n            (treeNode: TreeBaseNode[]) => {\n                this.dataSource.data = treeNode;\n            },\n            (error) => this.error.emit(error)\n        );\n    }\n}\n","<mat-tree class=\"adf-tree-view-main\" [dataSource]=\"dataSource\" [treeControl]=\"treeControl\" *ngIf=\"nodeId; else missingNodeId\">\n    <mat-tree-node\n        class=\"adf-tree-view adf-tree-view-node\"\n        *matTreeNodeDef=\"let treeNode\"\n        id=\"{{ treeNode.name + '-tree-node' }}\"\n        matTreeNodePadding\n        [matTreeNodePaddingIndent]=\"15\"\n    >\n        {{ treeNode.name }}\n    </mat-tree-node>\n    <mat-tree-node\n        class=\"adf-tree-view adf-tree-view-node\"\n        id=\"{{ treeNode.name + '-tree-child-node' }}\"\n        *matTreeNodeDef=\"let treeNode; when: hasChild\"\n        matTreeNodePadding\n        [matTreeNodePaddingIndent]=\"15\"\n    >\n        <button\n            matTreeNodeToggle\n            id=\"{{ 'button-' + treeNode.name }}\"\n            (click)=\"onNodeClicked(treeNode.node)\"\n            mat-icon-button\n            [attr.aria-label]=\"\n                'ADF-TREE-VIEW.ACCESSIBILITY.ARIA_LABEL'\n                    | translate\n                        : {\n                              name: treeNode.name\n                          }\n            \"\n        >\n            <mat-icon class=\"adf-tree-view-icon\" [adf-icon]=\"treeControl.isExpanded(treeNode) ? 'folder_open' : 'folder'\" />\n        </button>\n        <span\n            class=\"adf-tree-view-label\"\n            matTreeNodeToggle\n            role=\"button\"\n            (click)=\"onNodeClicked(treeNode.node)\"\n            tabindex=\"0\"\n            (keyup.enter)=\"onNodeClicked(treeNode.node)\"\n            >{{ treeNode.name }}</span\n        >\n    </mat-tree-node>\n</mat-tree>\n<ng-template #missingNodeId>\n    <div id=\"adf-tree-view-missing-node\">\n        {{ 'ADF-TREE-VIEW.MISSING-ID' | translate }}\n    </div>\n</ng-template>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { TreeViewComponent } from './components/tree-view.component';\n\n/** @deprecated use `TreeViewComponent` instead */\n@NgModule({\n    imports: [TreeViewComponent],\n    exports: [TreeViewComponent]\n})\nexport class TreeViewModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './tree-view.module';\nexport * from './components/tree-view.component';\nexport * from './data/tree-view-datasource';\nexport * from './models/tree-view.model';\nexport * from './services/tree-view.service';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { ContentIncludeQuery, Group, GroupEntry, GroupsApi } from '@alfresco/js-api';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { from, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class GroupService {\n    private readonly alfrescoApiService = inject(AlfrescoApiService);\n\n    private _groupsApi: GroupsApi;\n    get groupsApi(): GroupsApi {\n        this._groupsApi = this._groupsApi ?? new GroupsApi(this.alfrescoApiService.getInstance());\n        return this._groupsApi;\n    }\n\n    async listAllGroupMembershipsForPerson(personId: string, opts?: any, accumulator = []): Promise<GroupEntry[]> {\n        const groupsPaginated = await this.groupsApi.listGroupMembershipsForPerson(personId, opts);\n        accumulator = [...accumulator, ...groupsPaginated.list.entries];\n        if (groupsPaginated.list.pagination.hasMoreItems) {\n            const skip = groupsPaginated.list.pagination.skipCount + groupsPaginated.list.pagination.count;\n            return this.listAllGroupMembershipsForPerson(\n                personId,\n                {\n                    maxItems: opts.maxItems,\n                    skipCount: skip\n                },\n                accumulator\n            );\n        } else {\n            return accumulator;\n        }\n    }\n\n    /**\n     * Returns group for specified id.\n     *\n     * @param id id of group to return.\n     * @param opts additional query parameters\n     * @returns Observable<GroupEntry> group for specified id.\n     */\n    getGroup(id: string, opts?: ContentIncludeQuery): Observable<GroupEntry> {\n        return from(this.groupsApi.getGroup(id, opts)).pipe(\n            map((group) => {\n                group.entry.description ||= '';\n                return group;\n            })\n        );\n    }\n\n    /**\n     * Updates specified group.\n     *\n     * @param group group to update.\n     * @param opts additional query parameters\n     * @returns Observable<GroupEntry> updated group.\n     */\n    updateGroup(group: Group, opts?: ContentIncludeQuery): Observable<GroupEntry> {\n        return from(\n            this.groupsApi.updateGroup(\n                group.id,\n                {\n                    displayName: group.displayName,\n                    description: group.description\n                },\n                opts\n            )\n        ).pipe(\n            map((updatedGroup) => {\n                updatedGroup.entry.description ||= '';\n                return updatedGroup;\n            })\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './services/group.service';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Subject } from 'rxjs';\n\nexport interface AspectListDialogComponentData {\n    title: string;\n    description: string;\n    overTableMessage: string;\n    select: Subject<string[]>;\n    nodeId?: string;\n    excludedAspects?: string[];\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AspectPaging } from '@alfresco/js-api';\n\nexport interface CustomAspectPaging {\n    standardAspectPaging: AspectPaging;\n    customAspectPaging: AspectPaging;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { AspectListComponent } from './aspect-list.component';\nimport { AspectListDialogComponent } from './aspect-list-dialog.component';\n\nexport const ASPECT_LIST_DIRECTIVES = [AspectListComponent, AspectListDialogComponent] as const;\n\n/** @deprecated use `...ASPECT_LIST_DIRECTIVES` or import the individual components */\n@NgModule({\n    imports: [...ASPECT_LIST_DIRECTIVES],\n    exports: [...ASPECT_LIST_DIRECTIVES]\n})\nexport class AspectListModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './aspect-list.component';\nexport * from './aspect-list-dialog.component';\nexport * from './services/aspect-list.service';\nexport * from './services/node-aspect.service';\nexport * from './services/dialog-aspect-list.service';\n\nexport * from './aspect-list-dialog-data.interface';\nexport * from './interfaces/custom-aspect-paging.interface';\n\nexport * from './aspect-list.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Subject } from 'rxjs';\n\nexport interface ContentTypeDialogComponentData {\n    title: string;\n    description: string;\n    confirmMessage: string;\n    select: Subject<boolean>;\n    nodeType?: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './content-type.service';\nexport * from './content-type-metadata.interface';\nexport * from './content-type-dialog.component';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CommentModel, CommentsService, User } from '@alfresco/adf-core';\nimport { CommentEntry, CommentsApi, Comment, PeopleApi } from '@alfresco/js-api';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, from } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NodeCommentsService implements CommentsService {\n    private readonly apiService = inject(AlfrescoApiService);\n\n    private _commentsApi: CommentsApi;\n    get commentsApi(): CommentsApi {\n        this._commentsApi = this._commentsApi ?? new CommentsApi(this.apiService.getInstance());\n        return this._commentsApi;\n    }\n\n    private _peopleApi: PeopleApi;\n    get peopleApi(): PeopleApi {\n        this._peopleApi = this._peopleApi ?? new PeopleApi(this.apiService.getInstance());\n        return this._peopleApi;\n    }\n\n    /**\n     * Gets all comments that have been added to a task.\n     *\n     * @param id ID of the target task\n     * @returns Details for each comment\n     */\n    get(id: string): Observable<CommentModel[]> {\n        return from(this.commentsApi.listComments(id)).pipe(\n            map((response) => {\n                const comments: CommentModel[] = [];\n\n                response.list.entries.forEach((comment: CommentEntry) => {\n                    this.addToComments(comments, comment);\n                });\n\n                return comments;\n            })\n        );\n    }\n\n    /**\n     * Adds a comment to a task.\n     *\n     * @param id ID of the target task\n     * @param message Text for the comment\n     * @returns Details about the comment\n     */\n    add(id: string, message: string): Observable<CommentModel> {\n        return from(this.commentsApi.createComment(id, { content: message })).pipe(map((response) => this.newCommentModel(response.entry)));\n    }\n\n    private addToComments(comments: CommentModel[], comment: CommentEntry): void {\n        const newComment: Comment = comment.entry;\n\n        comments.push(this.newCommentModel(newComment));\n    }\n\n    private newCommentModel(comment: Comment): CommentModel {\n        return new CommentModel({\n            id: comment.id,\n            message: comment.content,\n            created: comment.createdAt,\n            createdBy: new User(comment.createdBy)\n        });\n    }\n\n    /**\n     * Gets the avatar image URL for a given user ID.\n     *\n     * @param userId ID of the user\n     * @returns The URL of the user's avatar image\n     */\n    getUserImage(userId: string): string {\n        return this.peopleApi.getAvatarImageUrl(userId);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { ADF_COMMENTS_SERVICE, CommentModel, CommentsComponent } from '@alfresco/adf-core';\nimport { NodeCommentsService } from './services/node-comments.service';\n\n@Component({\n    selector: 'adf-node-comments',\n    imports: [CommentsComponent],\n    templateUrl: './node-comments.component.html',\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        {\n            provide: ADF_COMMENTS_SERVICE,\n            useClass: NodeCommentsService\n        }\n    ]\n})\nexport class NodeCommentsComponent {\n    /** nodeId of the document that has comments */\n    @Input({ required: true })\n    nodeId: string;\n\n    /** make the comments component readOnly */\n    @Input()\n    readOnly: boolean;\n\n    /** Emits when a new comment is added */\n    @Output()\n    commentAdded = new EventEmitter<CommentModel>();\n}\n","<adf-comments \n    [readOnly]=\"readOnly\"\n    [id]=\"nodeId\"\n    (commentAdded)=\"commentAdded.emit($event)\"\n/>","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { NodeCommentsComponent } from './node-comments.component';\n\n/** @deprecated import NodeCommentsComponent standalone component directly */\n@NgModule({\n    imports: [NodeCommentsComponent],\n    exports: [NodeCommentsComponent]\n})\nexport class NodeCommentsModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './node-comments.component';\nexport * from './services/node-comments.service';\nexport * from './node-comments.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Version, NodeChildAssociation, Node } from '@alfresco/js-api';\nimport { NodeEntityEvent } from '../../document-list';\n\nexport interface NewVersionUploaderDialogData {\n    title?: string;\n    node: Node;\n    file?: File;\n    currentVersion?: Version;\n    showVersionsOnly?: boolean;\n    showComments?: boolean;\n    showActions?: boolean;\n    allowDownload?: boolean;\n    allowViewVersions?: boolean;\n    allowVersionDelete?: boolean;\n}\n\nexport type NewVersionUploaderData = VersionManagerUploadData | ViewVersion | RefreshData;\n\nexport const NewVersionUploaderDataAction = {\n    refresh: 'refresh',\n    upload: 'upload',\n    view: 'view'\n} as const;\n\nexport type NewVersionUploaderDataAction = (typeof NewVersionUploaderDataAction)[keyof typeof NewVersionUploaderDataAction];\n\ninterface BaseData {\n    action: NewVersionUploaderDataAction;\n}\n\nexport interface VersionManagerUploadData extends BaseData {\n    action: 'upload';\n    newVersion: NodeEntityEvent;\n    currentVersion: NodeChildAssociation;\n}\n\nexport interface ViewVersion extends BaseData {\n    action: 'view';\n    versionId: string;\n}\n\nexport interface RefreshData extends BaseData {\n    action: 'refresh';\n    node: Node;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './new-version-uploader.model';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Node } from '@alfresco/js-api';\nimport { Component, EventEmitter, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { NewVersionUploaderDialogData, NewVersionUploaderData, NewVersionUploaderDataAction } from './models';\nimport { CommonModule } from '@angular/common';\nimport { VersionComparisonComponent } from '../version-manager/version-comparison.component';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { VersionUploadComponent } from '../version-manager/version-upload.component';\nimport { VersionListComponent } from '../version-manager/version-list.component';\n\n@Component({\n    selector: 'adf-new-version-uploader-dialog',\n    imports: [\n        CommonModule,\n        MatDialogModule,\n        TranslatePipe,\n        MatButtonModule,\n        VersionComparisonComponent,\n        VersionUploadComponent,\n        VersionListComponent\n    ],\n    templateUrl: './new-version-uploader.dialog.html',\n    styleUrls: ['./new-version-uploader.dialog.scss'],\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'adf-new-version-uploader-dialog'\n    }\n})\nexport class NewVersionUploaderDialogComponent implements OnInit {\n    data = inject<NewVersionUploaderDialogData>(MAT_DIALOG_DATA);\n    private readonly dialogRef = inject<MatDialogRef<NewVersionUploaderDialogComponent>>(MatDialogRef);\n\n    /**\n     * Dialog title to show into the header.\n     * If data.title is not provided, a default title is set\n     */\n    title: string;\n\n    /** Emitted when an action is done. */\n    @Output()\n    dialogAction = new EventEmitter<NewVersionUploaderData>();\n\n    /** Emitted when an error occurs. */\n    @Output()\n    uploadError = new EventEmitter<any>();\n\n    ngOnInit(): void {\n        this.setDialogTitle();\n    }\n\n    private setDialogTitle() {\n        if (!this.data.title) {\n            this.title = this.data.showVersionsOnly ? 'ADF-NEW-VERSION-UPLOADER.DIALOG_LIST.TITLE' : 'ADF-NEW-VERSION-UPLOADER.DIALOG_UPLOAD.TITLE';\n        } else {\n            this.title = this.data.title;\n        }\n    }\n\n    handleUpload(newFileVersion) {\n        this.dialogAction.emit({ action: NewVersionUploaderDataAction.upload, newVersion: newFileVersion, currentVersion: this.data.node });\n        this.dialogRef.close();\n    }\n\n    handleCancel() {\n        this.dialogRef.close();\n    }\n\n    onUploadError(error) {\n        this.uploadError.emit(error);\n    }\n\n    onViewingVersion(versionId: string) {\n        this.dialogAction.emit({ action: NewVersionUploaderDataAction.view, versionId });\n    }\n\n    refresh(node: Node) {\n        this.dialogAction.emit({ action: NewVersionUploaderDataAction.refresh, node });\n    }\n}\n","<h1 class=\"adf-new-version-uploader-dialog-title\" mat-dialog-title data-automation-id=\"new-version-uploader-dialog-title\">{{ title | translate }}</h1>\n<section class=\"adf-new-version-uploader-dialog-content\" mat-dialog-content *ngIf=\"!data.showVersionsOnly\">\n  <adf-version-comparison id=\"adf-version-comparison\" [newFileVersion]=\"data.file\" [node]=\"data.node\" />\n  <adf-version-upload\n    id=\"adf-version-upload-button\"\n    [node]=\"data.node\"\n    [newFileVersion]=\"data.file\"\n    [currentVersion]=\"data.currentVersion\"\n    (success)=\"handleUpload($event)\"\n    (cancel)=\"handleCancel()\"\n    (error)=\"onUploadError($event)\"\n  />\n</section>\n<ng-container *ngIf=\"data.showVersionsOnly\">\n  <section class=\"adf-new-version-uploader-dialog-content\" mat-dialog-content>\n    <div class=\"adf-version-list-container\">\n      <div class=\"adf-version-list-table\">\n        <adf-version-list\n          [node]=\"data.node\"\n          [showComments]=\"data.showComments\"\n          [showActions]=\"data.showActions\"\n          [allowDownload]=\"data.allowDownload\"\n          [allowViewVersions]=\"data.allowViewVersions\"\n          [allowVersionDelete]=\"data.allowVersionDelete\"\n          (deleted)=\"refresh($event)\"\n          (restored)=\"refresh($event)\"\n          (viewVersion)=\"onViewingVersion($event)\"\n        />\n      </div>\n    </div>\n  </section>\n  <div class=\"adf-new-version-uploader-dialog-actions\" mat-dialog-actions>\n    <button mat-button color=\"primary\" [mat-dialog-close]=\"true\">{{ 'ADF-NEW-VERSION-UPLOADER.DIALOG_LIST.CLOSE' | translate }}</button>\n  </div>\n</ng-container>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { NewVersionUploaderDialogComponent } from './new-version-uploader.dialog';\n\n/** @deprecated use `NewVersionUploaderDialogComponent` standalone component instead */\n@NgModule({\n    imports: [NewVersionUploaderDialogComponent],\n    exports: [NewVersionUploaderDialogComponent]\n})\nexport class NewVersionUploaderModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\n\nimport { NewVersionUploaderDialogComponent } from './new-version-uploader.dialog';\nimport { VersionsApi } from '@alfresco/js-api';\nimport { NewVersionUploaderData, NewVersionUploaderDialogData } from './models';\nimport { Observable } from 'rxjs';\nimport { OverlayContainer } from '@angular/cdk/overlay';\nimport { take } from 'rxjs/operators';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class NewVersionUploaderService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly dialog = inject(MatDialog);\n    private readonly overlayContainer = inject(OverlayContainer);\n\n    private _versionsApi: VersionsApi;\n    get versionsApi(): VersionsApi {\n        this._versionsApi = this._versionsApi ?? new VersionsApi(this.apiService.getInstance());\n        return this._versionsApi;\n    }\n\n    /**\n     * Open a dialog NewVersionUploaderDialogComponent to display:\n     * - a side by side comparison between the current target node (type, name, icon) and the new file that should update it's version\n     * - the new version's minor/major changes and the optional comment of a node and the ability to upload a new file version\n     * - if data.showVersionsOnly is set to true, displays the version history of a node, with the ability to restore, delete and view version of the current node\n     *\n     * @param data data to pass to MatDialog\n     * @param config allow to override default MatDialogConfig\n     * @param selectorAutoFocusedOnClose element's selector which should be autofocused after closing modal\n     * @returns an Observable represents the triggered dialog action or an error in case of an error condition\n     */\n    openUploadNewVersionDialog(\n        data: NewVersionUploaderDialogData,\n        config?: MatDialogConfig,\n        selectorAutoFocusedOnClose?: string\n    ): Observable<NewVersionUploaderData> {\n        const { file, node, showVersionsOnly } = data;\n        const allowDownload = data.allowDownload ?? true;\n        const showComments = data.showComments ?? true;\n\n        return new Observable((observer) => {\n            this.versionsApi.listVersionHistory(node.id).then((versionPaging) => {\n                const dialogRef = this.dialog.open<NewVersionUploaderDialogComponent, NewVersionUploaderDialogData>(\n                    NewVersionUploaderDialogComponent,\n                    {\n                        data: {\n                            file,\n                            node,\n                            currentVersion: versionPaging.list.entries[0].entry,\n                            showComments,\n                            allowDownload,\n                            showVersionsOnly,\n                            allowViewVersions: data.allowViewVersions ?? true,\n                            allowVersionDelete: data.allowVersionDelete ?? true,\n                            showActions: data.showActions ?? true\n                        },\n                        panelClass: this.composePanelClass(showVersionsOnly),\n                        width: '630px',\n                        ...(config && Object.keys(config).length > 0 && config)\n                    }\n                );\n                dialogRef.componentInstance.dialogAction.asObservable().subscribe((newVersionUploaderData) => {\n                    observer.next(newVersionUploaderData);\n                });\n                dialogRef.componentInstance.uploadError.asObservable().subscribe((error) => {\n                    observer.error(error);\n                });\n                dialogRef\n                    .afterClosed()\n                    .pipe(take(1))\n                    .subscribe(() => {\n                        this.overlayContainer.getContainerElement().setAttribute('role', 'region');\n                        NewVersionUploaderService.focusOnClose(selectorAutoFocusedOnClose);\n                    });\n                this.overlayContainer.getContainerElement().setAttribute('role', 'main');\n            });\n        });\n    }\n\n    private composePanelClass(showVersionsOnly: boolean): string | string[] {\n        const dialogCssClass = 'adf-new-version-uploader-dialog';\n        return [dialogCssClass, `${dialogCssClass}-${showVersionsOnly ? 'list' : 'upload'}`];\n    }\n\n    private static focusOnClose(selectorAutoFocusedOnClose: string): void {\n        if (selectorAutoFocusedOnClose) {\n            document.querySelector<HTMLElement>(selectorAutoFocusedOnClose)?.focus();\n        }\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './new-version-uploader.dialog';\nexport * from './new-version-uploader.module';\nexport * from './new-version-uploader.service';\nexport * from './models';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Site } from '@alfresco/js-api';\n\nexport interface LibraryEntity {\n    entry: Site;\n    isLibrary: boolean;\n    isFavorite: boolean;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PathInfo } from '@alfresco/js-api';\n\nexport class RestoreMessageModel {\n    message: string;\n    path: PathInfo;\n    action: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface LibraryMembershipErrorEvent {\n    error: any;\n    i18nKey: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface LibraryMembershipToggleEvent {\n    updatedEntry?: any;\n    shouldReload: boolean;\n    i18nKey: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './library-entity.interface';\nexport * from './restore-message-model.interface';\nexport * from './library-membership-error-event.interface';\nexport * from './library-membership-toggle-event.interface';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    DestroyRef,\n    EventEmitter,\n    inject,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport {\n    CloseButtonPosition,\n    IconModule,\n    Track,\n    VIEWER_DIRECTIVES,\n    ViewerComponent,\n    ViewerMoreActionsComponent,\n    ViewerOpenWithComponent,\n    ViewerSidebarComponent,\n    ViewerToolbarActionsComponent,\n    ViewerToolbarComponent,\n    ViewUtilService\n} from '@alfresco/adf-core';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\nimport { ContentApi, Node, NodeEntry, NodesApi, RenditionEntry, SharedlinksApi, Version, VersionEntry, VersionsApi } from '@alfresco/js-api';\nimport { RenditionService } from '../../common/services/rendition.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { filter } from 'rxjs/operators';\nimport { ContentService } from '../../common/services/content.service';\nimport { NodesApiService } from '../../common/services/nodes-api.service';\nimport { UploadService } from '../../common/services/upload.service';\nimport { FileModel } from '../../common/models/file.model';\nimport { NodeActionsService } from '../../document-list';\nimport { CommonModule } from '@angular/common';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NodeDownloadDirective } from '../../directives';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n    selector: 'adf-alfresco-viewer',\n    imports: [CommonModule, TranslatePipe, MatButtonModule, IconModule, ...VIEWER_DIRECTIVES, NodeDownloadDirective],\n    templateUrl: './alfresco-viewer.component.html',\n    styleUrls: ['./alfresco-viewer.component.scss'],\n    host: { class: 'adf-alfresco-viewer' },\n    encapsulation: ViewEncapsulation.None,\n    providers: [ViewUtilService]\n})\nexport class AlfrescoViewerComponent implements OnChanges, OnInit {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly nodesApiService = inject(NodesApiService);\n    private readonly renditionService = inject(RenditionService);\n    private readonly viewUtilService = inject(ViewUtilService);\n    private readonly contentService = inject(ContentService);\n    private readonly uploadService = inject(UploadService);\n    dialog = inject(MatDialog);\n    private readonly cdr = inject(ChangeDetectorRef);\n    private readonly nodeActionsService = inject(NodeActionsService);\n\n    @ViewChild('adfViewer')\n    adfViewer: ViewerComponent<{ node: Node }>;\n\n    @ContentChild(ViewerToolbarComponent)\n    toolbar: ViewerToolbarComponent;\n\n    @ContentChild(ViewerSidebarComponent)\n    sidebar: ViewerSidebarComponent;\n\n    @ContentChild(ViewerToolbarActionsComponent)\n    toolbarActions: ViewerToolbarActionsComponent;\n\n    @ContentChild(ViewerMoreActionsComponent)\n    moreActions: ViewerMoreActionsComponent;\n\n    @ContentChild(ViewerOpenWithComponent)\n    openWith: ViewerOpenWithComponent;\n\n    @ContentChild('viewerExtensions', { static: false })\n    viewerExtensions: TemplateRef<any>;\n\n    /** Node Id of the file to load. */\n    @Input()\n    nodeId: string = null;\n\n    /** Version Id of the file to load. */\n    @Input()\n    versionId: string = null;\n\n    /** Shared link id (to display shared file). */\n    @Input()\n    sharedLinkId: string = null;\n\n    /** Hide or show the viewer */\n    @Input()\n    showViewer = true;\n\n    /**\n     * Number of times the Viewer will retry fetching content Rendition.\n     * There is a delay of at least one second between attempts.\n     */\n    @Input()\n    maxRetries = 30;\n\n    /** Allows `back` navigation */\n    @Input()\n    allowGoBack = true;\n\n    /** Hide or show the toolbar */\n    @Input()\n    showToolbar = true;\n\n    /**\n     * If `true` then show the Viewer as a full page over the current content.\n     * Otherwise, fit inside the parent div.\n     */\n    @Input()\n    overlayMode = false;\n\n    /**\n     * Toggles before/next navigation. You can use the arrow buttons to navigate\n     * between documents in the collection.\n     */\n    @Input()\n    allowNavigate = false;\n\n    /** Toggles the \"before\" (\"<\") button. Requires `allowNavigate` to be enabled. */\n    @Input()\n    canNavigateBefore = true;\n\n    /** Toggles the next (\">\") button. Requires `allowNavigate` to be enabled. */\n    @Input()\n    canNavigateNext = true;\n\n    /** Allow the left the sidebar. */\n    @Input()\n    allowLeftSidebar = false;\n\n    /** Allow the right sidebar. */\n    @Input()\n    allowRightSidebar = false;\n\n    /** Toggles right sidebar visibility. Requires `allowRightSidebar` to be set to `true`. */\n    @Input()\n    showRightSidebar = false;\n\n    /** Toggles left sidebar visibility. Requires `allowLeftSidebar` to be set to `true`. */\n    @Input()\n    showLeftSidebar = false;\n\n    /** Toggles downloading. */\n    @Input()\n    allowDownload = true;\n\n    /** Toggles printing. */\n    @Input()\n    allowPrint = false;\n\n    /** Toggles the 'Full Screen' feature. */\n    @Input()\n    allowFullScreen = true;\n\n    /** Toggles the 'Info Button' */\n    @Input()\n    hideInfoButton = false;\n\n    /** Change the close button position Right/Left */\n    @Input()\n    closeButtonPosition: CloseButtonPosition = CloseButtonPosition.Left;\n\n    /** The template for the right sidebar. The template context contains the loaded node data. */\n    @Input()\n    sidebarRightTemplate: TemplateRef<any> = null;\n\n    /** The template for the left sidebar. The template context contains the loaded node data. */\n    @Input()\n    sidebarLeftTemplate: TemplateRef<any> = null;\n\n    /** Should viewer work in read only mode */\n    @Input()\n    readOnly = false;\n\n    /** Toggles dividers visibility */\n    @Input()\n    showToolbarDividers = true;\n\n    /** Emitted when the shared link used is not valid. */\n    @Output()\n    invalidSharedLink = new EventEmitter<void>();\n\n    /** Emitted when user clicks 'Navigate Before' (\"<\") button. */\n    @Output()\n    navigateBefore = new EventEmitter<MouseEvent | KeyboardEvent>();\n\n    /** Emitted when user clicks 'Navigate Next' (\">\") button. */\n    @Output()\n    navigateNext = new EventEmitter<MouseEvent | KeyboardEvent>();\n\n    /** Emitted when the viewer close */\n    @Output()\n    showViewerChange = new EventEmitter<boolean>();\n\n    private cacheBusterNumber: number;\n\n    versionEntry: VersionEntry;\n    urlFileContent: string;\n    fileName: string;\n    mimeType: string;\n    nodeMimeType: string;\n    nodeEntry: NodeEntry;\n    tracks: Track[] = [];\n    canEditNode: boolean = false;\n    allowedEditActions: { [key: string]: boolean } = {\n        rotate: true,\n        crop: true\n    };\n\n    sidebarRightTemplateContext: { node: Node } = { node: null };\n    sidebarLeftTemplateContext: { node: Node } = { node: null };\n\n    private _sharedLinksApi: SharedlinksApi;\n    get sharedLinksApi(): SharedlinksApi {\n        this._sharedLinksApi = this._sharedLinksApi ?? new SharedlinksApi(this.apiService.getInstance());\n        return this._sharedLinksApi;\n    }\n\n    private _versionsApi: VersionsApi;\n    get versionsApi(): VersionsApi {\n        this._versionsApi = this._versionsApi ?? new VersionsApi(this.apiService.getInstance());\n        return this._versionsApi;\n    }\n\n    private _nodesApi: NodesApi;\n    get nodesApi(): NodesApi {\n        this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());\n        return this._nodesApi;\n    }\n\n    private _contentApi: ContentApi;\n    get contentApi(): ContentApi {\n        this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance());\n        return this._contentApi;\n    }\n\n    private readonly destroyRef = inject(DestroyRef);\n\n    constructor() {\n        const renditionService = this.renditionService;\n\n        renditionService.maxRetries = this.maxRetries;\n    }\n\n    ngOnInit() {\n        this.nodesApiService.nodeUpdated\n            .pipe(\n                filter(\n                    (node) =>\n                        node && node.id === this.nodeId && this.getNodeVersionProperty(this.nodeEntry.entry) !== this.getNodeVersionProperty(node)\n                ),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((node) => this.onNodeUpdated(node));\n    }\n\n    private async onNodeUpdated(node: Node) {\n        if (node && node.id === this.nodeId) {\n            this.generateCacheBusterNumber();\n\n            await this.setUpNodeFile(node);\n        }\n    }\n\n    private getNodeVersionProperty(node: Node): string {\n        return node?.properties['cm:versionLabel'] ?? '';\n    }\n\n    private async setupSharedLink() {\n        this.allowGoBack = false;\n\n        try {\n            const sharedLinkEntry = await this.sharedLinksApi.getSharedLink(this.sharedLinkId);\n            await this.setUpSharedLinkFile(sharedLinkEntry);\n        } catch {\n            this.invalidSharedLink.next(undefined);\n            this.mimeType = 'invalid-link';\n            this.urlFileContent = 'invalid-file';\n        }\n    }\n\n    private async setupNode() {\n        try {\n            this.nodeEntry = await this.nodesApi.getNode(this.nodeId, { include: ['allowableOperations'] });\n            if (this.versionId) {\n                this.versionEntry = await this.versionsApi.getVersion(this.nodeId, this.versionId);\n                await this.setUpNodeFile(this.nodeEntry.entry, this.versionEntry.entry);\n            } else {\n                await this.setUpNodeFile(this.nodeEntry.entry);\n            }\n            this.cdr.detectChanges();\n        } catch {\n            this.urlFileContent = 'invalid-node';\n        }\n    }\n\n    private async setUpNodeFile(nodeData: Node, versionData?: Version): Promise<void> {\n        this.canEditNode = this.contentService.hasAllowableOperations(nodeData, 'update');\n        let mimeType: string;\n        let nodeMimeType: string;\n        let urlFileContent: string;\n\n        if (versionData?.content) {\n            mimeType = versionData.content.mimeType;\n        } else if (nodeData.content) {\n            mimeType = nodeData.content.mimeType;\n        }\n        nodeMimeType = mimeType;\n\n        const currentFileVersion = this.nodeEntry?.entry?.properties?.['cm:versionLabel']\n            ? encodeURI(this.nodeEntry?.entry?.properties['cm:versionLabel'])\n            : encodeURI('1.0');\n\n        urlFileContent = versionData ? this.contentApi.getVersionContentUrl(this.nodeId, versionData.id) : this.contentApi.getContentUrl(this.nodeId);\n        urlFileContent = urlFileContent + '&' + currentFileVersion;\n\n        const fileExtension = this.viewUtilService.getFileExtension(versionData ? versionData.name : nodeData.name);\n        const viewerType = this.viewUtilService.getViewerType(fileExtension, mimeType);\n\n        if (viewerType === 'unknown') {\n            let nodeRendition;\n            if (versionData) {\n                nodeRendition = await this.renditionService.getNodeRendition(nodeData.id, versionData.id);\n            } else {\n                nodeRendition = await this.renditionService.getNodeRendition(nodeData.id);\n            }\n            if (nodeRendition) {\n                urlFileContent = nodeRendition.url;\n\n                nodeMimeType = nodeData?.content?.mimeType;\n                const renditionMimeType = nodeRendition.mimeType;\n                mimeType = renditionMimeType || nodeMimeType;\n            }\n        } else if (viewerType === 'media') {\n            this.tracks = await this.renditionService.generateMediaTracksRendition(this.nodeId);\n        }\n\n        this.mimeType = mimeType;\n        this.nodeMimeType = nodeMimeType;\n        this.fileName = versionData ? versionData.name : nodeData.name;\n        this.urlFileContent = urlFileContent + (this.cacheBusterNumber ? '&' + this.cacheBusterNumber : '');\n        this.sidebarRightTemplateContext.node = nodeData;\n        this.sidebarLeftTemplateContext.node = nodeData;\n    }\n\n    private async setUpSharedLinkFile(details: any) {\n        let mimeType = details.entry.content.mimeType;\n        const fileExtension = this.viewUtilService.getFileExtension(details.entry.name);\n        this.fileName = details.entry.name;\n        let urlFileContent = this.contentApi.getSharedLinkContentUrl(this.sharedLinkId, false);\n        const viewerType = this.viewUtilService.getViewerType(fileExtension, mimeType);\n\n        if (viewerType === 'unknown') {\n            ({ url: urlFileContent, mimeType } = await this.getSharedLinkRendition(this.sharedLinkId));\n        }\n        this.mimeType = mimeType;\n        this.urlFileContent = urlFileContent;\n    }\n\n    private async getSharedLinkRendition(sharedId: string): Promise<{ url: string; mimeType: string }> {\n        try {\n            const rendition: RenditionEntry = await this.sharedLinksApi.getSharedLinkRendition(sharedId, 'pdf');\n            if (rendition.entry.status.toString() === 'CREATED') {\n                const urlFileContent = this.contentApi.getSharedLinkRenditionUrl(sharedId, 'pdf');\n                return { url: urlFileContent, mimeType: 'application/pdf' };\n            }\n        } catch {\n            try {\n                const rendition: RenditionEntry = await this.sharedLinksApi.getSharedLinkRendition(sharedId, 'imgpreview');\n                if (rendition.entry.status.toString() === 'CREATED') {\n                    const urlFileContent = this.contentApi.getSharedLinkRenditionUrl(sharedId, 'imgpreview');\n                    return { url: urlFileContent, mimeType: 'image/png' };\n                }\n            } catch {\n                return null;\n            }\n        }\n\n        return null;\n    }\n\n    private generateCacheBusterNumber() {\n        this.cacheBusterNumber = Date.now();\n    }\n\n    /**\n     * close the viewer\n     */\n    onClose() {\n        this.showViewerChange.emit(this.showViewer);\n    }\n\n    onPrintContent(event: MouseEvent) {\n        if (this.allowPrint) {\n            if (!event.defaultPrevented) {\n                this.renditionService.printFileGeneric(this.nodeId, this.mimeType);\n            }\n        }\n    }\n\n    onSubmitFile(newImageBlob: Blob) {\n        if (this?.nodeEntry?.entry?.id && !this.readOnly && this.canEditNode) {\n            const newImageFile: File = new File([newImageBlob], this?.nodeEntry?.entry?.name, { type: this?.nodeEntry?.entry?.content?.mimeType });\n            const newFile = new FileModel(\n                newImageFile,\n                {\n                    majorVersion: false,\n                    newVersion: true,\n                    parentId: this?.nodeEntry?.entry?.parentId,\n                    nodeType: this?.nodeEntry?.entry?.content?.mimeType\n                },\n                this?.nodeEntry?.entry?.id\n            );\n            this.uploadService.addToQueue(...[newFile]);\n            this.uploadService.uploadFilesInTheQueue();\n        }\n    }\n\n    onNavigateBeforeClick(event: MouseEvent | KeyboardEvent) {\n        this.navigateBefore.next(event);\n    }\n\n    onNavigateNextClick(event: MouseEvent | KeyboardEvent) {\n        this.navigateNext.next(event);\n    }\n\n    isSourceDefined(): boolean {\n        return !!(this.nodeId || this.sharedLinkId);\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (this.showViewer) {\n            if (!this.isSourceDefined()) {\n                throw new Error('A content source attribute value is missing.');\n            }\n\n            if (\n                changes.nodeId?.currentValue !== changes.nodeId?.previousValue ||\n                changes.versionId?.currentValue !== changes.versionId?.previousValue\n            ) {\n                this.setupNode();\n            } else if (this.sharedLinkId) {\n                this.setupSharedLink();\n            }\n        }\n    }\n\n    onDownloadFile() {\n        this.nodeActionsService.downloadNode(this.nodeEntry);\n    }\n}\n","<adf-viewer\n    #adfViewer\n    [(showViewer)]=\"showViewer\"\n    [allowGoBack]=\"allowGoBack\"\n    [showToolbar]=\"showToolbar\"\n    [overlayMode]=\"overlayMode\"\n    [allowNavigate]=\"allowNavigate\"\n    [canNavigateBefore]=\"canNavigateBefore\"\n    [canNavigateNext]=\"canNavigateNext\"\n    [allowLeftSidebar]=\"allowLeftSidebar\"\n    [allowRightSidebar]=\"allowRightSidebar\"\n    [showRightSidebar]=\"showRightSidebar\"\n    [showLeftSidebar]=\"showLeftSidebar\"\n    [allowFullScreen]=\"allowFullScreen\"\n    [sidebarRightTemplate]=\"sidebarRightTemplate\"\n    [sidebarLeftTemplate]=\"sidebarLeftTemplate\"\n    [sidebarRightTemplateContext]=\"sidebarRightTemplateContext\"\n    [sidebarLeftTemplateContext]=\"sidebarLeftTemplateContext\"\n    [closeButtonPosition]=\"closeButtonPosition\"\n    [hideInfoButton]=\"hideInfoButton\"\n    [fileName]=\"fileName\"\n    [mimeType]=\"mimeType\"\n    [nodeMimeType]=\"nodeMimeType\"\n    [urlFile]=\"urlFileContent\"\n    [tracks]=\"tracks\"\n    [readOnly]=\"readOnly || !canEditNode\"\n    [showToolbarDividers]=\"showToolbarDividers\"\n    [allowedEditActions]=\"allowedEditActions\"\n    [viewerExtensions]=\"viewerExtensions\"\n    [nodeId]=\"nodeId\"\n    (downloadFile)=\"onDownloadFile()\"\n    (navigateBefore)=\"onNavigateBeforeClick($event)\"\n    (navigateNext)=\"onNavigateNextClick($event)\"\n    (showViewerChange)=\"onClose()\"\n    (submitFile)=\"onSubmitFile($event)\">\n\n    <adf-viewer-toolbar *ngIf=\"toolbar\">\n        <ng-content select=\"adf-viewer-toolbar\" />\n    </adf-viewer-toolbar>\n\n    <adf-viewer-toolbar-actions *ngIf=\"toolbarActions\">\n        <ng-content select=\"adf-viewer-toolbar-actions\" />\n    </adf-viewer-toolbar-actions>\n\n    <adf-viewer-more-actions *ngIf=\"moreActions\">\n        <ng-content select=\"adf-viewer-more-actions\" />\n    </adf-viewer-more-actions>\n\n    <adf-viewer-open-with *ngIf=\"openWith\">\n        <ng-content select=\"adf-viewer-open-with\" />\n    </adf-viewer-open-with>\n\n    <adf-viewer-sidebar *ngIf=\"sidebar\">\n        <ng-content select=\"adf-viewer-sidebar\" />\n    </adf-viewer-sidebar>\n\n    <adf-viewer-toolbar-custom-actions *ngIf=\"allowDownload || allowPrint\">\n        <button id=\"adf-alfresco-viewer-download\"\n                *ngIf=\"allowDownload\"\n                mat-icon-button\n                [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.DOWNLOAD' | translate\"\n                title=\"{{ 'ADF_VIEWER.ACTIONS.DOWNLOAD' | translate }}\"\n                data-automation-id=\"adf-toolbar-download\"\n                [adfNodeDownload]=\"nodeEntry\"\n                [version]=\"versionEntry\">\n            <mat-icon adf-icon=\"file_download\" />\n        </button>\n\n        <button id=\"adf-alfresco-viewer-print\"\n                *ngIf=\"allowPrint\"\n                mat-icon-button\n                [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.PRINT' | translate\"\n                title=\"{{ 'ADF_VIEWER.ACTIONS.PRINT' | translate }}\"\n                data-automation-id=\"adf-toolbar-print\"\n                (click)=\"onPrintContent($event)\">\n            <mat-icon adf-icon=\"print\" />\n        </button>\n    </adf-viewer-toolbar-custom-actions>\n</adf-viewer>\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { AlfrescoViewerComponent } from './components/alfresco-viewer.component';\n\n/** @deprecated import AlfrescoViewerComponent instead */\n@NgModule({\n    imports: [AlfrescoViewerComponent],\n    exports: [AlfrescoViewerComponent]\n})\nexport class AlfrescoViewerModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './components/alfresco-viewer.component';\n\nexport * from './alfresco-viewer.module';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, from, Observable, Subject } from 'rxjs';\nimport { SecurityControlsGroupResponse } from './models/security-controls-group-response.interface';\nimport { SecurityControlsMarkResponse } from './models/security-controls-mark-response.interface';\nimport {\n    SecurityGroupsApi,\n    SecurityMarksApi,\n    SecurityGroupEntry,\n    SecurityMarkEntry,\n    SecurityGroupBody,\n    SecurityMarkPaging,\n    SecurityMarkBody,\n    AuthorityClearanceApi,\n    AuthorityClearanceGroupPaging,\n    NodeSecurityMarkBody,\n    GsGroupInclude\n} from '@alfresco/js-api';\nimport { UserPreferencesService } from '@alfresco/adf-core';\nimport { finalize } from 'rxjs/operators';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\nconst DEFAULT_SKIP_COUNT = 0;\nconst DEFAULT_INCLUDE = 'inUse';\n\n@Injectable({ providedIn: 'root' })\nexport class SecurityControlsService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly userPreferencesService = inject(UserPreferencesService);\n\n    private readonly groupsPaginatedSource = new Subject<SecurityControlsGroupResponse>();\n    groupsPaginated$ = this.groupsPaginatedSource.asObservable();\n\n    private readonly reloadSecurityControls: Subject<void> = new Subject<void>();\n    reloadSecurityControls$ = this.reloadSecurityControls.asObservable();\n\n    private readonly _reloadAuthorityClearance: Subject<void> = new Subject<void>();\n    reloadAuthorityClearance$ = this._reloadAuthorityClearance.asObservable();\n\n    private readonly marksPaginatedSource = new Subject<SecurityControlsMarkResponse>();\n    marksPaginated$ = this.marksPaginatedSource.asObservable();\n\n    private readonly loadingSource = new BehaviorSubject<boolean>(true);\n    loading$ = this.loadingSource.asObservable();\n\n    private securityGroup: SecurityGroupsApi;\n    private securityMark: SecurityMarksApi;\n    private authorityClearance: AuthorityClearanceApi;\n\n    get groupsApi(): SecurityGroupsApi {\n        return this.securityGroup || (this.securityGroup = new SecurityGroupsApi(this.apiService.getInstance()));\n    }\n\n    get marksApi(): SecurityMarksApi {\n        return this.securityMark || (this.securityMark = new SecurityMarksApi(this.apiService.getInstance()));\n    }\n\n    get authorityClearanceApi(): AuthorityClearanceApi {\n        return this.authorityClearance || (this.authorityClearance = new AuthorityClearanceApi(this.apiService.getInstance()));\n    }\n\n    get reloadAuthorityClearance(): Subject<void> {\n        return this._reloadAuthorityClearance;\n    }\n\n    /**\n     * Get All security groups\n     *\n     * @param skipCount The number of entities that exist in the collection before those included in this list.\n     * @param maxItems The maximum number of items to return in the list. Default is specified by UserPreferencesService.\n     * @param include Additional information about the security group\n     * @returns Promise<SecurityControlsGroupResponse>\n     */\n    getSecurityGroup(\n        skipCount = DEFAULT_SKIP_COUNT,\n        maxItems = this.userPreferencesService.paginationSize,\n        include = DEFAULT_INCLUDE\n    ): Promise<SecurityControlsGroupResponse> {\n        let securityControlsGroupResponse: SecurityControlsGroupResponse;\n        return new Promise((resolve, reject) => {\n            this.groupsApi\n                .getSecurityGroups({\n                    include,\n                    skipCount,\n                    maxItems\n                })\n                .then((response) => {\n                    this.groupsPaginatedSource.next(\n                        (securityControlsGroupResponse = {\n                            pagination: response.list.pagination,\n                            entries: response.list.entries.map((group) => group.entry)\n                        })\n                    );\n                    resolve(securityControlsGroupResponse);\n                })\n                .catch((error) => reject(error));\n        });\n    }\n\n    /**\n     * Create security group\n     *\n     * @param input securityGroupBody.\n     * @returns Observable<SecurityGroupEntry>\n     */\n    createSecurityGroup(input: SecurityGroupBody): Observable<SecurityGroupEntry> {\n        this.loadingSource.next(true);\n        const payload: SecurityGroupBody = {\n            ...input\n        };\n        const opts: GsGroupInclude = {\n            include: DEFAULT_INCLUDE\n        };\n        const promise = this.groupsApi.createSecurityGroup(payload, opts);\n\n        return from(promise).pipe(finalize(() => this.loadingSource.next(false)));\n    }\n\n    /**\n     * Create security marks\n     *\n     * @param securityGroupId The key for the security group id.\n     * @param input securityMarkBody[].\n     * @returns Promise<SecurityMarkPaging | SecurityMarkEntry>\n     */\n    createSecurityMarks(securityGroupId: string, input: SecurityMarkBody[]): Promise<SecurityMarkPaging | SecurityMarkEntry> {\n        this.loadingSource.next(true);\n        const promise = this.marksApi\n            .createSecurityMarks(securityGroupId, input)\n            .then((result) => {\n                this.loadingSource.next(false);\n                return result;\n            })\n            .catch((error) => {\n                this.loadingSource.next(false);\n                return error;\n            });\n\n        return promise;\n    }\n\n    /**\n     * Get security mark value\n     * Gets the value for a selected **securityGroupId**.\n     *\n     * @param securityGroupId The key for the security group id.\n     * @param skipCount The number of entities that exist in the collection before those included in this list.\n     * @returns Promise<SecurityControlsMarkResponse>\n     */\n    getSecurityMark(securityGroupId: string, skipCount = DEFAULT_SKIP_COUNT): Promise<SecurityControlsMarkResponse> {\n        let securityControlsMarkResponse: SecurityControlsMarkResponse;\n        return new Promise((resolve, reject) => {\n            this.marksApi\n                .getSecurityMarks(securityGroupId, {\n                    skipCount\n                })\n                .then((response) => {\n                    this.marksPaginatedSource.next(\n                        (securityControlsMarkResponse = {\n                            pagination: response.list.pagination,\n                            entries: response.list.entries.map((mark) => mark.entry)\n                        })\n                    );\n                    resolve(securityControlsMarkResponse);\n                })\n                .catch((error) => reject(error));\n        });\n    }\n\n    /**\n     * Update a security groups information\n     *\n     * @param securityGroupId The Key of Security Group id for which info is required\n     * @param input SecurityGroupBody\n     * @param opts additional information about the security group\n     * @returns Promise<SecurityGroupEntry>\n     */\n    updateSecurityGroup(securityGroupId: string, input: SecurityGroupBody, opts?: any): Promise<SecurityGroupEntry> {\n        this.loadingSource.next(true);\n        const payload: SecurityGroupBody = {\n            ...input\n        };\n        if (!opts) {\n            opts = {\n                DEFAULT_INCLUDE\n            };\n        }\n        const promise = this.groupsApi\n            .updateSecurityGroup(securityGroupId, payload, opts)\n            .then((result) => {\n                this.loadingSource.next(false);\n                return result;\n            })\n            .catch((error) => {\n                this.loadingSource.next(false);\n                return error;\n            });\n\n        return promise;\n    }\n\n    /**\n     * Updates Security Mark value\n     *\n     * @param securityGroupId The key for the security group id.\n     * @param securityMarkId The key for the security mark is in use or not.\n     * @param input securityMarkBody.\n     * @returns Promise<SecurityMarkEntry>\n     */\n    updateSecurityMark(securityGroupId: string, securityMarkId: string, input: SecurityMarkBody): Promise<SecurityMarkEntry> {\n        this.loadingSource.next(true);\n        const payload: SecurityMarkBody = {\n            ...input\n        };\n        const promise = this.marksApi\n            .updateSecurityMark(securityGroupId, securityMarkId, payload)\n            .then((result) => {\n                this.loadingSource.next(false);\n                return result;\n            })\n            .catch((error) => {\n                this.loadingSource.next(false);\n                return error;\n            });\n\n        return promise;\n    }\n\n    /**\n     * Delete security group\n     *\n     * @param securityGroupId The key for the security group id.\n     * @returns Observable<void>\n     */\n    deleteSecurityGroup(securityGroupId: string): Observable<void> {\n        this.loadingSource.next(true);\n        const promise = this.groupsApi.deleteSecurityGroup(securityGroupId);\n\n        return from(promise).pipe(finalize(() => this.loadingSource.next(false)));\n    }\n\n    /**\n     * Delete security mark\n     *\n     * @param securityGroupId The key for the security group id.\n     * @param securityMarkId The key for the security mark id.\n     * @returns Promise<SecurityMarkEntry>\n     */\n    deleteSecurityMark(securityGroupId: string, securityMarkId: string): Promise<SecurityMarkEntry> {\n        this.loadingSource.next(true);\n        const promise = this.marksApi\n            .deleteSecurityMark(securityGroupId, securityMarkId)\n            .then((result) => {\n                this.loadingSource.next(false);\n                return result;\n            })\n            .catch((error) => {\n                this.loadingSource.next(false);\n                return error;\n            });\n\n        return promise;\n    }\n\n    /**\n     * Get the authority clearances for a single user/group\n     *\n     * @param authorityName The name for the authority for which the clearance is to be fetched. Can be left blank in which case it will fetch it for all users with pagination\n     * @param skipCount The number of entities that exist in the collection before those included in this list.\n     * @param maxItems The maximum number of items to return in the list. Default is specified by UserPreferencesService.\n     * @returns Observable<AuthorityClearanceGroupPaging>\n     */\n    getClearancesForAuthority(\n        authorityName: string,\n        skipCount = DEFAULT_SKIP_COUNT,\n        maxItems = this.userPreferencesService.paginationSize\n    ): Observable<AuthorityClearanceGroupPaging> {\n        this.loadingSource.next(true);\n        const opts = {\n            skipCount,\n            maxItems\n        };\n        const promise = this.authorityClearanceApi.getAuthorityClearanceForAuthority(authorityName, opts);\n\n        return from(promise).pipe(finalize(() => this.loadingSource.next(false)));\n    }\n\n    /**\n     * Updates the authority clearance.\n     *\n     * @param authorityName The name for the authority for which the clearance is to be updated\n     * @param securityMarksList NodeSecurityMarkBody[]\n     * @returns Observable<SecurityMarkEntry | SecurityMarkPaging>\n     */\n    updateClearancesForAuthority(\n        authorityName: string,\n        securityMarksList: NodeSecurityMarkBody[]\n    ): Observable<SecurityMarkEntry | SecurityMarkPaging> {\n        this.loadingSource.next(true);\n        const promise = this.authorityClearanceApi.updateAuthorityClearance(authorityName, securityMarksList);\n\n        return from(promise).pipe(\n            finalize(() => {\n                this.loadingSource.next(false);\n                this._reloadAuthorityClearance.next();\n            })\n        );\n    }\n\n    reloadSecurityGroups() {\n        this.reloadSecurityControls.next();\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './services/security-controls-groups-marks-security.service';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AdfHttpClient } from '@alfresco/adf-core/api';\nimport { AlfrescoApi, AlfrescoApiConfig } from '@alfresco/js-api';\nimport { Injectable, inject } from '@angular/core';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\n\n@Injectable()\nexport class AlfrescoApiNoAuthService extends AlfrescoApiService {\n    private readonly adfHttpClient = inject(AdfHttpClient);\n\n    override createInstance(config: AlfrescoApiConfig) {\n        return new AlfrescoApi(\n            {\n                ...config,\n                oauthInit: false\n            },\n            this.adfHttpClient\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppConfigService, AppConfigValues } from '@alfresco/adf-core';\nimport { AdfHttpClient } from '@alfresco/adf-core/api';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SecurityOptionsLoaderService {\n    private readonly appConfigService = inject(AppConfigService);\n    private readonly adfHttpClient = inject(AdfHttpClient);\n\n    load = () => {\n        const withCredentials = this.appConfigService.get<boolean>(AppConfigValues.AUTH_WITH_CREDENTIALS);\n        if (withCredentials !== undefined && withCredentials !== null) {\n            this.adfHttpClient.setDefaultSecurityOption({ withCredentials });\n        }\n    };\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AlfrescoApiConfig } from '@alfresco/js-api';\nimport { Injectable, inject } from '@angular/core';\nimport { AppConfigService, AppConfigValues, StorageService } from '@alfresco/adf-core';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\nimport { SecurityOptionsLoaderService } from '../security-options-loader/security-options-loader.service';\n\n/**\n * Create a factory to resolve an api service instance\n *\n * @param angularAlfrescoApiService loader service\n * @returns factory function\n */\nexport function createAlfrescoApiInstance(angularAlfrescoApiService: AlfrescoApiLoaderService) {\n    return () => angularAlfrescoApiService.init();\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AlfrescoApiLoaderService {\n    private readonly appConfig = inject(AppConfigService);\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly securityOptionsLoaderService = inject(SecurityOptionsLoaderService);\n    private readonly storageService = inject(StorageService);\n\n    async init(): Promise<any> {\n        await this.appConfig.load(this.securityOptionsLoaderService.load);\n        return this.initAngularAlfrescoApi();\n    }\n\n    private async initAngularAlfrescoApi() {\n        const oauth = this.appConfig.oauth2;\n\n        if (oauth) {\n            oauth.redirectUri = window.location.origin + window.location.pathname;\n            oauth.redirectUriLogout = window.location.origin + window.location.pathname;\n        }\n\n        const config = new AlfrescoApiConfig({\n            provider: this.appConfig.get<string>(AppConfigValues.PROVIDERS),\n            hostEcm: this.appConfig.get<string>(AppConfigValues.ECMHOST),\n            hostBpm: this.appConfig.get<string>(AppConfigValues.BPMHOST),\n            authType: this.appConfig.get<string>(AppConfigValues.AUTHTYPE, 'BASIC'),\n            contextRootBpm: this.appConfig.get<string>(AppConfigValues.CONTEXTROOTBPM),\n            contextRoot: this.appConfig.get<string>(AppConfigValues.CONTEXTROOTECM),\n            disableCsrf: this.appConfig.get<boolean>(AppConfigValues.DISABLECSRF),\n            withCredentials: this.appConfig.get<boolean>(AppConfigValues.AUTH_WITH_CREDENTIALS, false),\n            domainPrefix: this.appConfig.get<string>(AppConfigValues.STORAGE_PREFIX),\n            ticketEcm: this.storageService.getItem(AppConfigValues.CONTENT_TICKET_STORAGE_LABEL),\n            ticketBpm: this.storageService.getItem(AppConfigValues.PROCESS_TICKET_STORAGE_LABEL),\n            oauth2: oauth\n        });\n\n        await this.apiService.load(config);\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './alfresco-api-no-auth.service';\nexport * from './alfresco-api-v2-loader.service';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { PredictionsApi, PredictionPaging, ReviewStatus } from '@alfresco/js-api';\nimport { from, Observable } from 'rxjs';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Injectable({ providedIn: 'root' })\nexport class PredictionService {\n    private readonly apiService = inject(AlfrescoApiService);\n\n    private _predictionsApi: PredictionsApi;\n\n    get predictionsApi(): PredictionsApi {\n        this._predictionsApi = this._predictionsApi ?? new PredictionsApi(this.apiService.getInstance());\n        return this._predictionsApi;\n    }\n\n    /**\n     * Get predictions for a given node\n     *\n     * @param nodeId The identifier of node.\n     * @returns Observable<PredictionPaging>\n     */\n    getPredictions(nodeId: string): Observable<PredictionPaging> {\n        return from(this.predictionsApi.getPredictions(nodeId));\n    }\n\n    /**\n     * Review a prediction\n     *\n     * @param predictionId The identifier of prediction.\n     * @param reviewStatus Review status to apply.\n     * @returns Observable<void>\n     */\n    reviewPrediction(predictionId: string, reviewStatus: ReviewStatus): Observable<void> {\n        return from(this.predictionsApi.reviewPrediction(predictionId, reviewStatus));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './prediction.service';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './services';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n    BulkAssignHoldResponseEntry,\n    ContentPagingQuery,\n    Hold,\n    HoldBody,\n    HoldBulkStatusEntry,\n    HoldEntry,\n    HoldPaging,\n    LegalHoldApi,\n    RequestQuery\n} from '@alfresco/js-api';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, from } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AlfrescoApiService } from '../../services/alfresco-api.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class LegalHoldService {\n    private readonly apiService = inject(AlfrescoApiService);\n\n    private _legalHoldApi: LegalHoldApi;\n    get legalHoldApi(): LegalHoldApi {\n        this._legalHoldApi = this._legalHoldApi ?? new LegalHoldApi(this.apiService.getInstance());\n        return this._legalHoldApi;\n    }\n\n    /**\n     * Gets the list of holds available in the file plan.\n     *\n     * @param filePlanId The identifier of a file plan. You can also use the -filePlan- alias.\n     * @param options Optional parameters supported by JS-API\n     * @returns List of holds Observable<Hold[]>\n     */\n    getHolds(filePlanId: string, options?: ContentPagingQuery): Observable<Hold[]> {\n        return from(this.legalHoldApi.getHolds(filePlanId, options)).pipe(map(({ list }) => list.entries?.map(({ entry }) => entry)));\n    }\n\n    /**\n     * Assign a node to a hold.\n     *\n     * @param nodeId The Id of the node which will be assigned to a hold\n     * @param holdId The Id of the hold to which nodes will be assigned\n     * @returns Observable<HoldEntry>\n     */\n    assignHold(nodeId: string, holdId: string): Observable<HoldEntry> {\n        return from(this.legalHoldApi.assignHold(nodeId, holdId));\n    }\n\n    /**\n     * Assign multiple nodes to a hold.\n     *\n     * @param nodeIds The list of managed node Ids\n     * @param holdId The Id of the hold to which nodes will be assigned\n     * @returns Observable<HoldPaging>\n     */\n    assignHolds(nodeIds: { id: string }[], holdId: string): Observable<HoldPaging> {\n        return from(this.legalHoldApi.assignHolds(nodeIds, holdId));\n    }\n\n    /**\n     * Unassign the relationship between a child with id nodeId and a parent hold with id holdId.\n     *\n     * @param holdId The hold Id\n     * @param nodeId The Id of the node which is unassigned\n     * @returns Empty response\n     */\n    unassignHold(holdId: string, nodeId: string): Observable<void> {\n        return from(this.legalHoldApi.unassignHold(holdId, nodeId));\n    }\n\n    /**\n     * Create hold.\n     *\n     * @param filePlanId The identifier of a file plan. You can also use the -filePlan- alias.\n     * @param hold Hold to create\n     * @returns List of created holds Observable<HoldEntry>\n     */\n    createHold(filePlanId: string, hold: HoldBody): Observable<HoldEntry> {\n        return from(this.legalHoldApi.createHold(filePlanId, hold));\n    }\n\n    /**\n     * Create list of holds.\n     *\n     * @param filePlanId The identifier of a file plan. You can also use the -filePlan- alias.\n     * @param holds Array of holds to create\n     * @returns List of created holds Observable<HoldPaging>\n     */\n    createHolds(filePlanId: string, holds: HoldBody[]): Observable<HoldPaging> {\n        return from(this.legalHoldApi.createHolds(filePlanId, holds));\n    }\n\n    /**\n     * Start the asynchronous bulk process for a hold with id holdId based on search query results.\n     *\n     * @param holdId The identifier of a hold\n     * @param query Search query\n     * @returns Observable<BulkAssignHoldResponseEntry>\n     */\n    bulkAssignHold(holdId: string, query: RequestQuery): Observable<BulkAssignHoldResponseEntry> {\n        return from(this.legalHoldApi.bulkAssignHold(holdId, query));\n    }\n\n    /**\n     * Assign a folder to a hold.\n     *\n     * @param holdId The identifier of a hold\n     * @param folderId The identifier of a folder\n     * @param language Language code\n     * @returns Observable<BulkAssignHoldResponseEntry>\n     */\n    bulkAssignHoldToFolder(holdId: string, folderId: string, language: string): Observable<BulkAssignHoldResponseEntry> {\n        const query: RequestQuery = {\n            query: `ANCESTOR:'workspace://SpacesStore/${folderId}' and TYPE:content`,\n            language\n        };\n\n        return from(this.legalHoldApi.bulkAssignHold(holdId, query));\n    }\n\n    /**\n     * Get status of bulk operation with **bulkStatusId** for **holdId**.\n     *\n     * @param bulkStatusId The identifier of a bulk status\n     * @param holdId The identifier of a hold\n     * @returns Promise<HoldsBulkStatusEntry>\n     */\n    getBulkOperationStatus(bulkStatusId: string, holdId: string): Observable<HoldBulkStatusEntry> {\n        return from(this.legalHoldApi.getBulkStatus(bulkStatusId, holdId));\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './services/legal-hold.service';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable } from '@angular/core';\nimport { AlfrescoApiService } from '../services/alfresco-api.service';\n\n@Injectable()\nexport class AlfrescoApiServiceMock extends AlfrescoApiService {\n    constructor() {\n        super();\n\n        if (!this.alfrescoApi) {\n            this.initAlfrescoApi();\n        }\n    }\n\n    initialize(): Promise<any> {\n        return new Promise((resolve) => {\n            this.alfrescoApiInitialized.next(true);\n            resolve({});\n        });\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { Agent, AgentsApi } from '@alfresco/js-api';\nimport { BehaviorSubject, from, Observable, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AlfrescoApiService } from '../../services';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class AgentService {\n    private readonly apiService = inject(AlfrescoApiService);\n\n    private _agentsApi: AgentsApi;\n    private readonly agents = new BehaviorSubject<Agent[]>([]);\n\n    get agentsApi(): AgentsApi {\n        this._agentsApi = this._agentsApi ?? new AgentsApi(this.apiService.getInstance());\n        return this._agentsApi;\n    }\n\n    agents$ = this.agents.asObservable();\n\n    /**\n     * Gets all agents from cache. If cache is empty, fetches agents from backend.\n     *\n     * @returns Agent[] list containing agents.\n     */\n    getAgents(): Observable<Agent[]> {\n        return this.agents$.pipe(\n            switchMap((agentsList) => {\n                if (agentsList.length) {\n                    return of(agentsList);\n                }\n                return from(this.agentsApi.getAgents()).pipe(\n                    map((paging) => {\n                        const agentEntries = paging.list.entries.map((agentEntry) => agentEntry.entry);\n                        this.agents.next(agentEntries);\n                        return agentEntries;\n                    })\n                );\n            })\n        );\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './services/agent.service';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { AiAnswerEntry, KnowledgeRetrievalConfigEntry, QuestionModel, QuestionRequest, SearchAiApi } from '@alfresco/js-api';\nimport { BehaviorSubject, from, Observable } from 'rxjs';\nimport { SelectionState } from '@alfresco/adf-extensions';\nimport { TranslateService } from '@ngx-translate/core';\nimport { SearchAiInputState } from '../models/search-ai-input-state';\nimport { AlfrescoApiService } from '../../services';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class SearchAiService {\n    private readonly apiService = inject(AlfrescoApiService);\n    private readonly translateService = inject(TranslateService);\n\n    private readonly toggleSearchAiInput = new BehaviorSubject<SearchAiInputState>({\n        active: false\n    });\n    private _searchAiApi: SearchAiApi;\n\n    get searchAiApi(): SearchAiApi {\n        this._searchAiApi = this._searchAiApi ?? new SearchAiApi(this.apiService.getInstance());\n        return this._searchAiApi;\n    }\n\n    toggleSearchAiInput$ = this.toggleSearchAiInput.asObservable();\n\n    /**\n     * Update the state of the search AI input.\n     *\n     * @param state The new state of the search AI input.\n     */\n    updateSearchAiInputState(state: SearchAiInputState): void {\n        this.toggleSearchAiInput.next(state);\n    }\n\n    /**\n     * Ask a question to the AI.\n     *\n     * @param question The question to ask.\n     * @returns QuestionModel object containing information about questions.\n     */\n    ask(question: QuestionRequest): Observable<QuestionModel> {\n        return from(this.searchAiApi.ask([question]));\n    }\n\n    /**\n     * Get an answer to specific question.\n     *\n     * @param questionId The ID of the question to get an answer for.\n     * @returns AiAnswerEntry object containing the answer.\n     */\n    getAnswer(questionId: string): Observable<AiAnswerEntry> {\n        return from(this.searchAiApi.getAnswer(questionId));\n    }\n\n    /**\n     * Get the knowledge retrieval configuration.\n     *\n     * @returns KnowledgeRetrievalConfigEntry object containing the configuration.\n     */\n    getConfig(): Observable<KnowledgeRetrievalConfigEntry> {\n        return from(this.searchAiApi.getConfig());\n    }\n\n    /**\n     * Check if using of search is possible (if all conditions are met).\n     *\n     * @param selectedNodesState information about selected nodes.\n     * @param maxSelectedNodes max number of selected nodes. Default 100.\n     * @returns string with error if any condition is not met, empty string otherwise.\n     */\n    checkSearchAvailability(selectedNodesState: SelectionState, maxSelectedNodes = 100): string {\n        const messages: {\n            key: string;\n            [parameter: string]: number | string;\n        }[] = [];\n        if (selectedNodesState.count > maxSelectedNodes) {\n            messages.push({\n                key: 'KNOWLEDGE_RETRIEVAL.SEARCH.WARNINGS.TOO_MANY_FILES_SELECTED',\n                maxFiles: maxSelectedNodes\n            });\n        }\n        if (selectedNodesState.nodes.some((node) => node.entry.isFolder)) {\n            messages.push({\n                key: 'KNOWLEDGE_RETRIEVAL.SEARCH.WARNINGS.FOLDER_SELECTED'\n            });\n        }\n        return messages.map((message) => this.translateService.instant(message.key, message)).join(' ');\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface SearchAiInputState {\n    active: boolean;\n    selectedAgentId?: string;\n    searchTerm?: string;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './services/search-ai.service';\nexport * from './models/search-ai-input-state';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './public-api';\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { VersionCompatibilityService } from './version-compatibility.service';\n\n/**\n * Create a version compatibility factory\n *\n * @param versionCompatibilityService service dependency\n * @returns factory function\n */\nexport function versionCompatibilityFactory(versionCompatibilityService: VersionCompatibilityService) {\n    return () => versionCompatibilityService;\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContentAuthLoaderService } from './content-auth-loader.service';\n\n/**\n * Create a content auth factory\n *\n * @param authLoaderService service dependency\n * @returns factory function\n */\nexport function contentAuthLoaderFactory(authLoaderService: ContentAuthLoaderService): () => void {\n    return () => authLoaderService.init();\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { AuthenticationService, BasicAlfrescoAuthService } from '@alfresco/adf-core';\nimport { take } from 'rxjs/operators';\n\n@Injectable()\nexport class ContentAuthLoaderService {\n    private readonly basicAlfrescoAuthService = inject(BasicAlfrescoAuthService);\n    private readonly authService = inject(AuthenticationService);\n\n    init(): void {\n        this.authService.onLogin.pipe(take(1)).subscribe({\n            next: async () => {\n                if (this.authService.isOauth() && (this.authService.isALLProvider() || this.authService.isECMProvider())) {\n                    await this.basicAlfrescoAuthService.requireAlfTicket();\n                }\n            }\n        });\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule, MatOptionModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatBadgeModule } from '@angular/material/badge';\n\n/** @deprecated this module is deprecated and will be removed in future versions */\n@NgModule({\n    imports: [\n        MatButtonModule,\n        MatAutocompleteModule,\n        MatChipsModule,\n        MatDialogModule,\n        MatIconModule,\n        MatCardModule,\n        MatInputModule,\n        MatListModule,\n        MatProgressSpinnerModule,\n        MatProgressBarModule,\n        MatRippleModule,\n        MatMenuModule,\n        MatOptionModule,\n        MatExpansionModule,\n        MatSelectModule,\n        MatCheckboxModule,\n        MatDatepickerModule,\n        MatSlideToggleModule,\n        MatRadioModule,\n        MatSliderModule,\n        MatTreeModule,\n        MatBadgeModule\n    ],\n    exports: [\n        MatButtonModule,\n        MatAutocompleteModule,\n        MatChipsModule,\n        MatDialogModule,\n        MatIconModule,\n        MatCardModule,\n        MatInputModule,\n        MatListModule,\n        MatProgressSpinnerModule,\n        MatProgressBarModule,\n        MatRippleModule,\n        MatMenuModule,\n        MatOptionModule,\n        MatExpansionModule,\n        MatSelectModule,\n        MatCheckboxModule,\n        MatDatepickerModule,\n        MatSlideToggleModule,\n        MatRadioModule,\n        MatSliderModule,\n        MatTreeModule,\n        MatBadgeModule\n    ]\n})\nexport class MaterialModule {}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NgModule, ModuleWithProviders, APP_INITIALIZER } from '@angular/core';\nimport { provideTranslations } from '@alfresco/adf-core';\nimport { MatDatetimepickerModule, MatNativeDatetimeModule } from '@mat-datetimepicker/core';\nimport { CONTENT_TAG_DIRECTIVES } from './tag/tag.module';\nimport { DOCUMENT_LIST_DIRECTIVES } from './document-list/document-list.module';\nimport { CONTENT_SEARCH_DIRECTIVES } from './search/search.module';\nimport { CONTENT_VERSION_DIRECTIVES } from './version-manager/version-manager.module';\nimport { CONTENT_NODE_SELECTOR_DIRECTIVES } from './content-node-selector/content-node-selector.module';\nimport { CONTENT_NODE_SHARE_DIRECTIVES } from './content-node-share/content-node-share.module';\nimport { CONTENT_DIRECTIVES } from './directives/content-directive.module';\nimport { CONTENT_DIALOG_DIRECTIVES } from './dialogs/dialog.module';\nimport { CONTENT_METADATA_DIRECTIVES } from './content-metadata/content-metadata.module';\nimport { CONTENT_PERMISSION_MANAGER_DIRECTIVES } from './permission-manager/permission-manager.module';\nimport { ASPECT_LIST_DIRECTIVES } from './aspect-list/aspect-list.module';\nimport { versionCompatibilityFactory } from './version-compatibility/version-compatibility-factory';\nimport { VersionCompatibilityService } from './version-compatibility/version-compatibility.service';\nimport { contentAuthLoaderFactory } from './auth-loader/content-auth-loader-factory';\nimport { ContentAuthLoaderService } from './auth-loader/content-auth-loader.service';\nimport { CONTENT_UPLOAD_DIRECTIVES } from './upload';\nimport { MaterialModule } from './material.module';\nimport { AlfrescoApiService } from './services/alfresco-api.service';\nimport { AlfrescoApiNoAuthService } from './api-factories/alfresco-api-no-auth.service';\nimport { AlfrescoApiLoaderService, createAlfrescoApiInstance } from './api-factories/alfresco-api-v2-loader.service';\n\n@NgModule({\n    imports: [\n        MaterialModule,\n        MatDatetimepickerModule,\n        MatNativeDatetimeModule,\n        ...CONTENT_TAG_DIRECTIVES,\n        ...CONTENT_DIALOG_DIRECTIVES,\n        ...CONTENT_SEARCH_DIRECTIVES,\n        ...DOCUMENT_LIST_DIRECTIVES,\n        ...CONTENT_UPLOAD_DIRECTIVES,\n        ...CONTENT_NODE_SELECTOR_DIRECTIVES,\n        ...CONTENT_NODE_SHARE_DIRECTIVES,\n        ...CONTENT_METADATA_DIRECTIVES,\n        ...CONTENT_DIRECTIVES,\n        ...CONTENT_PERMISSION_MANAGER_DIRECTIVES,\n        ...CONTENT_VERSION_DIRECTIVES,\n        ...ASPECT_LIST_DIRECTIVES\n    ],\n    providers: [provideTranslations('adf-content-services', 'assets/adf-content-services')],\n    exports: [\n        MaterialModule,\n        ...CONTENT_TAG_DIRECTIVES,\n        ...DOCUMENT_LIST_DIRECTIVES,\n        ...CONTENT_UPLOAD_DIRECTIVES,\n        ...CONTENT_SEARCH_DIRECTIVES,\n        ...CONTENT_NODE_SELECTOR_DIRECTIVES,\n        ...CONTENT_NODE_SHARE_DIRECTIVES,\n        ...CONTENT_METADATA_DIRECTIVES,\n        ...CONTENT_DIALOG_DIRECTIVES,\n        ...CONTENT_DIRECTIVES,\n        ...CONTENT_PERMISSION_MANAGER_DIRECTIVES,\n        ...CONTENT_VERSION_DIRECTIVES,\n        ...ASPECT_LIST_DIRECTIVES\n    ]\n})\nexport class ContentModule {\n    static forRoot(): ModuleWithProviders<ContentModule> {\n        return {\n            ngModule: ContentModule,\n            providers: [\n                provideTranslations('adf-content-services', 'assets/adf-content-services'),\n                ContentAuthLoaderService,\n                { provide: AlfrescoApiService, useClass: AlfrescoApiNoAuthService },\n                {\n                    provide: APP_INITIALIZER,\n                    useFactory: versionCompatibilityFactory,\n                    deps: [VersionCompatibilityService],\n                    multi: true\n                },\n                {\n                    provide: APP_INITIALIZER,\n                    useFactory: contentAuthLoaderFactory,\n                    deps: [ContentAuthLoaderService],\n                    multi: true\n                },\n                {\n                    provide: APP_INITIALIZER,\n                    useFactory: createAlfrescoApiInstance,\n                    deps: [AlfrescoApiLoaderService],\n                    multi: true\n                }\n            ]\n        };\n    }\n\n    /**\n     * @deprecated use `ContentModule` instead\n     * @returns ModuleWithProviders<ContentModule>\n     */\n    static forChild(): ModuleWithProviders<ContentModule> {\n        return {\n            ngModule: ContentModule\n        };\n    }\n}\n","/*!\n * @license\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './lib/alfresco-icon/alfresco-icon.component';\nexport * from './lib/directives/index';\nexport * from './lib/tag/index';\nexport * from './lib/document-list/index';\nexport * from './lib/upload/index';\nexport * from './lib/search/index';\nexport * from './lib/breadcrumb/index';\nexport * from './lib/version-manager/index';\nexport * from './lib/content-node-selector/index';\nexport * from './lib/dialogs/index';\nexport * from './lib/content-metadata/index';\nexport * from './lib/permission-manager/index';\nexport * from './lib/content-node-share/index';\nexport * from './lib/tree-view/index';\nexport * from './lib/group/index';\nexport * from './lib/aspect-list/index';\nexport * from './lib/content-type/index';\nexport * from './lib/node-comments/index';\nexport * from './lib/new-version-uploader';\nexport * from './lib/interfaces/index';\nexport * from './lib/version-compatibility/index';\nexport * from './lib/common/index';\nexport * from './lib/tree/index';\nexport * from './lib/category/index';\nexport * from './lib/viewer/index';\nexport * from './lib/security/index';\nexport * from './lib/api-factories';\nexport * from './lib/services/index';\nexport * from './lib/infinite-scroll-datasource';\nexport * from './lib/prediction/index';\nexport * from './lib/legal-hold/index';\nexport * from './lib/api-factories';\nexport * from './lib/mock/alfresco-api.service.mock';\nexport * from './lib/agent/index';\nexport * from './lib/search-ai/index';\n\nexport * from './lib/content.module';\nexport * from './lib/material.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["take","switchMap","tap","catchError","map","i3","i1","i2","i4","i6","i7","DEFAULT_PAGE_SIZE","i5","DEFAULT_DATE_DISPLAY_FORMAT","i8","i9","i10","i1.TagsCreatorComponent","i2.TagActionsComponent","i3.TagListComponent","i4.TagNodeListComponent","i42.ContentActionComponent","i43.FileAutoDownloadComponent","i44.FilterHeaderComponent","i45.LibraryNameColumnComponent","i46.LibraryRoleColumnComponent","i47.LibraryStatusColumnComponent","i48.NameColumnComponent","i49.TrashcanNameColumnComponent","i50.ContentActionListComponent","i51.DocumentListComponent","i52.FileDraggableDirective","i53.UploadDragAreaComponent","i54.UploadButtonComponent","i55.UploadVersionButtonComponent","i56.FileUploadingListRowComponent","i57.FileUploadingListComponent","i58.FileUploadingDialogComponent","i10.SearchCheckListComponent","i11.SearchChipAutocompleteInputComponent","i12.SearchChipListComponent","i13.EmptySearchResultComponent","i14.SearchFilterComponent","i15.SearchFilterCardComponent","i16.SearchWidgetContainerComponent","i17.SearchTextComponent","i18.SearchFilterAutocompleteChipsComponent","i19.SearchDatetimeRangeComponent","i20.SearchFacetFieldComponent","i21.ResetSearchDirective","i22.SearchDateRangeComponent","i23.SearchFilterMenuCardComponent","i24.SearchFacetChipTabbedComponent","i25.SearchFacetTabbedContentComponent","i26.SearchFilterTabbedComponent","i27.SearchFilterTabDirective","i28.SearchDateRangeTabbedComponent","i29.SearchSliderComponent","i30.SearchNumberRangeComponent","i31.SearchPanelComponent","i32.SearchRadioComponent","i33.SearchFilterContainerComponent","i34.SearchFormComponent","i35.SearchFilterChipsComponent","i36.SearchWidgetChipComponent","i37.SearchFacetChipComponent","i38.SearchLogicalFilterComponent","i39.SearchPropertiesComponent","i40.SearchComponent","i41.SearchControlComponent","i59.ContentNodeSelectorPanelComponent","i60.NameLocationCellComponent","i61.ContentNodeSelectorComponent","i62.DropdownSitesComponent","i63.ShareDialogComponent","i64.NodeSharedDirective","i65.ContentMetadataComponent","i66.ContentMetadataCardComponent","i67.ContentMetadataHeaderComponent","i5.DownloadZipDialogComponent","i6.FolderDialogComponent","i7.NodeLockDialogComponent","i8.LibraryDialogComponent","i9.CategorySelectorDialogComponent","i68.NodeLockDirective","i69.NodeCounterDirective","i69.NodeCounterComponent","i70.AutoFocusDirective","i71.LibraryFavoriteDirective","i72.LibraryMembershipDirective","i73.NodeDeleteDirective","i74.NodeFavoriteDirective","i75.NodeRestoreDirective","i76.NodeDownloadDirective","i77.AddPermissionPanelComponent","i78.AddPermissionComponent","i79.AddPermissionDialogComponent","i80.NodePathColumnComponent","i81.PermissionContainerComponent","i82.PermissionListComponent","i83.UserNameColumnComponent","i84.UserIconColumnComponent","i85.UserRoleColumnComponent","i86.InheritPermissionDirective","i87.PopOverDirective","i88.VersionUploadComponent","i89.VersionManagerComponent","i90.VersionListComponent","i91.VersionComparisonComponent","i92.AspectListComponent","i93.AspectListDialogComponent"],"mappings":"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"}