@alfresco/adf-process-services-cloud 9.2.0-38701479568 → 9.2.0-38745876662

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import { inject, Injectable, InjectionToken, EventEmitter, DestroyRef, Output, I
3
3
  import * as i3 from '@alfresco/adf-core';
4
4
  import { AppConfigService, JwtHelperService, OAuth2Service, TranslationService, DataTableSchema, UserPreferencesService, UserPreferenceValues, CustomEmptyContentTemplateDirective, ObjectDataTableAdapter, ColumnsSelectorComponent, MainMenuDataTableTemplateDirective, EmptyContentComponent, NoContentTemplateDirective, LoadingContentTemplateDirective, DataTableComponent, AdfDateFnsAdapter, MOMENT_DATE_FORMATS, AuthenticationService, StorageService, IconModule, DateFnsUtils, ADF_DATE_FORMATS, FullNamePipe, InitialUsernamePipe, FormFieldTypes, FormService, FormModel, ROW_ID_PREFIX, FormBaseComponent, ADF_DISPLAY_TEXT_SETTINGS, WidgetVisibilityService, FormExpressionService, UploadWidgetContentLinkModel, FormEvent, FormOutcomeModel, ConfirmDialogComponent, FormRulesEvent, FormOutcomeEvent, FormRendererComponent, ToolbarDividerComponent, ToolbarComponent, FormatSpacePipe, NotificationService, DownloadService, WidgetComponent, ThumbnailService, ErrorWidgetComponent, LocalizedDatePipe, UploadDirective, ContentLinkModel, getDynamicDateFieldRange, getDateFieldRange, isEmptyFieldValue, getValidationSummaryTranslationParameters, DEFAULT_DATE_FORMAT, FormFieldValueFormatterService, ADF_TYPED_VALUE_FORMATTING_ENABLED, FormFieldEvent, SelectFilterInputComponent, FormRenderingService, DynamicComponentMapper, CardViewUpdateService, ClipboardService, CardViewTextItemModel, CardViewSelectItemModel, CardViewDatetimeItemModel, CardViewDateItemModel, CardViewArrayItemModel, CardViewComponent, CustomLoadingContentTemplateDirective, isOutcomeButtonVisible, FormOutcomeNotFoundError, InplaceFormInputComponent, BaseViewerWidgetComponent, ErrorMessageModel, BaseDisplayTextWidgetComponent, ObjectDataColumn, ObjectDataRow, FormBaseModule, provideTranslations } from '@alfresco/adf-core';
5
5
  import { from, EMPTY, isObservable, of, Subject, throwError, BehaviorSubject, combineLatest, defer, merge, asapScheduler, firstValueFrom, forkJoin, catchError as catchError$1 } from 'rxjs';
6
- import { map, take, switchMap, catchError, distinctUntilChanged, filter, tap, finalize, debounceTime, shareReplay, mergeMap, expand, reduce, mapTo, concatMap } from 'rxjs/operators';
6
+ import { map, take, switchMap, catchError, distinctUntilChanged, filter, tap, finalize, debounceTime, shareReplay, scan, mergeMap, expand, reduce, mapTo, concatMap } from 'rxjs/operators';
7
7
  import { AlfrescoApiService, NodeAction, ContentNodeSelectorComponent, NodesApiService, ContentService, ContentNodeSelectorPanelService, NewVersionUploaderService, NewVersionUploaderDataAction, ContentMetadataComponent, AlfrescoViewerComponent } from '@alfresco/adf-content-services';
8
8
  import { AdfHttpClient } from '@alfresco/adf-core/api';
9
9
  import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
@@ -4193,6 +4193,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
4193
4193
  args: [{ providedIn: 'root' }]
4194
4194
  }] });
4195
4195
 
4196
+ /*!
4197
+ * @license
4198
+ * Copyright © 2005-2026 Hyland Software, Inc. and its affiliates. All rights reserved.
4199
+ *
4200
+ * Licensed under the Apache License, Version 2.0 (the "License");
4201
+ * you may not use this file except in compliance with the License.
4202
+ * You may obtain a copy of the License at
4203
+ *
4204
+ * http://www.apache.org/licenses/LICENSE-2.0
4205
+ *
4206
+ * Unless required by applicable law or agreed to in writing, software
4207
+ * distributed under the License is distributed on an "AS IS" BASIS,
4208
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4209
+ * See the License for the specific language governing permissions and
4210
+ * limitations under the License.
4211
+ */
4212
+
4196
4213
  /*!
4197
4214
  * @license
4198
4215
  * Copyright © 2005-2026 Hyland Software, Inc. and its affiliates. All rights reserved.
@@ -4376,6 +4393,259 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
4376
4393
  * limitations under the License.
4377
4394
  */
4378
4395
 
