@valtimo/components 13.49.1 → 13.50.0
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.
- package/assets/css/compatibility.scss +1 -1
- package/fesm2022/valtimo-components.mjs +397 -33
- package/fesm2022/valtimo-components.mjs.map +1 -1
- package/lib/components/assign-user/assignment.component.d.ts +4 -1
- package/lib/components/assign-user/assignment.component.d.ts.map +1 -1
- package/lib/components/page-header/page-header.component.d.ts +3 -1
- package/lib/components/page-header/page-header.component.d.ts.map +1 -1
- package/lib/components/side-panel/side-panel.component.d.ts +47 -0
- package/lib/components/side-panel/side-panel.component.d.ts.map +1 -0
- package/lib/constants/components.test-ids.d.ts +9 -0
- package/lib/constants/components.test-ids.d.ts.map +1 -1
- package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts +3 -1
- package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts.map +1 -1
- package/lib/models/index.d.ts +1 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/side-panel.model.d.ts +48 -0
- package/lib/models/side-panel.model.d.ts.map +1 -0
- package/lib/services/index.d.ts +1 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/page-title.service.d.ts +10 -0
- package/lib/services/page-title.service.d.ts.map +1 -1
- package/lib/services/side-panel.service.d.ts +40 -0
- package/lib/services/side-panel.service.d.ts.map +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -1
- package/lib/utils/observer.utils.d.ts +15 -0
- package/lib/utils/observer.utils.d.ts.map +1 -0
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/public_api.d.ts.map +1 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, Pipe, NgModule, Injectable, RendererStyleFlags2, Inject, signal, computed, Input, Component, Directive, EventEmitter, Output, ViewContainerRef, ViewChild, HostBinding, HostListener, ChangeDetectionStrategy, ContentChildren, ViewEncapsulation, inject, TemplateRef, ContentChild, ElementRef, forwardRef } from '@angular/core';
|
|
3
|
-
import { combineLatest, map, BehaviorSubject, switchMap, catchError, of, shareReplay, tap, Subscription, Observable, filter as filter$1, fromEvent, Subject, take as take$1, interval, takeUntil, merge, startWith, debounceTime as debounceTime$1, timer, first } from 'rxjs';
|
|
2
|
+
import { InjectionToken, Pipe, NgModule, Injectable, RendererStyleFlags2, Inject, signal, computed, Input, Component, Directive, EventEmitter, Output, ViewContainerRef, ViewChild, HostBinding, HostListener, ChangeDetectionStrategy, ContentChildren, ViewEncapsulation, effect, inject, TemplateRef, ContentChild, ElementRef, forwardRef } from '@angular/core';
|
|
3
|
+
import { combineLatest, map, BehaviorSubject, switchMap, catchError, of, shareReplay, tap, Subscription, Observable, filter as filter$1, fromEvent, Subject, take as take$1, interval, distinctUntilChanged, takeUntil, merge, isObservable, startWith, debounceTime as debounceTime$1, timer, first } from 'rxjs';
|
|
4
4
|
import * as i1 from '@ngx-translate/core';
|
|
5
5
|
import { TranslateModule, TranslateLoader, TranslateService, TranslatePipe } from '@ngx-translate/core';
|
|
6
6
|
import * as i1$2 from '@valtimo/shared';
|
|
7
7
|
import { BaseApiService, IncludeFunction, ROLE_USER, ROLE_ADMIN, ROLE_DEVELOPER, VERSIONS, HttpLoaderFactory, getContextObservable, getCaseManagementRouteParams, getBuildingBlockManagementRouteParams, sanitizeKey, toKebabCase } from '@valtimo/shared';
|
|
8
8
|
import * as i1$1 from '@angular/common/http';
|
|
9
9
|
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
10
|
-
import { filter, map as map$1, take, tap as tap$1, debounceTime, distinctUntilChanged, takeUntil as takeUntil$1, startWith as startWith$1, switchMap as switchMap$1, delay } from 'rxjs/operators';
|
|
10
|
+
import { filter, map as map$1, take, tap as tap$1, debounceTime, distinctUntilChanged as distinctUntilChanged$1, takeUntil as takeUntil$1, startWith as startWith$1, switchMap as switchMap$1, delay } from 'rxjs/operators';
|
|
11
11
|
import * as i1$4 from '@angular/common';
|
|
12
|
-
import { DOCUMENT, CommonModule, registerLocaleData, CurrencyPipe, DecimalPipe, PercentPipe } from '@angular/common';
|
|
12
|
+
import { DOCUMENT, CommonModule, NgComponentOutlet, registerLocaleData, CurrencyPipe, DecimalPipe, PercentPipe } from '@angular/common';
|
|
13
13
|
import * as i1$3 from '@angular/router';
|
|
14
|
-
import { NavigationEnd, NavigationStart, ResolveEnd, RouterModule } from '@angular/router';
|
|
14
|
+
import { NavigationEnd, NavigationStart, ResolveEnd, RouterModule, RouterLink } from '@angular/router';
|
|
15
15
|
import * as i2 from '@angular/forms';
|
|
16
16
|
import { Validators, UntypedFormControl, ReactiveFormsModule, FormsModule, FormControl, FormGroup, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
17
17
|
import { deepmerge } from 'deepmerge-ts';
|
|
@@ -24,7 +24,7 @@ import moment from 'moment';
|
|
|
24
24
|
import User20 from '@carbon/icons/es/user/20';
|
|
25
25
|
import * as i2$2 from 'keycloak-angular';
|
|
26
26
|
import * as i2$3 from 'carbon-components-angular';
|
|
27
|
-
import { UIShellModule, IconModule, LinkModule, GridModule, TabsModule, StructuredListModule, ToggleModule, TagModule, DropdownModule, LayerModule, SkeletonModule, LoadingModule, Table, TableHeaderItem, TableModel, TableItem, PaginationModule, TableModule as TableModule$1, ContentSwitcherModule,
|
|
27
|
+
import { UIShellModule, IconModule, LinkModule, GridModule, TabsModule, StructuredListModule, ToggleModule, TagModule, DropdownModule, LayerModule, ButtonModule, TooltipModule as TooltipModule$1, SkeletonModule, LoadingModule, Table, TableHeaderItem, TableModel, TableItem, PaginationModule, TableModule as TableModule$1, ContentSwitcherModule, DialogModule, ModalModule as ModalModule$1, BreadcrumbModule, InputModule as InputModule$1, ComboBoxModule, ComboBox, CheckboxModule, AccordionModule, DatePickerModule as DatePickerModule$1, TimePickerModule, ModalButtonType, TilesModule, SelectModule as SelectModule$1, RadioModule as RadioModule$1, ModalService as ModalService$1, NotificationModule, ContextMenuModule, ToggletipModule } from 'carbon-components-angular';
|
|
28
28
|
import * as i6 from '@angular/platform-browser';
|
|
29
29
|
import * as i2$1 from 'ngx-skeleton-loader';
|
|
30
30
|
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
|
|
@@ -35,7 +35,8 @@ import { NgbTooltipModule, NgbPaginationModule } from '@ng-bootstrap/ng-bootstra
|
|
|
35
35
|
import { autoUpdate, computePosition, offset, flip, shift, hide } from '@floating-ui/dom';
|
|
36
36
|
import * as i3 from '@angular/cdk/drag-drop';
|
|
37
37
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
38
|
-
import { Draggable16, OverflowMenuVertical16, ArrowDown16, ArrowUp16, SettingsView16, View16, ViewOff16, ChevronUp16, ChevronDown16,
|
|
38
|
+
import { Draggable16, Close16, PinFilled16, OverflowMenuVertical16, ArrowDown16, ArrowUp16, SettingsView16, View16, ViewOff16, ChevronUp16, ChevronDown16, Add16, Edit16, TrashCan16, Save16, WarningAltFilled16, WarningFilled16, DocumentRequirements16, UserFollow16, Group16, User16 } from '@carbon/icons';
|
|
39
|
+
import { toSignal, toObservable } from '@angular/core/rxjs-interop';
|
|
39
40
|
import * as i3$1 from '@angular/cdk/layout';
|
|
40
41
|
import { LayoutModule } from '@angular/cdk/layout';
|
|
41
42
|
import localeNl from '@angular/common/locales/nl';
|
|
@@ -779,6 +780,22 @@ var ValuePathSelectorInputMode;
|
|
|
779
780
|
* limitations under the License.
|
|
780
781
|
*/
|
|
781
782
|
|
|
783
|
+
/*
|
|
784
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
785
|
+
*
|
|
786
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
787
|
+
* you may not use this file except in compliance with the License.
|
|
788
|
+
* You may obtain a copy of the License at
|
|
789
|
+
*
|
|
790
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
791
|
+
*
|
|
792
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
793
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
794
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
795
|
+
* See the License for the specific language governing permissions and
|
|
796
|
+
* limitations under the License.
|
|
797
|
+
*/
|
|
798
|
+
|
|
782
799
|
/*
|
|
783
800
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
784
801
|
*
|
|
@@ -1185,6 +1202,15 @@ const SEARCH_FIELDS_TEST_IDS = {
|
|
|
1185
1202
|
* itself is one level down.
|
|
1186
1203
|
*/
|
|
1187
1204
|
const SEARCH_FIELD_TEST_ID_PREFIX = 'searchField-';
|
|
1205
|
+
const SIDE_PANEL_TEST_IDS = {
|
|
1206
|
+
panel: 'sidePanel',
|
|
1207
|
+
closeButton: 'sidePanelCloseButton',
|
|
1208
|
+
resizeHandle: 'sidePanelResizeHandle',
|
|
1209
|
+
subtitleLink: 'sidePanelSubtitleLink',
|
|
1210
|
+
pinnedIcon: 'sidePanelPinnedIcon',
|
|
1211
|
+
origin: 'sidePanelOrigin',
|
|
1212
|
+
originElsewhere: 'sidePanelOriginElsewhere',
|
|
1213
|
+
};
|
|
1188
1214
|
|
|
1189
1215
|
/*
|
|
1190
1216
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -2017,6 +2043,12 @@ class PageTitleService {
|
|
|
2017
2043
|
get pageActionsFullWidth$() {
|
|
2018
2044
|
return this._pageActionsFullWidth$.asObservable();
|
|
2019
2045
|
}
|
|
2046
|
+
get pageActionsWrap$() {
|
|
2047
|
+
return this._pageActionsWrap$.asObservable();
|
|
2048
|
+
}
|
|
2049
|
+
get pageActionsMinWidth$() {
|
|
2050
|
+
return this._pageActionsMinWidth$.asObservable();
|
|
2051
|
+
}
|
|
2020
2052
|
get pageTitleHidden$() {
|
|
2021
2053
|
return this._pageTitleHidden$.asObservable();
|
|
2022
2054
|
}
|
|
@@ -2032,6 +2064,8 @@ class PageTitleService {
|
|
|
2032
2064
|
this._customPageSubtitleSet$ = new BehaviorSubject(false);
|
|
2033
2065
|
this._hasPageActions$ = new BehaviorSubject(false);
|
|
2034
2066
|
this._pageActionsFullWidth$ = new BehaviorSubject(false);
|
|
2067
|
+
this._pageActionsWrap$ = new BehaviorSubject(false);
|
|
2068
|
+
this._pageActionsMinWidth$ = new BehaviorSubject(null);
|
|
2035
2069
|
this._pageActionsViewContainerRef$ = new BehaviorSubject(null);
|
|
2036
2070
|
this._pageTitleHidden$ = new BehaviorSubject(false);
|
|
2037
2071
|
this._currentTitle$ = new BehaviorSubject('');
|
|
@@ -2067,6 +2101,16 @@ class PageTitleService {
|
|
|
2067
2101
|
setPageActionsFullWidth(value) {
|
|
2068
2102
|
this._pageActionsFullWidth$.next(value);
|
|
2069
2103
|
}
|
|
2104
|
+
setPageActionsWrap(value) {
|
|
2105
|
+
this._pageActionsWrap$.next(value);
|
|
2106
|
+
}
|
|
2107
|
+
/**
|
|
2108
|
+
* The narrowest width wrapping page actions can adapt to. They stay beside the title as long as
|
|
2109
|
+
* this fits; null means their natural width.
|
|
2110
|
+
*/
|
|
2111
|
+
setPageActionsMinWidth(width) {
|
|
2112
|
+
this._pageActionsMinWidth$.next(width);
|
|
2113
|
+
}
|
|
2070
2114
|
setCustomPageTitleSet(set) {
|
|
2071
2115
|
this._customPageTitleSet$.next(set);
|
|
2072
2116
|
}
|
|
@@ -2097,6 +2141,8 @@ class PageTitleService {
|
|
|
2097
2141
|
if (pageActionsViewContainerRef && !preventReset) {
|
|
2098
2142
|
pageActionsViewContainerRef.clear();
|
|
2099
2143
|
this.setHasPageActions(false);
|
|
2144
|
+
this.setPageActionsWrap(false);
|
|
2145
|
+
this.setPageActionsMinWidth(null);
|
|
2100
2146
|
}
|
|
2101
2147
|
}))
|
|
2102
2148
|
.subscribe();
|
|
@@ -2901,6 +2947,163 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
2901
2947
|
}]
|
|
2902
2948
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1$2.ConfigService }] });
|
|
2903
2949
|
|
|
2950
|
+
/*
|
|
2951
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
2952
|
+
*
|
|
2953
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
2954
|
+
* you may not use this file except in compliance with the License.
|
|
2955
|
+
* You may obtain a copy of the License at
|
|
2956
|
+
*
|
|
2957
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
2958
|
+
*
|
|
2959
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
2960
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
2961
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2962
|
+
* See the License for the specific language governing permissions and
|
|
2963
|
+
* limitations under the License.
|
|
2964
|
+
*/
|
|
2965
|
+
const SIDE_PANEL_WIDTH_STORAGE_KEY = 'sidePanelWidth';
|
|
2966
|
+
const SIDE_PANEL_DEFAULT_WIDTH = 480;
|
|
2967
|
+
const SIDE_PANEL_MIN_WIDTH = 320;
|
|
2968
|
+
const SIDE_PANEL_MAX_WIDTH = 960;
|
|
2969
|
+
class SidePanelHandleImpl {
|
|
2970
|
+
constructor(_onHide, _onWithdraw) {
|
|
2971
|
+
this._onHide = _onHide;
|
|
2972
|
+
this._onWithdraw = _onWithdraw;
|
|
2973
|
+
this._dismissed$ = new Subject();
|
|
2974
|
+
this._replaced$ = new Subject();
|
|
2975
|
+
this._resized$ = new Subject();
|
|
2976
|
+
this.dismissed$ = this._dismissed$.asObservable();
|
|
2977
|
+
this.replaced$ = this._replaced$.asObservable();
|
|
2978
|
+
this.resized$ = this._resized$.asObservable();
|
|
2979
|
+
}
|
|
2980
|
+
hide() {
|
|
2981
|
+
this._onHide(this);
|
|
2982
|
+
}
|
|
2983
|
+
withdraw() {
|
|
2984
|
+
this._onWithdraw(this);
|
|
2985
|
+
}
|
|
2986
|
+
notifyDismissed() {
|
|
2987
|
+
this._dismissed$.next();
|
|
2988
|
+
}
|
|
2989
|
+
notifyReplaced() {
|
|
2990
|
+
this._replaced$.next();
|
|
2991
|
+
this._dismissed$.complete();
|
|
2992
|
+
this._replaced$.complete();
|
|
2993
|
+
this._resized$.complete();
|
|
2994
|
+
}
|
|
2995
|
+
notifyResized(width) {
|
|
2996
|
+
this._resized$.next(width);
|
|
2997
|
+
}
|
|
2998
|
+
}
|
|
2999
|
+
/**
|
|
3000
|
+
* App-wide side panel next to the routed content. Knows nothing about what it shows: providers
|
|
3001
|
+
* offer content, the latest offer takes over. Dismissing only hides; the content stays alive until
|
|
3002
|
+
* withdrawn or replaced.
|
|
3003
|
+
*/
|
|
3004
|
+
class SidePanelService {
|
|
3005
|
+
constructor() {
|
|
3006
|
+
this._current$ = new BehaviorSubject(null);
|
|
3007
|
+
this._visible$ = new BehaviorSubject(false);
|
|
3008
|
+
this._preferredWidth$ = new BehaviorSubject(this.loadWidth());
|
|
3009
|
+
/** Width of content that brings its own; such content persists it, not the panel. */
|
|
3010
|
+
this._contentWidth$ = new BehaviorSubject(null);
|
|
3011
|
+
this._currentHandle = null;
|
|
3012
|
+
}
|
|
3013
|
+
get current$() {
|
|
3014
|
+
return this._current$.asObservable();
|
|
3015
|
+
}
|
|
3016
|
+
get visible$() {
|
|
3017
|
+
return this._visible$.asObservable();
|
|
3018
|
+
}
|
|
3019
|
+
/** The content's own width or else the user's preferred width, widened to the content's minimum. */
|
|
3020
|
+
get width$() {
|
|
3021
|
+
return combineLatest([this._preferredWidth$, this._contentWidth$, this._current$]).pipe(map(([preferred, contentWidth, current]) => this.clampWidth(Math.max(contentWidth ?? preferred, current?.minWidth ?? 0))), distinctUntilChanged());
|
|
3022
|
+
}
|
|
3023
|
+
dismiss() {
|
|
3024
|
+
if (!this._visible$.getValue())
|
|
3025
|
+
return;
|
|
3026
|
+
this._visible$.next(false);
|
|
3027
|
+
this._currentHandle?.notifyDismissed();
|
|
3028
|
+
}
|
|
3029
|
+
offer(offer) {
|
|
3030
|
+
const current = this._current$.getValue();
|
|
3031
|
+
if (this._currentHandle && current?.key === offer.key) {
|
|
3032
|
+
// Only a changed width from the provider wins over a resize it has not caught up with yet.
|
|
3033
|
+
if (offer.width !== current.width)
|
|
3034
|
+
this._contentWidth$.next(offer.width ?? null);
|
|
3035
|
+
this._current$.next(offer);
|
|
3036
|
+
this._visible$.next(true);
|
|
3037
|
+
return this._currentHandle;
|
|
3038
|
+
}
|
|
3039
|
+
this._currentHandle?.notifyReplaced();
|
|
3040
|
+
const handle = new SidePanelHandleImpl(hidden => this.hideHandle(hidden), withdrawn => this.withdrawHandle(withdrawn));
|
|
3041
|
+
this._currentHandle = handle;
|
|
3042
|
+
this._contentWidth$.next(offer.width ?? null);
|
|
3043
|
+
this._current$.next(offer);
|
|
3044
|
+
this._visible$.next(true);
|
|
3045
|
+
return handle;
|
|
3046
|
+
}
|
|
3047
|
+
/**
|
|
3048
|
+
* Shows retained content again, also when hidden via `SidePanelHandle.hide()`. Does not notify
|
|
3049
|
+
* the provider.
|
|
3050
|
+
*/
|
|
3051
|
+
reopen() {
|
|
3052
|
+
if (this._current$.getValue())
|
|
3053
|
+
this._visible$.next(true);
|
|
3054
|
+
}
|
|
3055
|
+
/** Withdraws the current content only when it still carries [key]. */
|
|
3056
|
+
withdraw(key) {
|
|
3057
|
+
if (this._current$.getValue()?.key === key && this._currentHandle) {
|
|
3058
|
+
this.withdrawHandle(this._currentHandle);
|
|
3059
|
+
}
|
|
3060
|
+
}
|
|
3061
|
+
/** Resizes live. Call [endResize] once the user lets go. */
|
|
3062
|
+
setWidth(width) {
|
|
3063
|
+
const clamped = this.clampWidth(width);
|
|
3064
|
+
if (this._contentWidth$.getValue() !== null) {
|
|
3065
|
+
this._contentWidth$.next(clamped);
|
|
3066
|
+
return;
|
|
3067
|
+
}
|
|
3068
|
+
this._preferredWidth$.next(clamped);
|
|
3069
|
+
localStorage.setItem(SIDE_PANEL_WIDTH_STORAGE_KEY, `${clamped}`);
|
|
3070
|
+
}
|
|
3071
|
+
/** Reports the final width to the provider of the current content. */
|
|
3072
|
+
endResize() {
|
|
3073
|
+
this._currentHandle?.notifyResized(this._contentWidth$.getValue() ?? this._preferredWidth$.getValue());
|
|
3074
|
+
}
|
|
3075
|
+
clampWidth(width) {
|
|
3076
|
+
const max = Math.min(SIDE_PANEL_MAX_WIDTH, Math.floor(window.innerWidth * 0.6));
|
|
3077
|
+
return Math.round(Math.max(SIDE_PANEL_MIN_WIDTH, Math.min(width, max)));
|
|
3078
|
+
}
|
|
3079
|
+
hideHandle(handle) {
|
|
3080
|
+
if (handle === this._currentHandle && this._visible$.getValue())
|
|
3081
|
+
this._visible$.next(false);
|
|
3082
|
+
}
|
|
3083
|
+
loadWidth() {
|
|
3084
|
+
const stored = Number(localStorage.getItem(SIDE_PANEL_WIDTH_STORAGE_KEY));
|
|
3085
|
+
return Number.isFinite(stored) && stored > 0
|
|
3086
|
+
? this.clampWidth(stored)
|
|
3087
|
+
: SIDE_PANEL_DEFAULT_WIDTH;
|
|
3088
|
+
}
|
|
3089
|
+
withdrawHandle(handle) {
|
|
3090
|
+
if (handle !== this._currentHandle)
|
|
3091
|
+
return;
|
|
3092
|
+
this._currentHandle = null;
|
|
3093
|
+
this._contentWidth$.next(null);
|
|
3094
|
+
this._current$.next(null);
|
|
3095
|
+
this._visible$.next(false);
|
|
3096
|
+
}
|
|
3097
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: SidePanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3098
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: SidePanelService, providedIn: 'root' }); }
|
|
3099
|
+
}
|
|
3100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: SidePanelService, decorators: [{
|
|
3101
|
+
type: Injectable,
|
|
3102
|
+
args: [{
|
|
3103
|
+
providedIn: 'root',
|
|
3104
|
+
}]
|
|
3105
|
+
}] });
|
|
3106
|
+
|
|
2904
3107
|
/*
|
|
2905
3108
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
2906
3109
|
*
|
|
@@ -3415,6 +3618,42 @@ const setRequiredOnSchema = (schema, path, property, isRequired) => {
|
|
|
3415
3618
|
return schema;
|
|
3416
3619
|
};
|
|
3417
3620
|
|
|
3621
|
+
/*
|
|
3622
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
3623
|
+
*
|
|
3624
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3625
|
+
* you may not use this file except in compliance with the License.
|
|
3626
|
+
* You may obtain a copy of the License at
|
|
3627
|
+
*
|
|
3628
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
3629
|
+
*
|
|
3630
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3631
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
3632
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3633
|
+
* See the License for the specific language governing permissions and
|
|
3634
|
+
* limitations under the License.
|
|
3635
|
+
*/
|
|
3636
|
+
/**
|
|
3637
|
+
* Resize observations of [elements]. Lazy: the observer opens on subscribe and disconnects on
|
|
3638
|
+
* unsubscribe. Emits each batch of entries from inside the observer callback, when layout is
|
|
3639
|
+
* fresh, so reading sizes there forces no extra layout. Runs in whatever zone it is subscribed in.
|
|
3640
|
+
*/
|
|
3641
|
+
const fromResizeObserver = (elements, options) => new Observable(subscriber => {
|
|
3642
|
+
const observer = new ResizeObserver(entries => subscriber.next(entries));
|
|
3643
|
+
(Array.isArray(elements) ? elements : [elements]).forEach(element => observer.observe(element, options));
|
|
3644
|
+
return () => observer.disconnect();
|
|
3645
|
+
});
|
|
3646
|
+
/** Mutation records of [target]. Lazy like [fromResizeObserver]. */
|
|
3647
|
+
const fromMutationObserver = (target, options) => new Observable(subscriber => {
|
|
3648
|
+
const observer = new MutationObserver(records => subscriber.next(records));
|
|
3649
|
+
observer.observe(target, options);
|
|
3650
|
+
return () => observer.disconnect();
|
|
3651
|
+
});
|
|
3652
|
+
/** The border-box inline size of a resize entry, in CSS pixels. */
|
|
3653
|
+
const borderBoxWidth = (entry) => entry.borderBoxSize?.[0]?.inlineSize ?? entry.target.getBoundingClientRect().width;
|
|
3654
|
+
/** The content-box inline size of a resize entry, in CSS pixels. */
|
|
3655
|
+
const contentBoxWidth = (entry) => entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width;
|
|
3656
|
+
|
|
3418
3657
|
/*
|
|
3419
3658
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
3420
3659
|
*
|
|
@@ -4375,7 +4614,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
4375
4614
|
|
|
4376
4615
|
class MenuService {
|
|
4377
4616
|
get menuItems$() {
|
|
4378
|
-
return this._menuItems$.pipe(distinctUntilChanged((prev, curr) => isEqual(prev, curr)));
|
|
4617
|
+
return this._menuItems$.pipe(distinctUntilChanged$1((prev, curr) => isEqual(prev, curr)));
|
|
4379
4618
|
}
|
|
4380
4619
|
get menuItemsLoaded$() {
|
|
4381
4620
|
return this._menuItems$.pipe(map$1(items => Array.isArray(items) && items.length > 0));
|
|
@@ -4409,7 +4648,7 @@ class MenuService {
|
|
|
4409
4648
|
});
|
|
4410
4649
|
});
|
|
4411
4650
|
return closestSequence;
|
|
4412
|
-
}), distinctUntilChanged());
|
|
4651
|
+
}), distinctUntilChanged$1());
|
|
4413
4652
|
}
|
|
4414
4653
|
constructor(configService, http, logger, menuIncludeService, pendingChangesService, router, userProviderService, keycloakService) {
|
|
4415
4654
|
this.configService = configService;
|
|
@@ -6160,6 +6399,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
6160
6399
|
}]
|
|
6161
6400
|
}] });
|
|
6162
6401
|
|
|
6402
|
+
/*
|
|
6403
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
6404
|
+
*
|
|
6405
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
6406
|
+
* you may not use this file except in compliance with the License.
|
|
6407
|
+
* You may obtain a copy of the License at
|
|
6408
|
+
*
|
|
6409
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
6410
|
+
*
|
|
6411
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
6412
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
6413
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
6414
|
+
* See the License for the specific language governing permissions and
|
|
6415
|
+
* limitations under the License.
|
|
6416
|
+
*/
|
|
6417
|
+
const SIDE_PANEL_OFFSET_PROPERTY = '--valtimo-side-panel-offset';
|
|
6418
|
+
const SIDE_PANEL_KEYBOARD_RESIZE_STEP = 16;
|
|
6419
|
+
/**
|
|
6420
|
+
* Fixed panel at the right edge of the internal layout. Rendered once next to the router outlet so
|
|
6421
|
+
* its content survives navigation; showing and hiding is CSS only, because moving an iframe in the
|
|
6422
|
+
* DOM reloads it. Publishes its occupied width as `--valtimo-side-panel-offset` so the layout can
|
|
6423
|
+
* push the page content aside.
|
|
6424
|
+
*/
|
|
6425
|
+
class SidePanelComponent {
|
|
6426
|
+
constructor(iconService, router, shellService, sidePanelService) {
|
|
6427
|
+
this.iconService = iconService;
|
|
6428
|
+
this.router = router;
|
|
6429
|
+
this.shellService = shellService;
|
|
6430
|
+
this.sidePanelService = sidePanelService;
|
|
6431
|
+
this.$current = toSignal(this.sidePanelService.current$, { initialValue: null });
|
|
6432
|
+
this.$offers = computed(() => {
|
|
6433
|
+
const current = this.$current();
|
|
6434
|
+
return current ? [current] : [];
|
|
6435
|
+
});
|
|
6436
|
+
/** The origin's label; null while a resolving label has not arrived. */
|
|
6437
|
+
this.$originLabel = toSignal(toObservable(this.$current).pipe(switchMap(current => {
|
|
6438
|
+
const label = current?.origin?.label;
|
|
6439
|
+
if (label === undefined)
|
|
6440
|
+
return of(null);
|
|
6441
|
+
return isObservable(label) ? label.pipe(startWith(null)) : of(label);
|
|
6442
|
+
})), { initialValue: null });
|
|
6443
|
+
/** The user is on a page other than the one the content belongs to. */
|
|
6444
|
+
this.$originElsewhere = computed(() => {
|
|
6445
|
+
const origin = this.$current()?.origin;
|
|
6446
|
+
if (!origin)
|
|
6447
|
+
return false;
|
|
6448
|
+
const originUrl = this.router.serializeUrl(this.router.createUrlTree(origin.route));
|
|
6449
|
+
const url = this._$url().split(/[?#]/)[0];
|
|
6450
|
+
return url !== originUrl && !url.startsWith(`${originUrl}/`);
|
|
6451
|
+
});
|
|
6452
|
+
this.$resizing = signal(false);
|
|
6453
|
+
this.$visible = toSignal(this.sidePanelService.visible$, { initialValue: false });
|
|
6454
|
+
this.$width = toSignal(this.sidePanelService.width$, { requireSync: true });
|
|
6455
|
+
this.testIds = SIDE_PANEL_TEST_IDS;
|
|
6456
|
+
this._endResize = null;
|
|
6457
|
+
this._$largeScreen = toSignal(this.shellService.largeScreen$, { initialValue: true });
|
|
6458
|
+
this._$url = toSignal(this.router.events.pipe(filter$1((event) => event instanceof NavigationEnd), map(event => event.urlAfterRedirects), startWith(this.router.url)), { requireSync: true });
|
|
6459
|
+
this.iconService.registerAll([Close16, PinFilled16]);
|
|
6460
|
+
// Small screens: overlay instead of push.
|
|
6461
|
+
effect(() => {
|
|
6462
|
+
const offset = this.$current() && this.$visible() && this._$largeScreen() ? this.$width() : 0;
|
|
6463
|
+
document.documentElement.style.setProperty(SIDE_PANEL_OFFSET_PROPERTY, `${offset}px`);
|
|
6464
|
+
});
|
|
6465
|
+
}
|
|
6466
|
+
ngOnDestroy() {
|
|
6467
|
+
this._endResize?.();
|
|
6468
|
+
document.documentElement.style.removeProperty(SIDE_PANEL_OFFSET_PROPERTY);
|
|
6469
|
+
}
|
|
6470
|
+
onClose() {
|
|
6471
|
+
this.sidePanelService.dismiss();
|
|
6472
|
+
}
|
|
6473
|
+
onResizeKey(delta) {
|
|
6474
|
+
this.sidePanelService.setWidth(this.$width() + delta * SIDE_PANEL_KEYBOARD_RESIZE_STEP);
|
|
6475
|
+
this.sidePanelService.endResize();
|
|
6476
|
+
}
|
|
6477
|
+
onResizeStart(event) {
|
|
6478
|
+
event.preventDefault();
|
|
6479
|
+
this.$resizing.set(true);
|
|
6480
|
+
document.body.style.setProperty('cursor', 'col-resize');
|
|
6481
|
+
document.body.style.setProperty('user-select', 'none');
|
|
6482
|
+
const onMove = (moveEvent) => this.sidePanelService.setWidth(window.innerWidth - moveEvent.clientX);
|
|
6483
|
+
const onUp = () => {
|
|
6484
|
+
this.$resizing.set(false);
|
|
6485
|
+
document.body.style.removeProperty('cursor');
|
|
6486
|
+
document.body.style.removeProperty('user-select');
|
|
6487
|
+
document.removeEventListener('mousemove', onMove);
|
|
6488
|
+
document.removeEventListener('mouseup', onUp);
|
|
6489
|
+
this.sidePanelService.endResize();
|
|
6490
|
+
this._endResize = null;
|
|
6491
|
+
};
|
|
6492
|
+
this._endResize = onUp;
|
|
6493
|
+
document.addEventListener('mousemove', onMove);
|
|
6494
|
+
document.addEventListener('mouseup', onUp);
|
|
6495
|
+
}
|
|
6496
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: SidePanelComponent, deps: [{ token: i2$3.IconService }, { token: i1$3.Router }, { token: ShellService }, { token: SidePanelService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6497
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: SidePanelComponent, isStandalone: true, selector: "valtimo-side-panel", ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<aside\n [attr.aria-hidden]=\"!$visible()\"\n [attr.data-test-id]=\"testIds.panel\"\n [class.valtimo-side-panel--resizing]=\"$resizing()\"\n [class.valtimo-side-panel--visible]=\"$visible() && !!$current()\"\n [style.width.px]=\"$width()\"\n class=\"valtimo-side-panel\"\n>\n <div\n [attr.aria-label]=\"'sidePanel.resize' | translate\"\n [attr.data-test-id]=\"testIds.resizeHandle\"\n (keydown.arrowLeft)=\"onResizeKey(1)\"\n (keydown.arrowRight)=\"onResizeKey(-1)\"\n (mousedown)=\"onResizeStart($event)\"\n aria-orientation=\"vertical\"\n class=\"valtimo-side-panel__resize-handle\"\n role=\"separator\"\n tabindex=\"0\"\n ></div>\n\n @if ($current(); as current) {\n <header class=\"valtimo-side-panel__header\">\n <div class=\"valtimo-side-panel__titles\">\n <div class=\"valtimo-side-panel__title-row\">\n @if (current.pinned) {\n <cds-tooltip [description]=\"'sidePanel.pinned' | translate\" align=\"bottom-left\">\n <span\n [attr.aria-label]=\"'sidePanel.pinned' | translate\"\n [attr.data-test-id]=\"testIds.pinnedIcon\"\n class=\"valtimo-side-panel__pin\"\n role=\"img\"\n tabindex=\"0\"\n >\n <svg cdsIcon=\"pin--filled\" size=\"16\"></svg>\n </span>\n </cds-tooltip>\n }\n\n <h2 class=\"valtimo-side-panel__title\">{{ current.title }}</h2>\n </div>\n\n @if (current.subtitle) {\n @if (current.subtitleLink) {\n <a\n [attr.data-test-id]=\"testIds.subtitleLink\"\n [routerLink]=\"current.subtitleLink\"\n class=\"valtimo-side-panel__subtitle\"\n >{{ current.subtitle }}</a\n >\n } @else {\n <span class=\"valtimo-side-panel__subtitle\">{{ current.subtitle }}</span>\n }\n }\n\n @if (current.origin; as origin) {\n <div [attr.data-test-id]=\"testIds.origin\" class=\"valtimo-side-panel__origin\">\n <span>{{ 'sidePanel.originFor' | translate }}</span>\n\n <a [routerLink]=\"origin.route\" class=\"valtimo-side-panel__origin-link\">{{\n $originLabel() ?? ('sidePanel.originFallback' | translate)\n }}</a>\n\n @if ($originElsewhere()) {\n <cds-tag\n [attr.data-test-id]=\"testIds.originElsewhere\"\n [title]=\"\n 'sidePanel.originElsewhereDescription'\n | translate: {label: $originLabel() ?? ('sidePanel.originFallback' | translate)}\n \"\n class=\"valtimo-side-panel__origin-tag\"\n size=\"sm\"\n type=\"warm-gray\"\n >{{ 'sidePanel.originElsewhere' | translate }}</cds-tag\n >\n }\n </div>\n }\n </div>\n\n <button\n [attr.aria-label]=\"'sidePanel.close' | translate\"\n [attr.data-test-id]=\"testIds.closeButton\"\n [iconOnly]=\"true\"\n (click)=\"onClose()\"\n cdsButton=\"ghost\"\n class=\"valtimo-side-panel__close\"\n >\n <svg cdsIcon=\"close\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </header>\n }\n\n <div class=\"valtimo-side-panel__body\">\n @for (offer of $offers(); track offer.key) {\n <ng-container\n *ngComponentOutlet=\"offer.component; inputs: offer.inputs ?? {}; injector: offer.injector\"\n ></ng-container>\n }\n </div>\n</aside>\n", styles: [".valtimo-side-panel{position:fixed;inset-block:3rem 0;inset-inline-end:0;z-index:7999;display:flex;flex-direction:column;background-color:var(--cds-layer);border-inline-start:1px solid var(--cds-border-subtle);transform:translate(100%);visibility:hidden;transition:transform .11s cubic-bezier(.2,0,.38,.9),visibility 0s linear .11s}.valtimo-side-panel--visible{transform:none;visibility:visible;transition-delay:0s}.valtimo-side-panel--resizing{-webkit-user-select:none;user-select:none}.valtimo-side-panel--resizing ::ng-deep iframe{pointer-events:none}.valtimo-side-panel__resize-handle{position:absolute;top:0;left:0;z-index:1;width:3px;height:100%;cursor:col-resize;background-color:var(--cds-border-strong);opacity:0;transition:opacity .11s cubic-bezier(.2,0,1,.9);outline:none}.valtimo-side-panel__resize-handle:hover,.valtimo-side-panel__resize-handle:focus-visible{opacity:1}.valtimo-side-panel--resizing .valtimo-side-panel__resize-handle{opacity:1}.valtimo-side-panel__header{display:flex;align-items:center;justify-content:space-between;gap:var(--cds-spacing-03);min-height:3rem;padding-inline-start:var(--cds-spacing-05);border-block-end:1px solid var(--cds-border-subtle)}.valtimo-side-panel__titles{display:flex;flex-direction:column;gap:var(--cds-spacing-02);min-width:0;padding-block:var(--cds-spacing-03)}.valtimo-side-panel__close{flex:none;align-self:flex-start;align-items:center;justify-content:center;padding:0}.valtimo-side-panel__title-row{display:flex;align-items:center;gap:var(--cds-spacing-03);min-width:0}.valtimo-side-panel__pin{display:flex;color:var(--cds-icon-secondary);outline:none}.valtimo-side-panel__pin:focus-visible{outline:2px solid var(--cds-focus)}.valtimo-side-panel__pin svg{fill:currentColor}.valtimo-side-panel__origin{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cds-spacing-02) var(--cds-spacing-03);font-size:var(--cds-body-compact-01-font-size);color:var(--cds-text-secondary)}.valtimo-side-panel__origin-link{color:var(--cds-link-primary)}.valtimo-side-panel__origin-tag{margin:0}.valtimo-side-panel__title{font-size:var(--cds-heading-compact-02-font-size);font-weight:var(--cds-heading-compact-02-font-weight);line-height:var(--cds-heading-compact-02-line-height);color:var(--cds-text-primary)}.valtimo-side-panel__subtitle{font-size:var(--cds-body-compact-01-font-size);color:var(--cds-text-secondary)}.valtimo-side-panel a.valtimo-side-panel__subtitle{color:var(--cds-link-primary)}.valtimo-side-panel__body{flex:1;min-height:0;overflow:auto;font-size:var(--cds-body-compact-01-font-size);font-weight:var(--cds-body-compact-01-font-weight);line-height:var(--cds-body-compact-01-line-height);letter-spacing:var(--cds-body-compact-01-letter-spacing)}.valtimo-side-panel__body ::ng-deep>*{display:block;height:100%}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2$3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2$3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i2$3.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class", "skeleton"] }, { kind: "ngmodule", type: TooltipModule$1 }, { kind: "component", type: i2$3.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6498
|
+
}
|
|
6499
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: SidePanelComponent, decorators: [{
|
|
6500
|
+
type: Component,
|
|
6501
|
+
args: [{ standalone: true, selector: 'valtimo-side-panel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
6502
|
+
NgComponentOutlet,
|
|
6503
|
+
RouterLink,
|
|
6504
|
+
TranslateModule,
|
|
6505
|
+
ButtonModule,
|
|
6506
|
+
IconModule,
|
|
6507
|
+
TagModule,
|
|
6508
|
+
TooltipModule$1,
|
|
6509
|
+
], template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<aside\n [attr.aria-hidden]=\"!$visible()\"\n [attr.data-test-id]=\"testIds.panel\"\n [class.valtimo-side-panel--resizing]=\"$resizing()\"\n [class.valtimo-side-panel--visible]=\"$visible() && !!$current()\"\n [style.width.px]=\"$width()\"\n class=\"valtimo-side-panel\"\n>\n <div\n [attr.aria-label]=\"'sidePanel.resize' | translate\"\n [attr.data-test-id]=\"testIds.resizeHandle\"\n (keydown.arrowLeft)=\"onResizeKey(1)\"\n (keydown.arrowRight)=\"onResizeKey(-1)\"\n (mousedown)=\"onResizeStart($event)\"\n aria-orientation=\"vertical\"\n class=\"valtimo-side-panel__resize-handle\"\n role=\"separator\"\n tabindex=\"0\"\n ></div>\n\n @if ($current(); as current) {\n <header class=\"valtimo-side-panel__header\">\n <div class=\"valtimo-side-panel__titles\">\n <div class=\"valtimo-side-panel__title-row\">\n @if (current.pinned) {\n <cds-tooltip [description]=\"'sidePanel.pinned' | translate\" align=\"bottom-left\">\n <span\n [attr.aria-label]=\"'sidePanel.pinned' | translate\"\n [attr.data-test-id]=\"testIds.pinnedIcon\"\n class=\"valtimo-side-panel__pin\"\n role=\"img\"\n tabindex=\"0\"\n >\n <svg cdsIcon=\"pin--filled\" size=\"16\"></svg>\n </span>\n </cds-tooltip>\n }\n\n <h2 class=\"valtimo-side-panel__title\">{{ current.title }}</h2>\n </div>\n\n @if (current.subtitle) {\n @if (current.subtitleLink) {\n <a\n [attr.data-test-id]=\"testIds.subtitleLink\"\n [routerLink]=\"current.subtitleLink\"\n class=\"valtimo-side-panel__subtitle\"\n >{{ current.subtitle }}</a\n >\n } @else {\n <span class=\"valtimo-side-panel__subtitle\">{{ current.subtitle }}</span>\n }\n }\n\n @if (current.origin; as origin) {\n <div [attr.data-test-id]=\"testIds.origin\" class=\"valtimo-side-panel__origin\">\n <span>{{ 'sidePanel.originFor' | translate }}</span>\n\n <a [routerLink]=\"origin.route\" class=\"valtimo-side-panel__origin-link\">{{\n $originLabel() ?? ('sidePanel.originFallback' | translate)\n }}</a>\n\n @if ($originElsewhere()) {\n <cds-tag\n [attr.data-test-id]=\"testIds.originElsewhere\"\n [title]=\"\n 'sidePanel.originElsewhereDescription'\n | translate: {label: $originLabel() ?? ('sidePanel.originFallback' | translate)}\n \"\n class=\"valtimo-side-panel__origin-tag\"\n size=\"sm\"\n type=\"warm-gray\"\n >{{ 'sidePanel.originElsewhere' | translate }}</cds-tag\n >\n }\n </div>\n }\n </div>\n\n <button\n [attr.aria-label]=\"'sidePanel.close' | translate\"\n [attr.data-test-id]=\"testIds.closeButton\"\n [iconOnly]=\"true\"\n (click)=\"onClose()\"\n cdsButton=\"ghost\"\n class=\"valtimo-side-panel__close\"\n >\n <svg cdsIcon=\"close\" class=\"cds--btn__icon\" size=\"16\"></svg>\n </button>\n </header>\n }\n\n <div class=\"valtimo-side-panel__body\">\n @for (offer of $offers(); track offer.key) {\n <ng-container\n *ngComponentOutlet=\"offer.component; inputs: offer.inputs ?? {}; injector: offer.injector\"\n ></ng-container>\n }\n </div>\n</aside>\n", styles: [".valtimo-side-panel{position:fixed;inset-block:3rem 0;inset-inline-end:0;z-index:7999;display:flex;flex-direction:column;background-color:var(--cds-layer);border-inline-start:1px solid var(--cds-border-subtle);transform:translate(100%);visibility:hidden;transition:transform .11s cubic-bezier(.2,0,.38,.9),visibility 0s linear .11s}.valtimo-side-panel--visible{transform:none;visibility:visible;transition-delay:0s}.valtimo-side-panel--resizing{-webkit-user-select:none;user-select:none}.valtimo-side-panel--resizing ::ng-deep iframe{pointer-events:none}.valtimo-side-panel__resize-handle{position:absolute;top:0;left:0;z-index:1;width:3px;height:100%;cursor:col-resize;background-color:var(--cds-border-strong);opacity:0;transition:opacity .11s cubic-bezier(.2,0,1,.9);outline:none}.valtimo-side-panel__resize-handle:hover,.valtimo-side-panel__resize-handle:focus-visible{opacity:1}.valtimo-side-panel--resizing .valtimo-side-panel__resize-handle{opacity:1}.valtimo-side-panel__header{display:flex;align-items:center;justify-content:space-between;gap:var(--cds-spacing-03);min-height:3rem;padding-inline-start:var(--cds-spacing-05);border-block-end:1px solid var(--cds-border-subtle)}.valtimo-side-panel__titles{display:flex;flex-direction:column;gap:var(--cds-spacing-02);min-width:0;padding-block:var(--cds-spacing-03)}.valtimo-side-panel__close{flex:none;align-self:flex-start;align-items:center;justify-content:center;padding:0}.valtimo-side-panel__title-row{display:flex;align-items:center;gap:var(--cds-spacing-03);min-width:0}.valtimo-side-panel__pin{display:flex;color:var(--cds-icon-secondary);outline:none}.valtimo-side-panel__pin:focus-visible{outline:2px solid var(--cds-focus)}.valtimo-side-panel__pin svg{fill:currentColor}.valtimo-side-panel__origin{display:flex;flex-wrap:wrap;align-items:center;gap:var(--cds-spacing-02) var(--cds-spacing-03);font-size:var(--cds-body-compact-01-font-size);color:var(--cds-text-secondary)}.valtimo-side-panel__origin-link{color:var(--cds-link-primary)}.valtimo-side-panel__origin-tag{margin:0}.valtimo-side-panel__title{font-size:var(--cds-heading-compact-02-font-size);font-weight:var(--cds-heading-compact-02-font-weight);line-height:var(--cds-heading-compact-02-line-height);color:var(--cds-text-primary)}.valtimo-side-panel__subtitle{font-size:var(--cds-body-compact-01-font-size);color:var(--cds-text-secondary)}.valtimo-side-panel a.valtimo-side-panel__subtitle{color:var(--cds-link-primary)}.valtimo-side-panel__body{flex:1;min-height:0;overflow:auto;font-size:var(--cds-body-compact-01-font-size);font-weight:var(--cds-body-compact-01-font-weight);line-height:var(--cds-body-compact-01-line-height);letter-spacing:var(--cds-body-compact-01-letter-spacing)}.valtimo-side-panel__body ::ng-deep>*{display:block;height:100%}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
6510
|
+
}], ctorParameters: () => [{ type: i2$3.IconService }, { type: i1$3.Router }, { type: ShellService }, { type: SidePanelService }] });
|
|
6511
|
+
|
|
6163
6512
|
/*
|
|
6164
6513
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
6165
6514
|
*
|
|
@@ -9160,29 +9509,29 @@ class PageHeaderComponent {
|
|
|
9160
9509
|
this.titleAsBreadcrumb$ = this.pageHeaderService.titleAsBreadcrumb$;
|
|
9161
9510
|
this.pageActionsHasContent$ = this.pageHeaderService.pageActionsHasContent$;
|
|
9162
9511
|
this.pageTitleHidden$ = this.pageTitleService.pageTitleHidden$;
|
|
9512
|
+
this.pageActionsWrap$ = this.pageTitleService.pageActionsWrap$;
|
|
9513
|
+
this.pageActionsMinWidth$ = this.pageTitleService.pageActionsMinWidth$;
|
|
9514
|
+
this._pageHeadHeightSubscription = null;
|
|
9163
9515
|
}
|
|
9164
9516
|
ngAfterViewInit() {
|
|
9165
9517
|
this.pageHeaderService.setContentViewContainerRef(this._contentrVcr);
|
|
9166
9518
|
this.openPageHeadResizeObserver();
|
|
9167
9519
|
}
|
|
9168
9520
|
ngOnDestroy() {
|
|
9169
|
-
this.
|
|
9521
|
+
this._pageHeadHeightSubscription?.unsubscribe();
|
|
9170
9522
|
}
|
|
9171
9523
|
openPageHeadResizeObserver() {
|
|
9172
|
-
|
|
9173
|
-
|
|
9174
|
-
|
|
9175
|
-
|
|
9176
|
-
this.pageHeaderService.setPageHeadHeight(pageHeadHeight);
|
|
9177
|
-
});
|
|
9178
|
-
this._pageHeadResizeObserver.observe(this._pageHead.nativeElement);
|
|
9524
|
+
// Width-only resizes emit too: FitPage re-fits when content above it reflows.
|
|
9525
|
+
this._pageHeadHeightSubscription = fromResizeObserver(this._pageHead.nativeElement)
|
|
9526
|
+
.pipe(map(entries => entries[entries.length - 1]?.contentRect.height), filter$1((height) => !!height))
|
|
9527
|
+
.subscribe(height => this.pageHeaderService.setPageHeadHeight(height));
|
|
9179
9528
|
}
|
|
9180
9529
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: PageHeaderComponent, deps: [{ token: UserInterfaceService }, { token: PageHeaderService }, { token: PageTitleService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9181
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: PageHeaderComponent, isStandalone: false, selector: "valtimo-page-header", viewQueries: [{ propertyName: "_contentrVcr", first: true, predicate: ["contentVcr"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_pageHead", first: true, predicate: ["pageHead"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n #pageHead\n class=\"page-head\"\n [ngClass]=\"{\n 'page-head--hidden': (showPageHeader$ | async) === false,\n 'page-head--compact': compactMode$ | async,\n 'page-head--no-content': (compactMode$ | async) && (pageActionsHasContent$ | async) === false,\n 'page-head--no-margin': pageTitleHidden$ | async,\n 'page-head--small-title': smallTitle$ | async,\n 'page-head--title-as-breadcrumb': (titleAsBreadcrumb$ | async) && !(compactMode$ | async),\n }\"\n>\n <ng-container #contentVcr></ng-container>\n\n <valtimo-page-subtitle></valtimo-page-subtitle>\n\n <valtimo-page-actions></valtimo-page-actions>\n</div>\n\n<ng-container renderPageHeader>\n <ng-template>\n <div\n class=\"page-header-container\"\n [ngClass]=\"{\n 'page-header-container--compact': compactMode$ | async,\n 'page-header-container--small-title': smallTitle$ | async,\n 'page-header-container--title-as-breadcrumb':\n (titleAsBreadcrumb$ | async) && !(compactMode$ | async),\n }\"\n >\n <valtimo-breadcrumb-navigation></valtimo-breadcrumb-navigation>\n\n <valtimo-page-title></valtimo-page-title>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".page-head{display:flex;width:100%;justify-content:space-between;align-items:flex-end;margin-bottom:24px}.page-head--hidden{display:none}.page-head--compact{margin-bottom:16px}.page-head--small-title{align-items:flex-start;margin-bottom:0}.page-head--title-as-breadcrumb{flex-direction:column;align-items:stretch;justify-content:flex-start;margin-bottom:16px}.page-head--title-as-breadcrumb ::ng-deep .page-actions--visible{padding-left:0}.page-head--no-content,.page-head--no-margin{margin-bottom:0}.page-head:not(.page-head--title-as-breadcrumb) valtimo-page-actions{flex:1 0 auto;width:auto}.page-header-container{width:min-content;min-width:0}.page-header-container--compact{display:flex;width:100%;justify-content:space-between;align-items:center;padding-inline:16px}.page-header-container--small-title{display:flex;flex-direction:row;gap:8px;width:min-content}.page-header-container--title-as-breadcrumb{width:max-content}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PageTitleComponent, selector: "valtimo-page-title" }, { kind: "component", type: BreadcrumbNavigationComponent, selector: "valtimo-breadcrumb-navigation" }, { kind: "directive", type: RenderPageHeaderDirective, selector: "[renderPageHeader]" }, { kind: "component", type: PageActionsComponent, selector: "valtimo-page-actions" }, { kind: "component", type: PageSubtitleComponent, selector: "valtimo-page-subtitle" }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }] }); }
|
|
9530
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: PageHeaderComponent, isStandalone: false, selector: "valtimo-page-header", viewQueries: [{ propertyName: "_contentrVcr", first: true, predicate: ["contentVcr"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_pageHead", first: true, predicate: ["pageHead"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n #pageHead\n class=\"page-head\"\n [ngClass]=\"{\n 'page-head--hidden': (showPageHeader$ | async) === false,\n 'page-head--compact': compactMode$ | async,\n 'page-head--no-content': (compactMode$ | async) && (pageActionsHasContent$ | async) === false,\n 'page-head--no-margin': pageTitleHidden$ | async,\n 'page-head--small-title': smallTitle$ | async,\n 'page-head--title-as-breadcrumb': (titleAsBreadcrumb$ | async) && !(compactMode$ | async),\n 'page-head--wrap-actions': pageActionsWrap$ | async,\n }\"\n>\n <ng-container #contentVcr></ng-container>\n\n <valtimo-page-subtitle></valtimo-page-subtitle>\n\n <valtimo-page-actions\n [style.flex-basis.px]=\"(pageActionsWrap$ | async) ? (pageActionsMinWidth$ | async) : null\"\n ></valtimo-page-actions>\n</div>\n\n<ng-container renderPageHeader>\n <ng-template>\n <div\n class=\"page-header-container\"\n [ngClass]=\"{\n 'page-header-container--compact': compactMode$ | async,\n 'page-header-container--small-title': smallTitle$ | async,\n 'page-header-container--title-as-breadcrumb':\n (titleAsBreadcrumb$ | async) && !(compactMode$ | async),\n }\"\n >\n <valtimo-breadcrumb-navigation></valtimo-breadcrumb-navigation>\n\n <valtimo-page-title></valtimo-page-title>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".page-head{display:flex;width:100%;justify-content:space-between;align-items:flex-end;margin-bottom:24px}.page-head--hidden{display:none}.page-head--compact{margin-bottom:16px}.page-head--small-title{align-items:flex-start;margin-bottom:0}.page-head--title-as-breadcrumb{flex-direction:column;align-items:stretch;justify-content:flex-start;margin-bottom:16px}.page-head--title-as-breadcrumb ::ng-deep .page-actions--visible{padding-left:0}.page-head--no-content,.page-head--no-margin{margin-bottom:0}.page-head:not(.page-head--title-as-breadcrumb) valtimo-page-actions{flex:1 0 auto;width:auto}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb){flex-wrap:wrap;align-items:center;column-gap:var(--cds-spacing-07);row-gap:var(--cds-spacing-03)}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb)>valtimo-page-subtitle{display:none}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb) .page-header-container{width:max-content;max-width:100%;align-items:baseline}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb) valtimo-page-actions{flex-shrink:1;min-width:0}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb) ::ng-deep .page-actions--visible{min-width:0;padding-left:0}.page-header-container{width:min-content;min-width:0}.page-header-container--compact{display:flex;width:100%;justify-content:space-between;align-items:center;padding-inline:16px}.page-header-container--small-title{display:flex;flex-direction:row;gap:8px;width:min-content}.page-header-container--title-as-breadcrumb{width:max-content}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PageTitleComponent, selector: "valtimo-page-title" }, { kind: "component", type: BreadcrumbNavigationComponent, selector: "valtimo-breadcrumb-navigation" }, { kind: "directive", type: RenderPageHeaderDirective, selector: "[renderPageHeader]" }, { kind: "component", type: PageActionsComponent, selector: "valtimo-page-actions" }, { kind: "component", type: PageSubtitleComponent, selector: "valtimo-page-subtitle" }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }] }); }
|
|
9182
9531
|
}
|
|
9183
9532
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: PageHeaderComponent, decorators: [{
|
|
9184
9533
|
type: Component,
|
|
9185
|
-
args: [{ selector: 'valtimo-page-header', standalone: false, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n #pageHead\n class=\"page-head\"\n [ngClass]=\"{\n 'page-head--hidden': (showPageHeader$ | async) === false,\n 'page-head--compact': compactMode$ | async,\n 'page-head--no-content': (compactMode$ | async) && (pageActionsHasContent$ | async) === false,\n 'page-head--no-margin': pageTitleHidden$ | async,\n 'page-head--small-title': smallTitle$ | async,\n 'page-head--title-as-breadcrumb': (titleAsBreadcrumb$ | async) && !(compactMode$ | async),\n }\"\n>\n <ng-container #contentVcr></ng-container>\n\n <valtimo-page-subtitle></valtimo-page-subtitle>\n\n <valtimo-page-actions></valtimo-page-actions>\n</div>\n\n<ng-container renderPageHeader>\n <ng-template>\n <div\n class=\"page-header-container\"\n [ngClass]=\"{\n 'page-header-container--compact': compactMode$ | async,\n 'page-header-container--small-title': smallTitle$ | async,\n 'page-header-container--title-as-breadcrumb':\n (titleAsBreadcrumb$ | async) && !(compactMode$ | async),\n }\"\n >\n <valtimo-breadcrumb-navigation></valtimo-breadcrumb-navigation>\n\n <valtimo-page-title></valtimo-page-title>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".page-head{display:flex;width:100%;justify-content:space-between;align-items:flex-end;margin-bottom:24px}.page-head--hidden{display:none}.page-head--compact{margin-bottom:16px}.page-head--small-title{align-items:flex-start;margin-bottom:0}.page-head--title-as-breadcrumb{flex-direction:column;align-items:stretch;justify-content:flex-start;margin-bottom:16px}.page-head--title-as-breadcrumb ::ng-deep .page-actions--visible{padding-left:0}.page-head--no-content,.page-head--no-margin{margin-bottom:0}.page-head:not(.page-head--title-as-breadcrumb) valtimo-page-actions{flex:1 0 auto;width:auto}.page-header-container{width:min-content;min-width:0}.page-header-container--compact{display:flex;width:100%;justify-content:space-between;align-items:center;padding-inline:16px}.page-header-container--small-title{display:flex;flex-direction:row;gap:8px;width:min-content}.page-header-container--title-as-breadcrumb{width:max-content}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
9534
|
+
args: [{ selector: 'valtimo-page-header', standalone: false, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n #pageHead\n class=\"page-head\"\n [ngClass]=\"{\n 'page-head--hidden': (showPageHeader$ | async) === false,\n 'page-head--compact': compactMode$ | async,\n 'page-head--no-content': (compactMode$ | async) && (pageActionsHasContent$ | async) === false,\n 'page-head--no-margin': pageTitleHidden$ | async,\n 'page-head--small-title': smallTitle$ | async,\n 'page-head--title-as-breadcrumb': (titleAsBreadcrumb$ | async) && !(compactMode$ | async),\n 'page-head--wrap-actions': pageActionsWrap$ | async,\n }\"\n>\n <ng-container #contentVcr></ng-container>\n\n <valtimo-page-subtitle></valtimo-page-subtitle>\n\n <valtimo-page-actions\n [style.flex-basis.px]=\"(pageActionsWrap$ | async) ? (pageActionsMinWidth$ | async) : null\"\n ></valtimo-page-actions>\n</div>\n\n<ng-container renderPageHeader>\n <ng-template>\n <div\n class=\"page-header-container\"\n [ngClass]=\"{\n 'page-header-container--compact': compactMode$ | async,\n 'page-header-container--small-title': smallTitle$ | async,\n 'page-header-container--title-as-breadcrumb':\n (titleAsBreadcrumb$ | async) && !(compactMode$ | async),\n }\"\n >\n <valtimo-breadcrumb-navigation></valtimo-breadcrumb-navigation>\n\n <valtimo-page-title></valtimo-page-title>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".page-head{display:flex;width:100%;justify-content:space-between;align-items:flex-end;margin-bottom:24px}.page-head--hidden{display:none}.page-head--compact{margin-bottom:16px}.page-head--small-title{align-items:flex-start;margin-bottom:0}.page-head--title-as-breadcrumb{flex-direction:column;align-items:stretch;justify-content:flex-start;margin-bottom:16px}.page-head--title-as-breadcrumb ::ng-deep .page-actions--visible{padding-left:0}.page-head--no-content,.page-head--no-margin{margin-bottom:0}.page-head:not(.page-head--title-as-breadcrumb) valtimo-page-actions{flex:1 0 auto;width:auto}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb){flex-wrap:wrap;align-items:center;column-gap:var(--cds-spacing-07);row-gap:var(--cds-spacing-03)}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb)>valtimo-page-subtitle{display:none}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb) .page-header-container{width:max-content;max-width:100%;align-items:baseline}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb) valtimo-page-actions{flex-shrink:1;min-width:0}.page-head--wrap-actions:not(.page-head--title-as-breadcrumb) ::ng-deep .page-actions--visible{min-width:0;padding-left:0}.page-header-container{width:min-content;min-width:0}.page-header-container--compact{display:flex;width:100%;justify-content:space-between;align-items:center;padding-inline:16px}.page-header-container--small-title{display:flex;flex-direction:row;gap:8px;width:min-content}.page-header-container--title-as-breadcrumb{width:max-content}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
9186
9535
|
}], ctorParameters: () => [{ type: UserInterfaceService }, { type: PageHeaderService }, { type: PageTitleService }], propDecorators: { _contentrVcr: [{
|
|
9187
9536
|
type: ViewChild,
|
|
9188
9537
|
args: ['contentVcr', { static: true, read: ViewContainerRef }]
|
|
@@ -10578,12 +10927,12 @@ class FormioComponent {
|
|
|
10578
10927
|
this.refreshForm = new EventEmitter();
|
|
10579
10928
|
this.submission$ = new BehaviorSubject({});
|
|
10580
10929
|
this._form$ = new BehaviorSubject(undefined);
|
|
10581
|
-
this.form$ = combineLatest([this._form$, this.translateService.stream('key')]).pipe(filter(([form]) => !!form), map$1(([form]) => this.formioTranslationService.translateFormDefinition(form)), distinctUntilChanged((prev, curr) => isEqual(prev, curr)));
|
|
10930
|
+
this.form$ = combineLatest([this._form$, this.translateService.stream('key')]).pipe(filter(([form]) => !!form), map$1(([form]) => this.formioTranslationService.translateFormDefinition(form)), distinctUntilChanged$1((prev, curr) => isEqual(prev, curr)));
|
|
10582
10931
|
this.options$ = new BehaviorSubject(undefined);
|
|
10583
10932
|
this.readOnly$ = new BehaviorSubject(false);
|
|
10584
10933
|
this.errors$ = new BehaviorSubject([]);
|
|
10585
10934
|
this.languageEventEmitter = new EventEmitter();
|
|
10586
|
-
this.currentLanguage$ = this.translateService.stream('key').pipe(map$1(() => this.translateService.currentLang), distinctUntilChanged(), tap$1(language => this.languageEventEmitter.emit(language)));
|
|
10935
|
+
this.currentLanguage$ = this.translateService.stream('key').pipe(map$1(() => this.translateService.currentLang), distinctUntilChanged$1(), tap$1(language => this.languageEventEmitter.emit(language)));
|
|
10587
10936
|
this._overrideOptions$ = new BehaviorSubject({});
|
|
10588
10937
|
this.formioOptions$ = combineLatest([
|
|
10589
10938
|
this.options$,
|
|
@@ -10600,7 +10949,7 @@ class FormioComponent {
|
|
|
10600
10949
|
}),
|
|
10601
10950
|
};
|
|
10602
10951
|
return deepmerge(defaultOptions, overrideOptions);
|
|
10603
|
-
}), distinctUntilChanged((prev, curr) => isEqual(prev, curr)), tap$1(options => this.logger.debug('Form.IO options used', options)));
|
|
10952
|
+
}), distinctUntilChanged$1((prev, curr) => isEqual(prev, curr)), tap$1(options => this.logger.debug('Form.IO options used', options)));
|
|
10604
10953
|
// Only renderOptions reaches form.io itself; getRendererOptions() drops everything else.
|
|
10605
10954
|
this.renderOptions$ = this.currentLanguage$.pipe(map$1(language => ({ language })));
|
|
10606
10955
|
this._storeTokenInLocalStorage = !this.configService.getFeatureToggle('disableFormioTokenInLocalStorage');
|
|
@@ -10874,7 +11223,7 @@ class FormioBuilderComponent {
|
|
|
10874
11223
|
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
10875
11224
|
this.change = new EventEmitter();
|
|
10876
11225
|
this.triggerRebuild = new EventEmitter();
|
|
10877
|
-
this.currentLanguage$ = this.translateService.stream('key').pipe(map$1(() => this.translateService.currentLang), distinctUntilChanged(), tap$1(language => this.languageEventEmitter.emit(language)));
|
|
11226
|
+
this.currentLanguage$ = this.translateService.stream('key').pipe(map$1(() => this.translateService.currentLang), distinctUntilChanged$1(), tap$1(language => this.languageEventEmitter.emit(language)));
|
|
10878
11227
|
this.languageEventEmitter = new EventEmitter();
|
|
10879
11228
|
this.options$ = new BehaviorSubject(undefined);
|
|
10880
11229
|
this._overrideOptions$ = new BehaviorSubject({});
|
|
@@ -10894,7 +11243,7 @@ class FormioBuilderComponent {
|
|
|
10894
11243
|
}),
|
|
10895
11244
|
};
|
|
10896
11245
|
return deepmerge(defaultOptions, overrideOptions);
|
|
10897
|
-
}), distinctUntilChanged((prev, curr) => isEqual(prev, curr)), tap$1(() => this.triggerRebuild.emit()));
|
|
11246
|
+
}), distinctUntilChanged$1((prev, curr) => isEqual(prev, curr)), tap$1(() => this.triggerRebuild.emit()));
|
|
10898
11247
|
this.editFormModified$ = new BehaviorSubject(false);
|
|
10899
11248
|
this.modifyEditForm = () => {
|
|
10900
11249
|
const context$ = getContextObservable(this.route);
|
|
@@ -11956,7 +12305,7 @@ class ValuePathSelectorComponent {
|
|
|
11956
12305
|
return this.formGroup.get('selectedPath');
|
|
11957
12306
|
}
|
|
11958
12307
|
get _selectedPath$() {
|
|
11959
|
-
return this.selectedPath.valueChanges.pipe(startWith(this.selectedPath.value), distinctUntilChanged(), tap(value => {
|
|
12308
|
+
return this.selectedPath.valueChanges.pipe(startWith(this.selectedPath.value), distinctUntilChanged$1(), tap(value => {
|
|
11960
12309
|
if (this._onChangeFunction) {
|
|
11961
12310
|
this._onChangeFunction(value);
|
|
11962
12311
|
}
|
|
@@ -18668,7 +19017,7 @@ class StatusSelectorComponent {
|
|
|
18668
19017
|
selected: !!selectedStatuses.find(selectedStatusKey => selectedStatusKey === status.key),
|
|
18669
19018
|
key: status.key,
|
|
18670
19019
|
tagType: status.tagType,
|
|
18671
|
-
}))), distinctUntilChanged((previous, current) => isEqual(previous, current)));
|
|
19020
|
+
}))), distinctUntilChanged$1((previous, current) => isEqual(previous, current)));
|
|
18672
19021
|
}
|
|
18673
19022
|
itemSelected(event) {
|
|
18674
19023
|
const newSelectedItems = event?.filter(item => item?.selected) || [];
|
|
@@ -19865,7 +20214,7 @@ class CaseTagsSelectorComponent {
|
|
|
19865
20214
|
selected: !!selectedCaseTags.find(selectedCaseTagKey => selectedCaseTagKey === caseTag.key),
|
|
19866
20215
|
key: caseTag.key,
|
|
19867
20216
|
tagType: caseTag.tagType,
|
|
19868
|
-
}))), distinctUntilChanged((previous, current) => isEqual(previous, current)));
|
|
20217
|
+
}))), distinctUntilChanged$1((previous, current) => isEqual(previous, current)));
|
|
19869
20218
|
}
|
|
19870
20219
|
set caseTags(value) {
|
|
19871
20220
|
this._caseTags$.next((value || []).map(caseTags => ({
|
|
@@ -20777,6 +21126,8 @@ class RenderInPageHeaderDirective {
|
|
|
20777
21126
|
this.pageTitleService = pageTitleService;
|
|
20778
21127
|
this.pageHeaderService = pageHeaderService;
|
|
20779
21128
|
this.fullWidth = false;
|
|
21129
|
+
/** Lets the actions move below the page title when both don't fit on one row. */
|
|
21130
|
+
this.wrap = false;
|
|
20780
21131
|
this._subscriptions = new Subscription();
|
|
20781
21132
|
}
|
|
20782
21133
|
ngOnInit() {
|
|
@@ -20797,11 +21148,12 @@ class RenderInPageHeaderDirective {
|
|
|
20797
21148
|
pageActionsVcr.createEmbeddedView(this.templateRef);
|
|
20798
21149
|
this.pageTitleService.setHasPageActions(true);
|
|
20799
21150
|
this.pageTitleService.setPageActionsFullWidth(this.fullWidth);
|
|
21151
|
+
this.pageTitleService.setPageActionsWrap(this.wrap);
|
|
20800
21152
|
}
|
|
20801
21153
|
});
|
|
20802
21154
|
}
|
|
20803
21155
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: RenderInPageHeaderDirective, deps: [{ token: PageTitleService }, { token: PageHeaderService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
20804
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: RenderInPageHeaderDirective, isStandalone: true, selector: "[renderInPageHeader]", inputs: { fullWidth: "fullWidth" }, queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 }); }
|
|
21156
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: RenderInPageHeaderDirective, isStandalone: true, selector: "[renderInPageHeader]", inputs: { fullWidth: "fullWidth", wrap: "wrap" }, queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 }); }
|
|
20805
21157
|
}
|
|
20806
21158
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: RenderInPageHeaderDirective, decorators: [{
|
|
20807
21159
|
type: Directive,
|
|
@@ -20811,6 +21163,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
20811
21163
|
args: [TemplateRef]
|
|
20812
21164
|
}], fullWidth: [{
|
|
20813
21165
|
type: Input
|
|
21166
|
+
}], wrap: [{
|
|
21167
|
+
type: Input
|
|
20814
21168
|
}] } });
|
|
20815
21169
|
|
|
20816
21170
|
/*
|
|
@@ -21361,7 +21715,7 @@ class MuuriDirective {
|
|
|
21361
21715
|
return this._muuriSubject$.getValue();
|
|
21362
21716
|
}
|
|
21363
21717
|
get _containerWidth$() {
|
|
21364
|
-
return this._containerWidthSubject$.pipe(distinctUntilChanged());
|
|
21718
|
+
return this._containerWidthSubject$.pipe(distinctUntilChanged$1());
|
|
21365
21719
|
}
|
|
21366
21720
|
constructor(elementRef, renderer, ngZone) {
|
|
21367
21721
|
this.elementRef = elementRef;
|
|
@@ -21778,6 +22132,11 @@ class AssignmentComponent {
|
|
|
21778
22132
|
get assignButtonTranslationKey() {
|
|
21779
22133
|
return this.mode === 'case' ? 'assignment.assignThisCase' : 'assignment.assignThisTask';
|
|
21780
22134
|
}
|
|
22135
|
+
get assignedNames() {
|
|
22136
|
+
return [this._assigneeFullName || this._assigneeId, this._assignedTeamTitle]
|
|
22137
|
+
.filter(name => !!name)
|
|
22138
|
+
.join(' & ');
|
|
22139
|
+
}
|
|
21781
22140
|
get hasEditChanges() {
|
|
21782
22141
|
return (this.selectedUserId$.getValue() !== this._initialUserId ||
|
|
21783
22142
|
this.selectedTeamKey$.getValue() !== this._initialTeamKey);
|
|
@@ -21792,6 +22151,8 @@ class AssignmentComponent {
|
|
|
21792
22151
|
this._userProviderService = _userProviderService;
|
|
21793
22152
|
this.mode = 'case';
|
|
21794
22153
|
this.hasPermission = true;
|
|
22154
|
+
/** Icon-only, for tight layouts; names show as a tooltip. */
|
|
22155
|
+
this.compact = false;
|
|
21795
22156
|
this.assignmentChangedEvent = new EventEmitter();
|
|
21796
22157
|
this.unassignedEvent = new EventEmitter();
|
|
21797
22158
|
this._assigneeId = null;
|
|
@@ -21817,7 +22178,7 @@ class AssignmentComponent {
|
|
|
21817
22178
|
this._candidateTeamsSubscription = null;
|
|
21818
22179
|
this._candidateUsersSubscription = null;
|
|
21819
22180
|
this._subscriptions = new Subscription();
|
|
21820
|
-
this._iconService.registerAll([UserFollow16, Group16, User16]);
|
|
22181
|
+
this._iconService.registerAll([Edit16, UserFollow16, Group16, User16]);
|
|
21821
22182
|
this._subscriptions.add(this._userProviderService.getUserSubject().subscribe(user => {
|
|
21822
22183
|
this._currentUser = user;
|
|
21823
22184
|
}));
|
|
@@ -22012,7 +22373,7 @@ class AssignmentComponent {
|
|
|
22012
22373
|
this._candidateTeamsSubscription = null;
|
|
22013
22374
|
}
|
|
22014
22375
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AssignmentComponent, deps: [{ token: CdsThemeService }, { token: i2$3.IconService }, { token: i1.TranslateService }, { token: i6$1.UserProviderService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22015
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: AssignmentComponent, isStandalone: true, selector: "valtimo-assignment", inputs: { mode: "mode", hasPermission: "hasPermission", assigneeId: "assigneeId", assigneeFullName: "assigneeFullName", assignedTeamKey: "assignedTeamKey", assignedTeamTitle: "assignedTeamTitle", candidateUsers$: "candidateUsers$", candidateTeams$: "candidateTeams$" }, outputs: { assignmentChangedEvent: "assignmentChangedEvent", unassignedEvent: "unassignedEvent" }, host: { properties: { "style.display": "this.hostDisplay" } }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n disabled: disabled$ | async,\n loading: loading$ | async,\n userItems: userItems$ | async,\n teamItems: teamItems$ | async,\n mouseIsOver: mouseIsOver$ | async,\n selectedUserId: selectedUserId$ | async,\n selectedTeamKey: selectedTeamKey$ | async,\n editToggletipOpen: editToggletipOpen$ | async,\n showUserComboBox: showUserComboBox$ | async,\n showTeamComboBox: showTeamComboBox$ | async,\n } as obs\"\n>\n <ng-container *ngIf=\"isAssigned || hasPermission\">\n <div\n class=\"assignment-container\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n >\n <!-- Assigned state: display pills with icons -->\n <div\n class=\"assigned-display element\"\n [ngClass]=\"{\n active: hasPermission\n ? isAssigned && !obs.mouseIsOver && !obs.editToggletipOpen\n : isAssigned,\n }\"\n >\n <span class=\"assignment-pill\" *ngIf=\"_assignedTeamKey\">\n <svg cdsIcon=\"group\" size=\"16\" class=\"pill-icon\"></svg>\n <span class=\"pill-text\">{{ _assignedTeamTitle }}</span>\n </span>\n\n <span class=\"assignment-pill\" *ngIf=\"_assigneeId\">\n <svg cdsIcon=\"user\" size=\"16\" class=\"pill-icon\"></svg>\n <span class=\"pill-text\">{{ _assigneeFullName || _assigneeId }}</span>\n </span>\n </div>\n\n <!-- Click to edit button (appears on hover when assigned) -->\n <cds-toggletip\n *ngIf=\"hasPermission && isAssigned\"\n align=\"bottom\"\n class=\"element\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: isAssigned && (obs.mouseIsOver || obs.editToggletipOpen)}\"\n (onOpen)=\"onOpenEditToggletip()\"\n (onClose)=\"onCloseEditToggletip()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"ghost\"\n size=\"sm\"\n class=\"click-to-edit-button\"\n >\n {{ 'assignment.clickToEdit' | translate }}\n </button>\n\n <div cdsToggletipContent class=\"assignment-popover-content\">\n <cds-combo-box\n *ngIf=\"obs.showUserComboBox && obs.userItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectUser' | translate\"\n [placeholder]=\"'assignment.selectUser' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.userItems\"\n [disabled]=\"obs.disabled\"\n itemValueKey=\"id\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"onUserClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n *ngIf=\"obs.showTeamComboBox && obs.teamItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectTeam' | translate\"\n [placeholder]=\"'assignment.selectTeam' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.teamItems\"\n [disabled]=\"obs.disabled\"\n itemValueKey=\"id\"\n (selected)=\"onTeamSelect($event)\"\n (clear)=\"onTeamClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n [cdsLayer]=\"1\"\n class=\"submit-button\"\n [disabled]=\"!hasEditChanges || obs.disabled\"\n (click)=\"onUpdate()\"\n >\n {{ 'assignment.update' | translate }}\n </button>\n\n <button\n cdsButton=\"danger--tertiary\"\n [cdsLayer]=\"1\"\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n [disabled]=\"obs.disabled\"\n (click)=\"onUnassign()\"\n >\n {{ 'assignment.unassignAll' | translate }}\n </button>\n </div>\n </cds-toggletip>\n\n <!-- Assign button: always rendered for layout sizing (position: relative via .main).\n When hasPermission is false it stays hidden and non-interactive. -->\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: hasPermission && !isAssigned}\"\n (onOpen)=\"onOpenAssignToggletip()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"assign-button\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n\n {{ assignButtonTranslationKey | translate }}\n </button>\n\n <div cdsToggletipContent class=\"assignment-popover-content\">\n <ng-container *ngIf=\"!obs.loading; else loadingTemplate\">\n <cds-combo-box\n *ngIf=\"obs.showUserComboBox && obs.userItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectUser' | translate\"\n [placeholder]=\"'assignment.selectUser' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.userItems\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"onUserClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n *ngIf=\"obs.showTeamComboBox && obs.teamItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectTeam' | translate\"\n [placeholder]=\"'assignment.selectTeam' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.teamItems\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onTeamSelect($event)\"\n (clear)=\"onTeamClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"submit-button\"\n [disabled]=\"(!obs.selectedUserId && !obs.selectedTeamKey) || obs.disabled\"\n (click)=\"onConfirm()\"\n >\n {{ 'assignment.confirm' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n </ng-container>\n\n <ng-template #loadingTemplate>\n <span class=\"loading-text\" [attr.data-carbon-theme]=\"toggletipTheme$ | async\">\n {{ 'assignment.loading' | translate }}\n </span>\n </ng-template>\n </div>\n </cds-toggletip>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.assignment-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.assigned-display{display:flex;justify-content:flex-start;align-items:center;gap:8px;width:100%}.assignment-pill{display:inline-flex;align-items:center;gap:4px;min-width:0;max-width:calc(50% - 4px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assignment-pill:only-child{max-width:100%}.assignment-pill .pill-icon{flex-shrink:0;fill:currentColor}.assignment-pill .pill-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.element{opacity:0;visibility:hidden;position:absolute;width:100%;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative;width:auto}.assignment-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assignment-popover-content .cds--btn{width:100%;max-width:unset}.assign-button{width:250px}.click-to-edit-button{width:100%}.submit-button{width:100%;max-width:unset}.loading-text{font-size:14px;color:var(--cds-text-secondary)}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2$3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ToggletipModule }, { kind: "component", type: i2$3.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i2$3.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i2$3.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2$3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i2$3.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i2$3.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i2$3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
22376
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: AssignmentComponent, isStandalone: true, selector: "valtimo-assignment", inputs: { mode: "mode", hasPermission: "hasPermission", compact: "compact", assigneeId: "assigneeId", assigneeFullName: "assigneeFullName", assignedTeamKey: "assignedTeamKey", assignedTeamTitle: "assignedTeamTitle", candidateUsers$: "candidateUsers$", candidateTeams$: "candidateTeams$" }, outputs: { assignmentChangedEvent: "assignmentChangedEvent", unassignedEvent: "unassignedEvent" }, host: { properties: { "style.display": "this.hostDisplay" } }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n disabled: disabled$ | async,\n loading: loading$ | async,\n userItems: userItems$ | async,\n teamItems: teamItems$ | async,\n mouseIsOver: mouseIsOver$ | async,\n selectedUserId: selectedUserId$ | async,\n selectedTeamKey: selectedTeamKey$ | async,\n editToggletipOpen: editToggletipOpen$ | async,\n showUserComboBox: showUserComboBox$ | async,\n showTeamComboBox: showTeamComboBox$ | async,\n } as obs\"\n>\n <ng-container *ngIf=\"isAssigned || hasPermission\">\n <div\n [class.assignment-container--compact]=\"compact\"\n class=\"assignment-container\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n >\n <!-- Assigned state: display pills with icons -->\n <div\n class=\"assigned-display element\"\n [ngbTooltip]=\"compact ? assignedNames : null\"\n [ngClass]=\"{\n active: hasPermission\n ? isAssigned && !obs.mouseIsOver && !obs.editToggletipOpen\n : isAssigned,\n }\"\n >\n <span class=\"assignment-pill\" *ngIf=\"_assignedTeamKey\">\n <svg cdsIcon=\"group\" size=\"16\" class=\"pill-icon\"></svg>\n <span *ngIf=\"!compact\" class=\"pill-text\">{{ _assignedTeamTitle }}</span>\n </span>\n\n <span class=\"assignment-pill\" *ngIf=\"_assigneeId\">\n <svg cdsIcon=\"user\" size=\"16\" class=\"pill-icon\"></svg>\n <span *ngIf=\"!compact\" class=\"pill-text\">{{ _assigneeFullName || _assigneeId }}</span>\n </span>\n </div>\n\n <!-- Click to edit button (appears on hover when assigned) -->\n <cds-toggletip\n *ngIf=\"hasPermission && isAssigned\"\n align=\"bottom\"\n class=\"element\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: isAssigned && (obs.mouseIsOver || obs.editToggletipOpen)}\"\n (onOpen)=\"onOpenEditToggletip()\"\n (onClose)=\"onCloseEditToggletip()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"ghost\"\n [attr.aria-label]=\"compact ? ('assignment.clickToEdit' | translate) : null\"\n [iconOnly]=\"compact\"\n [ngbTooltip]=\"compact ? assignedNames : null\"\n [size]=\"compact ? 'md' : 'sm'\"\n class=\"click-to-edit-button\"\n >\n @if (compact) {\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n } @else {\n {{ 'assignment.clickToEdit' | translate }}\n }\n </button>\n\n <div cdsToggletipContent class=\"assignment-popover-content\">\n <cds-combo-box\n *ngIf=\"obs.showUserComboBox && obs.userItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectUser' | translate\"\n [placeholder]=\"'assignment.selectUser' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.userItems\"\n [disabled]=\"obs.disabled\"\n itemValueKey=\"id\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"onUserClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n *ngIf=\"obs.showTeamComboBox && obs.teamItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectTeam' | translate\"\n [placeholder]=\"'assignment.selectTeam' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.teamItems\"\n [disabled]=\"obs.disabled\"\n itemValueKey=\"id\"\n (selected)=\"onTeamSelect($event)\"\n (clear)=\"onTeamClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n [cdsLayer]=\"1\"\n class=\"submit-button\"\n [disabled]=\"!hasEditChanges || obs.disabled\"\n (click)=\"onUpdate()\"\n >\n {{ 'assignment.update' | translate }}\n </button>\n\n <button\n cdsButton=\"danger--tertiary\"\n [cdsLayer]=\"1\"\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n [disabled]=\"obs.disabled\"\n (click)=\"onUnassign()\"\n >\n {{ 'assignment.unassignAll' | translate }}\n </button>\n </div>\n </cds-toggletip>\n\n <!-- Assign button: always rendered for layout sizing (position: relative via .main).\n When hasPermission is false it stays hidden and non-interactive. -->\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: hasPermission && !isAssigned}\"\n (onOpen)=\"onOpenAssignToggletip()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n [attr.aria-label]=\"compact ? (assignButtonTranslationKey | translate) : null\"\n [iconOnly]=\"compact\"\n [ngbTooltip]=\"compact ? (assignButtonTranslationKey | translate) : null\"\n [size]=\"compact ? 'md' : 'sm'\"\n class=\"assign-button\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n\n @if (!compact) {\n {{ assignButtonTranslationKey | translate }}\n }\n </button>\n\n <div cdsToggletipContent class=\"assignment-popover-content\">\n <ng-container *ngIf=\"!obs.loading; else loadingTemplate\">\n <cds-combo-box\n *ngIf=\"obs.showUserComboBox && obs.userItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectUser' | translate\"\n [placeholder]=\"'assignment.selectUser' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.userItems\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"onUserClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n *ngIf=\"obs.showTeamComboBox && obs.teamItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectTeam' | translate\"\n [placeholder]=\"'assignment.selectTeam' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.teamItems\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onTeamSelect($event)\"\n (clear)=\"onTeamClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"submit-button\"\n [disabled]=\"(!obs.selectedUserId && !obs.selectedTeamKey) || obs.disabled\"\n (click)=\"onConfirm()\"\n >\n {{ 'assignment.confirm' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n </ng-container>\n\n <ng-template #loadingTemplate>\n <span class=\"loading-text\" [attr.data-carbon-theme]=\"toggletipTheme$ | async\">\n {{ 'assignment.loading' | translate }}\n </span>\n </ng-template>\n </div>\n </cds-toggletip>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.assignment-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.assigned-display{display:flex;justify-content:flex-start;align-items:center;gap:8px;width:100%}.assignment-pill{display:inline-flex;align-items:center;gap:4px;min-width:0;max-width:calc(50% - 4px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assignment-pill:only-child{max-width:100%}.assignment-pill .pill-icon{flex-shrink:0;fill:currentColor}.assignment-pill .pill-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.element{opacity:0;visibility:hidden;position:absolute;width:100%;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative;width:auto}.assignment-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assignment-popover-content .cds--btn{width:100%;max-width:unset}.assign-button{width:250px}.assignment-container--compact .assign-button,.assignment-container--compact .click-to-edit-button{inline-size:var(--cds-spacing-08);padding:0;align-items:center;justify-content:center}.assignment-container--compact .assigned-display{justify-content:center;gap:var(--cds-spacing-02)}.assignment-container--compact .assignment-pill{max-width:none}.click-to-edit-button{width:100%}.submit-button{width:100%;max-width:unset}.loading-text{font-size:14px;color:var(--cds-text-secondary)}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2$3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ToggletipModule }, { kind: "component", type: i2$3.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i2$3.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i2$3.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2$3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i2$3.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i2$3.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled", "readonly", "fluid"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i2$3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
22016
22377
|
}
|
|
22017
22378
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AssignmentComponent, decorators: [{
|
|
22018
22379
|
type: Component,
|
|
@@ -22025,7 +22386,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
22025
22386
|
LayerModule,
|
|
22026
22387
|
ComboBoxModule,
|
|
22027
22388
|
RemoveClassnamesDirective,
|
|
22028
|
-
], template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n disabled: disabled$ | async,\n loading: loading$ | async,\n userItems: userItems$ | async,\n teamItems: teamItems$ | async,\n mouseIsOver: mouseIsOver$ | async,\n selectedUserId: selectedUserId$ | async,\n selectedTeamKey: selectedTeamKey$ | async,\n editToggletipOpen: editToggletipOpen$ | async,\n showUserComboBox: showUserComboBox$ | async,\n showTeamComboBox: showTeamComboBox$ | async,\n } as obs\"\n>\n <ng-container *ngIf=\"isAssigned || hasPermission\">\n <div\n class=\"assignment-container\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n >\n <!-- Assigned state: display pills with icons -->\n <div\n class=\"assigned-display element\"\n [ngClass]=\"{\n active: hasPermission\n ? isAssigned && !obs.mouseIsOver && !obs.editToggletipOpen\n : isAssigned,\n }\"\n >\n <span class=\"assignment-pill\" *ngIf=\"_assignedTeamKey\">\n <svg cdsIcon=\"group\" size=\"16\" class=\"pill-icon\"></svg>\n <span class=\"pill-text\">{{ _assignedTeamTitle }}</span>\n </span>\n\n <span class=\"assignment-pill\" *ngIf=\"_assigneeId\">\n <svg cdsIcon=\"user\" size=\"16\" class=\"pill-icon\"></svg>\n <span class=\"pill-text\">{{ _assigneeFullName || _assigneeId }}</span>\n </span>\n </div>\n\n <!-- Click to edit button (appears on hover when assigned) -->\n <cds-toggletip\n *ngIf=\"hasPermission && isAssigned\"\n align=\"bottom\"\n class=\"element\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: isAssigned && (obs.mouseIsOver || obs.editToggletipOpen)}\"\n (onOpen)=\"onOpenEditToggletip()\"\n (onClose)=\"onCloseEditToggletip()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"ghost\"\n size=\"sm\"\n class=\"click-to-edit-button\"\n >\n {{ 'assignment.clickToEdit' | translate }}\n </button>\n\n <div cdsToggletipContent class=\"assignment-popover-content\">\n <cds-combo-box\n *ngIf=\"obs.showUserComboBox && obs.userItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectUser' | translate\"\n [placeholder]=\"'assignment.selectUser' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.userItems\"\n [disabled]=\"obs.disabled\"\n itemValueKey=\"id\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"onUserClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n *ngIf=\"obs.showTeamComboBox && obs.teamItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectTeam' | translate\"\n [placeholder]=\"'assignment.selectTeam' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.teamItems\"\n [disabled]=\"obs.disabled\"\n itemValueKey=\"id\"\n (selected)=\"onTeamSelect($event)\"\n (clear)=\"onTeamClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n [cdsLayer]=\"1\"\n class=\"submit-button\"\n [disabled]=\"!hasEditChanges || obs.disabled\"\n (click)=\"onUpdate()\"\n >\n {{ 'assignment.update' | translate }}\n </button>\n\n <button\n cdsButton=\"danger--tertiary\"\n [cdsLayer]=\"1\"\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n [disabled]=\"obs.disabled\"\n (click)=\"onUnassign()\"\n >\n {{ 'assignment.unassignAll' | translate }}\n </button>\n </div>\n </cds-toggletip>\n\n <!-- Assign button: always rendered for layout sizing (position: relative via .main).\n When hasPermission is false it stays hidden and non-interactive. -->\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: hasPermission && !isAssigned}\"\n (onOpen)=\"onOpenAssignToggletip()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"assign-button\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n\n {{ assignButtonTranslationKey | translate }}\n </button>\n\n <div cdsToggletipContent class=\"assignment-popover-content\">\n <ng-container *ngIf=\"!obs.loading; else loadingTemplate\">\n <cds-combo-box\n *ngIf=\"obs.showUserComboBox && obs.userItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectUser' | translate\"\n [placeholder]=\"'assignment.selectUser' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.userItems\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"onUserClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n *ngIf=\"obs.showTeamComboBox && obs.teamItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectTeam' | translate\"\n [placeholder]=\"'assignment.selectTeam' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.teamItems\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onTeamSelect($event)\"\n (clear)=\"onTeamClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"submit-button\"\n [disabled]=\"(!obs.selectedUserId && !obs.selectedTeamKey) || obs.disabled\"\n (click)=\"onConfirm()\"\n >\n {{ 'assignment.confirm' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n </ng-container>\n\n <ng-template #loadingTemplate>\n <span class=\"loading-text\" [attr.data-carbon-theme]=\"toggletipTheme$ | async\">\n {{ 'assignment.loading' | translate }}\n </span>\n </ng-template>\n </div>\n </cds-toggletip>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.assignment-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.assigned-display{display:flex;justify-content:flex-start;align-items:center;gap:8px;width:100%}.assignment-pill{display:inline-flex;align-items:center;gap:4px;min-width:0;max-width:calc(50% - 4px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assignment-pill:only-child{max-width:100%}.assignment-pill .pill-icon{flex-shrink:0;fill:currentColor}.assignment-pill .pill-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.element{opacity:0;visibility:hidden;position:absolute;width:100%;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative;width:auto}.assignment-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assignment-popover-content .cds--btn{width:100%;max-width:unset}.assign-button{width:250px}.click-to-edit-button{width:100%}.submit-button{width:100%;max-width:unset}.loading-text{font-size:14px;color:var(--cds-text-secondary)}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
22389
|
+
NgbTooltipModule,
|
|
22390
|
+
], template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n disabled: disabled$ | async,\n loading: loading$ | async,\n userItems: userItems$ | async,\n teamItems: teamItems$ | async,\n mouseIsOver: mouseIsOver$ | async,\n selectedUserId: selectedUserId$ | async,\n selectedTeamKey: selectedTeamKey$ | async,\n editToggletipOpen: editToggletipOpen$ | async,\n showUserComboBox: showUserComboBox$ | async,\n showTeamComboBox: showTeamComboBox$ | async,\n } as obs\"\n>\n <ng-container *ngIf=\"isAssigned || hasPermission\">\n <div\n [class.assignment-container--compact]=\"compact\"\n class=\"assignment-container\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n >\n <!-- Assigned state: display pills with icons -->\n <div\n class=\"assigned-display element\"\n [ngbTooltip]=\"compact ? assignedNames : null\"\n [ngClass]=\"{\n active: hasPermission\n ? isAssigned && !obs.mouseIsOver && !obs.editToggletipOpen\n : isAssigned,\n }\"\n >\n <span class=\"assignment-pill\" *ngIf=\"_assignedTeamKey\">\n <svg cdsIcon=\"group\" size=\"16\" class=\"pill-icon\"></svg>\n <span *ngIf=\"!compact\" class=\"pill-text\">{{ _assignedTeamTitle }}</span>\n </span>\n\n <span class=\"assignment-pill\" *ngIf=\"_assigneeId\">\n <svg cdsIcon=\"user\" size=\"16\" class=\"pill-icon\"></svg>\n <span *ngIf=\"!compact\" class=\"pill-text\">{{ _assigneeFullName || _assigneeId }}</span>\n </span>\n </div>\n\n <!-- Click to edit button (appears on hover when assigned) -->\n <cds-toggletip\n *ngIf=\"hasPermission && isAssigned\"\n align=\"bottom\"\n class=\"element\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: isAssigned && (obs.mouseIsOver || obs.editToggletipOpen)}\"\n (onOpen)=\"onOpenEditToggletip()\"\n (onClose)=\"onCloseEditToggletip()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"ghost\"\n [attr.aria-label]=\"compact ? ('assignment.clickToEdit' | translate) : null\"\n [iconOnly]=\"compact\"\n [ngbTooltip]=\"compact ? assignedNames : null\"\n [size]=\"compact ? 'md' : 'sm'\"\n class=\"click-to-edit-button\"\n >\n @if (compact) {\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n } @else {\n {{ 'assignment.clickToEdit' | translate }}\n }\n </button>\n\n <div cdsToggletipContent class=\"assignment-popover-content\">\n <cds-combo-box\n *ngIf=\"obs.showUserComboBox && obs.userItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectUser' | translate\"\n [placeholder]=\"'assignment.selectUser' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.userItems\"\n [disabled]=\"obs.disabled\"\n itemValueKey=\"id\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"onUserClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n *ngIf=\"obs.showTeamComboBox && obs.teamItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectTeam' | translate\"\n [placeholder]=\"'assignment.selectTeam' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.teamItems\"\n [disabled]=\"obs.disabled\"\n itemValueKey=\"id\"\n (selected)=\"onTeamSelect($event)\"\n (clear)=\"onTeamClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n [cdsLayer]=\"1\"\n class=\"submit-button\"\n [disabled]=\"!hasEditChanges || obs.disabled\"\n (click)=\"onUpdate()\"\n >\n {{ 'assignment.update' | translate }}\n </button>\n\n <button\n cdsButton=\"danger--tertiary\"\n [cdsLayer]=\"1\"\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n [disabled]=\"obs.disabled\"\n (click)=\"onUnassign()\"\n >\n {{ 'assignment.unassignAll' | translate }}\n </button>\n </div>\n </cds-toggletip>\n\n <!-- Assign button: always rendered for layout sizing (position: relative via .main).\n When hasPermission is false it stays hidden and non-interactive. -->\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: hasPermission && !isAssigned}\"\n (onOpen)=\"onOpenAssignToggletip()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n [attr.aria-label]=\"compact ? (assignButtonTranslationKey | translate) : null\"\n [iconOnly]=\"compact\"\n [ngbTooltip]=\"compact ? (assignButtonTranslationKey | translate) : null\"\n [size]=\"compact ? 'md' : 'sm'\"\n class=\"assign-button\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n\n @if (!compact) {\n {{ assignButtonTranslationKey | translate }}\n }\n </button>\n\n <div cdsToggletipContent class=\"assignment-popover-content\">\n <ng-container *ngIf=\"!obs.loading; else loadingTemplate\">\n <cds-combo-box\n *ngIf=\"obs.showUserComboBox && obs.userItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectUser' | translate\"\n [placeholder]=\"'assignment.selectUser' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.userItems\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"onUserClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <cds-combo-box\n *ngIf=\"obs.showTeamComboBox && obs.teamItems?.length > 0\"\n [attr.data-carbon-theme]=\"toggletipDropdownTheme$ | async\"\n [label]=\"'assignment.selectTeam' | translate\"\n [placeholder]=\"'assignment.selectTeam' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs.teamItems\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onTeamSelect($event)\"\n (clear)=\"onTeamClear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"submit-button\"\n [disabled]=\"(!obs.selectedUserId && !obs.selectedTeamKey) || obs.disabled\"\n (click)=\"onConfirm()\"\n >\n {{ 'assignment.confirm' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n </ng-container>\n\n <ng-template #loadingTemplate>\n <span class=\"loading-text\" [attr.data-carbon-theme]=\"toggletipTheme$ | async\">\n {{ 'assignment.loading' | translate }}\n </span>\n </ng-template>\n </div>\n </cds-toggletip>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.assignment-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.assigned-display{display:flex;justify-content:flex-start;align-items:center;gap:8px;width:100%}.assignment-pill{display:inline-flex;align-items:center;gap:4px;min-width:0;max-width:calc(50% - 4px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assignment-pill:only-child{max-width:100%}.assignment-pill .pill-icon{flex-shrink:0;fill:currentColor}.assignment-pill .pill-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.element{opacity:0;visibility:hidden;position:absolute;width:100%;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative;width:auto}.assignment-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assignment-popover-content .cds--btn{width:100%;max-width:unset}.assign-button{width:250px}.assignment-container--compact .assign-button,.assignment-container--compact .click-to-edit-button{inline-size:var(--cds-spacing-08);padding:0;align-items:center;justify-content:center}.assignment-container--compact .assigned-display{justify-content:center;gap:var(--cds-spacing-02)}.assignment-container--compact .assignment-pill{max-width:none}.click-to-edit-button{width:100%}.submit-button{width:100%;max-width:unset}.loading-text{font-size:14px;color:var(--cds-text-secondary)}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
22029
22391
|
}], ctorParameters: () => [{ type: CdsThemeService }, { type: i2$3.IconService }, { type: i1.TranslateService }, { type: i6$1.UserProviderService }], propDecorators: { hostDisplay: [{
|
|
22030
22392
|
type: HostBinding,
|
|
22031
22393
|
args: ['style.display']
|
|
@@ -22033,6 +22395,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
22033
22395
|
type: Input
|
|
22034
22396
|
}], hasPermission: [{
|
|
22035
22397
|
type: Input
|
|
22398
|
+
}], compact: [{
|
|
22399
|
+
type: Input
|
|
22036
22400
|
}], assigneeId: [{
|
|
22037
22401
|
type: Input
|
|
22038
22402
|
}], assigneeFullName: [{
|
|
@@ -22286,5 +22650,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
22286
22650
|
* Generated bundle index. Do not edit.
|
|
22287
22651
|
*/
|
|
22288
22652
|
|
|
22289
|
-
export { ARBITRARY_AMOUNT_VALUE_TEST_IDS, AUTO_KEY_INPUT_TEST_IDS, AdminSettingsService, Alert, AlertComponent, AlertModule, AlertService, AlertType, AlertsOptionsImpl, AssignmentComponent, AutoKeyInputComponent, BOOLEAN_CONVERTER_VALUES, BpmnJsDiagramComponent, BpmnJsDiagramModule, BreadcrumbNavigationComponent, BreadcrumbNavigationModule, BreadcrumbService, CARBON_CONSTANTS, CARBON_THEME, CASES_WITHOUT_STATUS_KEY, COLOR_PICKER_TEST_IDS, CONFIRMATION_MODAL_TEST_IDS, CamundaFormComponent, CamundaFormModule, CarbonListComponent, CarbonListFilterPipe, CarbonListModule, CarbonMultiInputComponent, CarbonMultiInputModule, CarbonNoResultsComponent, CaseCountPipe, CaseTagsSelectorComponent, CdsThemeService, ChoiceFieldService, ColorPickerComponent, ComponentsPipesModule, ConfirmationModalComponent, ConfirmationModalModule, ContextMenuDirective, CtrlClickDirective, CurrentCarbonTheme, DEFAULT_LIST_TRANSLATIONS, DEFAULT_PAGINATION, DEFAULT_PAGINATOR_CONFIG, DataListComponent, DataListModule, DatePickerComponent, DatePickerModule, DateTimePickerComponent, DigitOnlyDirective, DragDropListComponent, DropzoneComponent, DropzoneModule, EditorComponent, EditorModule, EllipsisPipe, ExpansionPanelComponent, ExpansionPanelModule, FieldAutoFocusDirective, FieldAutoFocusModule, FileSizeModule, FileSizePipe, FilterSidebarComponent, FilterSidebarModule, FitPageDirective, FormComponent, FormIoCurrencyComponent, FormIoCurrentUserComponent, FormIoDomService, FormIoIbanComponent, FormIoMailPreviewComponent, FormIoModule, FormIoStateService, FormIoTagsService, FormIoUploaderComponent, FormModule, FormioBuilderComponent, FormioComponent, FormioDummyComponent, FormioOptionsImpl, FormioValueResolverSelectorComponent, InputComponent, InputLabelComponent, InputLabelModule, InputModule, IsArrayPipe, JSON_EDITOR_TEST_IDS, JsonEditorComponent, KEY_DROPDOWN_VALUE_TEST_IDS, KEY_VALUE_PATH_SELECTOR_TEST_IDS, KEY_VALUE_TEST_IDS, KeyGeneratorService, LeftSidebarComponent, LeftSidebarModule, ListColumnViewComponent, MENU_CONFIGURATION_VERSION, MENU_ITEM_CATALOG, MULTI_INPUT_TEST_IDS, MdiIconSelectorComponent, MdiIconViewerComponent, MenuItemTextComponent, MenuItemTranslationPipe, MenuModule, MenuRoutingModule, MenuService, ModalComponent, ModalModule, ModalService, MonacoTheme, MoveRowDirection, MultiInputFormComponent, MultiInputFormModule, MultiselectDropdownComponent, MultiselectDropdownModule, MuuriDirective, MuuriDirectiveModule, MuuriItemComponent, ObjectManagementSelectComponent, ObjectManagementSelectService, ObserveSizeDirective, OverflowMenuComponent, OverflowMenuModule, OverflowMenuOptionComponent, OverflowMenuTriggerComponent, PLUGIN_PAGE_ROUTE, POPULAR_MDI_ICONS, PageHeaderComponent, PageHeaderModule, PageHeaderService, PageSubtitleService, PageTitleComponent, PageTitleModule, PageTitleService, ParagraphComponent, ParagraphModule, PendingChangesComponent, PendingChangesService, ProgressBarComponent, ProgressBarModule, PromptComponent, PromptModule, PromptService, QUICK_SEARCH_SERVICE, QuickSearchComponent, QuickSearchStateService, RIGHT_SIDEBAR_TEST_IDS, RadioComponent, RadioModule, ReadOnlyDirective, RemoveClassnamesDirective, RenderInBodyComponent, RenderInPageHeaderDirective, RenderPageHeaderDirective, RightSidebarComponent, RightSidebarModule, SCHEMA_EDITOR_REQUIRED_PROPERTY_TEST_ID_PREFIX, SCHEMA_EDITOR_TEST_IDS, SEARCH_FIELDS_TEST_IDS, SEARCH_FIELD_TEST_ID_PREFIX, SECTION_HEADER_TEXT_CLASS, SINGLE_VALUE_TEST_IDS, STEPPER_FOOTER_STEP_TEST_IDS, SchemaEditorComponent, SearchFieldsComponent, SearchFieldsModule, SelectComponent, SelectModule, SelectableCarbonTheme, ShellService, SpinnerComponent, SpinnerModule, StatusSelectorComponent, StepperContainerComponent, StepperContentComponent, StepperFooterComponent, StepperFooterStepComponent, StepperHeaderComponent, StepperModule, StepperService, StepperStepComponent, TAG_ELLIPSIS_LIMIT, TableComponent, TableModule, TimelineComponent, TimelineItemImpl, TimelineModule, TooltipComponent, TooltipDirective, TooltipIconComponent, TooltipIconModule, TooltipModule, TopbarComponent, TopbarModule, UploaderComponent, UploaderDragDropDirective, UploaderModule, UserInterfaceService, VALUE_CONDITION_TREE_TEST_IDS, VALUE_PATH_SELECTOR_DROPDOWN_VALUE_TEST_IDS, VALUE_PATH_SELECTOR_TEST_IDS, VALUE_PATH_SELECTOR_VALUE_TEST_IDS, VModalComponent, VModalModule, ValtimoCdsModalDirective, ValtimoModalService, ValueConditionTreeComponent, ValueConditionTreeService, ValuePathSelectorComponent, ValuePathSelectorInputMode, ValuePathSelectorPrefix, ValuePathSelectorService, ValuePathType, ViewContentService, ViewType, WIDGET_LAYOUT_TRANSLATION_KEYS, WIDGET_LAYOUT_VALUES, WIDGET_ROW_HEIGHT_DEFAULT, WIDGET_ROW_HEIGHT_GAP_FREE, WebcamComponent, WebcamModule, WidgetComponent, WidgetLayout, WidgetLayoutInfoComponent, WidgetModule, applyDataGridPatch, buildMenuConfigurationFromRuntimeMenu, collectObjectLevels, createCustomFormioComponent, customUploaderType, enableCustomFormioComponents, findMenuCatalogEntryByLink, findMenuCatalogGroupEntryByTitle, getMenuCatalogEntry, hasSavedMenuConfiguration, includeFunctionToName, menuInitializer, menuLinkToString, muuriGapFreeLayout, normaliseMenuLink, parseIncludeFunction, pendingChangesGuard, registerCustomFormioComponent, registerCustomTag, registerFormioCurrencyComponent, registerFormioCurrentUserComponent, registerFormioFileSelectorComponent, registerFormioIbanComponent, registerFormioMailPreviewComponent, registerFormioUploadComponent, registerFormioValueResolverSelectorComponent, registerObjectManagementSelectFormioComponent, resolveMenuConfiguration, resolveWidgetLayout, runAfterCarbonModalClosed, serializeIncludeFunction, setRequiredOnSchema };
|
|
22653
|
+
export { ARBITRARY_AMOUNT_VALUE_TEST_IDS, AUTO_KEY_INPUT_TEST_IDS, AdminSettingsService, Alert, AlertComponent, AlertModule, AlertService, AlertType, AlertsOptionsImpl, AssignmentComponent, AutoKeyInputComponent, BOOLEAN_CONVERTER_VALUES, BpmnJsDiagramComponent, BpmnJsDiagramModule, BreadcrumbNavigationComponent, BreadcrumbNavigationModule, BreadcrumbService, CARBON_CONSTANTS, CARBON_THEME, CASES_WITHOUT_STATUS_KEY, COLOR_PICKER_TEST_IDS, CONFIRMATION_MODAL_TEST_IDS, CamundaFormComponent, CamundaFormModule, CarbonListComponent, CarbonListFilterPipe, CarbonListModule, CarbonMultiInputComponent, CarbonMultiInputModule, CarbonNoResultsComponent, CaseCountPipe, CaseTagsSelectorComponent, CdsThemeService, ChoiceFieldService, ColorPickerComponent, ComponentsPipesModule, ConfirmationModalComponent, ConfirmationModalModule, ContextMenuDirective, CtrlClickDirective, CurrentCarbonTheme, DEFAULT_LIST_TRANSLATIONS, DEFAULT_PAGINATION, DEFAULT_PAGINATOR_CONFIG, DataListComponent, DataListModule, DatePickerComponent, DatePickerModule, DateTimePickerComponent, DigitOnlyDirective, DragDropListComponent, DropzoneComponent, DropzoneModule, EditorComponent, EditorModule, EllipsisPipe, ExpansionPanelComponent, ExpansionPanelModule, FieldAutoFocusDirective, FieldAutoFocusModule, FileSizeModule, FileSizePipe, FilterSidebarComponent, FilterSidebarModule, FitPageDirective, FormComponent, FormIoCurrencyComponent, FormIoCurrentUserComponent, FormIoDomService, FormIoIbanComponent, FormIoMailPreviewComponent, FormIoModule, FormIoStateService, FormIoTagsService, FormIoUploaderComponent, FormModule, FormioBuilderComponent, FormioComponent, FormioDummyComponent, FormioOptionsImpl, FormioValueResolverSelectorComponent, InputComponent, InputLabelComponent, InputLabelModule, InputModule, IsArrayPipe, JSON_EDITOR_TEST_IDS, JsonEditorComponent, KEY_DROPDOWN_VALUE_TEST_IDS, KEY_VALUE_PATH_SELECTOR_TEST_IDS, KEY_VALUE_TEST_IDS, KeyGeneratorService, LeftSidebarComponent, LeftSidebarModule, ListColumnViewComponent, MENU_CONFIGURATION_VERSION, MENU_ITEM_CATALOG, MULTI_INPUT_TEST_IDS, MdiIconSelectorComponent, MdiIconViewerComponent, MenuItemTextComponent, MenuItemTranslationPipe, MenuModule, MenuRoutingModule, MenuService, ModalComponent, ModalModule, ModalService, MonacoTheme, MoveRowDirection, MultiInputFormComponent, MultiInputFormModule, MultiselectDropdownComponent, MultiselectDropdownModule, MuuriDirective, MuuriDirectiveModule, MuuriItemComponent, ObjectManagementSelectComponent, ObjectManagementSelectService, ObserveSizeDirective, OverflowMenuComponent, OverflowMenuModule, OverflowMenuOptionComponent, OverflowMenuTriggerComponent, PLUGIN_PAGE_ROUTE, POPULAR_MDI_ICONS, PageHeaderComponent, PageHeaderModule, PageHeaderService, PageSubtitleService, PageTitleComponent, PageTitleModule, PageTitleService, ParagraphComponent, ParagraphModule, PendingChangesComponent, PendingChangesService, ProgressBarComponent, ProgressBarModule, PromptComponent, PromptModule, PromptService, QUICK_SEARCH_SERVICE, QuickSearchComponent, QuickSearchStateService, RIGHT_SIDEBAR_TEST_IDS, RadioComponent, RadioModule, ReadOnlyDirective, RemoveClassnamesDirective, RenderInBodyComponent, RenderInPageHeaderDirective, RenderPageHeaderDirective, RightSidebarComponent, RightSidebarModule, SCHEMA_EDITOR_REQUIRED_PROPERTY_TEST_ID_PREFIX, SCHEMA_EDITOR_TEST_IDS, SEARCH_FIELDS_TEST_IDS, SEARCH_FIELD_TEST_ID_PREFIX, SECTION_HEADER_TEXT_CLASS, SIDE_PANEL_TEST_IDS, SINGLE_VALUE_TEST_IDS, STEPPER_FOOTER_STEP_TEST_IDS, SchemaEditorComponent, SearchFieldsComponent, SearchFieldsModule, SelectComponent, SelectModule, SelectableCarbonTheme, ShellService, SidePanelComponent, SidePanelService, SpinnerComponent, SpinnerModule, StatusSelectorComponent, StepperContainerComponent, StepperContentComponent, StepperFooterComponent, StepperFooterStepComponent, StepperHeaderComponent, StepperModule, StepperService, StepperStepComponent, TAG_ELLIPSIS_LIMIT, TableComponent, TableModule, TimelineComponent, TimelineItemImpl, TimelineModule, TooltipComponent, TooltipDirective, TooltipIconComponent, TooltipIconModule, TooltipModule, TopbarComponent, TopbarModule, UploaderComponent, UploaderDragDropDirective, UploaderModule, UserInterfaceService, VALUE_CONDITION_TREE_TEST_IDS, VALUE_PATH_SELECTOR_DROPDOWN_VALUE_TEST_IDS, VALUE_PATH_SELECTOR_TEST_IDS, VALUE_PATH_SELECTOR_VALUE_TEST_IDS, VModalComponent, VModalModule, ValtimoCdsModalDirective, ValtimoModalService, ValueConditionTreeComponent, ValueConditionTreeService, ValuePathSelectorComponent, ValuePathSelectorInputMode, ValuePathSelectorPrefix, ValuePathSelectorService, ValuePathType, ViewContentService, ViewType, WIDGET_LAYOUT_TRANSLATION_KEYS, WIDGET_LAYOUT_VALUES, WIDGET_ROW_HEIGHT_DEFAULT, WIDGET_ROW_HEIGHT_GAP_FREE, WebcamComponent, WebcamModule, WidgetComponent, WidgetLayout, WidgetLayoutInfoComponent, WidgetModule, applyDataGridPatch, borderBoxWidth, buildMenuConfigurationFromRuntimeMenu, collectObjectLevels, contentBoxWidth, createCustomFormioComponent, customUploaderType, enableCustomFormioComponents, findMenuCatalogEntryByLink, findMenuCatalogGroupEntryByTitle, fromMutationObserver, fromResizeObserver, getMenuCatalogEntry, hasSavedMenuConfiguration, includeFunctionToName, menuInitializer, menuLinkToString, muuriGapFreeLayout, normaliseMenuLink, parseIncludeFunction, pendingChangesGuard, registerCustomFormioComponent, registerCustomTag, registerFormioCurrencyComponent, registerFormioCurrentUserComponent, registerFormioFileSelectorComponent, registerFormioIbanComponent, registerFormioMailPreviewComponent, registerFormioUploadComponent, registerFormioValueResolverSelectorComponent, registerObjectManagementSelectFormioComponent, resolveMenuConfiguration, resolveWidgetLayout, runAfterCarbonModalClosed, serializeIncludeFunction, setRequiredOnSchema };
|
|
22290
22654
|
//# sourceMappingURL=valtimo-components.mjs.map
|