* [ACS-10246] Add logic to make dates semantically conveyed
* [ACS-10246] Fix unit test
* [ACS-10246] Enhance the logic for converting date
* [ACS-10246] Remove tabindex=0 from time element
* [ACS-10246] Add unit test for iso method
* [ACS-10246] Add unit test
* [ACS-10246] Trigger build
* [ACS-10246] Remove date checking from isoDate function
* AAE-49653 Migrating to batch count endpoint
* AAE-49653 Updating code with the latest BE contract
* AAE-49653 Improving type safety
* AAE-49653 Code improvement
* AAE-49653 fixed the DI coupling and type safety
* AAE-49653 Code improvements
* AAE-49653 Adding more unit tests and fixing a subscription
* AAE-49653 Updating the comment
* AAE-49653 Code improvement
* AAE-49653 Removing the non-batched counter fallback
* AAE-49653 Making filter key mandatory string
* AAE-49653 Removing dead code and improvements
* Revert "AAE-49653 Removing dead code and improvements"
This reverts commit a8fc99b044.
* Revert "AAE-49653 Making filter key mandatory string"
This reverts commit ba916b7c22.
* Revert "AAE-49653 Removing the non-batched counter fallback"
This reverts commit 416a61fb9e.
* AAE-49653 Putting implementation under FF
* AAE-49653 Adding new input to filter components, moving FF handling to consumer app
* AAE-49653 Removing extra comments
addEventListener was called with this.onDragEnter.bind(this), creating a
new function reference each time, while removeEventListener was called with
the unbound this.onDragEnter. The references never matched, so drag
listeners were never removed on destroy.
Each surviving listener closed over the directive and its host cell,
retaining the whole detached datatable/task-list subtree via the parentNode
chain. Heap analysis showed 624 dragenter + 624 dragover + 624 drop
listeners bound to detached cells.
Store the bound handlers once and use the same references for both add and
remove so listeners are properly cleaned up.
* fix(core): fix ResizableDirective memory leak from orphaned document listeners [AAE-50892]
Return unlisten teardown from Observable subscribers so RxJS properly
removes document event listeners when share() refcount drops to zero.
Previously, renderer.listen() unlisten functions were stored in mutable
fields that got overwritten on each drag cycle, orphaning old listeners
and retaining entire detached DOM subtrees via the closure chain.
* fix after second report
* [ACS-10175] Add logic to send notification only if the user adds label after creating pr
* [ACS-10175] Update label detection logic
* [ACS-10175] check if pr createdAt and label addedAt is different
* [ACS-10175] Add logic to send notification on adding A/N BDU label
* [ACS-10175] Add issues to permissions
* Make time difference 15 seconds
* [ACS-10175] Fix version
* [ACS-10175] Add condition checking
* [ACS-10175] CR fixes
* [ACS-10175] Add full sha
* [ACS-9106] Make the descendants false iin data column component
* [ACS-8468] Add copy icon
* [ACS-8468] Remove change from data column
* [ACS-8468] Use if instead of *ngIf
* [ACS-8468] Revert to double click functionality
* [ACS-8468] Make copy button toggable and make it icon
* [ACS-8468] Add unit test for copy icons
* [ACS-8468] Add unit test for mat registry
* [ACS-8468] Remove deprecated component
* [ACS-8468] Align the styling with dropdown menu
* [ACS-8468] Fix sonar cloud issue
* [ACS-8468] Remove deprecated component
* [ACS-8468] Remove svg icon and use material icon
* [ACS-8468] Fix styling and remove mat-form-field-icon-suffix selector
* [ACS-8468] Make copy to clipboard icon property true
* [ACS-8468] Add unit tests and remove unused class
* [ACS-8468] Add unitTestingUtils
* [ACS-8468] use with args instead of callFake
* [ACS-8468] remove jasmine.spy
* [ACS-10175] Notify after adding A/N BDU label
* [ACS-10175] send notification only for labelling after opening pr
* [ACS-10175] Send notification on open pr only
* chore: update webpack-dev-server version to 6.0.0 in pnpm-workspace.yaml
* chore: downgrade webpack version to 5.109.0 in package.json
* chore: update packageManager field in package.json to include SHA512 hash
* [ACS-9106] Make the descendants false iin data column component
* [ACS-9106] Add unit test
* [ACS-9106] Fix formatting
* [ACS-9106] Remove the declaration of fixture outside it
* [ACS-12175] Fix annotation popup style
* [ACS-12175] Fix style and syntax issues for annotations
* [ACS-12175] Write unit test for date element
* [ACS-12175] Fix undefined error in unit test
* [ACS-12175] Use material theme for styling of popup
* [ACS-12175] Add style to title iinstead of using h1 header
* [ACS-12175] focus on annotation content
* [ACS-12175] Revert the change of background color
* [ACS-9584] Refresh after the change of name of a node
* [ACS-9584] Add unit test for name change
* [ACS-9584] Merge the changed fields onto the existing one
* [ACS-9584] Refresh does not happen after name change of a file
* [ACS-9584] Page only reload for extension and version change
* [ACS-9584] Add sidebarTemplateContext to unit test
* [ACS-9584] Add unit test for the changes in ngOnChanges
* Render spinner visibility rather than internal field
* [ACS-12286] Pass includeFields through to getRecentFiles for -recent-
loadFolderByNodeId forwarded includeFields to every custom source except
-recent-, and getRecentFiles had no includeFields parameter, hardcoding the
search include set. Thread includeFields through to the recent-files search
request (de-duplicated, defaults preserved) so callers can request extra
fields such as isFavorite.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* [ACS-12286] Document includeFields parameter for getRecentFiles
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* [ACS-12286] Use typed PersonEntry instead of any in getRecentFiles spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* fix: compensate for VM/Citrix clock drift in token expiry check
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* feat(core/auth): add TimeSyncDateTimeProvider for angular-oauth2-oidc clock drift correction
* feat(auth): add periodic clock re-sync to protect against mid-session drift in Citrix/VM environments
- Add startPeriodicSync() and stopPeriodicSync() to TimeSyncService
- Re-sync clock offset every 5 minutes and on document visibility change
- Add security cap (maxAllowedOffsetMs) to reject unreasonably large offsets
- Preserve existing offset on sync failures instead of resetting to 0
- Wire periodic sync start in RedirectAuthService.configureAuth()
- Wire periodic sync stop in RedirectAuthService.logout()
- Add unit tests for periodic sync and offset cap behavior
* feat: replace dedicated time API with passive Date response header interception
- Add `updateClockOffsetFromDateHeader()` to `TimeSyncService` so the clock
offset can be updated from any HTTP `Date` response header (RFC 7231)
- Make `serverTimeUrl` config optional: `syncClockOffset` is a safe no-op and
`checkTimeSync` uses the stored `clockOffsetMs` when no URL is configured
- Add `DateHeaderTimeSyncInterceptor` that reads the `Date` header from every
HTTP response and passively keeps `TimeSyncService.clockOffsetMs` current
- Register the new interceptor in `provideCoreAuth()` / `AuthModule`
- Export `DateHeaderTimeSyncInterceptor` from the public API
- Add unit tests for all new paths
* feat: retry token refresh before checking for clock out-of-sync
- tokenHasExpiredDueToClockOutOfSync$: skip the first "token expired" event
so the library's automatic refresh has a chance to run before clock drift
is diagnosed as the root cause
- oauthErrorEventOccurDueToClockOutOfSync$: use scan() to skip the first
token_refresh_error (allowing one retry) and only check clock sync on the
second occurrence; all other error types are still checked immediately
- Update test for token expiry: now requires two events before logout
- Replace single token_refresh_error clock-sync test with two tests:
one verifying no logout on first error, one verifying logout on second
* fix(core): remove duplicate @angular/common/http import in date-header-time-sync interceptor spec
* fix(core): treat empty/whitespace serverTimeUrl as not configured in TimeSyncService
* fix(core): limit DateHeaderTimeSyncInterceptor to IAM API responses only
* refactor: remove tokenHasExpiredDueToClockOutOfSync$ and re-sync clock + refresh token on validation failure
Instead of having a separate observable that detects token expiration due to clock
drift and immediately logs the user out, the oauthErrorEventOccurDueToClockOutOfSync$
now re-syncs the clock offset and attempts a token refresh when clock drift is detected.
Only if the refresh fails after re-syncing does it propagate the error and trigger logout.
* fix(auth): check token validity after clock re-sync before attempting refresh
After re-syncing the clock offset, the code now checks whether the token
is actually still valid using the corrected time (via tokenHasExpired()).
If the token is valid, no refresh is needed — the token only appeared
expired due to clock drift. This avoids the impossible situation of
retrying a token refresh when the triggering error was itself a refresh
error.
* refactor(auth): replace IAM header interceptor with HEAD request to app root for time sync
Instead of passively reading the Date header from IAM responses (which
requires IAM to be reachable and has CORS constraints), the TimeSyncService
now makes a lightweight HEAD request to the application's own root URL
(served by nginx). This is simpler and more reliable because:
- No CORS issues (same origin)
- Nginx always includes a Date header
- HEAD request has minimal payload (no body)
- Works before authentication is established
- No dedicated serverTimeUrl configuration needed
The DateHeaderTimeSyncInterceptor has been removed as it is no longer needed.
* fix(auth): reset tokenRefreshErrorCount on successful token event
The tokenRefreshErrorCount in the oauthErrorEventOccurDueToClockOutOfSync$
stream now resets to 0 when a 'token_received' or 'token_refreshed' event
occurs. This prevents intermittent errors that self-correct from
accumulating toward the clock-drift detection threshold.
* fix(core): provide meaningful error message when API response body is null
When the server returns no response body (e.g., during token expiration,
network interruption, or CORS failures), err.error is null causing
JSON.stringify(null) to produce the unhelpful message "null".
Now we explicitly handle the null case and produce a message like
"401 Unauthorized" instead of "null".
* fix: resync clock before invalidating tokens at startup
At startup, when the first OAuth event fires, the service checks if the
access token is valid. Previously it would immediately clear storage if
the token appeared invalid. This could cause false negatives when the
local clock was out of sync (e.g. VM/Citrix environments).
Now the service first re-syncs the clock offset via TimeSyncService, then
re-evaluates the token validity. Storage is only cleared if the token is
still invalid after the corrected time check.
* Remove maxAllowedOffsetMs from TimeSyncService
* Fix startPeriodicSync call to match updated signature
* WIP
* Add Flag
* AAE-48166 Sync time using server time
* AAE-48166 Fix unit test
* AAE-48166 Fix service
* AAE-48166 Fix service
* AAE-48166 Fix service and add tests
* AAE-48166 Use app root instead of server time url
* AAE-48166 Use oauth2.timeSync config key for time sync gate
* AAE-48166 Keep redirect auth flow unchanged when time sync is disable
* Add oauth2.showDebugInformation and related debug logging for time sync
* AAE-48166 Fix multi-tab OIDC refresh failures by resyncing server time when timeSync enabled
* AAE-48166 Avoid repeated server time calls by caching the result for 2 seconds
* AAE-48166 test(auth): cover timeSync clock sync for implicit flow silent refresh
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Eugenio Romano <eromano@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Diogo Bastos <diogo.bastos@hyland.com>
Co-authored-by: alep85 <amedeo.lepore@hyland.com>
* [MNT-25230] Displayed user displayName in version history for specific version
* [MNT-25230] Unit tests
* [MNT-25230] Addressed copilot comment
* [MNT-25230] Addressed copilot comment
* [MNT-25230] Addressed copilot comment
* [MNT-25230] Addressed copilot comment
* [MNT-25230] Addressed copilot comment
* AAE-43974 Fix for alfresco-content-app e2e failure
* AAE-43974 Refactored based on review comments
* AAE-43974 Removing unit test cases written for isError as it is being tested by passwordErrorStateMatcher
* [ci:force] re-trigger CI
* refactor: switch form service getTask to use runtime bundle API instead of query service
* Update form-cloud.service.ts
* Add TaskDetailsCloudModelRuntimeBundle interface
* Update getTaskById to return TaskDetailsCloudModelRuntimeBundle
* Modify return type of getTaskById method
Updated return type of getTaskById to include TaskDetailsCloudModel.
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Refactor TaskDetailsCloudModel by removing fields
Removed unused properties from TaskDetailsCloudModel.
* Update task-cloud.service.ts
* Update task-cloud.service.ts
* fix: add 404 fallback to query service in FormCloudService.getTask for completed tasks
* AAE-47634 getTaskById: call Runtime Bundle first, fall back to Query Service on 404
* AAE-47634 Gate Runtime Bundle task fallback behind ADF_TASK_RUNTIME_BUNDLE_FALLBACK_ENABLED token and drop no longer used taskDetailsSource input
* refactor: update task fetching tests to use async/await and firstValueFrom
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Eugenio Romano <eromano@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: alep85 <amedeo.lepore@hyland.com>
* [PRODSEC-13253] Increased peerDependencies versions to allow to increase angular version in other projects
* [PRODSEC-13253] Addressec copilot comments
* AAE-47634 Add taskDetailsSource input to read task from
* AAE-47634 Fall back to Query strategy when taskDetailsSource is unsupported
* AAE-47634 Reset loading state when task details request fails
* AAE-47634 Reload task on taskDetailsSource change
* chore: migrate to Angular 20, TypeScript 5.9, and supporting packages
chore: migrate to Angular 20, TypeScript 5.9, and supporting packages
This commit migrates the Nx monorepo from Angular 19 to Angular 20
and updates all related dependencies to their compatible versions.
- @angular/core: 19.2.18 → 20.3.9
- @angular/material: 19.2.19 → 20.2.14
- @angular/cdk: 19.2.19 → 20.2.14
- @angular/material-date-fns-adapter: 19.2.19 → 20.2.14
- typescript: 5.8.3 → 5.9.3
- ng-packagr: 19.2.2 → 20.3.2
- @angular-devkit/build-angular: 19.2.19 → 20.3.16
- @angular-devkit/architect: 0.1902.19 → 0.2003.16
- @angular-devkit/core: 19.2.19 → 20.3.16
- @angular-devkit/schematics: 19.2.19 → 20.3.16
- @schematics/angular: 19.2.7 → 20.3.16
- @angular-eslint/eslint-plugin: 19.3.0 → 20.7.0
- @angular-eslint/eslint-plugin-template: 19.3.0 → 20.7.0
- @angular-eslint/template-parser: 19.3.0 → 20.7.0
- @typescript-eslint/eslint-plugin: 6.21.0 → 8.55.0
- @typescript-eslint/parser: 6.21.0 → 8.55.0
- @typescript-eslint/typescript-estree: 8.41.0 → 8.55.0
- @typescript-eslint/utils: ^8.51.0 → 8.55.0
- nx: 22.4.1 → 22.5.1
- @nx/angular: 22.1.3 → 22.5.1
- @nx/eslint-plugin: 22.3.3 → 22.5.1
- @nx/js: 22.1.3 → 22.5.1
- @nx/node: 22.1.3 → 22.5.1
- @nx/storybook: ^20.8.4 → 22.5.1
- @nx/workspace: 22.4.5 → 22.5.1
- @nx/webpack: 22.3.3 → 22.5.1
- storybook: ^10.2.0 → 10.2.8
- @storybook/angular: ^10.2.0 → 10.2.8
- @storybook/addon-themes: ^10.2.0 → 10.2.8
1. **PortalInjector Removal (Angular CDK 20)**
- Replaced PortalInjector usage with Injector.create()
- Updated context-menu-overlay.service.ts to use new API
2. **ESLint Configuration**
- Removed deprecated @typescript-eslint/brace-style rule
- This rule was removed in @typescript-eslint v8
All libraries build successfully:
- ✅ js-api
- ✅ extensions
- ✅ core
- ✅ content-services
- ✅ process-services
- ✅ process-services-cloud
- ✅ insights
Dependencies were installed using npm install --legacy-peer-deps due to
peer dependency conflicts with @mat-datetimepicker/core which requires
Angular CDK ^19.0.0 but we are using 20.2.14.
- ESLint warnings about @angular-eslint/prefer-inject are expected - this
is a new recommendation in Angular 20 to use inject() function instead
of constructor injection. These can be addressed in a follow-up PR.
chore: migrate to Angular 20, TypeScript 5.9, and supporting packages
This commit migrates the Nx monorepo from Angular 19 to Angular 20
and updates all related dependencies to their compatible versions.
- @angular/core: 19.2.18 → 20.3.9
- @angular/material: 19.2.19 → 20.2.14
- @angular/cdk: 19.2.19 → 20.2.14
- @angular/material-date-fns-adapter: 19.2.19 → 20.2.14
- typescript: 5.8.3 → 5.9.3
- ng-packagr: 19.2.2 → 20.3.2
- @angular-devkit/build-angular: 19.2.19 → 20.3.16
- @angular-devkit/architect: 0.1902.19 → 0.2003.16
- @angular-devkit/core: 19.2.19 → 20.3.16
- @angular-devkit/schematics: 19.2.19 → 20.3.16
- @schematics/angular: 19.2.7 → 20.3.16
- @angular-eslint/eslint-plugin: 19.3.0 → 20.7.0
- @angular-eslint/eslint-plugin-template: 19.3.0 → 20.7.0
- @angular-eslint/template-parser: 19.3.0 → 20.7.0
- @typescript-eslint/eslint-plugin: 6.21.0 → 8.55.0
- @typescript-eslint/parser: 6.21.0 → 8.55.0
- @typescript-eslint/typescript-estree: 8.41.0 → 8.55.0
- @typescript-eslint/utils: ^8.51.0 → 8.55.0
- nx: 22.4.1 → 22.5.1
- @nx/angular: 22.1.3 → 22.5.1
- @nx/eslint-plugin: 22.3.3 → 22.5.1
- @nx/js: 22.1.3 → 22.5.1
- @nx/node: 22.1.3 → 22.5.1
- @nx/storybook: ^20.8.4 → 22.5.1
- @nx/workspace: 22.4.5 → 22.5.1
- @nx/webpack: 22.3.3 → 22.5.1
- storybook: ^10.2.0 → 10.2.8
- @storybook/angular: ^10.2.0 → 10.2.8
- @storybook/addon-themes: ^10.2.0 → 10.2.8
1. **PortalInjector Removal (Angular CDK 20)**
- Replaced PortalInjector usage with Injector.create()
- Updated context-menu-overlay.service.ts to use new API
2. **ESLint Configuration**
- Removed deprecated @typescript-eslint/brace-style rule
- This rule was removed in @typescript-eslint v8
All libraries build successfully:
- ✅ js-api
- ✅ extensions
- ✅ core
- ✅ content-services
- ✅ process-services
- ✅ process-services-cloud
- ✅ insights
Dependencies were installed using npm install --legacy-peer-deps due to
peer dependency conflicts with @mat-datetimepicker/core which requires
Angular CDK ^19.0.0 but we are using 20.2.14.
- ESLint warnings about @angular-eslint/prefer-inject are expected - this
is a new recommendation in Angular 20 to use inject() function instead
of constructor injection. These can be addressed in a follow-up PR.
To fix these automatically, run:
ng generate @angular/core:inject --path=lib
fix: resolve peer dependency conflicts for CI/CD
- Update @mat-datetimepicker/core from 15.0.2 to 16.0.1 (supports Angular 20)
- Update webpack override to 5.104.1 for consistency
- Add .npmrc with legacy-peer-deps=true for npm ci compatibility
- Fixes npm ci failures in CI/CD pipeline
fix: update webpack to 5.105.0 for Storybook compatibility
- Align webpack version with @angular-devkit/build-angular bundled version
- Fixes Storybook compilation error with webpack instance mismatch
- Removes unnecessary webpack overrides
chore: finalize Angular 20 migration and improve migration prompt
- Marked all migration tasks as completed in the migration plan.
- Added a comprehensive summary of the migration process, including phases, completed tasks, and known issues.
- Introduced an improved migration prompt that addresses critical considerations and provides a detailed migration strategy for Angular 20 and related packages.
fix: update migration prompt and tests for Angular 20 breaking changes
- Enhanced migration prompt with specific instructions for handling Angular CDK Directionality API changes and removal of ng-reflect-* attributes.
- Updated unit tests to replace deprecated ng-reflect-* attribute checks with appropriate Angular testing patterns.
- Adjusted user preferences service to utilize the new directionality API method for setting text direction.
fix: enhance ImgViewerComponent to handle cleanup and prevent errors after destruction
- Added a `destroyed` flag to manage component lifecycle and prevent operations on a destroyed instance.
- Implemented `afterEach` hooks in tests to ensure proper fixture cleanup.
- Updated key event handlers and methods to check for the `destroyed` state before executing actions, improving stability and preventing errors.
feat: update ESLint configuration to include @angular-eslint/prefer-inject rule
- Added the @angular-eslint/prefer-inject rule to .eslintrc.json files in content-services, process-services, and process-services-cloud, promoting the use of the inject() function for dependency injection.
- Made minor adjustments to comments in search-logical-filter.component.ts for clarity.
chore: update ESLint configuration to include @angular-eslint/prefer-inject rule
- Added the @angular-eslint/prefer-inject rule to .eslintrc.json files in extensions, insights, and js-api, promoting the use of the inject() function for dependency injection.
- Removed unnecessary eslint-disable comments in process-list-cloud.component.ts and base-task-list-cloud.component.ts for cleaner code.
remove unnecessary changes
remove useless changes
cleanup useless changes
remove useless changes
Update package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
chore: update version of @ngx-translate/core to 17.0.0 in package.json and package-lock.json
Update package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Update package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Update .npmrc
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
chore: upgrade apollo-angular and jest packages to support Angular 20
- Upgrade apollo-angular from 10.0.3 to 13.0.0
- Upgrade @apollo/client from 3.13.1 to ^4.0.1
- Upgrade jest packages to v30 (jest, jest-environment-jsdom)
- Upgrade jest-preset-angular from 14.4.2 to 16.1.1
- Add overrides for Angular 20 peer dependency compatibility
chore: downgrade @apollo/client and apollo-angular to compatible versions
chore: downgrade @apollo/client and apollo-angular to compatible versions
chore: remove unused configuration options from jest and tsconfig
chore: refactor window.location mock in oauth2 tests for improved clarity and functionality
chore: enhance oauth2Auth tests and improve hash handling logic
chore: remove @typescript-eslint/brace-style rule from ESLint configuration
chore: add prefer-optional-chain rule to ESLint configuration
chore: update ESLint rules for optional chaining and refactor type definitions
chore: refactor tests to use TestBed for dependency injection in FileViewer and ProcessFormRendering services
chore: update AttachFileWidgetComponent to ensure early return after download
chore: update AttachFileWidgetComponent to ensure early return after download
chore: update unselectFacetBucket method to use optional chaining for safer property access
* chore: clean up package-lock.json and update webpack version in package.json
* [ACS-11306] Corrected main for eslint-angular
* [ACS-11306] Reverted unwanted change
* [ACS-11306] Fixed importing issue on ACA
* [ACS-11306] Updated node-fetch
* [ACS-11306] Reverted last commit
* [ACS-11306] Fixed rendering issue with pdf viewer
* [ACS-11306] Corrected storybook related versions
* Updating dependencies and fixing conflict
* [ACS-11306] Fixed cannot find name Buffer occurred in ACA
* chore: Updating pnpm lock file
* chore: Fixing ESLint issue
* chore: Upgrading to version 20.3.24 to avoid security issue
* chore: Fixing unit test
* chore: Fixing type and exporting missing model
* chore: Fixing type
* Chore: Migrating to Angular 20.3.25 to mitigate security issues
* Fix after rebase
* Removing unused deps
* Aligning deps
* fix create dialog name field hint (#12007)
---------
Co-authored-by: Aleksander Sklorz <Aleksander.Sklorz@hyland.com>
Co-authored-by: Ehsan Rezaei <ehsan.rezaei@hyland.com>
Co-authored-by: Grzegorz Jaśkowski <138671284+g-jaskowski@users.noreply.github.com>
* [ACS-11928] convert ReadStream to Blob before appending to FormData
* [ACS-11928] comments removed from toFormDataValue
* Trigger Build
* [ACS-11928] added unit tests and changed the blob variable name to data
* [ACS-11928] unit tests updated
* [ACS-11928] updated type in multipart form data upload
* [ACS-11928] sonar cloud fix
Align the Crowdin commit-signing secret and git identity variables with
the renamed org-level names (HXPS_GIT_COMMIT_SIGNING_PRIVATE_KEY,
HXPS_GIT_USERNAME, HXPS_GIT_EMAIL).
Co-authored-by: Cursor <cursoragent@cursor.com>
* AAE-46943 Sign Crowdin translation PR commits with GPG
Add GPG signing and the service-account commit identity to the Crowdin
pull workflow so automated-translations-update commits satisfy the
"Require signed commits" branch protection rule.
* AAE-46943 Pass signing key secret through reusable Crowdin workflow
Declare SERVICE_ACCOUNT_SIGNING_KEY in workflow_call.secrets and pass it
from release.yml so commit signing also works when pull-from-crowdin is
invoked as a reusable workflow.
* [AAE-46514] - Fix release workflow
* [AAE-46514] - Fix release workflow - devDependencies
* [AAE-46514] - Disabling provenance for Github packages as this is already given from the repo
* [AAE-46514] - Fix release workflow
* [AAE-46514] - Fix release workflow - devDependencies
* [AAE-46514] - Command parameters are wrong when setting now the options
* [AAE-46514] - It should call the script not the standard command
* [AAE-46514] - fixed path for eslint plugin publish
* [AAE-46514] - Fix release workflow
* [AAE-46514] - Fix release workflow - devDependencies
* [AAE-46514] - Command parameters are wrong when setting now the options
* [AAE-46514] - It should call the script not the standard command
* [AAE-46514] - using by default ignore-scripts and have a trusted list for those who are trusted
* [AAE-46514] - Improved the checks to cover more cases
* [AAE-46514] - Fixed copilot comments
* [AAE-46514] - OTher fixes
* [AAE-46514] - Fixing other improvements and comments
* [AAE-46514] - npmrc should be versioned to enforce the audit
* [AAE-46514] - Improved code
* [AAE-46514] - Removed the check on CI as we have other tools
* [AAE-46514] - Improved check, updated descriptions, skip check on CI as there is already Sonar
* [AAE-46514] - Reduced functions in smaller pieces
* [AAE-46514] - Migrating to Pnpm to increase safety
* [ci:force] - Checking
* [ci:force] - Fixed complexity of the scripts
* [ci:force] - Fixed complexity of the scripts
* [ci:force] - Fixed wrong typing on yml
* [ci:force] - Fixed sonar comments and added correct version to sha pinned action
* [ci:force] - Fixed cache hit for npmn
* [ci:force] - Improved eslint plugin so it can be built with standard action
* [ci:force] - Improved eslint plugin so it can be built with standard action
* [ci:force] - Added minimatch
* [ci:force] - Fixing issues
* [ci:force] - Removed 'run' as it is not needed
* [ci:force] - Using audit in place of custom scripts
* [ci:force] - Fixed vulnerabilities and removed custom scripts in favor of audit --critical
* [ci:force] - Added minimum time for publishing to install
* [ci:force] - Address issue with too new packages
* [ci:force] - Address issue with too new packages
* AAE-41418 Add process instance id input to task header cloud component
* AAE-41418 Remove falsy early returns from task header process instance id helpers
* AAE-41418 Move process instance id fallback into task header refresh
Reverts the following commits:
- 80e9e51cfa AAE-46242 - Looks like we need to override the mapping as crowding config is not set to this format
- 345e1e69ad AAE-46242 - should use the variable osx_locale to match the format xx-YY
- a2b026ed7e [AAE-46242] - Changed the name convention for translation files to ISO standard naming
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* chore: update NX packages to version 22.7.2 and related dependencies
* chore: add @nx/jest dependency at version 22.7.2
* chore: remove deprecated @types/pdfjs-dist dependency
Demonstration revert PR to check whether PRs #11880 and #11899 caused
the recent ADF release failures. The PR pipeline result will indicate
whether reverting the `cli:build` dependsOn edge (#11880) and the
`--omit=prod` install command (#11899) is sufficient to restore green
CI.
Reverts the relevant pieces of:
- #11880 (e3430ae36e): removes `dependsOn: ["installDeps"]` from
`cli:build`, and reverts the @typescript-eslint bump from 8.59.3
back to 8.57.2 / 8.41.0 in package.json + package-lock.json.
The dependabot `@typescript-eslint/*` grouping config is kept.
- #11899 (4044fafc39): restores the `cli:installDeps` command back
to plain `cd lib/cli && npm i` (the `--omit=prod` value is not a
valid npm flag).
Not intended for merge.
Co-authored-by: Cursor <cursoragent@cursor.com>
* [ci:force] AAE-46219 Remove redundant installDeps dependency from cli build target
The build target's installDeps dependency is already covered transitively
via bundle -> copyToNodeModules -> installDeps, and the duplicate npm i
caused a race condition that broke the ADF release.
Co-authored-by: Cursor <cursoragent@cursor.com>
* AAE-46219 Skip prod deps in cli:installDeps to unblock release
The release workflow rewrites lib/cli/package.json so @alfresco/js-api
points at an unpublished build-tagged version, then nx triggers
cli:installDeps (cd lib/cli && npm i) which fails ETARGET. tsc only
needs the devDependencies (typescript, @types/ejs, @types/node);
@alfresco/js-api is resolved via the tsconfig "paths" mapping to
dist/libs/js-api, not from node_modules. Adding --omit=prod skips the
unresolvable runtime deps without affecting the published package.
Also restores the build -> installDeps edge so tsc and npm install
do not race in lib/cli/node_modules.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove eslint-plugin-prefer-arrow dependency as the only rule from this plugin (prefer-arrow/prefer-arrow-functions) was disabled in all ESLint configurations.
* [AAE-45695] Group @typescript-eslint/* packages in dependabot
@typescript-eslint/parser and @typescript-eslint/eslint-plugin must be
bumped together (matching versions) due to a peer-dependency between
them. Grouping all @typescript-eslint/* packages ensures Dependabot
updates them in lock-step instead of opening separate PRs that fail
npm ci with a peer-dep conflict.
Co-authored-by: Cursor <cursoragent@cursor.com>
* [ci:force] AAE-45695 Bump @typescript-eslint/parser and eslint-plugin to 8.59.3
Bump both packages together (peer-dep requires matching versions) to
unblock the Dependabot bump that was previously failing.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* [AAE-45391] - Lazy loading some of the big external libs
* [AAE-45391] - Added some extra units to pdfjs viewer
* [AAE-45391] - Some improement on viewer component
* [AAE-45391] - Fixed the way it was redered to a newer angular system
* [AAE-45391] - Fixed the way it was redered to a newer angular system
* [AAE-45391] - fixed schematic
* [AAE-45391] - Added some docs for the schematics as well
* [AAE-37328] - Fixed comment on missing provider
* AAE-44946 - Sending also previous value to allow valuation and validation
* AAE-44946 - Sending also previous value to allow valuation and validation
* AAE-44749 - Fixed wrong subscribe in test
* AAE-45038 - Fixing logs and unit tests
* Update package dependencies: remove unused 'picomatch' and 'minimatch' modules from package-lock.json, and add specific versions for 'picomatch', 'minimatch', 'path-to-regexp', and 'serialize-javascript' in package.json.
* Upgrade nx and @nx/workspace to fix minimatch vulnerabilities
- Upgrade nx from 22.4.1 to 22.6.3
- Upgrade @nx/workspace from 22.4.5 to 22.6.3
- Remove minimatch override to maintain Karma compatibility
This resolves the high severity minimatch vulnerabilities while
keeping tests functional.
* Refactor nx.json: Consolidate sharedGlobals array and add analytics flag
- Merged multiple lines in the sharedGlobals array for better readability.
- Added an analytics flag set to false for configuration.
* Update package dependencies: bump @nx packages to version 22.6.5 [ci:force]
* Add test specifications for feature flags and user initial pipe [ci:force]
- Introduced new selectors for feature flag components in `features.directive.spec.ts` and `not-features.directive.spec.ts`.
- Added an injectable sanitizer class in `user-initial.pipe.spec.ts` to enhance testing capabilities.
- Created a new log file `out.txt` to capture Karma test execution details and warnings.
* AAE-44184 Colspan setting on form fields is ignored or not properly applied
* AAE-44184 Better handling of empty columns
* AAE-44184 Fixing stale adf-form-field instances
* AAE-44184 Consolidating duplicate code
* AAE-28918 Fix start process button is enabled when required widgets are read only without value
* Apply Copilot review suggestions.
* updates after code review comments
* revert change made earlier
* [AAE-43749] added date formatting according to locale
* [AAE-43749] applied pr comments
* [AAE-43749] pipe use default date format reacting to locale
* [ACS-10280]: move selection handling to row
* [ACS-10280]: clean up
* [ACS-10280]: rollback title
* [ACS-10280]: migrate to conditional aria-hidden
* [ACS-10280]: revert to fix hxp
* [ACS-10280]: sonar fix
* [ACS-10280] Use new Angular control flow syntax
* [ACS-10280] Unit test fix
---------
Co-authored-by: MichalKinas <michal.kinas@hyland.com>
* [ACS-11153] Removed usages of ng reflect from card view dateitem and diagram activities
* [ACS-11153] Removed usages of ng-reflect
* [ACS-11153] Added eslint rule
* AAE-33828 fix for the runtime errors on datatable should be handled in runtime
* AAE-33828 removing the unwanted try catches
* AAE-33828 adding units to test the number value is a valid value
* refactor: improve context menu overlay service implementation
- Introduced a new interface for overlay references with backdrop handling.
- Updated event listener for backdrop clicks to use the new interface, enhancing type safety.
- Refactored the injector creation method to utilize the Injector.create method for better clarity and maintainability.
- Improved the fake element's type definition in the getOverlayConfig method for better type inference.
These changes enhance the overall robustness and readability of the context menu overlay service.
* refactor: enhance type safety in context menu components
- Introduced the ContextMenuItem interface to improve type definitions for context menu items.
- Updated the ContextMenuListComponent to use ContextMenuItem for links and menu item parameters, enhancing clarity and maintainability.
- Modified CONTEXT_MENU_DATA injection token to specify ContextMenuItem[] for better type safety.
- Adjusted the ContextMenuOverlayConfig interface to accept an array of ContextMenuItem, ensuring consistent data handling.
These changes improve the overall robustness and readability of the context menu implementation.
[ci:force]
* refactor: remove unnecessary eslint-disable comments in category management and search components
- Eliminated eslint-disable comments related to no-underscore-dangle in the CategoriesManagementComponent and SearchControlComponent tests, improving code clarity and adherence to linting rules.
- This change enhances the overall readability of the test files by ensuring consistent coding standards.
* refactor: simplify backdrop click handling in context menu overlay service
- Removed the unnecessary backdrop click handling logic, replacing it with a direct call to close the overlay reference. This change enhances code clarity and reduces complexity in the event listener implementation.
* refactor: streamline backdrop handling in context menu overlay service
- Removed the custom interface for overlay references with backdrop handling, simplifying the code.
- Updated the event listener for backdrop clicks to directly use the overlay's backdropElement, enhancing clarity and maintainability.
- This change improves the overall robustness of the context menu overlay service.
* refactor: clean up code in SuperagentHttpClient and upload.spec
- Removed unnecessary eslint-disable comment in SuperagentHttpClient for improved code clarity.
- Refactored promise handling in upload.spec to utilize an array for better management of multiple promises during file upload error handling.
* chore: update cspell and ESLint configurations
- Added "webscript" to the cspell dictionary for improved spell checking.
- Updated ESLint configuration to disable the "@typescript-eslint/no-explicit-any" rule, allowing more flexibility in type definitions.
* fix: enhance ImgViewerComponent to handle cleanup and prevent errors after destruction
- Added a `destroyed` flag to manage component lifecycle and prevent operations on a destroyed instance.
- Implemented `afterEach` hooks in tests to ensure proper fixture cleanup.
- Updated key event handlers and methods to check for the `destroyed` state before executing actions, improving stability and preventing errors.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: add aria-hidden attribute to notification history button for accessibility
- Updated the notification history button to include the `aria-hidden` attribute, improving accessibility for screen readers and enhancing user experience.
* fix: improve key event handling in ImgViewerComponent
- Updated key event handlers to check for the presence of the cropper before executing actions, enhancing stability and preventing errors when the component is destroyed.
- Removed redundant checks from individual arrow key handlers, streamlining the code.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
- Modified several components to use optional chaining for safer property access, enhancing code robustness.
- Updated ESLint configuration to enforce stricter rules on the use of optional chaining.
- Adjusted tests to reflect changes in property access patterns.
* Refactor enums to const objects and update ESLint rules
- Converted several TypeScript enums to const objects for better type inference and immutability.
- Updated ESLint configuration to disable 'no-redeclare' rule and added new restrictions on schema usage.
- Adjusted package-lock.json to mark several dependencies as peer dependencies.
* Refactor enums to const objects in site-dropdown and new-version-uploader models
- Converted TypeScript enums to const objects for improved type safety and immutability in `sites-dropdown.component.ts` and `new-version-uploader.model.ts`.
- Updated related types to reflect the changes in both files.
- Enhanced error handling in the `DropdownSitesComponent` by using the `subscribe` method with an object for better readability.
* Refactor TypeScript types and improve error handling in component tests
- Updated type annotations in `upload.service.ts` and `node-actions.service.ts` for better type safety.
- Enhanced error handling in various component tests by using more descriptive error messages in `task-attachment-list.component.spec.ts`, `attach-file-widget-dialog.component.spec.ts`, and `task-form.component.spec.ts`.
- Removed unnecessary schemas from test configurations in several component spec files to streamline the testing setup.
* Refactor TypeScript enums to const objects for improved type safety
- Converted multiple TypeScript enums to const objects across various models, including `AppConfigValues`, `Status`, `ShowHeaderMode`, `WidgetTypeEnum`, and others.
- Updated related type definitions to enhance type inference and immutability.
- Adjusted ESLint configurations by removing the 'no-redeclare' rule to streamline code quality checks.
* Refactor TypeScript types for improved type safety and consistency
- Updated type annotations in `document-list.component.ts`, `document-actions.service.ts`, and `node-actions.service.ts` to use `Observable` instead of `Subject` for better reactive programming practices.
- Enhanced type definitions in `search-date-range.component.ts` and related spec files to allow `inLastValue` to be either a string or a number, improving flexibility in handling date range inputs.
- Adjusted test cases to reflect these type changes, ensuring consistency across the application.
* Enhance type safety in ViewerComponent by specifying type for closeButtonPosition
- Updated the type annotation for `closeButtonPosition` in `viewer.component.ts` to explicitly define it as `CloseButtonPosition`, improving type safety and clarity.
* Enhance type safety in DataTableComponent by specifying type for showHeader
- Updated the type annotation for `showHeader` in `datatable.component.ts` to explicitly define it as `ShowHeaderMode`, improving type safety and clarity.
* Update PDF viewer test to accommodate varying date formats
- Modified the test for the annotation popup in `pdf-viewer.component.spec.ts` to check for the presence of date components instead of a specific date format, enhancing test robustness across different locales.
* [ACS-10193] make library title bolder to indicate it is a link
* [ACS-10193] use higher font weight
* [ACS-10193] move weight to proper scss file
* [ACS-10193] fix css class encapsulation
2026-01-30 17:01:21 +01:00
3562 changed files with 77811 additions and 67997 deletions
* Simple Templates: Keep templates as simple as possible, avoiding complex logic directly in the template. Delegate complex logic to the component's TypeScript code.
* Native Control Flow: Use the new built-in control flow syntax (`@if`, `@for`, `@switch`) instead of the older structural directives (`*ngIf`, `*ngFor`, `*ngSwitch`).
* NgOptimizedImage: Use `NgOptimizedImage` for all static images to automatically optimize image loading and performance.
* Async Pipe: Use the `async` pipe to handle observables in templates. This automatically subscribes and unsubscribes, preventing memory leaks.
* Prefer pipes over functions in templates for performance reasons, as pipes are only re-evaluated when their inputs change.
## Accessibility Standards
* Add `alt` text to all images
* Label form inputs with `<mat-label>` or `aria-label`
* Ensure interactive elements have accessible names
* Add `role`, `aria-labelledby`, and `aria-describedby` when semantic HTML isn't sufficient
* All interactive elements must be keyboard accessible
* Ensure 4.5:1 contrast ratio for normal text, 3:1 for large text
* Use `aria-live="polite"` for status updates
* Watch out for misused/non-semantic elements (e.g., <div> instead of <section>)
* Strict Type Checking: Always enable and adhere to strict type checking. This helps catch errors early and improves code quality.
* Prefer Type Inference: Allow TypeScript to infer types when they are obvious from the context. This reduces verbosity while maintaining type safety.
* Avoid `any`: Do not use the `any` type unless absolutely necessary as it bypasses type checking. Prefer `unknown` when a type is uncertain and you need to handle it safely.
* Use strict null checks (no `null` or `undefined` without explicit handling)
* Use type guards and union types for robust type checking
* Check for missing return types in function signatures
* Avoid implicit `any` (untyped function parameters)
## Naming Conventions
* Use PascalCase for types, interfaces, and classes
* Use camelCase for variables, functions, and methods
* Use UPPER_CASE for constants
## Modern TypeScript Patterns
* Use optional chaining (`?.`) and nullish coalescing (`??`)
* Prefer `const` over `let`; never use `var`
* Use arrow functions for callbacks and short functions
* Avoid enums - they generate additional code at compile time, which increases the size of the final file. This can have a negative impact on the loading speed and performance of the app. Prefer union types or literal types instead.
* Avoid unhandled promise rejections (missing .catch() or try/catch)
* Standalone Components: Always use standalone components, directives, and pipes. Avoid using `NgModules` for new features or refactoring existing ones.
* Implicit Standalone: When creating standalone components, you do not need to explicitly set `standalone: true` inside the `@Component`, `@Directive` and `@Pipe` decorators, as it is implied by default.
* Lazy Loading: Implement lazy loading for feature routes to improve initial load times of your application.
* Use Angular Material or other modern UI libraries for consistent styling and UI components.
* Implement proper error handling with RxJS operators (e.g., catchError)
* Verify if newly added functionalities can utilize Angular Signals for fine-grained reactivity, reducing change detection overhead.
* Utilize AOT (Ahead-of-Time) compilation and tree-shaking for efficient, smaller bundle sizes.
* Prefer class binding over `ngClass` and `ngStyle` for better performance.
* Use protected on class members that are only used by a component's template, as it allows for better encapsulation while still being accessible to the template.
* Use readonly for properties that shouldn't change.
* Use `takeUntilDestroyed` & `destroyRef`: The `takeUntilDestroyed` and `destroyRef` have been introduced with Angular 16 and help to reduce boilerplate code related to unsubscribing on the `OnDestroy` hook.
* Organize the order of properties and methods in Angular components for readability and maintainability. Recommended order is:
1.**Injected services** Whether they are public or private, it's clear they are dependencies of the class.
2.**Inputs**: Properties that receive data from outside.
3.**Outputs**: Events that the component can trigger.
4.**ViewChild/ContentChild**: References to HTML elements.
5.**Public static properties**: Constants and static members that are accessible to everyone.
6.**Readonly properties**: Immutable public properties.
7.**Public properties**: Data and functions available to everyone.
8.**Private static properties**: Constants and static members that are only accessible within the class.
10.**Private properties**: Data and functions used only inside the component.
11.**Setters and Getters**: Methods for accessing and modifying properties.
12.**Constructor**: Used to initialize the component.
13.**Lifecycle Hooks**: Methods that run at specific times in the component’s lifecycle.
14.**Public methods**: Functions available to everyone.
15.**Private methods**: Functions used only inside the component.
## Components
* Single Responsibility: Keep components small, focused, and responsible for a single piece of functionality.
* Reactive Forms: Prefer Reactive forms over Template-driven forms for complex forms, validation, and dynamic controls due to their explicit, immutable, and synchronous nature.
* Use Typed Forms: Typed Forms in Angular are a new feature introduced in Angular 14 that provide stronger type checking for reactive forms. They allow developers to define the structure and types of form controls, making it easier to catch errors at compile-time rather than runtime.
## Services
* Single Responsibility: Design services around a single, well-defined responsibility.
*`providedIn: 'root'`: Use the `providedIn: 'root'` option when declaring injectable services to ensure they are singletons and tree-shakable.
*`inject()` Function: Prefer the `inject()` function over constructor injection when injecting dependencies, especially within `provide` functions, `computed` properties, or outside of constructor context.
## Unit testing
* Write unit tests for components, services, and pipes using Jasmine and Karma.
* Test cases should be reasonably groupped based on tested functionality/behaviour using describe blocks.
* Use plain English test names based on the should <expectedBehavior> when <stateUnderTest> pattern as a guideline.
* Use Angular's TestBed for component testing with mocked dependencies
* Avoid Direct Calls to Component Lifecycle Hooks: Instead of directly invoking lifecycle hooks like `ngOnInit()`, use Angular's testing utilities to trigger them naturally. For example, use `fixture.detectChanges()` to trigger change detection, which will automatically call `ngOnInit()` and other lifecycle hooks in the correct order.
* Use fixture.componentRef.setInput() Instead of Direct Input Assignment: When testing components with inputs, use `fixture.componentRef.setInput()` to set input values. This method ensures that Angular's change detection is properly triggered, allowing the component to react to input changes as it would in a real application.
* Use the Provide Mock Store for testing components that rely on NgRx state management. This allows you to mock the store and control the state during tests without needing to set up a full NgRx environment.
* Mock HTTP requests using provideHttpClientTesting
* Import only the minimal required modules
* Avoid NO_ERRORS_SCHEMA and CUSTOM_ELEMENTS_SCHEMA in tests to ensure proper error detection
You are a supply chain security analyst reviewing a pull request for dependency changes.
Your goal is to identify any dependency additions or upgrades and produce a thorough risk assessment for each change, covering known vulnerabilities, typosquatting, maintainer takeover, install script abuse, version anomalies, source code changes, and project health.
You are the primary and only analysis engine. There is no secondary check. Be thorough but calibrated: false positives erode trust, but missed threats have severe consequences.
## Step 1 — Identify Dependency Changes
Read the **full** pull request diff — every commit in the PR, not just the latest one — and find all modified dependency files (`package.json`, `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`/`pnpm-lock.yml`, `pnpm-workspace.yaml`/`pnpm-workspace.yml`, `npm-shrinkwrap.json`, `pom.xml`, `build.gradle`, etc.).
**CRITICAL**: always use the GitHub MCP Server `pull_requests` toolset (e.g. `get_diff` / `get_files`) to fetch the diff — this always reflects every commit in the PR, regardless of local git history, against the correct base branch. Do NOT rely on local git commands or assumptions about the PR's commit history.
For each changed dependency extract:
- Package name (including scope/groupId if applicable)
- Ecosystem (`npm` or `maven`)
- Old version (or mark as `NEW DEPENDENCY` if newly added)
- New version
If no dependency files were changed, post a brief PR comment stating that no dependency changes were detected, then go directly to Step 6 — treating this as LOW risk — to remove any stale `security:*` labels and submit the required pull request review, then stop.
## Step 1b — Filter Internal Dependencies
Before collecting external data, identify and exclude internal/private dependencies that cannot be resolved by public APIs.
**Internal dependency namespaces (skip these):**
- **Maven**: Any dependency with a `groupId` starting with `com.hyland.`, `org.alfresco.`, or `org.activiti.`
- **npm**: Any package under the `@hyland/`, `@hylandsoftware/`, or `@alfresco/` scopes
For each internal dependency found:
1. Remove it from the analysis pipeline — do NOT query OSV.dev, OpenSSF Scorecard, or registry APIs for these packages (they will fail or return irrelevant data).
2. Record the package name (with `@` replaced by `(at)` for GitHub comment compatibility), ecosystem, old version, and new version in a separate "Internal Dependencies (Skipped)" list.
3. Continue with Step 2 only for the remaining external/public dependencies.
If ALL changed dependencies are internal, skip Steps 2-4 and proceed directly to Step 5 — treating this as LOW risk for Step 6 — posting a report that lists the internal dependencies and notes that no external supply chain analysis was performed.
## Step 2 — Collect Data for Each Dependency
For every changed dependency, gather the following data. Fetch all data sources in parallel where possible. If any request fails or returns no data, note it and continue — missing data alone is not proof of malice, but factor it into your confidence level.
### 2a. Known Vulnerabilities (OSV.dev)
Query the OSV.dev API for vulnerabilities affecting the **new** version:
- **npm**: `POST https://api.osv.dev/v1/query` with body `{"package":{"name":"<package-name>","ecosystem":"npm"},"version":"<new-version>"}`
- **Maven**: `POST https://api.osv.dev/v1/query` with body `{"package":{"name":"<groupId>:<artifactId>","ecosystem":"Maven"},"version":"<new-version>"}`
Record all returned vulnerability IDs, severity ratings, and summaries. CRITICAL and HIGH severity CVEs in the new version are the most urgent signal.
### 2b. OpenSSF Scorecard
Fetch the project health score. First determine the source repository from the package metadata (see 2c), then query:
Record the overall score (0-10) and individual check results. Pay special attention to: Maintained, Code-Review, Vulnerabilities, Branch-Protection, Signed-Releases. A score below 3 is very concerning; below 5 warrants caution. If the package has no linked source repository, the scorecard will be unavailable — this is itself a risk signal.
### 2c. Package Metadata (Registry)
**For npm packages**, fetch:
`GET https://registry.npmjs.org/<package-name>`
From the full registry document, extract for BOTH the old and new versions:
-`versions[<version>]._npmUser` — the publisher
-`versions[<version>].maintainers` — the maintainer list
For POM details (build plugins, dependencies): `GET https://repo1.maven.org/maven2/<groupId-as-path>/<artifactId>/<version>/<artifactId>-<version>.pom`
### 2d. Source Code Diff and Release Notes
Use the PR diff itself to review the actual file changes for dependency manifest files. Additionally, if a source repository is identified (from 2c), fetch release notes and compare tags:
- Release notes: `GET https://api.github.com/repos/{owner}/{repo}/releases/tags/v<new-version>` (try with and without the `v` prefix)
- For a code-level diff between old and new versions: `GET https://api.github.com/repos/{owner}/{repo}/compare/v<old-version>...v<new-version>` (try with and without the `v` prefix)
## Step 3 — Analyze Against Threat Taxonomy
Evaluate each dependency against ALL of the following threat categories. Not every category applies to every package — use judgment.
### 3a. Known Vulnerabilities
Assess the severity and exploitability of any CVEs or advisories returned from OSV.dev. CRITICAL and HIGH severity vulnerabilities in the new version are the most urgent signal. Also check whether the upgrade itself fixes known vulnerabilities in the old version (a positive signal).
### 3b. Typosquatting / Name Confusion
Determine if the package name could be a typosquatting attempt targeting a well-known package. Consider:
- Levenshtein distance to popular packages (e.g., `lodas` vs `lodash`)
- Dash/underscore/separator swaps (e.g., `my_package` vs `my-package`)
- Encoded payloads (Base64/hex decoded and executed at runtime)
- Inconsistency between release notes and actual changes (changelog says "bug fix" but diff adds network calls)
- Cryptocurrency mining patterns
- Suspicious new transitive dependencies
### 3g. Project Health
Interpret the OpenSSF Scorecard data:
- Overall score below 3/10 is very concerning
- Score below 5/10 warrants caution
- Pay attention to specific failing checks: Maintained, Code-Review, Vulnerabilities, Branch-Protection, Signed-Releases
- Missing scorecard data (no source repo linked) is itself a risk signal
### 3h. Missing Source Repository
A package with no linked source repository prevents code audit and is a risk signal, especially combined with other concerns.
### 3i. Tag Poisoning / Build Provenance
Evaluate whether the published artifact can be traced back to a verified source commit. This category covers attacks where a legitimate-looking version tag is manipulated to distribute malicious code.
#### Tag-to-Registry Provenance Mismatch
Check whether the git tag for the new version corresponds to the published artifact:
- Compare the tag commit date with the registry publish timestamp. A discrepancy of more than a few hours (allowing for CI/CD pipeline time) is suspicious.
- If the source diff between the tag and the previous tag includes changes not documented in release notes, flag as suspicious.
#### Mutable/Moved Tags
Check if the tag appears to have been recreated:
- Use `GET https://api.github.com/repos/{owner}/{repo}/git/refs/tags/{tag}` to get the tag reference.
- For annotated tags, use `GET https://api.github.com/repos/{owner}/{repo}/git/tags/{sha}` to check the tag object and its `tagger.date`.
- If the tag creation date is significantly newer than the commit it points to (e.g., more than 7 days), this may indicate the tag was deleted and recreated pointing to a different commit.
#### Unsigned Tags
Determine tag type and signing status:
- **Annotated + signed tags** (GPG or SSH signature present) — strongest integrity signal.
- **Annotated but unsigned tags** — moderate integrity; the tag is immutable but unverified.
- **Lightweight tags** — weakest integrity; easily moved without trace. Flag as a risk signal for high-profile or security-critical packages.
For the tag object, check the `verification` field in the GitHub API response for signature status.
#### Build Provenance / Attestation
Check for SLSA provenance attestations or Sigstore signatures:
**For npm packages**: Query `GET https://registry.npmjs.org/-/npm/v1/attestations/<package-name>@<new-version>`. If attestations are present, verify:
- The `predicateType` matches a known SLSA provenance type
- The `subject` digest matches the published package tarball
- The build was performed by a trusted CI system (e.g., GitHub Actions)
**For Maven packages**: Check if Sigstore `.sigstore` bundle files exist alongside the artifact at:
The absence of provenance attestations on a high-profile package (>1000 weekly downloads for npm, or widely used in the ecosystem) is a moderate risk signal. Packages that previously published with provenance but stopped doing so are especially suspicious.
#### Tag Mimicry on Forks
Verify that the source repository URL in registry metadata points to the canonical repository:
- Cross-reference the `repository` field from package metadata (Step 2c) with the GitHub API response.
- If the repository URL points to a fork rather than the original project, flag as HIGH risk — this may indicate a hijacked tag on a lookalike fork.
- Check that the repository owner matches known maintainers of the package.
## Step 4 — Score and Classify Risk
Assign a risk score (0-100) to each dependency using these guidelines:
| Highest | Known CRITICAL/HIGH CVEs in new version, confirmed typosquatting, malicious code in diff, build provenance mismatch (tag points to different code than published artifact), tag mimicry on fork | 60+ points |
| High | Maintainer takeover pattern (publisher changed + old maintainers removed), dangerous install scripts, known compromised package, moved/recreated tag with different commit, provenance attestations removed from package that previously had them | 20-40 points |
| Medium | Low OpenSSF Scorecard (< 3), publisher changed (without full takeover), new install scripts, very recent publish (< 48h), obfuscated code in diff, unsigned lightweight tags on security-critical packages, absence of provenance on high-profile packages | 10-20 points |
| Lower | Scorecard 3-5, version anomalies, missing source repository, long dormancy, rapid publishes, tag date slightly newer than commit (within 7 days), annotated but unsigned tags | 5-10 points |
These are guidelines, not rigid formulas. Use judgment to combine signals — multiple medium signals can compound into a high-risk assessment.
If no suspicious patterns are found, assign a score of 0-10 and risk level LOW. Most legitimate upgrades should score LOW.
## Step 5 — Post Findings as PR Comment
Post a structured report in the following format.
**CRITICAL: Sanitize all `@` symbols before posting**
GitHub enforces a maximum of 10 mentions per comment. Package names containing `@` (like `@hyland/core`, `@alfresco/js-api`) are interpreted as user/team mentions and trigger this limit, causing comment post failures.
**Before generating the comment text**:
1. Replace **every**`@` symbol in package names with `(at)` — e.g., `@hyland/core` → `(at)hyland/core`
2. Apply this transformation to ALL occurrences: table cells, headings, inline code blocks, findings sections, reason columns
3. This applies to both external and internal dependencies
4. Do NOT skip this step — even if only a few packages are affected, GitHub counts all `@` symbols
```txt
## Supply Chain Security Review
| Package | Ecosystem | Old Version | New Version | Risk Score | Risk Level |
<List any APIs that were unavailable or returned errors, so reviewers know what was and wasn't checked.>
---
### Overall Risk: <highest risk level across all dependencies>
**Recommendation**: <approve|review|block>
- **approve**: LOW risk, routine upgrade, no concerns found
- **review**: MEDIUM risk, a human should examine specific findings before merging
- **block**: HIGH/CRITICAL risk, should not be merged without security team review
```
## Step 6 — Apply Label and Review Status
### 6a. Labels — order-independent update
Determine the single target label for the highest risk level found: `security:low`, `security:medium`, or `security:high`.
- Remove only the OTHER `security:*` labels (the ones that do NOT match the target) if present on the PR — this clears stale risk labels left by a previous review (e.g., after a new commit changed the risk level).
- Add the target label if it is not already present.
- **Never remove the target label itself.** Because the remove and add operations act on disjoint labels, the final state is correct regardless of which of the two safe-output calls (`add_labels` / `remove_labels`) happens to be processed first — do NOT rely on emitting them in a particular order, since that ordering is not guaranteed. (Do not, for example, remove all three `security:*` labels and then add the target back — if the removal is processed after the add, the target label would be stripped again, leaving the PR with no risk label at all.)
### 6b. Dismiss stale reviews from this workflow
Every review this workflow posts (see 6c) MUST start its body with the exact literal marker line `**Supply Chain Review**` as the first line, so future runs can recognize their own prior reviews.
Before posting the new review:
1. Fetch the PR's existing reviews (GitHub MCP `pull_requests` toolset).
2. Identify any review that is authored by this workflow's actor AND whose body starts with the `**Supply Chain Review**` marker AND is still in the `CHANGES_REQUESTED` state — that is a stale review from an earlier run of this same workflow (e.g., posted before the flagged dependency was fixed, downgraded, or removed).
3. For each such review, call `dismiss_pull_request_review` with its explicit numeric `review_id` (do NOT use `'auto'` — this repository may run other agentic workflows that also post as the same actor, and `'auto'` would dismiss their reviews too) and a justification of at least 20 characters (e.g., "Superseded by a newer Supply Chain Review run.").
Do this even though `submit-pull-request-review` is also configured with `supersede-older-reviews: true` — that setting is best-effort and may not always recognize the prior review, so the explicit dismissal above is the reliable mechanism and must always be attempted.
### 6c. Submit the review
**Always submit a pull request review — in every invocation, with no exceptions.** This is not conditional on risk level. Submit a review even when there are no dependency changes, when all dependencies are internal, or when risk is LOW — skipping it would mean a stale `REQUEST_CHANGES` review from an earlier run is never replaced or dismissed.
The review body must start with the `**Supply Chain Review**` marker line (see 6b), followed by the assessment:
- If the highest risk level is HIGH or CRITICAL, submit the review as **request changes**, with a summary of the critical findings.
- If the risk is MEDIUM, submit the review as a **comment**, noting that human review is recommended.
- If the risk is LOW (including when there are no dependency changes, or all changed dependencies are internal), submit the review as a **comment**, summarizing that no concerns were found and the PR comment has the full detail.
- **Never submit the review as an approval, under any circumstance** — this workflow only ever comments or requests changes; a human always makes the merge decision.
## Important Guidelines
- **Never approve or merge the PR** — all actions are advisory or blocking only. A human always makes the merge decision. Every review this workflow submits must use the comment or request-changes event — never the approve event.
- **Always submit exactly one pull request review per invocation, regardless of outcome**, and always prefix its body with the `**Supply Chain Review**` marker — this is required so that a later run of this same workflow can find and dismiss it via `dismiss_pull_request_review` once it becomes stale (see Step 6b). Do not rely on `supersede-older-reviews` alone; it is best-effort.
- **Never remove the `security:*` label matching the current risk level** when clearing stale labels — only remove the other ones, so the final label state is correct no matter which safe-output call is processed first (see Step 6a).
- Be specific in findings — cite exact data (vulnerability ID, maintainer name, script content, file path, API response) rather than vague warnings.
- For Maven packages, adapt npm-specific checks appropriately (e.g., install scripts become build plugin analysis, maintainer metadata may be limited).
- When a package is a NEW dependency (no old version), pay extra attention to project health, name legitimacy, and install scripts since there is no historical baseline to compare against.
- If data collection fails for all external APIs, still analyze the PR diff directly and provide the best assessment you can with available information, noting the limitations clearly.
- For tag poisoning checks, not all packages will have provenance attestations — this is still an emerging practice. Weight the absence of attestations proportionally to the package's profile and criticality. Do not flag low-download utility packages for missing provenance.
- When checking tag dates, allow for reasonable CI/CD pipeline delays (up to a few hours between tag push and publish). Only flag significant discrepancies (days or weeks).
| [Node Lock directive](content-services/directives/node-lock.directive.md) | Locks or unlocks a node. | [Source](../lib/content-services/src/lib/directives/node-lock.directive.ts) |
| [Node Restore directive](content-services/directives/node-restore.directive.md) | Restores deleted nodes to their original location. | [Source](../lib/content-services/src/lib/directives/node-restore.directive.ts) |
| [Toggle Icon directive](content-services/directives/toggle-icon.directive.md) | Toggle icon on mouse or keyboard event for a selectable element. | [Source](../lib/content-services/src/lib/upload/directives/toggle-icon.directive.ts) |
| [Version Compatibility Directive](content-services/directives/version-compatibility.directive.md) | Enables/disables components based on ACS version in use. | [Source](../lib/content-services/src/lib/version-compatibility/version-compatibility.directive.ts) |
### Dialogs
@@ -348,17 +347,10 @@ for more information about installing and using the source code.
| [Permission Style model](content-services/models/permissions-style.model.md) | Sets custom CSS styles for rows of a Document List according to the item's permissions. | [Source](../lib/content-services/src/lib/document-list/models/permissions-style.model.ts) |
| [Row Filter Model](content-services/models/row-filter.model.md) | Defines the Row Filter function used by the Document List Component. | [Source](../lib/content-services/document-list/data/row-filter.model.ts) |
### Pipes
| Name | Description | Source link |
| ---- | ----------- | ----------- |
| [File upload error pipe](content-services/pipes/file-upload-error.pipe.md) | Converts an upload error code to an error message. | [Source](../lib/content-services/src/lib/upload/pipes/file-upload-error.pipe.ts) |
| [Category tree datasource service](content-services/services/category-tree-datasource.service.md) | Datasource service for category tree. | [Source](../lib/content-services/src/lib/category/services/category-tree-datasource.service.ts) |
@@ -374,7 +366,6 @@ for more information about installing and using the source code.
| [Node Comments Service](content-services/services/node-comments.service.md) | Adds and retrieves comments for nodes in Content Services. | [Source](../lib/content-services/src/lib/node-comments/services/node-comments.service.ts) |
| [Node permission dialog service](content-services/services/node-permission-dialog.service.md) | Displays dialogs to let the user set node permissions. | [Source](../lib/content-services/src/lib/permission-manager/services/node-permission-dialog.service.ts) |
| [Node Permission service](content-services/services/node-permission.service.md) | Manages role permissions for content nodes. | [Source](../lib/content-services/src/lib/permission-manager/services/node-permission.service.ts) |
| [Search Ai Service](content-services/services/search-ai.service.md) | Manages search AI in Content Services. | [Source](../lib/content-services/src/lib/search-ai/services/search-ai.service.ts) |
| [Search filter service](content-services/services/search-filter.service.md) | Registers widgets for use with the Search Filter component. | [Source](../lib/content-services/src/lib/search/services/search-filter.service.ts) |
| [Search Query Builder service](content-services/services/search-query-builder.service.md) | Stores information from all the custom search and faceted search widgets, compiles and runs the final search query. | [Source](../lib/content-services/src/lib/search/services/search-query-builder.service.ts) |
| [Security Controls service](content-services/services/security-controls.service.md) | Manages security groups & marks in Content Services. | [Source](../lib/content-services/src/lib/security/services/security-controls-groups-marks-security.service.ts) |
@@ -574,3 +565,12 @@ Contains all custom rules used by ESLint.
<!--eslint-angular end-->
[(Back to Contents)](#contents)
## Notes
### Knowledge Discovery removal (v9.0.0)
The Knowledge Discovery components, services, and APIs have been removed as of version 9.0.0.
The integrated Knowledge Discovery features have been replaced with a section in the side navigation panel containing a link to the standalone Knowledge Discovery UI application in higher level apps such as ACA and ADW.
If you were using those features, please consider cleaning Local Storage in your browser as *aiReferences* entry may remain.
Reference for flags and labels that control CI behavior on pull requests.
## PR Title Flags
Include these flags anywhere in the **PR title** to modify CI behavior.
| Flag | Effect |
|------|--------|
| `[ci:force]` | Skips the PR approval check, allowing the full pipeline to run without an approved review. Useful for testing CI changes on draft PRs. |
# [Search Chip Autocomplete Input component](../../../lib/content-services/src/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.ts "Defined in search-chip-autocomplete-input.component.ts")
@@ -31,6 +31,7 @@ Represents an input with autocomplete options.
| preselectedOptions | `AutocompleteOption[]` | [] | Options which are selected from start |
| onReset$ | [`Observable`](https://rxjs.dev/guide/observable)`<void>` | | Observable that will listen to any reset event causing component to clear the chips and input |
| allowOnlyPredefinedValues | boolean | true | A flag that indicates whether it is possible to add a value not from the predefined ones |
| loading | [`Observable`](https://rxjs.dev/guide/observable)`<boolean>` | `of(false)` | Stream driving a loading spinner shown inside the autocomplete panel while a new batch of options is being fetched. While it emits `true`, the options list is replaced by the spinner. |
| placeholder | string | 'SEARCH.FILTER.ACTIONS.ADD_OPTION' | Placeholder which should be displayed in input. |
| compareOption | (option1: AutocompleteOption, option2: AutocompleteOption) => boolean | | Function which is used to selected options with all options so it allows to detect which options are already selected. |
| formatChipValue | (option: string) => string | | Function which is used to format custom typed options. |
| field | `string` | Field to apply the query to. Required value. See [Supported fields](#supported-fields) for the values that enable dynamically fetched options |
| label | `string` | Label displayed for the autocomplete input |
| autocompleteOptions | `AutocompleteOption[]` | Predefined options for autocomplete |
| allowOnlyPredefinedValues | `boolean` | Specifies whether the input values should only be from predefined |
| allowUpdateOnChange | `boolean` | Enable/Disable the update fire event when text has been changed. By default is true |
| hideDefaultAction | `boolean` | Show/hide the widget actions. By default is false |
### Supported fields
Besides using static `autocompleteOptions`, the `field` value can be set to one of the following to fetch options dynamically from the repository as the user types:
| `SITE` | Available sites (plus any predefined `autocompleteOptions`) |
| `ANCESTOR` | Folders matching the typed name (parent folder search) |
While a batch of options is being fetched for any of these fields, a loading spinner is shown inside the autocomplete panel until the results arrive. Only the results of the latest request are applied, so quickly changing the input does not display stale options.
## Details
This component allows the user to choose filter options for the search query.
See the [Search Chip Autocomplete Input component](search-chip-autocomplete-input.component.md) for more details.
### Parent folder search
Set `field` to `ANCESTOR` to let the user search for and select a parent folder to scope the search to. The following example also uses `label` to set the input label:
@@ -46,9 +46,9 @@ Implements a [search widget](../../../lib/content-services/src/lib/search/models
| field | string | Field to apply the query fragment to. Required value |
| pattern | string | Regular expression pattern to restrict the format of the input text |
| placeholder | string | Text displayed in the widget when the input string is empty |
| searchSuffix | string | Text to append always in the search of a string |
| searchPrefix | string | Text to prepend always in the search of a string |
| allowUpdateOnChange | `boolean` | Enable/Disable the update fire event when text has been changed. By default is true. |
| searchSuffix | string | Text to append in the search of a string. Only applied when wildcard matching is enabled (the `search-wildcards-enabled` app config flag, default `true`). |
| searchPrefix | string | Text to prepend in the search of a string. Only applied when wildcard matching is enabled (the `search-wildcards-enabled` app config flag, default `true`). |
| allowUpdateOnChange | `boolean` | Enable/Disable firing the search update when the text changes. Defaults to `false`; when disabled the search runs only when the user submits the value. |
| hideDefaultAction | boolean | Show/hide the widget actions. By default is false. |
@@ -34,7 +33,6 @@ Shows the nodes in tree structure, each node containing children is collapsible/
| emptyContentTemplate | [`TemplateRef`](https://angular.io/api/core/TemplateRef)`<any>` | | [TemplateRef](https://angular.io/api/core/TemplateRef) to provide empty template when no nodes are loaded |
| expandIcon | `string` | "chevron_right" | Icon shown when node has children and is collapsed. By default set to chevron_right |
| loadMoreSuffix | `string` | | Load more suffix for load more button |
| nodeActionsMenuTemplate | [`TemplateRef`](https://angular.io/api/core/TemplateRef)`<any>` | | [TemplateRef](https://angular.io/api/core/TemplateRef) to provide context menu items for context menu displayed on each row |
| selectableNodes | `boolean` | false | Variable defining if tree nodes should be selectable. By default set to false |
| stickyHeader | `boolean` | false | Variable defining if tree header should be sticky. By default set to false |
| contextMenuOptions | `any[]` | | Array of context menu options which should be displayed for each row. |
@@ -88,7 +86,6 @@ First step is to provide necessary input value.
-_pagination:_ [`PaginationModel`](../../../lib/core/src/lib/models/pagination.model.ts) - Specifies how to paginate the results
-_filters:_`string[]` - (Optional) Specifies additional filters to apply (joined with **AND**)
-_includeFields:_`string[]` - List of data field names to include in the results
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/NodePaging.md)`>` - List of nodes for the recently used files
-_question:_ [`QuestionRequest`](../../../lib/js-api/src/api/content-rest-api/docs/SearchAiApi.md#questionrequest) - The question to ask.
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`QuestionModel`](../../../lib/js-api/src/api/content-rest-api/docs/SearchAiApi.md#questionmodel)`>` - QuestionModel object containing information about questions.
| userQuery | `string` | The raw query string typed by the user. Setting it stores the value, records it in `filterRawParams` and recomputes `parsedQuery` according to the current `searchMode`. |
| parsedQuery | `string` (read-only) | The query derived from `userQuery`. In `regular` mode the user terms are expanded against the configured fields (see `app:fields`) and optionally wildcarded; in `formula` mode it is identical to `userQuery`. |
| searchMode | `'regular' \| 'formula'` | Controls how `userQuery` is turned into `parsedQuery`. `regular` (default) parses the user input into a field query; `formula` uses the user input verbatim as an AFTS expression. |
| selectedConfigurationId | `string` | Id of the currently active search configuration. Setting it also records the value in `filterRawParams`. |
| encodedQuery | `string` (read-only) | The Base64-encoded `filterRawParams`, produced by `encodeQuery()` and written to the `q` route query parameter. |
| wildcardsEnabled | `boolean` (read-only) | Reads the `search-wildcards-enabled` app config flag (default `true`). When enabled, query terms are suffixed with `*` so partial matches are returned. |
### Methods
-**addFilterQuery**(query: `string`)<br/>
@@ -25,9 +36,10 @@ Stores information from all the custom search and faceted search widgets, compil
-**Returns**`SearchRequest` - The finished query
-**encodeQuery**()<br/>
Encodes query shards stored in `filterRawParams` property.
Builds and executes the current query, then emits the result on the `executed` stream.
-_updateQueryParams:_`boolean` - (Optional) When `true` (default) the encoded query is written to the `q` route query parameter. Pass `false` to execute without updating the URL.
-_queryBody:_`SearchRequest` - (Optional) Pre-built query to execute instead of building one from the current state.
Resets the query builder back to the default search configuration.
-_withNavigate:_`boolean` - (Optional) When `true`, clears the `q` route query parameter while resetting. Defaults to `false`.
-_resetUserQuery:_`boolean` - (Optional) When `true` (default), the `userQuery` and its parsed form are cleared. Pass `false` to keep the current user query while resetting the rest of the options.
Switches the active search configuration to the one matching the supplied id (only relevant when multiple configurations are provided).
-_id:_`string` - Id of the configuration to select
-_resetFilters:_`boolean` - (Optional) When `true` (default), the current search options are reset before applying the new configuration. Pass `false` to keep them.
-_shouldExecute:_`boolean` - (Optional) When `true` (default), the query is executed immediately after switching configuration.
## Details
@@ -127,10 +146,6 @@ You can use custom widgets to populate and edit the following parts of the resul
To run a search, build the query state (for example by setting `userQuery` or by letting a
search widget update `queryFragments`) and then call `execute()`. The result is delivered
through the `executed` stream.
```ts
this.queryBuilder.userQuery='invoice';
voidthis.queryBuilder.execute();
```
> **Note:** Earlier versions exposed an `updated` stream and an `update()` method that built the
> query and emitted it so that a subscriber could call `execute()`. Both have been removed; build
> the query state and call `execute()` directly instead.
### Search modes
The builder supports two search modes, selected through the `searchMode` property:
-**regular** (default) - the text in `userQuery` is treated as user input and parsed into a
field query. The query is split into terms, each term is matched against the fields listed in
the `app:fields` search configuration entry (falling back to `cm:name`), and a `*` wildcard is
appended when wildcards are enabled. Bare `AND`/`OR` words are preserved as operators.
-**formula** - the text in `userQuery` is used verbatim as an [AFTS](https://docs.alfresco.com/content-services/latest/develop/search-api/) expression, allowing callers that already build their own query syntax to bypass parsing.
> **Note:** From ADF 3.0.0, the query contains the `"facetFormat": "V2"` parameter so that all the responses have the same structure whether they come from search queries containing facetFields, facetQueries, grouped facetQueries or facetIntervals.
@@ -14,9 +14,8 @@ Reusable header for Alfresco applications.
```html
<adf-layout-header
title="title"
logo="logo.png"
logo="logo.svg"
[redirectUrl]="'/home'"
color="primary"
(clicked)=toggleMenu($event)>
</adf-layout-header>
```
@@ -38,7 +37,7 @@ body of the element:
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| color | [`ThemePalette`](https://github.com/angular/components/blob/master/src/material/core/common-behaviors/color.ts) | | Background color for the header. It can be any hex color code or one of the Material theme colors: 'primary', 'accent' or 'warn'. |
| backgroundColor | [`string`] | Background color for the header. It can be any hex color code or CSS variable. |
| expandedSidenav | `boolean` | true | expandedSidenav: Toggles the expanded state of the component. |
| logo | `string` | | Path to an image file for the application logo. |
| position | `string` | "start" | The side of the page that the drawer is attached to (can be 'start' or 'end') |
@@ -58,5 +57,5 @@ body of the element:
## Details
This component displays a customizable header that can be reused. Use the input properties to
configure the left side (title, button) and the primary color of the header. The right part of the
configure the left side (title, button) and the background color of the header. The right part of the
header can contain other components which are transcluded in the header component.
@@ -27,6 +27,21 @@ The main purpose of the [Notification history component](../../core/components/n
| maxNotifications | `number` | 5 | Maximum number of notifications to display. The rest will remain hidden until load more is clicked |
| menuPositionX | [`MenuPositionX`](https://github.com/angular/components/blob/master/src/material/menu/menu-positions.ts) | "after" | Custom choice for opening the menu at the bottom. Can be `before` or `after`. |
| menuPositionY | [`MenuPositionY`](https://github.com/angular/components/blob/master/src/material/menu/menu-positions.ts) | "below" | Custom choice for opening the menu at the bottom. Can be `above` or `below`. |
| badgeSize | [`MatBadgeSize`](https://v19.material.angular.dev/components/badge/api#MatBadgeSize) | `small` | Badge size. Can be `small`, `medium` or `large`. |
### App config
You can set a default badge size in `app.config.json`:
```json
{
"notification":{
"badgeSize":"medium"
}
}
```
The `notification.badgeSize` value is applied on init when the `badgeSize` input is not set explicitly on the component.
@@ -19,7 +19,6 @@ Simple container for headers, titles, actions and breadcrumbs.
- [Properties](#properties)
- [Details](#details)
- [Dropdown menu](#dropdown-menu)
- [Custom color](#custom-color)
- [See also](#see-also)
## Basic Usage
@@ -74,7 +73,6 @@ pushed to the right by a spacer:
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| color | [`ThemePalette`](https://github.com/angular/components/blob/master/src/material/core/common-behaviors/color.ts) | | Toolbar color. Can be changed to empty value (default), `primary`, `accent` or `warn`. |
| title | `string` | "" | Toolbar title. |
## Details
@@ -116,21 +114,6 @@ when you click the menu button:

### Custom color
Besides the default color you can use 'primary', 'accent', or 'warn' values:
You might also want to change colors to follow your application's color
| actionsTemplate | `TemplateRef<any>` | | Inserts a template styled on the left. Should be used for additional `mat-button` style buttons. (optional) |
| actionsTemplate | `TemplateRef<unknown>` | | Inserts a template styled on the left. Should be used for additional `mat-button` style buttons. (optional) |
@@ -50,8 +50,10 @@ Contains the value and metadata for a field of a [`Form`](../../../lib/process-s
| numberOfColumns | number | 1 | Number of columns defined by a container field |
| fields | [`FormFieldModel`](../../core/models/form-field.model.md)\[] | \[] | Fields contained within a container field |
| columns | [`ContainerColumnModel`](../../../lib/core/src/lib/form/components/widgets/core/container-column.model.ts)\[] | \[] | Column definitions for a container field |
| rows | [`ContainerRowModel`](../../../lib/core/src/lib/form/components/widgets/core/container-row.model.ts)\[] | \[] | Row definitions for a repeatable section field |
| emptyOption | [`FormFieldOption`](../../../lib/core/src/lib/form/components/widgets/core/form-field-option.ts) | | Dropdown menu item to use when no option is chosen |
| validationSummary | string | | Error/information message added during field validation (see [`FormFieldValidator`](../../../lib/core/src/lib/form/components/widgets/core/form-field-validator.ts) interface) |
| validationSummary | [`ErrorMessageModel`](../../../lib/core/src/lib/form/components/widgets/core/error-message.model.ts) | | Error/information message added during field validation (see [`FormFieldValidator`](../../../lib/core/src/lib/form/components/widgets/core/form-field-validator.ts) interface) |
| validationSummaryChanges$ | Observable<[`ErrorMessageModel`](../../../lib/core/src/lib/form/components/widgets/core/error-message.model.ts)> | | Replays the current validation summary to subscribers and emits the completed summary after each validation |
## Details
@@ -95,6 +97,17 @@ The [REST Call Task 101](https://community.alfresco.com/community/bpm/blog/2016/
tutorial on the [APS community site](https://community.alfresco.com/community/bpm)
contains full details about how the REST calls work, along with a worked example.
### Repeatable sections
Repeatable section fields (`type: 'repeatable-section'`) support an `initialNumberOfRows` parameter in `params`.
Setting `initialNumberOfRows` to `0` is valid: the section starts with no runtime rows and users add rows via the **Add row** action.
When no rows exist, `columns` holds a design-time column template (used by form editors and form-rules).
Template fields are bound to the form for rendering but are marked as templates and do not write to `form.values`.
No row data is written to `form.values` until the user adds a row or saved values are loaded from the server.
If saved values are present on the field (`value` array), row count is derived from `value.length` (subject to `maxNumberOfRows`), regardless of `initialNumberOfRows`.
# [Decimal Number Pipe](../../../lib/core/src/lib/pipes/decimal-number.pipe.ts "Defined in decimal-number.pipe.ts")
# Decimal Number Pipe
Transforms a number to have a certain amount of digits in its integer part and also in its decimal part.
@@ -15,7 +15,7 @@ Transforms a number to have a certain amount of digits in its integer part and a
| Name | Type | Default value | Description |
| ---- | ---- | ------------- | ----------- |
| digitsInfo | [`DecimalNumberModel`](../../../lib/core/src/lib/models/decimal-number.model.ts) | | A format to apply to the date value. [Date Pipe Formats.](https://angular.io/api/common/DatePipe#custom-format-options) |
| digitsInfo | `DecimalNumberModel` | | A format to apply to the date value. [Date Pipe Formats.](https://angular.io/api/common/DatePipe#custom-format-options) |
| locale | string | 'en-US' | A locale id for the locale format rules to use. |
## Details
@@ -30,11 +30,11 @@ This pipe transforms a given number so it follows the set configuration for the
}
```
You can also overwrite this config by passing a [`DecimalNumberModel`](../../../lib/core/src/lib/models/decimal-number.model.ts) as an argument for this pipe.
You can also overwrite this config by passing a `DecimalNumberModel` as an argument for this pipe.
The number can be also localized so it applies commas and dots in the right place depending on the locale id in use.
- [Creating and updating nodes](#creating-and-updating-nodes)
- [Deleting and restoring nodes](#deleting-and-restoring-nodes)
- [Checking out nodes](#checking-out-nodes)
- [See also](#see-also)
## Class members
@@ -98,6 +99,21 @@ Accesses and manipulates ACS document nodes using their node IDs.
-_nodeId:_`string` - ID of the target node
-_jobId:_`string` - ID of the job started by the `initiateFolderSizeCalculation` request
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`SizeDetailsEntry`](../../../lib/js-api/src/api/content-rest-api/docs/NodesApi.md#sizedetailsentry)`>` - Details of the folder
-_opts:_`{ where?: string; includeSource?: boolean;} & NodesIncludeQuery & ContentPagingQuery` - additional options that API can take
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodeAssociationPaging`](../../../lib/js-api/src/api/content-rest-api/docs/NodesApi.md#NodeAssociationPaging)`>` - List of node's parents.
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodeEntry`](https://github.com/Alfresco/alfresco-ng2-components/blob/develop/lib/js-api/src/api/content-rest-api/docs/NodeEntry.md)`>` - The working copy node
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodeEntry`](https://github.com/Alfresco/alfresco-ng2-components/blob/develop/lib/js-api/src/api/content-rest-api/docs/NodeEntry.md)`>` - The original (unlocked) node
## Details
@@ -155,6 +171,12 @@ and
pages in the Alfresco JS API for further details and options. Note that you can also use the
[Deleted Nodes Api service](deleted-nodes-api.service.md) get a list of all items currently in the trashcan.
### Checking out nodes
Use `checkoutNode` to lock a file node for offline editing. This creates a private working copy and locks the original node so other users cannot modify it. On success, the Observable emits the working copy `NodeEntry`.
Use `cancelCheckoutNode` to discard the working copy and unlock the original. You can pass either the working copy node ID or the original node ID. On success, the Observable emits the original (unlocked) `NodeEntry`.
## See also
- [Deleted nodes api service](deleted-nodes-api.service.md)
Batch variant of getProcessesAndTasksOnContent. Accepts multiple source document ids in one request (up to 500) and returns the related processes and tasks for all of them.
-_sourceIds:_`string[]` - ids of the documents to query process participation for (up to 500)
-_source:_`string` - source of the documents that workflows or tasks have been started with
-_size:_`number` - (Optional) size of the entries to get
Batch variant of `getProcessesAndTasksOnContent`. Accepts multiple source document ids in one request (up to 500) and returns the related processes and tasks for all of them.
Gets a list of nodes that match the given search criteria.
-_term:_`string` - Term to search for
-_options:_ [`SearchOptions`](../../../lib/content-services/src/lib/search/services/search.service.ts) - (Optional) Options for delivery of the search results
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/content-rest-api/docs/NodePaging.md)`>` - List of nodes resulting from the search
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodePaging`](../../../lib/js-api/src/api/content-rest-api/model/nodePaging.ts)`>` - List of nodes resulting from the search
-_maxResults:_`number` - Maximum number of items in the list of results
-_skipCount:_`number` - Number of higher-ranked items to skip over in the list
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ResultSetPaging`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/search-rest-api/docs/ResultSetPaging.md)`>` - List of search results
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ResultSetPaging`](../../../lib/js-api/src/api/search-rest-api/docs/ResultSetPaging.md)`>` - List of search results
Performs a search with its parameters supplied by a SearchRequest object.
-_queryBody:_`SearchRequest` - Object containing the search parameters
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ResultSetPaging`](https://github.com/Alfresco/alfresco-js-api/blob/develop/src/api/search-rest-api/docs/ResultSetPaging.md)`>` - List of search results
-_shouldEmit:_`boolean` - Whether the `dataLoaded` event should be emitted with the results. Set to `false` for auxiliary searches (for example populating autocomplete options) that should not notify the main results subscribers. Defaults to `true`
-**Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ResultSetPaging`](../../../lib/js-api/src/api/search-rest-api/docs/ResultSetPaging.md)`>` - List of search results
@@ -27,6 +27,7 @@ Lists all available process filters and allows to select a filter.
| appName | `string` | "" | (required) The application name |
| filterParam | `UserTaskFilterRepresentation` | | (optional) The filter to be selected by default |
| showIcons | `boolean` | false | (optional) Toggles showing an icon by the side of each filter |
| useBatchedCounters | `boolean` | false | Get all the filter counters with one call to `POST /query/v1/count` (needs Activiti 8.7.0). Turn it on for both filter components. |
| appName | `string` | "" | Display filters available to the current user for the application with the specified name. |
| filterParam | `FilterParamsModel` | | Parameters to use for the task filter cloud. If there is no match then the default filter (the first one in the list) is selected. |
| showIcons | `boolean` | false | Toggles display of the filter's icons. |
| useBatchedCounters | `boolean` | false | Get all the filter counters with one call to `POST /query/v1/count` (needs Activiti 8.7.0). Turn it on for both filter components. |
Title:Changelog for alfresco-ng2-components v8.3.1
---
# Changelog
- [68b1b98c83](git@github.com:Alfresco/alfresco-ng2-components/commit/68b1b98c83) AAE-42904 Escape html in evaluated fields and variables for rich-text display widget (#11718)
- [3535fa3d89](git@github.com:Alfresco/alfresco-ng2-components/commit/3535fa3d89) ACS-11224 Migrate upload components to Angular control flow (#11691)
- [68d174c3e6](git@github.com:Alfresco/alfresco-ng2-components/commit/68d174c3e6) [ACS-11033] add node id field to ai answer references (#11690)
- [4cc56421ee](git@github.com:Alfresco/alfresco-ng2-components/commit/4cc56421ee) AAE-42658 Remove check for outcome.id as name based outcomes are valid (#11685)
- [358367bcb1](git@github.com:Alfresco/alfresco-ng2-components/commit/358367bcb1) AAE-42643 Fix long error messages overlapping with icon
- [52ad50fbc7](git@github.com:Alfresco/alfresco-ng2-components/commit/52ad50fbc7) refactor: update PDF viewer component imports and types for better compatibility (#11686)
- [2a0d5df2d5](git@github.com:Alfresco/alfresco-ng2-components/commit/2a0d5df2d5) [ACS-11173] Initial set of rules for Copilot review (#11683)
- [7405b2d2e4](git@github.com:Alfresco/alfresco-ng2-components/commit/7405b2d2e4) fix pdf import for the Viewer (#11684)
- [7a3650e6a7](git@github.com:Alfresco/alfresco-ng2-components/commit/7a3650e6a7) [ACS-11204] Fix: Duplicated site name is displayed instead of id when there are two libraries with the same name (#11682)
- [de34579038](git@github.com:Alfresco/alfresco-ng2-components/commit/de34579038) AAE-42156 Update text and multiline fields to show custom regex validation message. (#11670)
- [2f8d8c2007](git@github.com:Alfresco/alfresco-ng2-components/commit/2f8d8c2007) chore: update ESLint and cspell configurations to ignore story files (#11681)
- [303a9efb3e](git@github.com:Alfresco/alfresco-ng2-components/commit/303a9efb3e) chore: eslint fixes for @typescript-eslint/no-explicit-any (#11672)
- [f1f2000db8](git@github.com:Alfresco/alfresco-ng2-components/commit/f1f2000db8) AAE-42525 Updated condition for mat-error (#11669)
- [5935fbfb5b](git@github.com:Alfresco/alfresco-ng2-components/commit/5935fbfb5b) [ACS-11153] Changed eslint rule for ng-reflect after copilot suggestion in ACA (#11673)
- [57b8fe7174](git@github.com:Alfresco/alfresco-ng2-components/commit/57b8fe7174) [ACS-11153] Corrected eslint rule for ng-reflect (#11671)
- [cfb9a505e4](git@github.com:Alfresco/alfresco-ng2-components/commit/cfb9a505e4) [ACS-10847] Location filter breaks the page when user value used (#11667)
- [e5471c8741](git@github.com:Alfresco/alfresco-ng2-components/commit/e5471c8741) Add missing input type (#11668)
- [1baddb2b37](git@github.com:Alfresco/alfresco-ng2-components/commit/1baddb2b37) AAE-42291 Double-click to copy to clipboard does not work on disabled/read-only fields in card-view-textitem (#11656)
- [e48950b200](git@github.com:Alfresco/alfresco-ng2-components/commit/e48950b200) [MNT-25123] Fixed incorrectly displayed some annotations (#11662)
- [4581f714d7](git@github.com:Alfresco/alfresco-ng2-components/commit/4581f714d7) [ACS-11153] remove the usage of ng reflect from the unit tests (#11666)
- [3f542d99ba](git@github.com:Alfresco/alfresco-ng2-components/commit/3f542d99ba) Migrate to @angular-eslint/prefer-inject and @typescript-eslint/prefer-readonly (#11665)
- [f8fa996b04](git@github.com:Alfresco/alfresco-ng2-components/commit/f8fa996b04) AAE-33828 Fix for the runtime errors on data-table should be handled (#11639)
- [93fc7c166c](git@github.com:Alfresco/alfresco-ng2-components/commit/93fc7c166c) AAE-41605 Add ability to filter by linked processes (#11664)
- [b6a6c1bc86](git@github.com:Alfresco/alfresco-ng2-components/commit/b6a6c1bc86) [MNT-24175]: fixes non node values handling (#11641)
- [5850dafca7](git@github.com:Alfresco/alfresco-ng2-components/commit/5850dafca7) [ACS-11158]: removes mat selectors for tooltips (#11659)
- [fafa5d6c41](git@github.com:Alfresco/alfresco-ng2-components/commit/fafa5d6c41) ACS-11160: improve context menu overlay service implementation (#11661)
- [84affe9f37](git@github.com:Alfresco/alfresco-ng2-components/commit/84affe9f37) ACS-11155: update conditional checks to use optional chaining (#11658)
- [40b15689d5](git@github.com:Alfresco/alfresco-ng2-components/commit/40b15689d5) AAE-21047 Get rid of enums (#11643)
- [d274d62d73](git@github.com:Alfresco/alfresco-ng2-components/commit/d274d62d73) AAE-40604 Fix edge case for REST/Variable for dropdown showing required message (#11638)
- [1fa683e2a9](git@github.com:Alfresco/alfresco-ng2-components/commit/1fa683e2a9) Fix for ACA upstream (#11642)
- [faa22f2fde](git@github.com:Alfresco/alfresco-ng2-components/commit/faa22f2fde) Fix for ACA upstream (#11640)
- [4df5b9282c](git@github.com:Alfresco/alfresco-ng2-components/commit/4df5b9282c) [MNT-25478] Expose list parents method in nodes api service (#11622)
- [30afd2d863](git@github.com:Alfresco/alfresco-ng2-components/commit/30afd2d863) AAE-42151 [FE - Studio Admin] Improve types for Integration Contexts (#11633)
- [0b805f3e9b](git@github.com:Alfresco/alfresco-ng2-components/commit/0b805f3e9b) Revert "AAE-40604 Fix case when rest/variable are okay and dropdown is requir…" (#11634)
- [4d99262ba3](git@github.com:Alfresco/alfresco-ng2-components/commit/4d99262ba3) AAE-41699 Evaluate variables in form display text (#11620)
- [14899931d2](git@github.com:Alfresco/alfresco-ng2-components/commit/14899931d2) AAE-41742 Add processRelatedTo payload for processes list (#11632)
- [283b996063](git@github.com:Alfresco/alfresco-ng2-components/commit/283b996063) [MNT-25541] PDFs containing JP2 images (JPEG 2000) cannot be displayed in ADW viewer (#11618)
- [5df193b255](git@github.com:Alfresco/alfresco-ng2-components/commit/5df193b255) [MNT-25123] pdf annotations incorrect and or not visible (#11621)
- [dcf133b37e](git@github.com:Alfresco/alfresco-ng2-components/commit/dcf133b37e) [MNT-25410] ADW - Saved Searches can load the wrong search set, and t… (#11599)
- [31bafd718e](git@github.com:Alfresco/alfresco-ng2-components/commit/31bafd718e) AAE-40604 Fix case when rest/variable are okay and dropdown is required and not selected (#11619)
- [0c50bfd4e3](git@github.com:Alfresco/alfresco-ng2-components/commit/0c50bfd4e3) [ACS-10957] new locators for errors in ACC dialogs (#11617)
- [e859923541](git@github.com:Alfresco/alfresco-ng2-components/commit/e859923541) [ACS-10304] KN: personal files: Column resizing available via mouse but not accessible via keyboard (#11616)
- [6ff7ce4add](git@github.com:Alfresco/alfresco-ng2-components/commit/6ff7ce4add) [MNT-25501]: APS - Process instance pagination failure in ADF due to conflicting parameters sent from ADF to APS API (#11615)
- [302b3e18ec](git@github.com:Alfresco/alfresco-ng2-components/commit/302b3e18ec) AAE-40604 Fix for Dropdown required validation message is not present (#11600)
- [b74ffc81f4](git@github.com:Alfresco/alfresco-ng2-components/commit/b74ffc81f4) [ACS-10247] a11y: SR not announce Start/End Date as required fields (#11613)
- [3e9b5a097c](git@github.com:Alfresco/alfresco-ng2-components/commit/3e9b5a097c) [ACS-10193] Other A11y My Libraries Link (#11587)
- [ba3d9d5be4](git@github.com:Alfresco/alfresco-ng2-components/commit/ba3d9d5be4) [ACS-7768] Styling fixes for permission management page (#11597)
- [8cda30db45](git@github.com:Alfresco/alfresco-ng2-components/commit/8cda30db45) [ACS-10203]: Checkbox "Select All" has no visible label (#11594)
- [1780aa9663](git@github.com:Alfresco/alfresco-ng2-components/commit/1780aa9663) [ACS-10281] a11y fix: Approve step folder control is focusable twice (#11589)
- [3bba02264a](git@github.com:Alfresco/alfresco-ng2-components/commit/3bba02264a) [ACS-10241]: Personal files: Column sorting state and role not communicated by buttons (parially reverted to align with hxp) (#11598)
- [4987bbadef](git@github.com:Alfresco/alfresco-ng2-components/commit/4987bbadef) [ACS-10302] Add aria-live to selected aspects counter (#11593)
- [9cb8b962ae](git@github.com:Alfresco/alfresco-ng2-components/commit/9cb8b962ae) [ACS-10213] Libraries: Radio buttons for Public, Private, and Moderated lack a grouped label (#11590)
- [6bb78f9d26](git@github.com:Alfresco/alfresco-ng2-components/commit/6bb78f9d26) [ACS-10274] sr personal files sr announces white heavy check mark in entitlements row of repository section (#11595)
- [2b79f18d79](git@github.com:Alfresco/alfresco-ng2-components/commit/2b79f18d79) [ACS-10247] a11y fix: SR announces Start/End Date fields incorrectly in date popup (#11592)
- [4a6e9fc5d6](git@github.com:Alfresco/alfresco-ng2-components/commit/4a6e9fc5d6) [ACS-10241]: SR: Personal files: Column sorting state and role not communicated by buttons (#11591)
- [6131bf3890](git@github.com:Alfresco/alfresco-ng2-components/commit/6131bf3890) AAE-38626 Reload columns on appname change (#11560)
- [15806d7c9f](git@github.com:Alfresco/alfresco-ng2-components/commit/15806d7c9f) HXIDP-5181 Allow form text fields to render custom field status content (#11523)
- [42c2f78baf](git@github.com:Alfresco/alfresco-ng2-components/commit/42c2f78baf) Fixes icon button color in array item (#11588)
- [1028df91da](git@github.com:Alfresco/alfresco-ng2-components/commit/1028df91da) [ACS-7768] ADF Form fields cleanup (#11484)
- [1c59b2fb15](git@github.com:Alfresco/alfresco-ng2-components/commit/1c59b2fb15) [ACS-10307] SR: Personal files: No confirmation announced when creating new folder or document (#11549)
- [198e18bef5](git@github.com:Alfresco/alfresco-ng2-components/commit/198e18bef5) [ACS-10239] Add aria hidden to visual separators (#11572)
- [1022e1e51f](git@github.com:Alfresco/alfresco-ng2-components/commit/1022e1e51f) [ACS-10276] Add proper title and aria label to chip remove button (#11569)
- [6927af4ec3](git@github.com:Alfresco/alfresco-ng2-components/commit/6927af4ec3) [ACS-10288] Aria label for user initials pipe (#11568)
- [3f01a92d67](git@github.com:Alfresco/alfresco-ng2-components/commit/3f01a92d67) AAE-34140 Asynchronous Forms - automatically populated value cannot be used in another task (#11574)
- [e78da9dea0](git@github.com:Alfresco/alfresco-ng2-components/commit/e78da9dea0) ACS-8395: remove old and unused search picker components (#11573)
- [a3c309c676](git@github.com:Alfresco/alfresco-ng2-components/commit/a3c309c676) AAE-41613 Hiding tooltip card on click (#11571)
- [6eaaff33bb](git@github.com:Alfresco/alfresco-ng2-components/commit/6eaaff33bb) [ACS-10289] No notifications info is no longer mat menu item (#11566)
- [22478f8097](git@github.com:Alfresco/alfresco-ng2-components/commit/22478f8097) Update Storybook & Regenerate lockfile [ci:force][affected:*] (#11567)
- [b04e1ca081](git@github.com:Alfresco/alfresco-ng2-components/commit/b04e1ca081) [ACS-10323] Fix not announced aria-label (#11553)
- [0edb04eeb2](git@github.com:Alfresco/alfresco-ng2-components/commit/0edb04eeb2) [ACS-10301] Add aria-hidden to a decorative icon (#11564)
- [5c536079c9](git@github.com:Alfresco/alfresco-ng2-components/commit/5c536079c9) Refactor alfresco-viewer component tests to use [adf-icon] directive for icons (#11565)
- [6c4bdf0c5c](git@github.com:Alfresco/alfresco-ng2-components/commit/6c4bdf0c5c) Exclude adf-icon from linting (#11563)
- [f5c696ed7e](git@github.com:Alfresco/alfresco-ng2-components/commit/f5c696ed7e) AAE-41553 Fix again crowdin exec from release workflow_call (#11562)
- [5cdcd97201](git@github.com:Alfresco/alfresco-ng2-components/commit/5cdcd97201) [ACS-10259] Add an option to reorder rows with keyboard (#11548)
- [670e77580d](git@github.com:Alfresco/alfresco-ng2-components/commit/670e77580d) AAE-41553 Fix crowdin exec from release workflow_call (#11561)
- [c81a64be79](git@github.com:Alfresco/alfresco-ng2-components/commit/c81a64be79) [ACS-10206]: setting haspopup after init (#11475)
- [506aeecdc2](git@github.com:Alfresco/alfresco-ng2-components/commit/506aeecdc2) [ACS-10280] Keyboard Navigation: Search: Unnecessary stops in the results table using the Tab key: (#11529)
- [5076862e07](git@github.com:Alfresco/alfresco-ng2-components/commit/5076862e07) AAE-41553 Fix CI validation on crowdin PRs (#11557)
- [934765f2f6](git@github.com:Alfresco/alfresco-ng2-components/commit/934765f2f6) [ACS-10304] KN: personal files: Column resizing available via mouse but not accessible via keyboard (#11525)
- [50913dd4e4](git@github.com:Alfresco/alfresco-ng2-components/commit/50913dd4e4) [ACS-10335] Corrected screen reader reading for between group in search date range component (#11534)
- [219f52a361](git@github.com:Alfresco/alfresco-ng2-components/commit/219f52a361) [ACS-6821] Adjust the search filter icon in document list (#11528)
- [4bf065561a](git@github.com:Alfresco/alfresco-ng2-components/commit/4bf065561a) [ACS-10313] KN: Personal Files: Row selection checkboxes are not accessible for keyboard and screen reader users (#11531)
- [17f9b3eeba](git@github.com:Alfresco/alfresco-ng2-components/commit/17f9b3eeba) ACS-8224 Make Multi Value Pipe internal (#11530)
- [08725100d8](git@github.com:Alfresco/alfresco-ng2-components/commit/08725100d8) [ACS-10331] Corrected columns visibility title (#11526)
- [304216b36b](git@github.com:Alfresco/alfresco-ng2-components/commit/304216b36b) AAE-41330 Unify adf-icon use in adf-core (#11527)
- [e01cd40b1f](git@github.com:Alfresco/alfresco-ng2-components/commit/e01cd40b1f) [ACS-10205]: Extends DataTableAdapter interface to handle focus for accessibility (#11506)
- [e44e00304a](git@github.com:Alfresco/alfresco-ng2-components/commit/e44e00304a) AAE-38334 Add link process payload (#11524)
- [236726b67c](git@github.com:Alfresco/alfresco-ng2-components/commit/236726b67c) AAE-40657 Support multiple integration contexts in task service (#11463)
- [8ed1f4d8df](git@github.com:Alfresco/alfresco-ng2-components/commit/8ed1f4d8df) [ACS-1882] Keyboard Navigation: Personal files: Wrong focus order when adding a comment in "Details" section (#11521)
- [8824331f3b](git@github.com:Alfresco/alfresco-ng2-components/commit/8824331f3b) [ACS-10884] Keyboard interactions for crop tool in image viewer (#11522)
- [716ce228ce](git@github.com:Alfresco/alfresco-ng2-components/commit/716ce228ce) ACS-8772: Migrate node tooltip to Angular signals (#11498)
- [d7c01d3558](git@github.com:Alfresco/alfresco-ng2-components/commit/d7c01d3558) Update Angular packages to version 19.2.18 [ci:force] (#11518)
- [572231bf49](git@github.com:Alfresco/alfresco-ng2-components/commit/572231bf49) AAE-41225 update typescript target to es2022 and fix FormService propagation (#11508)
- [0c3cdaa006](git@github.com:Alfresco/alfresco-ng2-components/commit/0c3cdaa006) [ACS-10335] Grouped input controls with radio buttons for search date range component (#11507)
- [c64c6e4f7e](git@github.com:Alfresco/alfresco-ng2-components/commit/c64c6e4f7e) [ACS-10242] - Personal files: Filter by Size popup announces entire c… (#11468)
- [d0b3faad6a](git@github.com:Alfresco/alfresco-ng2-components/commit/d0b3faad6a) [ACS-10201] Snackbar content is hidden and not announced by SR (#11504)
- [d2021b9ae9](git@github.com:Alfresco/alfresco-ng2-components/commit/d2021b9ae9) AAE-40714 fixing the filter cut issue on admin-hxp (#11499)
- [66911491e3](git@github.com:Alfresco/alfresco-ng2-components/commit/66911491e3) AAE-39182 Update (some) Angular packages to version 19.2.19
- [fe39b3c1bd](git@github.com:Alfresco/alfresco-ng2-components/commit/fe39b3c1bd) [AAE-40028] Added group/section validation skipping to cloud forms for workspace (#11466)
- [8c1118984d](git@github.com:Alfresco/alfresco-ng2-components/commit/8c1118984d) remove webpack and webpack cli [ci:force] (#11464)
- [21d6818de5](git@github.com:Alfresco/alfresco-ng2-components/commit/21d6818de5) ACS-10083 Fixes filters behavior with queryParams (#11426)
- [331b4459a8](git@github.com:Alfresco/alfresco-ng2-components/commit/331b4459a8) AAE-40359 Filter out service processes on start process (#11446)
- [7eb2034008](git@github.com:Alfresco/alfresco-ng2-components/commit/7eb2034008) AAE-40093 Support defining translations from code (#11442)
- [68ab5b1c16](git@github.com:Alfresco/alfresco-ng2-components/commit/68ab5b1c16) AAE-39923 Placholeder is formatted according to the enableFractions (#11441)
- [ec7ede3830](git@github.com:Alfresco/alfresco-ng2-components/commit/ec7ede3830) AAE-40544 Add ability to filter out subprocesses (#11445)
- [34a929ec47](git@github.com:Alfresco/alfresco-ng2-components/commit/34a929ec47) [AAE-40654] added space for label (#11443)
- [8c0d5fc8a1](git@github.com:Alfresco/alfresco-ng2-components/commit/8c0d5fc8a1) [ACS-10282] screen reader personal files perform actions empty state not announced by screen reader (#11444)
- [8fa3e6acdf](git@github.com:Alfresco/alfresco-ng2-components/commit/8fa3e6acdf) [MNT-25408]: updates changing search config logic; exposes stream for active filters (#11386)
- [6567c02220](git@github.com:Alfresco/alfresco-ng2-components/commit/6567c02220) AAE-40269 Cleanup deprecated global sass mixins (#11420)
- [9717a88818](git@github.com:Alfresco/alfresco-ng2-components/commit/9717a88818) [ACS-10226] Improve color contrast for better accessibility (#11429)
- [58591c67dc](git@github.com:Alfresco/alfresco-ng2-components/commit/58591c67dc) [ACS-10835] Add new param for recent filters in custom resources services (#11428)
- [ab0cb46065](git@github.com:Alfresco/alfresco-ng2-components/commit/ab0cb46065) AAE-40641 Upgarde Nx Workspace to latest (v22) (#11440)
- [de62fe181a](git@github.com:Alfresco/alfresco-ng2-components/commit/de62fe181a) [MNT-24950] Preview a file from APS doesn't work in ADW (#11439)
- [cc053a76ae](git@github.com:Alfresco/alfresco-ng2-components/commit/cc053a76ae) AAE-40540 fixing tab misplacement issue on ADW (#11427)
- [10eae07cc0](git@github.com:Alfresco/alfresco-ng2-components/commit/10eae07cc0) [AAE-39923] provide transformed placeholder if possible (#11422)
- [4dab69d4dc](git@github.com:Alfresco/alfresco-ng2-components/commit/4dab69d4dc) Revert "[ACS-10281] a11y fix - Approve step folder control is focusable twice…" (#11424)
- [e6fe929b02](git@github.com:Alfresco/alfresco-ng2-components/commit/e6fe929b02) [ACS-10260] Add required format to search date range (#11423)
- [40df22b576](git@github.com:Alfresco/alfresco-ng2-components/commit/40df22b576) AAE-40028 Added improvement to ignore field validation if it is inside a group/section that is hidden (#11362)
- [f379d99474](git@github.com:Alfresco/alfresco-ng2-components/commit/f379d99474) [ACS-10281] a11y fix - Approve step folder control is focusable twice causing duplicate screen reader (#11385)
- [f317374a2e](git@github.com:Alfresco/alfresco-ng2-components/commit/f317374a2e) [ACS-10306] Proper alt for user or group icons (#11403)
- [a9efe36e5f](git@github.com:Alfresco/alfresco-ng2-components/commit/a9efe36e5f) AAE-40427 Replace shelljs with native node api (#11404)
- [c5f3008301](git@github.com:Alfresco/alfresco-ng2-components/commit/c5f3008301) [MNT-25276] sorting using sorting key configuration is not correctly saved in localstorage (#11383)
- [57090bd76e](git@github.com:Alfresco/alfresco-ng2-components/commit/57090bd76e) Stabilize data conversion methods for rows and columns in datatable (#11398)
- [2009a4ec27](git@github.com:Alfresco/alfresco-ng2-components/commit/2009a4ec27) AAE-40356 Fix misaligned datetime card view element (#11391)
- [dbdc402756](git@github.com:Alfresco/alfresco-ng2-components/commit/dbdc402756) AAE-40078 Fix visibility condition not working (#11389)
- [f63f0a85c0](git@github.com:Alfresco/alfresco-ng2-components/commit/f63f0a85c0) [ACS-10765] Enable workflow_dispatch for release workflow (#11390)
- [3031ec1f66](git@github.com:Alfresco/alfresco-ng2-components/commit/3031ec1f66) AAE-39988 Dropdown conditional not working for repeatable section (#11360)
- [c68f638992](git@github.com:Alfresco/alfresco-ng2-components/commit/c68f638992) AAE-39796 Reduce customizations of card view fields (#11373)
- [eff64284e9](git@github.com:Alfresco/alfresco-ng2-components/commit/eff64284e9) Revert "AAE-39923 Placeholder transformed with currency based on locale (#11342)" (#11370)
- [9a6cd813de](git@github.com:Alfresco/alfresco-ng2-components/commit/9a6cd813de) ACS-10745 File size columns not translating the tooltips (#11368)
- [03f67c861f](git@github.com:Alfresco/alfresco-ng2-components/commit/03f67c861f) [ACS-10740] Adjust Karma and Jest config (#11365)
- [58a25fe19e](git@github.com:Alfresco/alfresco-ng2-components/commit/58a25fe19e) AAE-40136 Migrate locale settings to signals (#11361)
- [2f5139df73](git@github.com:Alfresco/alfresco-ng2-components/commit/2f5139df73) fix post release version bump
- [9fd304b66d](git@github.com:Alfresco/alfresco-ng2-components/commit/9fd304b66d) post release version bump (#11366)
Title:Changelog for alfresco-ng2-components v8.4.1
---
# Changelog
- [af95723f30](https://github.com/Alfresco/alfresco-ng2-components/commit/af95723f30) [ACS-11589] [ACA] info drawer test-area does not show full text (#11816)
- [d70ae599c7](https://github.com/Alfresco/alfresco-ng2-components/commit/d70ae599c7) Fix security vulnerabilities in npm dependencies (#11815)
- [07c6a4d923](https://github.com/Alfresco/alfresco-ng2-components/commit/07c6a4d923) Remove jasmine-spec-reporter dependency from package.json and package-lock.json (#11814)
- [6fc8dda887](https://github.com/Alfresco/alfresco-ng2-components/commit/6fc8dda887) Remove mocha and jasmine-ajax dependencies (#11813)
- [48eb258311](https://github.com/Alfresco/alfresco-ng2-components/commit/48eb258311) AAE-44184 Colspan setting on form fields is ignored or not properly applied (#11800)
- [32850a0ce8](https://github.com/Alfresco/alfresco-ng2-components/commit/32850a0ce8) [MNT-25185] Display authority name instead of id if provided (#11809)
- [8a6bcac29e](https://github.com/Alfresco/alfresco-ng2-components/commit/8a6bcac29e) [ACS-11506]: moved aria-live region (#11808)
- [8ce0561ef5](https://github.com/Alfresco/alfresco-ng2-components/commit/8ce0561ef5) AAE-44086 Unify styling and coloring of errors in forms (#11797)
- [69a9dc1386](https://github.com/Alfresco/alfresco-ng2-components/commit/69a9dc1386) AAE-44002 Allow user input for date and datetime fields (#11791)
- [70a6f42649](https://github.com/Alfresco/alfresco-ng2-components/commit/70a6f42649) AAE-40741 Form rule `Validate form` doesn't do anything (#11788)
- [74252797b7](https://github.com/Alfresco/alfresco-ng2-components/commit/74252797b7) AAE-28918 Fix for start process button is enabled when required widgets are read only without value (#11781)
- [79871455f4](https://github.com/Alfresco/alfresco-ng2-components/commit/79871455f4) [ACS-10242] SR: Personal files: Filter by Size popup announces entire content instead of dialog title (#11782)
- [d7a8f03dbf](https://github.com/Alfresco/alfresco-ng2-components/commit/d7a8f03dbf) AAE-43749 Added date formatting according to locale (#11769)
- [a3e13da3a4](https://github.com/Alfresco/alfresco-ng2-components/commit/a3e13da3a4) [ACS-10280]: Keyboard Navigation: Search: Unnecessary stops in the results table using the Tab key (#11736)
- [565db01819](https://github.com/Alfresco/alfresco-ng2-components/commit/565db01819) [MNT-25635] Search filter autocomplete search for tags when input changes (#11780)
- [f321b74be0](https://github.com/Alfresco/alfresco-ng2-components/commit/f321b74be0) AAE-21162 Add deploymentCompletion property to ApplicationInstance model (#11784)
- [28fe6d3a76](https://github.com/Alfresco/alfresco-ng2-components/commit/28fe6d3a76) AAE-43710 Fix form field spacing misalignments (#11763)
- [d526d31425](https://github.com/Alfresco/alfresco-ng2-components/commit/d526d31425) AAE-34137 Fix for disabling `complete` button on the form after declining form confirmation dialog (#11766)
- [e97439f09b](https://github.com/Alfresco/alfresco-ng2-components/commit/e97439f09b) AAE-43391 Disable 'Start process' and 'Complete' when whitespace is entered into required form fields (#11760)
- [bdd4b687c6](https://github.com/Alfresco/alfresco-ng2-components/commit/bdd4b687c6) AAE-43290 updating the minor version for angular in ADF (#11752)
- [46989ae081](https://github.com/Alfresco/alfresco-ng2-components/commit/46989ae081) [ACS-11319] Move tree actions menu item buttons inside the component (#11749)
- [759d206302](https://github.com/Alfresco/alfresco-ng2-components/commit/759d206302) HXIDP-6471 Provide start process variables to custom screen (#11712)
- [a865372819](https://github.com/Alfresco/alfresco-ng2-components/commit/a865372819) [ACS-10267] Announce titles for repository info as headings (#11728)
- [2bab587876](https://github.com/Alfresco/alfresco-ng2-components/commit/2bab587876) [ACS-11205] Bring back removed getter (#11735)
- [e325ad3871](https://github.com/Alfresco/alfresco-ng2-components/commit/e325ad3871) AAE-39678 Apply visibility conditions if dependent field's value is changed with form rules (#11729)
- [a8ae3d3b4e](https://github.com/Alfresco/alfresco-ng2-components/commit/a8ae3d3b4e) AAE-42908 Evaluate expressions for rich-text-display list types (#11726)
- [c723e19b6d](https://github.com/Alfresco/alfresco-ng2-components/commit/c723e19b6d) AAE-46971 Update Supply Chain Review GH AW to latest (#11972)
- [bb6f9b1f3d](https://github.com/Alfresco/alfresco-ng2-components/commit/bb6f9b1f3d) AAE-46434 Fix disabled stying for people widgets (#11967)
- [7bb219e4dd](https://github.com/Alfresco/alfresco-ng2-components/commit/7bb219e4dd) AAE-46654 Fix - return empty string when no value is provided in card… (#11969)
- [70038bea26](https://github.com/Alfresco/alfresco-ng2-components/commit/70038bea26) AAE-46246 Format typed values in form display widgets v2 (#11952)
- [7d76d789b2](https://github.com/Alfresco/alfresco-ng2-components/commit/7d76d789b2) AAE-41418 Add process instance id input to task header cloud component (#11897)
- [a71cc84f11](https://github.com/Alfresco/alfresco-ng2-components/commit/a71cc84f11) AAE-46507 Next Task Endpoint (#11943)
- [34acdd20cf](https://github.com/Alfresco/alfresco-ng2-components/commit/34acdd20cf) Revert "AAE-46246 Format typed values in form display widgets (#11935)" (#11951)
- [f39b9167b8](https://github.com/Alfresco/alfresco-ng2-components/commit/f39b9167b8) AAE-46246 Format typed values in form display widgets (#11935)
- [aa2a357fb2](https://github.com/Alfresco/alfresco-ng2-components/commit/aa2a357fb2) AAE-46434 Fix read-only field styling on forms (#11928)
- [46b2d0380b](https://github.com/Alfresco/alfresco-ng2-components/commit/46b2d0380b) AAE-45774 Shorten invalid date error message (#11920)
- [274ddb3098](https://github.com/Alfresco/alfresco-ng2-components/commit/274ddb3098) AAE-46386 Set DependaBot cooldown for all ecosystems as 3d (#11947)
- [f602070f1e](https://github.com/Alfresco/alfresco-ng2-components/commit/f602070f1e) AAE-46388 Fix DependaBot config to ignore gh-aw-actions (#11946)
- [d206d28f1c](https://github.com/Alfresco/alfresco-ng2-components/commit/d206d28f1c) [AAE-32905] Fix commit messages commands aren't working (#11922)
- [80e9e51cfa](https://github.com/Alfresco/alfresco-ng2-components/commit/80e9e51cfa) AAE-46242 - Looks like we need to override the mapping as crowding config is not set to this format (#11939)
- [345e1e69ad](https://github.com/Alfresco/alfresco-ng2-components/commit/345e1e69ad) AAE-46242 - should use the variable osx_locale to match the format xx-YY (#11936)
- [a2b026ed7e](https://github.com/Alfresco/alfresco-ng2-components/commit/a2b026ed7e) [AAE-46242] - Changed the name convention for translation files to ISO standard naming (#11924)
- [1314f0751f](https://github.com/Alfresco/alfresco-ng2-components/commit/1314f0751f) AAE-46476 Fix sorting functionality of task list retrieval from runtime bundle (#11921)
- [8280aa2f6d](https://github.com/Alfresco/alfresco-ng2-components/commit/8280aa2f6d) chore: update NX packages to version 22.7.2 and related dependencies (#11904)
- [5553aaaefe](https://github.com/Alfresco/alfresco-ng2-components/commit/5553aaaefe) [MNT-25522] Add support for fileLink icon (#11903)
- [15814380a5](https://github.com/Alfresco/alfresco-ng2-components/commit/15814380a5) [ci:force] AAE-46219 [TEST] Revert cli build/installDeps changes from #11880 and #11899 (#11901)
- [4044fafc39](https://github.com/Alfresco/alfresco-ng2-components/commit/4044fafc39) AAE-46219 Skip prod deps in cli:installDeps to unblock release (#11899)
- [1d163c6749](https://github.com/Alfresco/alfresco-ng2-components/commit/1d163c6749) Revert "AAE-44065 Change date picker to match other styles (#11868)" (#11896)
- [165d0fc521](https://github.com/Alfresco/alfresco-ng2-components/commit/165d0fc521) chore: remove unused moment dependency (#11893)
- [64d9f3a6d4](https://github.com/Alfresco/alfresco-ng2-components/commit/64d9f3a6d4) AAE-45774 Show error for date fields if invalid format (#11886)
- [9e106b006c](https://github.com/Alfresco/alfresco-ng2-components/commit/9e106b006c) AAE-43881 Fix for form rules not applying when new [data] comes in (#11879)
- [8309d2dc55](https://github.com/Alfresco/alfresco-ng2-components/commit/8309d2dc55) AAE-44065 Change date picker to match other styles (#11868)
- [e3430ae36e](https://github.com/Alfresco/alfresco-ng2-components/commit/e3430ae36e) AAE-45695 Group @typescript-eslint/* packages in dependabot (#11880)
- [1860fefd42](https://github.com/Alfresco/alfresco-ng2-components/commit/1860fefd42) [MNT-25647] Handle facets label wrapped in quotes (#11866)
- [9fe4006a0d](https://github.com/Alfresco/alfresco-ng2-components/commit/9fe4006a0d) AAE-45391 Lazy loading and improvements for pdfJS (#11869)
- [0faa2e1a56](https://github.com/Alfresco/alfresco-ng2-components/commit/0faa2e1a56) [AAE-0000] - fixed run for process-service-cloud (#11855)
- [d6262eafc6](https://github.com/Alfresco/alfresco-ng2-components/commit/d6262eafc6) [ACS-11628] small for for init-acs-env.ts (#11860)
- [d3ad66d25b](https://github.com/Alfresco/alfresco-ng2-components/commit/d3ad66d25b) AAE-44435 Fix incorrect Start process button on user task forms (#11837)
- [aa2de3bde6](https://github.com/Alfresco/alfresco-ng2-components/commit/aa2de3bde6) AAE-45173 Adding background color to tooltip card (#11852)
- [d3ac5362ba](https://github.com/Alfresco/alfresco-ng2-components/commit/d3ac5362ba) AAE-44946 - Sending also previous value to allow valuation and valida… (#11836)
- [ddb8adc0e4](https://github.com/Alfresco/alfresco-ng2-components/commit/ddb8adc0e4) AAE-44752 Add type to ProcessInstanceCloud (#11847)
- [85005c9c1c](https://github.com/Alfresco/alfresco-ng2-components/commit/85005c9c1c) AAE-44987 Applying color and background to sidenav (#11846)
- [407c6c1829](https://github.com/Alfresco/alfresco-ng2-components/commit/407c6c1829) [ACS-11350] keyboard navigation user incorrect focus order after collapsing the left navigation menu (#11835)
- [e3fc03c58d](https://github.com/Alfresco/alfresco-ng2-components/commit/e3fc03c58d) Revert "AAE-44098 Bottom Tab nav buttons (#11801)" (#11832)
- [510a813ed2](https://github.com/Alfresco/alfresco-ng2-components/commit/510a813ed2) [ACS-11472] Fix file icon is not updated for version renditions (#11807)
- [7864f1a8e0](https://github.com/Alfresco/alfresco-ng2-components/commit/7864f1a8e0) AAE-44098 Bottom Tab nav buttons (#11801)
Title:Changelog for alfresco-ng2-components v9.0.0
---
# Changelog
- [0a19be090e](git@github.com:Alfresco/alfresco-ng2-components/commit/0a19be090e) [ACS-12286] Pass includeFields through to getRecentFiles for -recent- (#12067)
- [b69c3ae1ae](git@github.com:Alfresco/alfresco-ng2-components/commit/b69c3ae1ae) [MNT-25230] Displayed modified time for node version (#12066)
- [ce907417b7](git@github.com:Alfresco/alfresco-ng2-components/commit/ce907417b7) AAE-48166 Compensate for VM/Citrix clock drift in token expiry check (#12024)
- [4c7765e3fa](git@github.com:Alfresco/alfresco-ng2-components/commit/4c7765e3fa) AAE-46517 Add onRowCountChange form event for Repeatable Sections (#12062)
- [407a64996e](git@github.com:Alfresco/alfresco-ng2-components/commit/407a64996e) AAE-46248 Format dropdown/radio option labels in display-text expressions (#12045)
- [01cea60490](git@github.com:Alfresco/alfresco-ng2-components/commit/01cea60490) [MNT-25230] adw version history does not provide user information (#12050)
- [09ef05038c](git@github.com:Alfresco/alfresco-ng2-components/commit/09ef05038c) chore: remove deprecated MaterialModule and its references (#12051)
- [c7bd56f244](git@github.com:Alfresco/alfresco-ng2-components/commit/c7bd56f244) AAE-43974 Fix for alfresco-content-app e2e failure (#12055)
- [b86e41515e](git@github.com:Alfresco/alfresco-ng2-components/commit/b86e41515e) [ACS-12037] Remove Knowledge Discovery from ADF (#12042)
- [0b35118dee](git@github.com:Alfresco/alfresco-ng2-components/commit/0b35118dee) AAE-47880 UI breaks when pasting very large text into text field (#12043)
- [fe2b3d85dd](git@github.com:Alfresco/alfresco-ng2-components/commit/fe2b3d85dd) [ACS-12108] Introduce signed commits into ADF workflows (#12040)
- [b0dc85422c](git@github.com:Alfresco/alfresco-ng2-components/commit/b0dc85422c) Improvement/AAE-43974 Refactoring form fields (#11945)
- [23f0392c12](git@github.com:Alfresco/alfresco-ng2-components/commit/23f0392c12) AAE-47634 Refactor: switch form service getTask to use runtime bundle API (#12020)
- [997303e6a7](git@github.com:Alfresco/alfresco-ng2-components/commit/997303e6a7) [ACS-11325] remove chevron button from tab order in adf-tree (#12041)
- [18e602aa85](git@github.com:Alfresco/alfresco-ng2-components/commit/18e602aa85) [PRODSEC-13253] Increased peerDependencies versions to allow to increase angular version in other projects (#12031)
- [4cd8648a05](git@github.com:Alfresco/alfresco-ng2-components/commit/4cd8648a05) Adjust release triggers to use cache-writable token (#12030)
- [7f57b3936b](git@github.com:Alfresco/alfresco-ng2-components/commit/7f57b3936b) AAE-39528 Session timeout features (#12008)
- [5050c3d974](git@github.com:Alfresco/alfresco-ng2-components/commit/5050c3d974) [ACS-12041] Add debounceTime in PeopleWidgetComponent to limit API calls on every keystroke (#12027)
- [d8b36606e2](git@github.com:Alfresco/alfresco-ng2-components/commit/d8b36606e2) [MNT-25681] Search refactoring and unification (#12019)
- [37f8fe47ac](git@github.com:Alfresco/alfresco-ng2-components/commit/37f8fe47ac) AAE-46695 Upgrade to pnpm 11.9 (#12028)
- [af0d1e4ead](git@github.com:Alfresco/alfresco-ng2-components/commit/af0d1e4ead) AAE-47093 Update Supply Chain Review GH AW to latest (#12025)
- [bd7f393db9](git@github.com:Alfresco/alfresco-ng2-components/commit/bd7f393db9) AAE-47634 Fix block task claim checking status on Runtime Bundle (#12009)
- [d2d6696c05](git@github.com:Alfresco/alfresco-ng2-components/commit/d2d6696c05) Migrate to Angular 20, TypeScript 5.9, and Angular Material 20 (#11657)
- [7546aa91a3](git@github.com:Alfresco/alfresco-ng2-components/commit/7546aa91a3) AAE-47577 Form Spinner persists outside of Automate Form (#12005)
- [74d67c39a0](git@github.com:Alfresco/alfresco-ng2-components/commit/74d67c39a0) [ACS-11317] a11y Fix: Tags interactive controls are not manageable via keyboard (#11845)
- [20c20f2749](git@github.com:Alfresco/alfresco-ng2-components/commit/20c20f2749) AAE-46247 Add type-aware form field value adapter service (#11968)
- [b498d5744c](git@github.com:Alfresco/alfresco-ng2-components/commit/b498d5744c) [AAE-47470] - Upgrade Pnpm to 11.8.0 (#12004)
- [80eef35e1d](git@github.com:Alfresco/alfresco-ng2-components/commit/80eef35e1d) [ACS-11325] Add keyboard navigation and a11y support for adf-tree component (#11973)
- [49a3f1e104](git@github.com:Alfresco/alfresco-ng2-components/commit/49a3f1e104) AAE-47412 Update suprocesses and linked processes for process instance model (#11996)
- [0beaa18452](git@github.com:Alfresco/alfresco-ng2-components/commit/0beaa18452) [ACS-11973] Fix: context menu disappears during bulk upload (#11994)
- [76fd461741](git@github.com:Alfresco/alfresco-ng2-components/commit/76fd461741) AAE-47042 Add auto grow support to multiline text widget (#11981)
- [43c5bc17fb](git@github.com:Alfresco/alfresco-ng2-components/commit/43c5bc17fb) [ACS-12020] Updated init-aps passwords with secret ones (#11993)
- [cda20e0386](git@github.com:Alfresco/alfresco-ng2-components/commit/cda20e0386) Post-release version bump (#11988)
- [8f5099e822](git@github.com:Alfresco/alfresco-ng2-components/commit/8f5099e822) [ACS-11928] convert ReadStream to Blob before appending to FormData (#11987)
- [5dd709ed58](git@github.com:Alfresco/alfresco-ng2-components/commit/5dd709ed58) AAE-44809 Fix form multi-file attachment - document viewer not updated on file selection (#11980)
- [9d353bf271](git@github.com:Alfresco/alfresco-ng2-components/commit/9d353bf271) [ACS-11974] [ACA] Upload new version button is no longer disabled when clicked once (#11977)
- [633702860f](git@github.com:Alfresco/alfresco-ng2-components/commit/633702860f) Post-release version bump (#11984)
- [bf5b3af285](git@github.com:Alfresco/alfresco-ng2-components/commit/bf5b3af285) AAE-47094 Add Stale PR Cleanup workflow (#11983)
> The configuration values are for migration purposes only.
> Please refer to the documentation for more details on the configuration settings and values.
## Library versions
Update the `package.json` file with the latest library versions:
- Angular: 14.1.3
- Alfresco Component Libraries: 6.9.0
- Alfresco JS-API: 7.6.1
```json
{
"dependencies":{
"@alfresco/adf-core":"6.9.0",
"@alfresco/adf-content-services":"6.9.0",
"@alfresco/adf-process-services-cloud":"6.9.0",
"@alfresco/adf-insights":"6.9.0",
"@alfresco/js-api":"7.6.1"
}
}
```
> [!NOTE]
> You can also refer to the Alfresco Content Application [4.4.1 release](https://github.com/Alfresco/alfresco-content-app/blob/4.4.1/package.json) for the latest version of the libraries.
### Remove old dependencies
```json
{
"dependencies":{
"@angular/material-moment-adapter":"14.1.3",
"@mat-datetimepicker/moment":"^9.0.68",
"moment":"^2.29.4",
"moment-es6":"1.0.0",
"@angular/flex-layout":"^14.0.0-beta.40"
}
}
```
### Add extra dependencies
```json
{
"dependencies":{
"@angular/material-date-fns-adapter":"14.1.3",
"date-fns":"^2.30.0"
}
}
```
Reinstall your dependencies and make initial build
```sh
npm i --legacy-peer-deps
npm run build
```
### Update code
If you are using the `@alfresco/js-api` library, make sure to update the code according to the latest version:
| Before | After |
|------------------------|--------------------|
| MinimalNodeEntity | NodeEntry |
| SiteBody | SiteBodyCreate |
| MinimalNodeEntryEntity | Node |
| MinimalNode | Node |
| PathInfoEntity | PathInfo |
| SiteBody | SiteBodyCreate |
| FavoriteBody | FavoriteBodyCreate |
| PathElementEntity | PathElement |
#### NullInjectorError: No provider for RedirectAuthService!
If you are facing the `NullInjectorError: No provider for RedirectAuthService!` error, make sure to add the `AuthModule` to the `AppModule`:
```typescript
import{AuthModule}from'@alfresco/adf-core';
@NgModule({
imports:[
// other imports
AuthModule.forRoot({useHash: true})
]
})
exportclassAppModule{}
```
For the development purposes, you may want to update the `app.config.json`:
```json5
{
"oauth2":{
// other configurations
"skipIssuerCheck":true,
"strictDiscoveryDocumentValidation":false
}
}
```
### Document List component
For document list components, remove the `display` property if used:
```html
[display]="documentDisplayMode$ | async"
```
## Final steps
After you have updated the code, make sure to test your application thoroughly to ensure that everything is working as expected.
You can build and run your application using the following commands:
Angular updates can be done with "Update Guide" from Angular documentation.
### Added libraries:
- eslint-plugin-storybook
- jasmine-marbles
-@editorjs/paragraph
- editorjs-text-alignment-blocktune
- graphql-ws
### Deleted libraries:
- protractor
- selenium-webdriver
- webdriver-manager
- shx
- monaco-editor
- ngx-monaco-editor-v2
-@types/selenium-webdriver
- protractor-retry-angular-cli
- protractor-screenshoter-plugin
- protractor-smartrunner
Reinstall your dependencies and make initial build:
```shell
npm i
npm run build
```
Review your applications as some styles and classes of Angular Material components might have changed.
## Demo-Shell and e2e
Demo shell and its e2e tests have been deleted.
## Material module
Material module is deprecated and will be removed in a future release. Please import components and modules independently.
## Standalone components
Most components have been changed to "standalone" and their modules have been deleted. Please import components directly.
| Deleted modules |
|--------------------------------|
| AttachmentModule |
| AppsListModule |
| TaskListModule |
| ProcessListModule |
| ProcessUserInfoModule |
| TaskCommentsModule |
| ProcessCommentsModule |
| PeopleModule |
| DynamicTableModule |
| ContentWidgetModule |
| AnalyticsProcessModule |
| DiagramsModule |
| ButtonsMenuModule |
| SitesDropdownModule |
| DataColumnModule |
| ContentUserInfoModule |
| AppCardViewModule |
| AppCloudSharedModule |
| FileViewModule |
| AppProcessListModule |
| FolderDirectiveModule |
| ContentTypeModule |
| SortingPickerModule |
| ProcessServicesCloudPipeModule |
| StartTaskCloudModule |
| ProcessDirectiveModule |
| StartProcessCloudModule |
| TaskDirectiveModule |
## Removed components, directives and pipes
| Deleted components, directives and pipes |
|------------------------------------------|
| IsIncludedPipe |
| TabLabelsPipe |
| BooleanPipe |
| FilterOutArrayObjectsByPropPipe |
| LocalizedRolePipe |
| MimeTypeIconPipe |
| FilterStringPipe |
| ProcessNameCloudPipe |
| FormStylePipe |
| CancelProcessDirective |
| MomentDateTimePipe |
| MomentDatePipe |
## A11y changes
Components have been reviewed and changed to fix most important issues with accessibility. Please test your application thoroughly to ensure that everything is working as expected, as some components have changed their structure, html roles or attributes.
| Tooltips | Tooltips have been changed from Angular Material to standard tooltip |
| Search Page and Search Filters | mat-chip-option replaced with mat-chip |
| Columns Selector | role attribute changes |
| DataTable | role attribute changes |
| Aspect List | structure of html changed |
## Guards
All guards have been converted to functional guards (using the new Angular functional route guard pattern). Please review any custom guards in your application and adapt them to the functional pattern as needed.
Example of converting a class-based guard to a functional guard:
| TaskDetailsModel | TaskRepresentation | Rename all instances |
| IdentityUserFilterInterface | Removed | Use type definitions instead |
| IdentityUserServiceInterface | Removed | Use type definitions instead |
| TaskCloudServiceInterface | Removed | Use type definitions instead |
## Final steps
After you have updated the code, make sure to test your application thoroughly to ensure that everything is working as expected. Pay special attention to areas that use the renamed models or interfaces, and make sure all components are properly imported as standalone components.
If you encounter any issues during the upgrade process, refer to the Angular update guide or the ADF community for assistance.
Update your dependencies to the versions introduced in the 8.0.0 release:
```json
{
"dependencies":{
"@alfresco/adf-core":"8.0.0",
"@alfresco/adf-content-services":"8.0.0",
"@alfresco/adf-process-services-cloud":"8.0.0",
"@alfresco/adf-insights":"8.0.0",
"@alfresco/adf-extensions":"8.0.0",
"@alfresco/adf-cli":"8.0.0",
"@alfresco/eslint-plugin-eslint-angular":"8.0.0",
"@alfresco/adf-testing":"8.0.0",
"@alfresco/js-api":"9.0.0"
}
}
```
Currently used Node version: 22.14.0.
### Breaking changes
Major version updates have been applied to the following core libraries:
- Angular: 19.2.6
- Angular Material: 19.2.9
- Typescript: 5.8.2
> Details on Angular update can be found in *Update Guide* from Angular documentation.
### Added libraries
```json
{
"dependencies":{
"node-fetch":"^3.3.2"
},
"devDependencies":{
"resize-observer-polyfill":"^1.5.1",
"webdriver-manager":"12.1.9"
}
}
```
### Deleted libraries
```json
{
"devDependencies":{
"mini-css-extract-plugin":"X.X.X",
"css-loader":"X.X.X"
}
}
```
Reinstall your dependencies and perform an initial build:
```shell
npm i
npm run build
```
Review your applications as some styles and classes of Angular Material components might have changed.
## Deprecations
The following table lists deprecated features and modules that will be removed in upcoming releases. Consider replacing them as soon as you update ADF to minimize future technical debt.
You can start using the new features and APIs introduced in the 8.0.0 release.
### XMLHttpRequest.withCredentials
Support for disabling the `withCredentials` property in `app.config.json` for identity providers that disallow credentials has been introduced. You can configure it as shown below:
```json
{
"auth":{
"withCredentials":false
}
}
```
### provideShell
The new provideShell API for providing the main application layout can replace the `withRoutes(routes: Routes | AppShellRoutesConfig)` method, as shown below.
| [Tree component](../content-services/components/tree.component.md) | Pagination is now emitted only when the top-level entries change, and an expand/collapse regression was fixed. |
| Form save button (cloud) | On clicking the system **save** outcome the save button is now disabled, and it is re-enabled when a form field value changes. |
| Task / process lists (cloud) | Changing only column visibility no longer triggers a reload of the task or process list. |
| Task lists (cloud) | The loading spinner no longer disappears before the list has finished loading. |
| Task details (cloud) | The loading spinner alignment after opening task details was corrected. |
| [Tags creator](../content-services/components/tags-creator.component.md) | The "required field" message is no longer shown after discarding changes; the first tag position and an extra scrollbar (shown while the spinner is visible) were also corrected. |
| [Image viewer](../core/components/viewer.component.md) | Navigation between images was fixed, and image display in full-screen mode was corrected. |
| User roles fetch | `UserAccessService` now appends an `appkey` query parameter (read from the `application.key` app-config value) when fetching identity roles, if that value is configured. |
| Search facets | Facet, filter and widget chips had markup/icon adjustments in the facets section. |
| [Card view select item](../core/components/card-view.component.md) | The select input's position in the edit template was changed. |
| Start process / task outcomes | Outcome button positioning in the start-process form and the attach-file button style were corrected. |
| Group cloud | The identity group validation error message was replaced with a shorter version. |
| Theme | A task-filter color was changed to use the accent-contrast color. |
Update the `package.json` file with the latest library versions:
```json
{
"dependencies":{
"@alfresco/adf-core":"6.2.0",
"@alfresco/adf-content-services":"6.2.0",
"@alfresco/adf-process-services":"6.2.0",
"@alfresco/adf-process-services-cloud":"6.2.0",
"@alfresco/adf-insights":"6.2.0",
"@alfresco/adf-extensions":"6.2.0",
"@alfresco/js-api":">=6.2.0"
}
}
```
Clean your old distribution and dependencies by deleting `node_modules` and `package-lock.json`.
Reinstall your dependencies
```sh
npm install
```
**Note:** the ADF libraries now depend on `@alfresco/js-api` with a `>=6.2.0` range (previously a `^6.1.0` caret range). Make sure your application resolves a JS-API build of `6.2.0` or later.
## Breaking changes
### Dependency injection refactor (`inject()`)
A large number of exported services, components and abstract base classes were refactored
to use Angular's `inject()` function instead of constructor-parameter injection.
As a result **their public constructor signatures changed** — most now take no arguments
(or a reduced set).
This affects you only if you **subclass** one of these classes and call `super(...)`,
or if you **instantiate them directly** (for example, `new AuthenticationService(...)` in a unit test).
The share-link expiry control in `[ShareDialogComponent](../../lib/content-services/src/lib/content-node-share/content-node-share.dialog.ts)`
changed from a date-**time** picker to a **date-only** picker, and the date library moved from
`moment` to `date-fns`.
- The `sharedLinkDateTimePickerType` app-config key is **no longer read**. Setting it has no effect; the picker is date-only.
- Methods that previously accepted/returned `moment.Moment` now use the native `Date` type (for example `onTimeChanged(date: Date)`). Update any override accordingly.
- The template handler `onDatetimepickerClosed` was renamed to `onDatePickerClosed`, and the `#dateTimePickerInput` template reference to `#datePickerInput` — this affects you only if you override the dialog template.
### Route-aware filter selection
`[ProcessFiltersComponent](../process-services/components/process-filters.component.md)` and
`[TaskFiltersComponent](../process-services/components/task-filters.component.md)` (in `@alfresco/adf-process-services`)
now inject `Router` (plus `Location` / `ActivatedRoute` respectively) to highlight the active
filter based on the current route. If you instantiate these components in a test, provide routing
| `NotificationIconPipe` (`notificationIcon`) | `@alfresco/adf-core` | Internal, non-exported pipe. Icon resolution now happens in the notification factory. Only affects unsupported use of the deep `notifications/pipes/notification-icon.pipe` path. |
| `mockAuthConfigImplicitFlow`, `mockAuthConfigCodeFlow` | `@alfresco/adf-core` | Test mocks removed. Inline your own equivalents if your tests imported them. |
| `sharedLinkDateTimePickerType` (app-config key) | `app.config.json` | No longer read — the share-link expiry picker is date-only. |
## Renamed items
### CSS class renames
If you target these selectors from your own stylesheets, update them:
| `material-icons` | `^1.13.8` | The bundled Material Icons font and its `material-icons.css` were removed from the build in favour of the published `[material-icons](https://www.npmjs.com/package/material-icons)` package. If your app relied on ADF bundling the font, provide it yourself. |
| `date-fns` | `^2.30.0` | New dependency (replaces `moment` in the share dialog). |
| `[SearchChipAutocompleteInputComponent](../content-services/components/search-chip-autocomplete-input.component.md)` | `@alfresco/adf-content-services` | Chip input with `mat-autocomplete`. |
| `[IsIncludedPipe](../content-services/pipes/is-included.pipe.md)` (`adfIsIncluded`) | `@alfresco/adf-content-services` | Returns whether a value is contained in an array. |
### Logical search filter
A new search widget, `logical-filter`, lets users build AND / OR / AND-NOT queries from three
phrase inputs. Enable it by referencing the `logical-filter` widget type in your search configuration:
```json
{
"search":{
"categories":[
{
"id":"logic",
"name":"Query",
"enabled":true,
"component":{
"selector":"logical-filter",
"settings":{"field":"cm:name,cm:title"}
}
}
]
}
}
```
### Advanced search: autocomplete chips
A new search widget, `autocomplete-chips`, provides chip-based multi-select with autocomplete for
filters such as Tags and Location. For `field: 'TAG'` it loads options through the tag service;
otherwise it uses the `options` from the widget settings. `[SearchWidgetSettings](../../lib/content-services/src/lib/search/models/search-widget-settings.interface.ts)`
gains a new optional property `allowOnlyPredefinedValues?: boolean`.
constoauth=this.appConfigService.oauth2;// returns an OauthConfigModel, defaulting to {}
```
- The `implicitFlow`, `silentLogin` and `codeFlow` flags now accept the string values `'true'` / `'false'` in `app.config.json` in addition to real booleans, and are coerced to booleans by the getter. The `oauth2.silentLogin` schema type was widened to `["boolean", "string"]`.
-`[OauthConfigModel](../../lib/core/src/lib/auth/models/oauth-config.model.ts)` gains an optional `redirectSilentIframeUri?: string` field.
| Search facets | Facet chips with no results are rendered disabled and show a `remove` icon instead of the dropdown arrow. |
| Search facet/filter chips | The dropdown arrow flips between `keyboard_arrow_down` / `keyboard_arrow_up` with the menu state, the toggled-chip border uses the primary color, and the filter "cancel" action was relabeled from **Remove** to **Clear**. |
| [People (cloud)](../process-services-cloud/components/people-cloud.component.md) | No longer triggers an identity search for an empty value; at least one character is required. |
| Process / task filters | A filter is highlighted as active only when the current route matches the filter context and it is the current filter. |
| [Card view text item](../../lib/core/src/lib/card-view/components/card-view-textitem/card-view-textitem.component.ts) | On an invalid edit, `CardViewUpdateService.update` is now also emitted (with the edited value) after clearing previous errors. |
| [App config](../core/services/app-config.service.md) | When `app.config.json` fails schema validation, `AppConfigService` now logs `console.error('app.config.json contains validation errors')` and continues with the existing config. |
| Shared link expiry (security) | Setting an expiry now recreates the shared link with an `expiresAt` value so the backend enforces expiry on the link itself; turning the expiry off recreates a non-expiring link. |
| Accessibility | The filter-menu close control is now a real `button`, Shift+Tab is trapped inside filter menu cards, and the autocomplete input is associated with its listbox via `aria-controls`. |
## Theme changes
Several components now expose their styles through `--adf-*` CSS custom properties, so you can theme
them without overriding internal selectors. Defaults preserve the previous appearance. Override a
| About server settings | `--adf-about-server-settings-background`, `--adf-about-server-settings-color`, `--adf-about-server-settings-border-radius`, `--adf-about-server-settings-padding` |
| Package list table | `--adf-package-list-table-background`, plus `--adf-package-list-table-header-*` and `--adf-package-list-table-row-*` (borders, min-height, cell colors) |
-`BaseQueryBuilderService` (base of `[SearchQueryBuilderService](../content-services/services/search-query-builder.service.md)`): `updated` is now `Subject<SearchRequest>`; `update`, `execute`, `search`, `buildQuery` all use `SearchRequest`.
-`SearchConfigurationInterface.generateQueryBody(...)` now returns `SearchRequest`. Note `SearchRequest` is a **class** (`new SearchRequest({...})`), whereas `QueryBody` was a plain interface — object literals still assign structurally.
-`User` from `@alfresco/js-api` is now a **class** rather than a type alias.
### Third-party libraries
To support Angular 14+, several dependencies were upgraded (major bumps with their own breaking changes):
They are **not** exported from the root `@alfresco/adf-core`, and their theme is no longer part of the
core styles index — add the imports above where needed.
### Search API changes
-`SearchChipInputComponent`**was removed.** Remove any imports/usages (the logical filter no longer uses it).
-`disableUpdateOnSubmit` was removed from search widget settings — delete it from your `search.config`.
-`[SearchLogicalFilterComponent](../content-services/components/search-logical-filter.component.md)` changed its value model. The per-field condition type went from `string[]` to a single space-separated `string`, and a new `MATCH_EXACT = 'matchExact'` field was added:
| `CallApiParams` (interface) | `@alfresco/adf-process-services-cloud` | Removed from the `BaseCloudService` public surface — it now uses `RequestOptions` from `@alfresco/js-api`. Only affects code that imported `CallApiParams` directly. |
### CSRF default changed
The default for the `disableCSRF` app-config key changed to `true`. When the key is **absent**
from `app.config.json`, CSRF handling is now disabled by default. If your backend requires the ADF
CSRF token, set it explicitly:
```json
{
"disableCSRF": false
}
```
### Role-based authorization
Roles are now resolved from the JWT access token instead of the remote `identity-adapter-service`
roles endpoint (a new `hxp_authorization` claim is supported alongside `realm_access`). As a result:
- `UserAccessService.fetchUserAccess()` is now **synchronous** (returns `void`, was `Promise`).
- `UserAccessService.resetAccess()` was **removed**, and its constructor no longer injects `OAuth2Service`.
- `AuthGuardSsoRoleService.canActivate()` is now **synchronous** (returns `boolean`, was `Promise<boolean>`).
### Other breaking changes
- **Bearer-excluded URL matching** is now anchored to the host + first path segment
(`^https?://[^/]+/<pattern>`) instead of matching anywhere in the URL. Review any custom
`bearerExcludedUrls` patterns that relied on substring matching.
- **DataTable multiselect checkbox** wrapper changed from a `<div>` to a `<label>` (same classes),
and row padding moved onto the first/last cells. Update CSS/E2E selectors targeting
`div.adf-datatable-checkbox` or the old `.adf-datatable-row` padding.
- The header user-info container's default right margin changed from `16px` to `8px`.
- Date pickers/filters that used `moment.Moment` values now use native `Date`
(see [Behavioural changes](#behavioural-changes)).
## Deprecated items
The following components are deprecated (still functional, but slated for removal). Their exact
| `[WebscriptComponent](../content-services/components/webscript.component.md)` | `adf-webscript-get` | "Webscript component has never been turned into a product and has no UI/UX and no use cases in ACA/ADW/ACC." |
| `[LikeComponent](../content-services/components/like.component.md)` | `adf-like` | "Like component is not used in ACA/ADW/ACC, can be removed." |
| `[RatingComponent](../content-services/components/rating.component.md)` | `adf-rating` | "Rating component is not used in ACA/ADW/ACC, can be removed." |
The NgModules that bundle those components are also now `@deprecated` (`@alfresco/adf-content-services`):
**`SocialModule`** (bundles the Like/Rating components) and **`WebScriptModule`** (bundles the Webscript
component). Stop importing them.
## New components and features
### Advanced search
Several new advanced-search building blocks were added in `@alfresco/adf-content-services`, along with
two new widget selector types (`date-range-advanced`, `properties`):
| `[SearchDateRangeAdvancedComponent](../../lib/content-services/src/lib/search/components/search-date-range-advanced-tabbed/search-date-range-advanced/search-date-range-advanced.component.ts)` | `adf-search-date-range-advanced` | Date-range form with "Any / In the last / Between" modes (date-fns based). |
| `SearchDateRangeAdvancedTabbedComponent` | `adf-search-date-range-advanced-tabbed` | Search widget (`date-range-advanced`) wrapping the date-range form in tabs. |
| `BreadcrumbComponent` | `adf-breadcrumb` | Standalone breadcrumb with `@Input() compact` and `@Output() compactChange`; collapses to first + last item with an overflow menu in compact mode. |
A new **Data Table** cloud form widget renders tabular data inside a form, backed by process/form
variables or a direct JSON value.
- New `FormFieldTypes.DATA_TABLE = 'data-table'` and `FormFieldModel.schemaDefinition: DataColumn[]` in `@alfresco/adf-core`.
- New `DataTableWidgetComponent` (selector `data-table`) and `WidgetDataTableAdapter` in `@alfresco/adf-process-services-cloud`, auto-registered by `CloudFormRenderingService`.
- The `VariableConfig` interface is now exported from `@alfresco/adf-core` (`{ variableName; optionsPath?; optionsId?; optionsLabel? }`), and form-field `optionType` gained a `'variable'` value so dropdowns can resolve their options from a process/form variable.
### Content metadata
`[ContentMetadataCardComponent](../content-services/components/content-metadata-card.component.md)` gained new configuration:
- `provideTranslations(id, path)` — a convenience provider factory exported from `@alfresco/adf-core`, replacing the verbose `TRANSLATION_PROVIDER` literal (the old form still works).
- `ALFRESCO_API_FACTORY` — a new injection token (with `AlfrescoApiFactory` interface) lets applications supply a custom `AlfrescoApi` implementation, e.g. to invalidate the session on HTTP 401.
- New additive `adfDateTime` pipe (`DateTimePipe`) in `@alfresco/adf-core`.
| Date handling | Several pipes/components migrated from `moment` to `date-fns`: `TimeAgoPipe`, process-name pipes, `LockService`, `DateRangeFilterComponent`/service, `StartTaskCloudComponent`, `TaskListComponent`. Date-picker/filter values are now native `Date` objects instead of `moment.Moment`. (moment is still a dependency for other code.) |
| DataTable | Whole checkbox cell is clickable; in single-selection mode clicking a selected row now **unselects** it and emits `row-unselect`; actions menus open on `Enter`; sorting matches on `sortingKey`; the header row is retained when a filter is active with no results. |
| Version list | The restore action is disabled for the latest version of a file. |
| People | `PeopleContentService.getPerson(id)` no longer overwrites the cached current user (that side-effect moved to `getCurrentUserInfo()`). |
| Viewers | Viewer form widgets accept a single file object (not just arrays) and no longer show a file after it was removed. |
| Notifications | The "mark all as read" control is now an icon button (`done_all`). |
| Security | Input sanitisation hardened: search highlight uses safer tag stripping, comment text is HTML-escaped, the login component guards against prototype pollution (`__proto__`/`constructor`/`prototype`), and user initials are built via the DOM to escape user names. |
## Theme changes
The Identity User Info avatar styles are now themeable via CSS custom properties:
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.