4396
+ /*!
4397
+ * @license
4398
+ * Copyright © 2005-2026 Hyland Software, Inc. and its affiliates. All rights reserved.
4399
+ *
4400
+ * Licensed under the Apache License, Version 2.0 (the "License");
4401
+ * you may not use this file except in compliance with the License.
4402
+ * You may obtain a copy of the License at
4403
+ *
4404
+ * http://www.apache.org/licenses/LICENSE-2.0
4405
+ *
4406
+ * Unless required by applicable law or agreed to in writing, software
4407
+ * distributed under the License is distributed on an "AS IS" BASIS,
4408
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4409
+ * See the License for the specific language governing permissions and
4410
+ * limitations under the License.
4411
+ */
4412
+ const PUSHED_COUNTER_SUBSCRIPTIONS_BY_ENTITY_TYPE = {
4413
+ [FilterCounterEntityType.TASK]: [
4414
+ {
4415
+ filterKey: 'my-tasks',
4416
+ graphQlFieldName: 'assignedTasks',
4417
+ subscriptionQuery: `
4418
+ subscription {
4419
+ assignedTasks {
4420
+ count
4421
+ asOf
4422
+ }
4423
+ }
4424
+ `
4425
+ },
4426
+ {
4427
+ filterKey: 'queued-tasks',
4428
+ graphQlFieldName: 'queuedTasks',
4429
+ subscriptionQuery: `
4430
+ subscription {
4431
+ queuedTasks {
4432
+ count
4433
+ asOf
4434
+ }
4435
+ }
4436
+ `
4437
+ }
4438
+ ],
4439
+ [FilterCounterEntityType.PROCESS_INSTANCE]: [
4440
+ {
4441
+ filterKey: 'running-processes',
4442
+ graphQlFieldName: 'runningProcesses',
4443
+ subscriptionQuery: `
4444
+ subscription {
4445
+ runningProcesses {
4446
+ count
4447
+ asOf
4448
+ }
4449
+ }
4450
+ `
4451
+ }
4452
+ ]
4453
+ };
4454
+ class QueryPushedFilterCountersCloudService extends BaseCloudService {
4455
+ constructor() {
4456
+ super(...arguments);
4457
+ this.notificationCloudService = inject(NotificationCloudService);
4458
+ this.taskListCloudService = inject(TaskListCloudService);
4459
+ this.processListCloudService = inject(ProcessListCloudService);
4460
+ this.injector = inject(Injector);
4461
+ this.taskFiltersPerApp = new Map();
4462
+ this.processFiltersPerApp = new Map();
4463
+ this.recountTriggerPerApp = new Map();
4464
+ this.entityTypeCountersPerApp = new Map();
4465
+ this.activeEntityTypesPerApp = new Map();
4466
+ this.activeSubscriberCountPerEntityType = new Map();
4467
+ this.initialCountersPerApp = new Map();
4468
+ this.applyCounterUpdate = (entries, event) => {
4469
+ if (event.source === 'initialFetch') {
4470
+ const mergedEntries = { ...entries };
4471
+ Object.entries(event.counters).forEach(([filterKey, count]) => {
4472
+ if (mergedEntries[filterKey]?.source === 'webSocketPush') {
4473
+ return;
4474
+ }
4475
+ mergedEntries[filterKey] = { count, source: 'initialFetch' };
4476
+ });
4477
+ return mergedEntries;
4478
+ }
4479
+ const existingEntry = entries[event.filterKey];
4480
+ const isOutOfOrderPush = existingEntry?.source === 'webSocketPush' &&
4481
+ existingEntry.asOf !== undefined &&
4482
+ event.asOf !== undefined &&
4483
+ event.asOf < existingEntry.asOf;
4484
+ if (isOutOfOrderPush) {
4485
+ return entries;
4486
+ }
4487
+ return { ...entries, [event.filterKey]: { count: event.count, asOf: event.asOf, source: 'webSocketPush' } };
4488
+ };
4489
+ }
4490
+ getTaskFilters(appName) {
4491
+ return this.shareFilters(this.taskFiltersPerApp, appName, () => this.injector.get(TaskFilterCloudService).getTaskListFilters(appName));
4492
+ }
4493
+ getProcessFilters(appName) {
4494
+ return this.shareFilters(this.processFiltersPerApp, appName, () => this.injector.get(ProcessFilterCloudService).getProcessFilters(appName));
4495
+ }
4496
+ getFilterCounters(appName, entityType) {
4497
+ if (!appName) {
4498
+ return EMPTY;
4499
+ }
4500
+ return defer(() => {
4501
+ this.activateEntityType(appName, entityType);
4502
+ return this.watchEntityTypeCounters(appName, entityType);
4503
+ }).pipe(map((counters) => ({ counters })), finalize(() => this.deactivateEntityType(appName, entityType)));
4504
+ }
4505
+ refreshFilterCounters(appName) {
4506
+ this.recountTrigger(appName).next();
4507
+ }
4508
+ getEngineEvents(_appName, _entityType) {
4509
+ return EMPTY;
4510
+ }
4511
+ watchEntityTypeCounters(appName, entityType) {
4512
+ const key = this.entityTypeKey(appName, entityType);
4513
+ let entityTypeCounters$ = this.entityTypeCountersPerApp.get(key);
4514
+ if (!entityTypeCounters$) {
4515
+ const initialCountersEvents$ = this.initialCounters(appName).pipe(map((counters) => ({
4516
+ source: 'initialFetch',
4517
+ counters: counters[entityType] ?? {}
4518
+ })));
4519
+ const pushedCounterEvents$ = this.pushedCounterUpdates(appName, entityType).pipe(map(({ filterKey, count, asOf }) => ({
4520
+ source: 'webSocketPush',
4521
+ filterKey,
4522
+ count,
4523
+ asOf
4524
+ })));
4525
+ entityTypeCounters$ = merge(initialCountersEvents$, pushedCounterEvents$).pipe(scan(this.applyCounterUpdate, {}), map((entries) => this.toEntityTypeCounters(entries)), shareReplay({ bufferSize: 1, refCount: true }));
4526
+ this.entityTypeCountersPerApp.set(key, entityTypeCounters$);
4527
+ }
4528
+ return entityTypeCounters$;
4529
+ }
4530
+ activateEntityType(appName, entityType) {
4531
+ const key = this.entityTypeKey(appName, entityType);
4532
+ const activeSubscriberCount = (this.activeSubscriberCountPerEntityType.get(key) ?? 0) + 1;
4533
+ this.activeSubscriberCountPerEntityType.set(key, activeSubscriberCount);
4534
+ if (activeSubscriberCount > 1) {
4535
+ return;
4536
+ }
4537
+ const activeEntityTypes = this.activeEntityTypes(appName);
4538
+ const joinsAlreadyActiveEntityTypes = activeEntityTypes.size > 0;
4539
+ activeEntityTypes.add(entityType);
4540
+ if (joinsAlreadyActiveEntityTypes) {
4541
+ this.refreshFilterCounters(appName);
4542
+ }
4543
+ }
4544
+ deactivateEntityType(appName, entityType) {
4545
+ const key = this.entityTypeKey(appName, entityType);
4546
+ const activeSubscriberCount = (this.activeSubscriberCountPerEntityType.get(key) ?? 1) - 1;
4547
+ if (activeSubscriberCount > 0) {
4548
+ this.activeSubscriberCountPerEntityType.set(key, activeSubscriberCount);
4549
+ return;
4550
+ }
4551
+ this.activeSubscriberCountPerEntityType.delete(key);
4552
+ this.activeEntityTypes(appName).delete(entityType);
4553
+ }
4554
+ activeEntityTypes(appName) {
4555
+ let activeEntityTypes = this.activeEntityTypesPerApp.get(appName);
4556
+ if (!activeEntityTypes) {
4557
+ activeEntityTypes = new Set();
4558
+ this.activeEntityTypesPerApp.set(appName, activeEntityTypes);
4559
+ }
4560
+ return activeEntityTypes;
4561
+ }
4562
+ initialCounters(appName) {
4563
+ let initialCounters$ = this.initialCountersPerApp.get(appName);
4564
+ if (!initialCounters$) {
4565
+ initialCounters$ = merge(of(undefined), this.recountTrigger(appName)).pipe(debounceTime(0), switchMap(() => this.fetchActiveEntityTypesCounters(appName)), shareReplay({ bufferSize: 1, refCount: true }));
4566
+ this.initialCountersPerApp.set(appName, initialCounters$);
4567
+ }
4568
+ return initialCounters$;
4569
+ }
4570
+ pushedCounterUpdates(appName, entityType) {
4571
+ return merge(...PUSHED_COUNTER_SUBSCRIPTIONS_BY_ENTITY_TYPE[entityType].map((subscription) => this.pushedCounterUpdate(appName, subscription)));
4572
+ }
4573
+ pushedCounterUpdate(appName, subscription) {
4574
+ return defer(() => this.notificationCloudService.makeGQLQuery(appName, subscription.subscriptionQuery)).pipe(map((result) => result.data?.[subscription.graphQlFieldName]), filter((value) => value?.count !== undefined), map((value) => ({ filterKey: subscription.filterKey, count: value.count, asOf: value.asOf })), catchError(() => EMPTY));
4575
+ }
4576
+ toEntityTypeCounters(entries) {
4577
+ return Object.fromEntries(Object.entries(entries).map(([filterKey, entry]) => [filterKey, entry.count]));
4578
+ }
4579
+ fetchActiveEntityTypesCounters(appName) {
4580
+ const activeEntityTypes = this.activeEntityTypes(appName);
4581
+ return combineLatest({
4582
+ [FilterCounterEntityType.TASK]: activeEntityTypes.has(FilterCounterEntityType.TASK)
4583
+ ? this.getTaskFilters(appName).pipe(catchError(() => of([])))
4584
+ : of([]),
4585
+ [FilterCounterEntityType.PROCESS_INSTANCE]: activeEntityTypes.has(FilterCounterEntityType.PROCESS_INSTANCE)
4586
+ ? this.getProcessFilters(appName).pipe(catchError(() => of([])))
4587
+ : of([])
4588
+ }).pipe(take(1), switchMap((filters) => this.fetchFilterCounters(appName, this.buildRequest(filters))), catchError(() => EMPTY));
4589
+ }
4590
+ buildRequest(filters) {
4591
+ const request = {};
4592
+ const taskQueries = this.buildQueries(filters[FilterCounterEntityType.TASK], (taskFilter) => this.taskListCloudService.buildQueryData(new TaskFilterCloudAdapter(taskFilter)));
4593
+ if (taskQueries.length) {
4594
+ request[FilterCounterEntityType.TASK] = taskQueries;
4595
+ }
4596
+ const processQueries = this.buildQueries(filters[FilterCounterEntityType.PROCESS_INSTANCE], (processFilter) => this.processListCloudService.buildQueryData(new ProcessFilterCloudAdapter(processFilter)));
4597
+ if (processQueries.length) {
4598
+ request[FilterCounterEntityType.PROCESS_INSTANCE] = processQueries;
4599
+ }
4600
+ return request;
4601
+ }
4602
+ buildQueries(filters, buildQuery) {
4603
+ return (filters ?? [])
4604
+ .filter((candidate) => candidate?.showCounter && !!candidate?.key)
4605
+ .map((candidate) => {
4606
+ try {
4607
+ return { ...buildQuery(candidate), requestId: candidate.key };
4608
+ }
4609
+ catch {
4610
+ return undefined;
4611
+ }
4612
+ })
4613
+ .filter((query) => !!query);
4614
+ }
4615
+ fetchFilterCounters(appName, request) {
4616
+ if (!Object.keys(request).length) {
4617
+ return of({});
4618
+ }
4619
+ const queryUrl = `${this.getBasePath(appName)}/query/v1/count`;
4620
+ return this.post(queryUrl, request).pipe(map((counters) => counters || {}));
4621
+ }
4622
+ shareFilters(cache, appName, loadFilters) {
4623
+ let filters$ = cache.get(appName);
4624
+ if (!filters$) {
4625
+ filters$ = defer(loadFilters).pipe(shareReplay({ bufferSize: 1, refCount: true }));
4626
+ cache.set(appName, filters$);
4627
+ }
4628
+ return filters$;
4629
+ }
4630
+ recountTrigger(appName) {
4631
+ let recountTrigger$ = this.recountTriggerPerApp.get(appName);
4632
+ if (!recountTrigger$) {
4633
+ recountTrigger$ = new Subject();
4634
+ this.recountTriggerPerApp.set(appName, recountTrigger$);
4635
+ }
4636
+ return recountTrigger$;
4637
+ }
4638
+ entityTypeKey(appName, entityType) {
4639
+ return `${appName}|${entityType}`;
4640
+ }
4641
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: QueryPushedFilterCountersCloudService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
4642
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: QueryPushedFilterCountersCloudService, providedIn: 'root' }); }
4643
+ }
4644
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: QueryPushedFilterCountersCloudService, decorators: [{
4645
+ type: Injectable,
4646
+ args: [{ providedIn: 'root' }]
4647
+ }] });
4648
+
4379
4649
  /*!
4380
4650
  * @license
4381
4651
  * Copyright © 2005-2026 Hyland Software, Inc. and its affiliates. All rights reserved.
@@ -4718,6 +4988,13 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4718
4988
  *
4719
4989
  */
4720
4990
  this.searchApiMethod = 'GET';
4991
+ /**
4992
+ * (optional) Resolves the initial counters of the filters with a single call to
4993
+ * `POST /query/v1/count`, then keeps the counters of the `my-tasks` and `queued-tasks`
4994
+ * filters in sync with the counts pushed by the engine over the web socket, without any
4995
+ * further call to the count endpoint. Both filter components have to use the same value.
4996
+ */
4997
+ this.queryPushedCounter = false;
4721
4998
  /** Emitted when a filter is being selected based on the filterParam input. */
4722
4999
  this.filterSelected = new EventEmitter();
4723
5000
  /** Emitted when a filter is being clicked from the UI. */
@@ -4733,11 +5010,15 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4733
5010
  this.taskFilterCloudService = inject(TaskFilterCloudService);
4734
5011
  this.taskListCloudService = inject(TaskListCloudService);
4735
5012
  this.filterCountersCloudService = inject(FilterCountersCloudService);
5013
+ this.queryPushedFilterCountersCloudService = inject(QueryPushedFilterCountersCloudService);
4736
5014
  this.translationService = inject(TranslationService);
4737
5015
  this.appConfigService = inject(AppConfigService);
4738
5016
  this.activatedRoute = inject(ActivatedRoute);
4739
5017
  this.currentRouteFilterId = toSignal(this.activatedRoute.queryParamMap.pipe(map((params) => params.get('filterId'))));
4740
5018
  }
5019
+ get filterCountersService() {
5020
+ return this.queryPushedCounter ? this.queryPushedFilterCountersCloudService : this.filterCountersCloudService;
5021
+ }
4741
5022
  ngOnInit() {
4742
5023
  this.enableNotifications = this.appConfigService.get('notifications', true);
4743
5024
  this.notificationDebounceTime = this.appConfigService.get('notificationDebounceTime', 3000);
@@ -4756,6 +5037,10 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4756
5037
  else if (filter && filter.currentValue !== filter.previousValue) {
4757
5038
  this.selectFilterAndEmit(filter.currentValue);
4758
5039
  }
5040
+ else if (changes['queryPushedCounter'] && !changes['queryPushedCounter'].firstChange && this.filtersLoadedFor) {
5041
+ this.initFilterCounterNotifications();
5042
+ this.loadFilterCounters(this.filtersLoadedFor);
5043
+ }
4759
5044
  }
4760
5045
  /**
4761
5046
  * Loads the filter list filtered by appName
@@ -4764,7 +5049,7 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4764
5049
  */
4765
5050
  getFilters(appName) {
4766
5051
  this.filtersLoadedFor = appName;
4767
- const filters$ = this.filterCountersCloudService.getTaskFilters(appName);
5052
+ const filters$ = this.filterCountersService.getTaskFilters(appName);
4768
5053
  this.filters$ = filters$.pipe(catchError(() => of([])));
4769
5054
  filters$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
4770
5055
  next: (res) => {
@@ -4816,8 +5101,9 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4816
5101
  if (!this.appName) {
4817
5102
  return;
4818
5103
  }
5104
+ this.notificationsSubscription?.unsubscribe();
4819
5105
  if (this.enableNotifications) {
4820
- this.filterCountersCloudService
5106
+ this.notificationsSubscription = this.filterCountersService
4821
5107
  .getEngineEvents(this.appName, FilterCounterEntityType.TASK)
4822
5108
  .pipe(takeUntilDestroyed(this.destroyRef))
4823
5109
  .subscribe((events) => {
@@ -4920,7 +5206,7 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4920
5206
  this.countersSubscription?.unsubscribe();
4921
5207
  this.countersSubscription = combineLatest([
4922
5208
  this.countersFilters$.pipe(catchError(() => of([]))),
4923
- this.filterCountersCloudService.getFilterCounters(appName, FilterCounterEntityType.TASK)
5209
+ this.filterCountersService.getFilterCounters(appName, FilterCounterEntityType.TASK)
4924
5210
  ])
4925
5211
  .pipe(takeUntilDestroyed(this.destroyRef))
4926
5212
  .subscribe(([, { counters }]) => {
@@ -4955,16 +5241,18 @@ class TaskFiltersCloudComponent extends BaseTaskFiltersCloudComponent {
4955
5241
  this.currentFilter = undefined;
4956
5242
  }
4957
5243
  refreshFilterCounter() {
4958
- this.filterCountersCloudService.refreshFilterCounters(this.appName);
5244
+ this.filterCountersService.refreshFilterCounters(this.appName);
4959
5245
  }
4960
5246
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskFiltersCloudComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4961
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: TaskFiltersCloudComponent, isStandalone: true, selector: "adf-cloud-task-filters", inputs: { searchApiMethod: "searchApiMethod" }, outputs: { filterSelected: "filterSelected", filterClicked: "filterClicked", filterCounterUpdated: "filterCounterUpdated", updatedFilter: "updatedFilter" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[TASKS_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-task-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name | translate\"\n [attr.aria-label]=\"filter.name | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key]) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-task-filters__entry-counter\"\n [class.adf-active]=\"wasFilterUpdated(filter.key)\"\n >\n {{ counters[filter.key] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_TASK_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n", styles: [".adf-task-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-task-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i2$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "mat-icon[adf-icon]", inputs: ["adf-icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
5247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: TaskFiltersCloudComponent, isStandalone: true, selector: "adf-cloud-task-filters", inputs: { searchApiMethod: "searchApiMethod", queryPushedCounter: "queryPushedCounter" }, outputs: { filterSelected: "filterSelected", filterClicked: "filterClicked", filterCounterUpdated: "filterCounterUpdated", updatedFilter: "updatedFilter" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[TASKS_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-task-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name | translate\"\n [attr.aria-label]=\"filter.name | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key]) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-task-filters__entry-counter\"\n [class.adf-active]=\"wasFilterUpdated(filter.key)\"\n >\n {{ counters[filter.key] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_TASK_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n", styles: [".adf-task-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-task-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i2$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "mat-icon[adf-icon]", inputs: ["adf-icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
4962
5248
  }
4963
5249
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: TaskFiltersCloudComponent, decorators: [{
4964
5250
  type: Component,
4965
5251
  args: [{ selector: 'adf-cloud-task-filters', imports: [AsyncPipe, MatProgressSpinnerModule, TranslatePipe, MatListModule, RouterLink, IconModule], template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[TASKS_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-task-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name | translate\"\n [attr.aria-label]=\"filter.name | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key]) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-task-filters__entry-counter\"\n [class.adf-active]=\"wasFilterUpdated(filter.key)\"\n >\n {{ counters[filter.key] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_TASK_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n", styles: [".adf-task-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-task-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"] }]
4966
5252
  }], propDecorators: { searchApiMethod: [{
4967
5253
  type: Input
5254
+ }], queryPushedCounter: [{
5255
+ type: Input
4968
5256
  }], filterSelected: [{
4969
5257
  type: Output
4970
5258
  }], filterClicked: [{
@@ -11990,6 +12278,13 @@ class ProcessFiltersCloudComponent {
11990
12278
  *
11991
12279
  */
11992
12280
  this.searchApiMethod = 'GET';
12281
+ /**
12282
+ * (optional) Resolves the initial counters of the filters with a single call to
12283
+ * `POST /query/v1/count`, then keeps the counter of the `running-processes` filter in sync
12284
+ * with the counts pushed by the engine over the web socket, without any further call to the
12285
+ * count endpoint. Both filter components have to use the same value.
12286
+ */
12287
+ this.queryPushedCounter = false;
11993
12288
  /** (optional) Toggles showing an icon by the side of each filter */
11994
12289
  this.showIcons = false;
11995
12290
  /** Emitted when a filter is being selected based on the filterParam input. */
@@ -12014,9 +12309,13 @@ class ProcessFiltersCloudComponent {
12014
12309
  this.appConfigService = inject(AppConfigService);
12015
12310
  this.processListCloudService = inject(ProcessListCloudService);
12016
12311
  this.filterCountersCloudService = inject(FilterCountersCloudService);
12312
+ this.queryPushedFilterCountersCloudService = inject(QueryPushedFilterCountersCloudService);
12017
12313
  this.activatedRoute = inject(ActivatedRoute);
12018
12314
  this.currentRouteFilterId = toSignal(this.activatedRoute.queryParamMap.pipe(map((params) => params.get('filterId'))));
12019
12315
  }
12316
+ get filterCountersService() {
12317
+ return this.queryPushedCounter ? this.queryPushedFilterCountersCloudService : this.filterCountersCloudService;
12318
+ }
12020
12319
  ngOnInit() {
12021
12320
  this.enableNotifications = this.appConfigService.get('notifications', true);
12022
12321
  this.notificationDebounceTime = this.appConfigService.get('notificationDebounceTime', 3000);
@@ -12034,6 +12333,9 @@ class ProcessFiltersCloudComponent {
12034
12333
  else if (filter && filter.currentValue !== filter.previousValue) {
12035
12334
  this.selectFilterAndEmit(filter.currentValue);
12036
12335
  }
12336
+ else if (changes['queryPushedCounter'] && !changes['queryPushedCounter'].firstChange && this.filtersLoadedFor) {
12337
+ this.loadFilterCounters(this.filtersLoadedFor);
12338
+ }
12037
12339
  }
12038
12340
  /**
12039
12341
  * Fetch the filter list based on appName
@@ -12042,7 +12344,7 @@ class ProcessFiltersCloudComponent {
12042
12344
  */
12043
12345
  getFilters(appName) {
12044
12346
  this.filtersLoadedFor = appName;
12045
- const filters$ = this.filterCountersCloudService.getProcessFilters(appName);
12347
+ const filters$ = this.filterCountersService.getProcessFilters(appName);
12046
12348
  this.filters$ = filters$.pipe(catchError(() => of([])));
12047
12349
  filters$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
12048
12350
  next: (res) => {
@@ -12226,7 +12528,7 @@ class ProcessFiltersCloudComponent {
12226
12528
  this.countersSubscription?.unsubscribe();
12227
12529
  this.countersSubscription = combineLatest([
12228
12530
  this.countersFilters$.pipe(catchError(() => of([]))),
12229
- this.filterCountersCloudService.getFilterCounters(appName, FilterCounterEntityType.PROCESS_INSTANCE)
12531
+ this.filterCountersService.getFilterCounters(appName, FilterCounterEntityType.PROCESS_INSTANCE)
12230
12532
  ])
12231
12533
  .pipe(takeUntilDestroyed(this.destroyRef))
12232
12534
  .subscribe(([, { counters }]) => {
@@ -12249,7 +12551,7 @@ class ProcessFiltersCloudComponent {
12249
12551
  });
12250
12552
  }
12251
12553
  refreshFilterCounter() {
12252
- this.filterCountersCloudService.refreshFilterCounters(this.appName);
12554
+ this.filterCountersService.refreshFilterCounters(this.appName);
12253
12555
  }
12254
12556
  fetchProcessFilterCounter(filter) {
12255
12557
  return this.searchApiMethod === 'POST'
@@ -12257,7 +12559,7 @@ class ProcessFiltersCloudComponent {
12257
12559
  : this.processListCloudService.getProcessCounter(filter.appName, filter.status);
12258
12560
  }
12259
12561
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ProcessFiltersCloudComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12260
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: ProcessFiltersCloudComponent, isStandalone: true, selector: "adf-cloud-process-filters", inputs: { appName: "appName", searchApiMethod: "searchApiMethod", filterParam: "filterParam", showIcons: "showIcons" }, outputs: { filterSelected: "filterSelected", filterClicked: "filterClicked", success: "success", error: "error", updatedFilter: "updatedFilter" }, usesOnChanges: true, ngImport: i0, template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[PROCESSES_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-process-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name ?? '' | translate\"\n [attr.aria-label]=\"filter.name ?? '' | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name ?? '' | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon ?? ''\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key ?? '']) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-process-filters__entry-counter\"\n [class.adf-active]=\"isFilterUpdated(filter.key ?? '')\"\n >\n {{ counters[filter.key ?? ''] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_PROCESS_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n\n", styles: [".adf-process-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-process-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: IconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "mat-icon[adf-icon]", inputs: ["adf-icon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i2$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
12562
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: ProcessFiltersCloudComponent, isStandalone: true, selector: "adf-cloud-process-filters", inputs: { appName: "appName", searchApiMethod: "searchApiMethod", queryPushedCounter: "queryPushedCounter", filterParam: "filterParam", showIcons: "showIcons" }, outputs: { filterSelected: "filterSelected", filterClicked: "filterClicked", success: "success", error: "error", updatedFilter: "updatedFilter" }, usesOnChanges: true, ngImport: i0, template: "@if (filters$ | async; as filterList) {\n <mat-nav-list>\n @for (filter of filterList; track filter.id) {\n <a mat-list-item\n [activated]=\"filter.id === currentRouteFilterId()\"\n [routerLink]=\"[PROCESSES_ROUTE]\"\n [queryParams]=\"{ filterId: filter.id }\"\n [attr.data-automation-id]=\"filter.key + '_filter'\"\n class=\"adf-process-filters__entry\"\n [class.adf-active]=\"filter.id === currentRouteFilterId()\"\n [attr.aria-current]=\"filter.id === currentRouteFilterId() ? 'page' : null\"\n [id]=\"filter.id\"\n [title]=\"filter.name ?? '' | translate\"\n [attr.aria-label]=\"filter.name ?? '' | translate\"\n (click)=\"onFilterClick(filter)\">\n <span matListItemTitle>\n {{ filter.name ?? '' | translate }}\n </span>\n @if (showIcons) {\n <mat-icon matListItemIcon\n data-automation-id=\"adf-filter-icon\"\n [adf-icon]=\"filter.icon ?? ''\"\n aria-hidden=\"true\" />\n }\n @if (counters[filter.key ?? '']) {\n <span matListItemMeta\n [attr.data-automation-id]=\"filter.key + '_filter-counter'\"\n class=\"adf-process-filters__entry-counter\"\n [class.adf-active]=\"isFilterUpdated(filter.key ?? '')\"\n >\n {{ counters[filter.key ?? ''] }}\n </span>\n }\n </a>\n }\n </mat-nav-list>\n} @else {\n <div class=\"adf-app-list-spinner\">\n <mat-spinner [attr.aria-label]=\"'ADF_CLOUD_PROCESS_LIST.LOADING' | translate\" aria-live=\"polite\" />\n </div>\n}\n\n", styles: [".adf-process-filters__entry-counter{padding:0 5px;border-radius:var(--mat-sys-corner-large)}.adf-process-filters__entry-counter.adf-active{background-color:var(--mat-sys-secondary);--mat-list-list-item-trailing-supporting-text-color: var(--mat-sys-on-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: IconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IconDirective, selector: "mat-icon[adf-icon]", inputs: ["adf-icon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i2$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
12261
12563
  }
12262
12564
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ProcessFiltersCloudComponent, decorators: [{
12263
12565
  type: Component,
@@ -12266,6 +12568,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
12266
12568
  type: Input
12267
12569
  }], searchApiMethod: [{
12268
12570
  type: Input
12571
+ }], queryPushedCounter: [{
12572
+ type: Input
12269
12573
  }], filterParam: [{
12270
12574
  type: Input
12271
12575
  }], showIcons: [{
@@ -17108,5 +17412,5 @@ const DATE_FORMAT_CLOUD = 'YYYY-MM-DD';
17108
17412
  * Generated bundle index. Do not edit.
17109
17413
  */
17110
17414
 
17111
- export { ADF_FORM_TAB_NAV_ENABLED, ADF_TASK_RUNTIME_BUNDLE_FALLBACK_ENABLED, APP_CUSTOM_SCREEN_TOKEN, ApplicationVersionModel, ApplicationVersionResponseModel, AppsProcessCloudService, AssignmentType, AttachFileCloudWidgetComponent, BaseCloudService, CLOUD_FORM_FIELD_VALIDATORS, CloudFormRenderingService, ContentCloudNodeSelectorService, DATE_FORMAT_CLOUD, DEFAULT_OPTION, DEFAULT_TASK_PRIORITIES, DROPDOWN_CLOUD_WIDGET_SET_VALUE_DEBOUNCE, DateCloudFilterType, DateCloudWidgetComponent, DateRangeFilterService, DescriptorCustomUIAuthFlowType, DisplayModeService, DisplayRichTextWidgetComponent, DropdownCloudFieldValidator, DropdownCloudWidgetComponent, EditProcessFilterCloudComponent, EditServiceTaskFilterCloudComponent, EditTaskFilterCloudComponent, FORM_CLOUD_DIRECTIVES, FORM_CLOUD_FIELD_VALIDATORS_TOKEN, FORM_CLOUD_SERVICE_FIELD_VALIDATORS_TOKEN, FilePropertiesTableCloudComponent, FileViewerWidgetComponent, FilterCounterEntityType, FilterCountersCloudService, FormCloudComponent, FormCloudDisplayMode, FormCloudModule, FormCloudService, FormCustomOutcomesComponent, FormFieldType, FormSpinnerComponent, GroupCloudComponent, GroupCloudModule, GroupCloudWidgetComponent, HIDE_FILTER_LIMIT, IdentityGroupService, IdentityUserService, LocalPreferenceCloudService, NotificationCloudService, PROCESS_CLOUD_DIRECTIVES, PROCESS_FILTERS_CLOUD_DIRECTIVES, PROCESS_FILTERS_SERVICE_TOKEN, PROCESS_FILTER_ACTION_DELETE, PROCESS_FILTER_ACTION_RESTORE, PROCESS_FILTER_ACTION_SAVE, PROCESS_FILTER_ACTION_SAVE_AS, PROCESS_FILTER_ACTION_SAVE_DEFAULT, PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN, PROCESS_SERVICES_CLOUD_DIRECTIVES, PeopleCloudComponent, PeopleCloudModule, PeopleCloudWidgetComponent, PeopleModeOptions, ProcessCloudContentService, ProcessCloudModule, ProcessCloudService, ProcessDefinitionCloud, ProcessFilterCloudAdapter, ProcessFilterCloudModel, ProcessFilterCloudService, ProcessFilterDialogCloudComponent, ProcessFiltersCloudComponent, ProcessFiltersCloudModule, ProcessHeaderCloudComponent, ProcessHeaderCloudModule, ProcessListCloudComponent, ProcessListCloudModule, ProcessListCloudPreferences, ProcessListCloudService, ProcessListCloudSortingModel, ProcessListRequestModel, ProcessListRequestSortingModel, ProcessPayloadCloud, ProcessQueryCloudRequestModel, ProcessServicesCloudModule, ProcessTaskListCloudService, PropertiesViewerWidgetComponent, PropertiesViewerWrapperComponent, RICH_TEXT_PARSER_TOKEN, RadioButtonsCloudWidgetComponent, ScreenRenderingService, ServiceTaskFilterCloudService, ServiceTaskFiltersCloudComponent, ServiceTaskListCloudComponent, ServiceTaskListCloudService, StartProcessCloudComponent, StartProcessCloudService, StartProcessScreenCloudComponent, StartTaskCloudRequestModel, TASK_ASSIGNED_STATE, TASK_CANCELLED_STATE, TASK_CLAIM_PERMISSION, TASK_COMPLETED_STATE, TASK_CREATED_STATE, TASK_FILTERS_CLOUD_DIRECTIVES, TASK_FILTERS_SERVICE_TOKEN, TASK_FORM_CLOUD_DIRECTIVES, TASK_LIST_CLOUD_DIRECTIVES, TASK_LIST_CLOUD_TOKEN, TASK_LIST_PREFERENCES_SERVICE_TOKEN, TASK_RELEASE_PERMISSION, TASK_SUSPENDED_STATE, TASK_UPDATE_PERMISSION, TASK_VIEW_PERMISSION, TaskAssignmentFilterCloudComponent, TaskCloudEntryModel, TaskCloudModule, TaskCloudNodePaging, TaskCloudPagingList, TaskCloudService, TaskFilterCloudAdapter, TaskFilterCloudModel, TaskFilterCloudService, TaskFilterDialogCloudComponent, TaskFiltersCloudComponent, TaskFiltersCloudModule, TaskFormCloudComponent, TaskFormModule, TaskHeaderCloudComponent, TaskHeaderCloudModule, TaskListCloudComponent, TaskListCloudModule, TaskListCloudService, TaskListCloudSortingModel, TaskListRequestModel, TaskListRequestSortingModel, TaskQueryCloudRequestModel, TaskStatusFilter, TaskVariableCloud, UploadCloudWidgetComponent, UserPreferenceCloudService, UserTaskCloudButtonsComponent, UserTaskCloudComponent, VariableMapperService, WebSocketService, getDateCloudWidgetRange, getExpressionEvaluationEnabled$, materializeSubmissionValues, processCloudPresetsDefaultModel, provideCloudFormRenderer, provideCloudPreferences, provideScreen, radioButtonsSchema, resolveTaskRuntimeBundleFallback$ };
17415
+ export { ADF_FORM_TAB_NAV_ENABLED, ADF_TASK_RUNTIME_BUNDLE_FALLBACK_ENABLED, APP_CUSTOM_SCREEN_TOKEN, ApplicationVersionModel, ApplicationVersionResponseModel, AppsProcessCloudService, AssignmentType, AttachFileCloudWidgetComponent, BaseCloudService, CLOUD_FORM_FIELD_VALIDATORS, CloudFormRenderingService, ContentCloudNodeSelectorService, DATE_FORMAT_CLOUD, DEFAULT_OPTION, DEFAULT_TASK_PRIORITIES, DROPDOWN_CLOUD_WIDGET_SET_VALUE_DEBOUNCE, DateCloudFilterType, DateCloudWidgetComponent, DateRangeFilterService, DescriptorCustomUIAuthFlowType, DisplayModeService, DisplayRichTextWidgetComponent, DropdownCloudFieldValidator, DropdownCloudWidgetComponent, EditProcessFilterCloudComponent, EditServiceTaskFilterCloudComponent, EditTaskFilterCloudComponent, FORM_CLOUD_DIRECTIVES, FORM_CLOUD_FIELD_VALIDATORS_TOKEN, FORM_CLOUD_SERVICE_FIELD_VALIDATORS_TOKEN, FilePropertiesTableCloudComponent, FileViewerWidgetComponent, FilterCounterEntityType, FilterCountersCloudService, FormCloudComponent, FormCloudDisplayMode, FormCloudModule, FormCloudService, FormCustomOutcomesComponent, FormFieldType, FormSpinnerComponent, GroupCloudComponent, GroupCloudModule, GroupCloudWidgetComponent, HIDE_FILTER_LIMIT, IdentityGroupService, IdentityUserService, LocalPreferenceCloudService, NotificationCloudService, PROCESS_CLOUD_DIRECTIVES, PROCESS_FILTERS_CLOUD_DIRECTIVES, PROCESS_FILTERS_SERVICE_TOKEN, PROCESS_FILTER_ACTION_DELETE, PROCESS_FILTER_ACTION_RESTORE, PROCESS_FILTER_ACTION_SAVE, PROCESS_FILTER_ACTION_SAVE_AS, PROCESS_FILTER_ACTION_SAVE_DEFAULT, PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN, PROCESS_SERVICES_CLOUD_DIRECTIVES, PeopleCloudComponent, PeopleCloudModule, PeopleCloudWidgetComponent, PeopleModeOptions, ProcessCloudContentService, ProcessCloudModule, ProcessCloudService, ProcessDefinitionCloud, ProcessFilterCloudAdapter, ProcessFilterCloudModel, ProcessFilterCloudService, ProcessFilterDialogCloudComponent, ProcessFiltersCloudComponent, ProcessFiltersCloudModule, ProcessHeaderCloudComponent, ProcessHeaderCloudModule, ProcessListCloudComponent, ProcessListCloudModule, ProcessListCloudPreferences, ProcessListCloudService, ProcessListCloudSortingModel, ProcessListRequestModel, ProcessListRequestSortingModel, ProcessPayloadCloud, ProcessQueryCloudRequestModel, ProcessServicesCloudModule, ProcessTaskListCloudService, PropertiesViewerWidgetComponent, PropertiesViewerWrapperComponent, QueryPushedFilterCountersCloudService, RICH_TEXT_PARSER_TOKEN, RadioButtonsCloudWidgetComponent, ScreenRenderingService, ServiceTaskFilterCloudService, ServiceTaskFiltersCloudComponent, ServiceTaskListCloudComponent, ServiceTaskListCloudService, StartProcessCloudComponent, StartProcessCloudService, StartProcessScreenCloudComponent, StartTaskCloudRequestModel, TASK_ASSIGNED_STATE, TASK_CANCELLED_STATE, TASK_CLAIM_PERMISSION, TASK_COMPLETED_STATE, TASK_CREATED_STATE, TASK_FILTERS_CLOUD_DIRECTIVES, TASK_FILTERS_SERVICE_TOKEN, TASK_FORM_CLOUD_DIRECTIVES, TASK_LIST_CLOUD_DIRECTIVES, TASK_LIST_CLOUD_TOKEN, TASK_LIST_PREFERENCES_SERVICE_TOKEN, TASK_RELEASE_PERMISSION, TASK_SUSPENDED_STATE, TASK_UPDATE_PERMISSION, TASK_VIEW_PERMISSION, TaskAssignmentFilterCloudComponent, TaskCloudEntryModel, TaskCloudModule, TaskCloudNodePaging, TaskCloudPagingList, TaskCloudService, TaskFilterCloudAdapter, TaskFilterCloudModel, TaskFilterCloudService, TaskFilterDialogCloudComponent, TaskFiltersCloudComponent, TaskFiltersCloudModule, TaskFormCloudComponent, TaskFormModule, TaskHeaderCloudComponent, TaskHeaderCloudModule, TaskListCloudComponent, TaskListCloudModule, TaskListCloudService, TaskListCloudSortingModel, TaskListRequestModel, TaskListRequestSortingModel, TaskQueryCloudRequestModel, TaskStatusFilter, TaskVariableCloud, UploadCloudWidgetComponent, UserPreferenceCloudService, UserTaskCloudButtonsComponent, UserTaskCloudComponent, VariableMapperService, WebSocketService, getDateCloudWidgetRange, getExpressionEvaluationEnabled$, materializeSubmissionValues, processCloudPresetsDefaultModel, provideCloudFormRenderer, provideCloudPreferences, provideScreen, radioButtonsSchema, resolveTaskRuntimeBundleFallback$ };
17112
17416
  //# sourceMappingURL=adf-process-services-cloud.mjs.map