@valtimo/components 13.49.1 → 13.50.1
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 +428 -34
- 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/form-io/components/form-io-mail-preview/mail-preview.component.d.ts.map +1 -1
- package/lib/components/form-io/components/form-io-mail-preview/sanitize-email-html.d.ts +2 -0
- package/lib/components/form-io/components/form-io-mail-preview/sanitize-email-html.d.ts.map +1 -0
- 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 +2 -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';
|
|
@@ -55,6 +56,7 @@ import { OverlayModule, Overlay } from '@angular/cdk/overlay';
|
|
|
55
56
|
import Currency from '@tadashi/currency';
|
|
56
57
|
import flatpickr from 'flatpickr';
|
|
57
58
|
import { Dutch } from 'flatpickr/dist/l10n/nl';
|
|
59
|
+
import createDOMPurify from 'dompurify';
|
|
58
60
|
import * as i2$4 from 'ngx-spinner';
|
|
59
61
|
import { NgxSpinnerModule } from 'ngx-spinner';
|
|
60
62
|
import Search16 from '@carbon/icons/es/search/16';
|
|
@@ -779,6 +781,22 @@ var ValuePathSelectorInputMode;
|
|
|
779
781
|
* limitations under the License.
|
|
780
782
|
*/
|
|
781
783
|
|
|
784
|
+
/*
|
|
785
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
786
|
+
*
|
|
787
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
788
|
+
* you may not use this file except in compliance with the License.
|
|
789
|
+
* You may obtain a copy of the License at
|
|
790
|
+
*
|
|
791
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
792
|
+
*
|
|
793
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
794
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
795
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
796
|
+
* See the License for the specific language governing permissions and
|
|
797
|
+
* limitations under the License.
|
|
798
|
+
*/
|
|
799
|
+
|
|
782
800
|
/*
|
|
783
801
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
784
802
|
*
|
|
@@ -1185,6 +1203,15 @@ const SEARCH_FIELDS_TEST_IDS = {
|
|
|
1185
1203
|
* itself is one level down.
|
|
1186
1204
|
*/
|
|
1187
1205
|
const SEARCH_FIELD_TEST_ID_PREFIX = 'searchField-';
|
|
1206
|
+
const SIDE_PANEL_TEST_IDS = {
|
|
1207
|
+
panel: 'sidePanel',
|
|
1208
|
+
closeButton: 'sidePanelCloseButton',
|
|
1209
|
+
resizeHandle: 'sidePanelResizeHandle',
|
|
1210
|
+
subtitleLink: 'sidePanelSubtitleLink',
|
|
1211
|
+
pinnedIcon: 'sidePanelPinnedIcon',
|
|
1212
|
+
origin: 'sidePanelOrigin',
|
|
1213
|
+
originElsewhere: 'sidePanelOriginElsewhere',
|
|
1214
|
+
};
|
|
1188
1215
|
|
|
1189
1216
|
/*
|
|
1190
1217
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
@@ -2017,6 +2044,12 @@ class PageTitleService {
|
|
|
2017
2044
|
get pageActionsFullWidth$() {
|
|
2018
2045
|
return this._pageActionsFullWidth$.asObservable();
|
|
2019
2046
|
}
|
|
2047
|
+
get pageActionsWrap$() {
|
|
2048
|
+
return this._pageActionsWrap$.asObservable();
|
|
2049
|
+
}
|
|
2050
|
+
get pageActionsMinWidth$() {
|
|
2051
|
+
return this._pageActionsMinWidth$.asObservable();
|
|
2052
|
+
}
|
|
2020
2053
|
get pageTitleHidden$() {
|
|
2021
2054
|
return this._pageTitleHidden$.asObservable();
|
|
2022
2055
|
}
|
|
@@ -2032,6 +2065,8 @@ class PageTitleService {
|
|
|
2032
2065
|
this._customPageSubtitleSet$ = new BehaviorSubject(false);
|
|
2033
2066
|
this._hasPageActions$ = new BehaviorSubject(false);
|
|
2034
2067
|
this._pageActionsFullWidth$ = new BehaviorSubject(false);
|
|
2068
|
+
this._pageActionsWrap$ = new BehaviorSubject(false);
|
|
2069
|
+
this._pageActionsMinWidth$ = new BehaviorSubject(null);
|
|
2035
2070
|
this._pageActionsViewContainerRef$ = new BehaviorSubject(null);
|
|
2036
2071
|
this._pageTitleHidden$ = new BehaviorSubject(false);
|
|
2037
2072
|
this._currentTitle$ = new BehaviorSubject('');
|
|
@@ -2067,6 +2102,16 @@ class PageTitleService {
|
|
|
2067
2102
|
setPageActionsFullWidth(value) {
|
|
2068
2103
|
this._pageActionsFullWidth$.next(value);
|
|
2069
2104
|
}
|
|
2105
|
+
setPageActionsWrap(value) {
|
|
2106
|
+
this._pageActionsWrap$.next(value);
|
|
2107
|
+
}
|
|
2108
|
+
/**
|
|
2109
|
+
* The narrowest width wrapping page actions can adapt to. They stay beside the title as long as
|
|
2110
|
+
* this fits; null means their natural width.
|
|
2111
|
+
*/
|
|
2112
|
+
setPageActionsMinWidth(width) {
|
|
2113
|
+
this._pageActionsMinWidth$.next(width);
|
|
2114
|
+
}
|
|
2070
2115
|
setCustomPageTitleSet(set) {
|
|
2071
2116
|
this._customPageTitleSet$.next(set);
|
|
2072
2117
|
}
|
|
@@ -2097,6 +2142,8 @@ class PageTitleService {
|
|
|
2097
2142
|
if (pageActionsViewContainerRef && !preventReset) {
|
|
2098
2143
|
pageActionsViewContainerRef.clear();
|
|
2099
2144
|
this.setHasPageActions(false);
|
|
2145
|
+
this.setPageActionsWrap(false);
|
|
2146
|
+
this.setPageActionsMinWidth(null);
|
|
2100
2147
|
}
|
|
2101
2148
|
}))
|
|
2102
2149
|
.subscribe();
|
|
@@ -2901,6 +2948,163 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
2901
2948
|
}]
|
|
2902
2949
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i1$2.ConfigService }] });
|
|
2903
2950
|
|
|
2951
|
+
/*
|
|
2952
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
2953
|
+
*
|
|
2954
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
2955
|
+
* you may not use this file except in compliance with the License.
|
|
2956
|
+
* You may obtain a copy of the License at
|
|
2957
|
+
*
|
|
2958
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
2959
|
+
*
|
|
2960
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
2961
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
2962
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2963
|
+
* See the License for the specific language governing permissions and
|
|
2964
|
+
* limitations under the License.
|
|
2965
|
+
*/
|
|
2966
|
+
const SIDE_PANEL_WIDTH_STORAGE_KEY = 'sidePanelWidth';
|
|
2967
|
+
const SIDE_PANEL_DEFAULT_WIDTH = 480;
|
|
2968
|
+
const SIDE_PANEL_MIN_WIDTH = 320;
|
|
2969
|
+
const SIDE_PANEL_MAX_WIDTH = 960;
|
|
2970
|
+
class SidePanelHandleImpl {
|
|
2971
|
+
constructor(_onHide, _onWithdraw) {
|
|
2972
|
+
this._onHide = _onHide;
|
|
2973
|
+
this._onWithdraw = _onWithdraw;
|
|
2974
|
+
this._dismissed$ = new Subject();
|
|
2975
|
+
this._replaced$ = new Subject();
|
|
2976
|
+
this._resized$ = new Subject();
|
|
2977
|
+
this.dismissed$ = this._dismissed$.asObservable();
|
|
2978
|
+
this.replaced$ = this._replaced$.asObservable();
|
|
2979
|
+
this.resized$ = this._resized$.asObservable();
|
|
2980
|
+
}
|
|
2981
|
+
hide() {
|
|
2982
|
+
this._onHide(this);
|
|
2983
|
+
}
|
|
2984
|
+
withdraw() {
|
|
2985
|
+
this._onWithdraw(this);
|
|
2986
|
+
}
|
|
2987
|
+
notifyDismissed() {
|
|
2988
|
+
this._dismissed$.next();
|
|
2989
|
+
}
|
|
2990
|
+
notifyReplaced() {
|
|
2991
|
+
this._replaced$.next();
|
|
2992
|
+
this._dismissed$.complete();
|
|
2993
|
+
this._replaced$.complete();
|
|
2994
|
+
this._resized$.complete();
|
|
2995
|
+
}
|
|
2996
|
+
notifyResized(width) {
|
|
2997
|
+
this._resized$.next(width);
|
|
2998
|
+
}
|
|
2999
|
+
}
|
|
3000
|
+
/**
|
|
3001
|
+
* App-wide side panel next to the routed content. Knows nothing about what it shows: providers
|
|
3002
|
+
* offer content, the latest offer takes over. Dismissing only hides; the content stays alive until
|
|
3003
|
+
* withdrawn or replaced.
|
|
3004
|
+
*/
|
|
3005
|
+
class SidePanelService {
|
|
3006
|
+
constructor() {
|
|
3007
|
+
this._current$ = new BehaviorSubject(null);
|
|
3008
|
+
this._visible$ = new BehaviorSubject(false);
|
|
3009
|
+
this._preferredWidth$ = new BehaviorSubject(this.loadWidth());
|
|
3010
|
+
/** Width of content that brings its own; such content persists it, not the panel. */
|
|
3011
|
+
this._contentWidth$ = new BehaviorSubject(null);
|
|
3012
|
+
this._currentHandle = null;
|
|
3013
|
+
}
|
|
3014
|
+
get current$() {
|
|
3015
|
+
return this._current$.asObservable();
|
|
3016
|
+
}
|
|
3017
|
+
get visible$() {
|
|
3018
|
+
return this._visible$.asObservable();
|
|
3019
|
+
}
|
|
3020
|
+
/** The content's own width or else the user's preferred width, widened to the content's minimum. */
|
|
3021
|
+
get width$() {
|
|
3022
|
+
return combineLatest([this._preferredWidth$, this._contentWidth$, this._current$]).pipe(map(([preferred, contentWidth, current]) => this.clampWidth(Math.max(contentWidth ?? preferred, current?.minWidth ?? 0))), distinctUntilChanged());
|
|
3023
|
+
}
|
|
3024
|
+
dismiss() {
|
|
3025
|
+
if (!this._visible$.getValue())
|
|
3026
|
+
return;
|
|
3027
|
+
this._visible$.next(false);
|
|
3028
|
+
this._currentHandle?.notifyDismissed();
|
|
3029
|
+
}
|
|
3030
|
+
offer(offer) {
|
|
3031
|
+
const current = this._current$.getValue();
|
|
3032
|
+
if (this._currentHandle && current?.key === offer.key) {
|
|
3033
|
+
// Only a changed width from the provider wins over a resize it has not caught up with yet.
|
|
3034
|
+
if (offer.width !== current.width)
|
|
3035
|
+
this._contentWidth$.next(offer.width ?? null);
|
|
3036
|
+
this._current$.next(offer);
|
|
3037
|
+
this._visible$.next(true);
|
|
3038
|
+
return this._currentHandle;
|
|
3039
|
+
}
|
|
3040
|
+
this._currentHandle?.notifyReplaced();
|
|
3041
|
+
const handle = new SidePanelHandleImpl(hidden => this.hideHandle(hidden), withdrawn => this.withdrawHandle(withdrawn));
|
|
3042
|
+
this._currentHandle = handle;
|
|
3043
|
+
this._contentWidth$.next(offer.width ?? null);
|
|
3044
|
+
this._current$.next(offer);
|
|
3045
|
+
this._visible$.next(true);
|
|
3046
|
+
return handle;
|
|
3047
|
+
}
|
|
3048
|
+
/**
|
|
3049
|
+
* Shows retained content again, also when hidden via `SidePanelHandle.hide()`. Does not notify
|
|
3050
|
+
* the provider.
|
|
3051
|
+
*/
|
|
3052
|
+
reopen() {
|
|
3053
|
+
if (this._current$.getValue())
|
|
3054
|
+
this._visible$.next(true);
|
|
3055
|
+
}
|
|
3056
|
+
/** Withdraws the current content only when it still carries [key]. */
|
|
3057
|
+
withdraw(key) {
|
|
3058
|
+
if (this._current$.getValue()?.key === key && this._currentHandle) {
|
|
3059
|
+
this.withdrawHandle(this._currentHandle);
|
|
3060
|
+
}
|
|
3061
|
+
}
|
|
3062
|
+
/** Resizes live. Call [endResize] once the user lets go. */
|
|
3063
|
+
setWidth(width) {
|
|
3064
|
+
const clamped = this.clampWidth(width);
|
|
3065
|
+
if (this._contentWidth$.getValue() !== null) {
|
|
3066
|
+
this._contentWidth$.next(clamped);
|
|
3067
|
+
return;
|
|
3068
|
+
}
|
|
3069
|
+
this._preferredWidth$.next(clamped);
|
|
3070
|
+
localStorage.setItem(SIDE_PANEL_WIDTH_STORAGE_KEY, `${clamped}`);
|
|
3071
|
+
}
|
|
3072
|
+
/** Reports the final width to the provider of the current content. */
|
|
3073
|
+
endResize() {
|
|
3074
|
+
this._currentHandle?.notifyResized(this._contentWidth$.getValue() ?? this._preferredWidth$.getValue());
|
|
3075
|
+
}
|
|
3076
|
+
clampWidth(width) {
|
|
3077
|
+
const max = Math.min(SIDE_PANEL_MAX_WIDTH, Math.floor(window.innerWidth * 0.6));
|
|
3078
|
+
return Math.round(Math.max(SIDE_PANEL_MIN_WIDTH, Math.min(width, max)));
|
|
3079
|
+
}
|
|
3080
|
+
hideHandle(handle) {
|
|
3081
|
+
if (handle === this._currentHandle && this._visible$.getValue())
|
|
3082
|
+
this._visible$.next(false);
|
|
3083
|
+
}
|
|
3084
|
+
loadWidth() {
|
|
3085
|
+
const stored = Number(localStorage.getItem(SIDE_PANEL_WIDTH_STORAGE_KEY));
|
|
3086
|
+
return Number.isFinite(stored) && stored > 0
|
|
3087
|
+
? this.clampWidth(stored)
|
|
3088
|
+
: SIDE_PANEL_DEFAULT_WIDTH;
|
|
3089
|
+
}
|
|
3090
|
+
withdrawHandle(handle) {
|
|
3091
|
+
if (handle !== this._currentHandle)
|
|
3092
|
+
return;
|
|
3093
|
+
this._currentHandle = null;
|
|
3094
|
+
this._contentWidth$.next(null);
|
|
3095
|
+
this._current$.next(null);
|
|
3096
|
+
this._visible$.next(false);
|
|
3097
|
+
}
|
|
3098
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: SidePanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3099
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: SidePanelService, providedIn: 'root' }); }
|
|
3100
|
+
}
|
|
3101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: SidePanelService, decorators: [{
|
|
3102
|
+
type: Injectable,
|
|
3103
|
+
args: [{
|
|
3104
|
+
providedIn: 'root',
|
|
3105
|
+
}]
|
|
3106
|
+
}] });
|
|
3107
|
+
|
|
2904
3108
|
/*
|
|
2905
3109
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
2906
3110
|
*
|
|
@@ -3415,6 +3619,42 @@ const setRequiredOnSchema = (schema, path, property, isRequired) => {
|
|
|
3415
3619
|
return schema;
|
|
3416
3620
|
};
|
|
3417
3621
|
|
|
3622
|
+
/*
|
|
3623
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
3624
|
+
*
|
|
3625
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3626
|
+
* you may not use this file except in compliance with the License.
|
|
3627
|
+
* You may obtain a copy of the License at
|
|
3628
|
+
*
|
|
3629
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
3630
|
+
*
|
|
3631
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3632
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
3633
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3634
|
+
* See the License for the specific language governing permissions and
|
|
3635
|
+
* limitations under the License.
|
|
3636
|
+
*/
|
|
3637
|
+
/**
|
|
3638
|
+
* Resize observations of [elements]. Lazy: the observer opens on subscribe and disconnects on
|
|
3639
|
+
* unsubscribe. Emits each batch of entries from inside the observer callback, when layout is
|
|
3640
|
+
* fresh, so reading sizes there forces no extra layout. Runs in whatever zone it is subscribed in.
|
|
3641
|
+
*/
|
|
3642
|
+
const fromResizeObserver = (elements, options) => new Observable(subscriber => {
|
|
3643
|
+
const observer = new ResizeObserver(entries => subscriber.next(entries));
|
|
3644
|
+
(Array.isArray(elements) ? elements : [elements]).forEach(element => observer.observe(element, options));
|
|
3645
|
+
return () => observer.disconnect();
|
|
3646
|
+
});
|
|
3647
|
+
/** Mutation records of [target]. Lazy like [fromResizeObserver]. */
|
|
3648
|
+
const fromMutationObserver = (target, options) => new Observable(subscriber => {
|
|
3649
|
+
const observer = new MutationObserver(records => subscriber.next(records));
|
|
3650
|
+
observer.observe(target, options);
|
|
3651
|
+
return () => observer.disconnect();
|
|
3652
|
+
});
|
|
3653
|
+
/** The border-box inline size of a resize entry, in CSS pixels. */
|
|
3654
|
+
const borderBoxWidth = (entry) => entry.borderBoxSize?.[0]?.inlineSize ?? entry.target.getBoundingClientRect().width;
|
|
3655
|
+
/** The content-box inline size of a resize entry, in CSS pixels. */
|
|
3656
|
+
const contentBoxWidth = (entry) => entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width;
|
|
3657
|
+
|
|
3418
3658
|
/*
|
|
3419
3659
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
3420
3660
|
*
|
|
@@ -4375,7 +4615,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
4375
4615
|
|
|
4376
4616
|
class MenuService {
|
|
4377
4617
|
get menuItems$() {
|
|
4378
|
-
return this._menuItems$.pipe(distinctUntilChanged((prev, curr) => isEqual(prev, curr)));
|
|
4618
|
+
return this._menuItems$.pipe(distinctUntilChanged$1((prev, curr) => isEqual(prev, curr)));
|
|
4379
4619
|
}
|
|
4380
4620
|
get menuItemsLoaded$() {
|
|
4381
4621
|
return this._menuItems$.pipe(map$1(items => Array.isArray(items) && items.length > 0));
|
|
@@ -4409,7 +4649,7 @@ class MenuService {
|
|
|
4409
4649
|
});
|
|
4410
4650
|
});
|
|
4411
4651
|
return closestSequence;
|
|
4412
|
-
}), distinctUntilChanged());
|
|
4652
|
+
}), distinctUntilChanged$1());
|
|
4413
4653
|
}
|
|
4414
4654
|
constructor(configService, http, logger, menuIncludeService, pendingChangesService, router, userProviderService, keycloakService) {
|
|
4415
4655
|
this.configService = configService;
|
|
@@ -6160,6 +6400,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
6160
6400
|
}]
|
|
6161
6401
|
}] });
|
|
6162
6402
|
|
|
6403
|
+
/*
|
|
6404
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
6405
|
+
*
|
|
6406
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
6407
|
+
* you may not use this file except in compliance with the License.
|
|
6408
|
+
* You may obtain a copy of the License at
|
|
6409
|
+
*
|
|
6410
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
6411
|
+
*
|
|
6412
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
6413
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
6414
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
6415
|
+
* See the License for the specific language governing permissions and
|
|
6416
|
+
* limitations under the License.
|
|
6417
|
+
*/
|
|
6418
|
+
const SIDE_PANEL_OFFSET_PROPERTY = '--valtimo-side-panel-offset';
|
|
6419
|
+
const SIDE_PANEL_KEYBOARD_RESIZE_STEP = 16;
|
|
6420
|
+
/**
|
|
6421
|
+
* Fixed panel at the right edge of the internal layout. Rendered once next to the router outlet so
|
|
6422
|
+
* its content survives navigation; showing and hiding is CSS only, because moving an iframe in the
|
|
6423
|
+
* DOM reloads it. Publishes its occupied width as `--valtimo-side-panel-offset` so the layout can
|
|
6424
|
+
* push the page content aside.
|
|
6425
|
+
*/
|
|
6426
|
+
class SidePanelComponent {
|
|
6427
|
+
constructor(iconService, router, shellService, sidePanelService) {
|
|
6428
|
+
this.iconService = iconService;
|
|
6429
|
+
this.router = router;
|
|
6430
|
+
this.shellService = shellService;
|
|
6431
|
+
this.sidePanelService = sidePanelService;
|
|
6432
|
+
this.$current = toSignal(this.sidePanelService.current$, { initialValue: null });
|
|
6433
|
+
this.$offers = computed(() => {
|
|
6434
|
+
const current = this.$current();
|
|
6435
|
+
return current ? [current] : [];
|
|
6436
|
+
});
|
|
6437
|
+
/** The origin's label; null while a resolving label has not arrived. */
|
|
6438
|
+
this.$originLabel = toSignal(toObservable(this.$current).pipe(switchMap(current => {
|
|
6439
|
+
const label = current?.origin?.label;
|
|
6440
|
+
if (label === undefined)
|
|
6441
|
+
return of(null);
|
|
6442
|
+
return isObservable(label) ? label.pipe(startWith(null)) : of(label);
|
|
6443
|
+
})), { initialValue: null });
|
|
6444
|
+
/** The user is on a page other than the one the content belongs to. */
|
|
6445
|
+
this.$originElsewhere = computed(() => {
|
|
6446
|
+
const origin = this.$current()?.origin;
|
|
6447
|
+
if (!origin)
|
|
6448
|
+
return false;
|
|
6449
|
+
const originUrl = this.router.serializeUrl(this.router.createUrlTree(origin.route));
|
|
6450
|
+
const url = this._$url().split(/[?#]/)[0];
|
|
6451
|
+
return url !== originUrl && !url.startsWith(`${originUrl}/`);
|
|
6452
|
+
});
|
|
6453
|
+
this.$resizing = signal(false);
|
|
6454
|
+
this.$visible = toSignal(this.sidePanelService.visible$, { initialValue: false });
|
|
6455
|
+
this.$width = toSignal(this.sidePanelService.width$, { requireSync: true });
|
|
6456
|
+
this.testIds = SIDE_PANEL_TEST_IDS;
|
|
6457
|
+
this._endResize = null;
|
|
6458
|
+
this._$largeScreen = toSignal(this.shellService.largeScreen$, { initialValue: true });
|
|
6459
|
+
this._$url = toSignal(this.router.events.pipe(filter$1((event) => event instanceof NavigationEnd), map(event => event.urlAfterRedirects), startWith(this.router.url)), { requireSync: true });
|
|
6460
|
+
this.iconService.registerAll([Close16, PinFilled16]);
|
|
6461
|
+
// Small screens: overlay instead of push.
|
|
6462
|
+
effect(() => {
|
|
6463
|
+
const offset = this.$current() && this.$visible() && this._$largeScreen() ? this.$width() : 0;
|
|
6464
|
+
document.documentElement.style.setProperty(SIDE_PANEL_OFFSET_PROPERTY, `${offset}px`);
|
|
6465
|
+
});
|
|
6466
|
+
}
|
|
6467
|
+
ngOnDestroy() {
|
|
6468
|
+
this._endResize?.();
|
|
6469
|
+
document.documentElement.style.removeProperty(SIDE_PANEL_OFFSET_PROPERTY);
|
|
6470
|
+
}
|
|
6471
|
+
onClose() {
|
|
6472
|
+
this.sidePanelService.dismiss();
|
|
6473
|
+
}
|
|
6474
|
+
onResizeKey(delta) {
|
|
6475
|
+
this.sidePanelService.setWidth(this.$width() + delta * SIDE_PANEL_KEYBOARD_RESIZE_STEP);
|
|
6476
|
+
this.sidePanelService.endResize();
|
|
6477
|
+
}
|
|
6478
|
+
onResizeStart(event) {
|
|
6479
|
+
event.preventDefault();
|
|
6480
|
+
this.$resizing.set(true);
|
|
6481
|
+
document.body.style.setProperty('cursor', 'col-resize');
|
|
6482
|
+
document.body.style.setProperty('user-select', 'none');
|
|
6483
|
+
const onMove = (moveEvent) => this.sidePanelService.setWidth(window.innerWidth - moveEvent.clientX);
|
|
6484
|
+
const onUp = () => {
|
|
6485
|
+
this.$resizing.set(false);
|
|
6486
|
+
document.body.style.removeProperty('cursor');
|
|
6487
|
+
document.body.style.removeProperty('user-select');
|
|
6488
|
+
document.removeEventListener('mousemove', onMove);
|
|
6489
|
+
document.removeEventListener('mouseup', onUp);
|
|
6490
|
+
this.sidePanelService.endResize();
|
|
6491
|
+
this._endResize = null;
|
|
6492
|
+
};
|
|
6493
|
+
this._endResize = onUp;
|
|
6494
|
+
document.addEventListener('mousemove', onMove);
|
|
6495
|
+
document.addEventListener('mouseup', onUp);
|
|
6496
|
+
}
|
|
6497
|
+
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 }); }
|
|
6498
|
+
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 }); }
|
|
6499
|
+
}
|
|
6500
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: SidePanelComponent, decorators: [{
|
|
6501
|
+
type: Component,
|
|
6502
|
+
args: [{ standalone: true, selector: 'valtimo-side-panel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
6503
|
+
NgComponentOutlet,
|
|
6504
|
+
RouterLink,
|
|
6505
|
+
TranslateModule,
|
|
6506
|
+
ButtonModule,
|
|
6507
|
+
IconModule,
|
|
6508
|
+
TagModule,
|
|
6509
|
+
TooltipModule$1,
|
|
6510
|
+
], 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"] }]
|
|
6511
|
+
}], ctorParameters: () => [{ type: i2$3.IconService }, { type: i1$3.Router }, { type: ShellService }, { type: SidePanelService }] });
|
|
6512
|
+
|
|
6163
6513
|
/*
|
|
6164
6514
|
* Copyright 2015-2025 Ritense BV, the Netherlands.
|
|
6165
6515
|
*
|
|
@@ -9160,29 +9510,29 @@ class PageHeaderComponent {
|
|
|
9160
9510
|
this.titleAsBreadcrumb$ = this.pageHeaderService.titleAsBreadcrumb$;
|
|
9161
9511
|
this.pageActionsHasContent$ = this.pageHeaderService.pageActionsHasContent$;
|
|
9162
9512
|
this.pageTitleHidden$ = this.pageTitleService.pageTitleHidden$;
|
|
9513
|
+
this.pageActionsWrap$ = this.pageTitleService.pageActionsWrap$;
|
|
9514
|
+
this.pageActionsMinWidth$ = this.pageTitleService.pageActionsMinWidth$;
|
|
9515
|
+
this._pageHeadHeightSubscription = null;
|
|
9163
9516
|
}
|
|
9164
9517
|
ngAfterViewInit() {
|
|
9165
9518
|
this.pageHeaderService.setContentViewContainerRef(this._contentrVcr);
|
|
9166
9519
|
this.openPageHeadResizeObserver();
|
|
9167
9520
|
}
|
|
9168
9521
|
ngOnDestroy() {
|
|
9169
|
-
this.
|
|
9522
|
+
this._pageHeadHeightSubscription?.unsubscribe();
|
|
9170
9523
|
}
|
|
9171
9524
|
openPageHeadResizeObserver() {
|
|
9172
|
-
|
|
9173
|
-
|
|
9174
|
-
|
|
9175
|
-
|
|
9176
|
-
this.pageHeaderService.setPageHeadHeight(pageHeadHeight);
|
|
9177
|
-
});
|
|
9178
|
-
this._pageHeadResizeObserver.observe(this._pageHead.nativeElement);
|
|
9525
|
+
// Width-only resizes emit too: FitPage re-fits when content above it reflows.
|
|
9526
|
+
this._pageHeadHeightSubscription = fromResizeObserver(this._pageHead.nativeElement)
|
|
9527
|
+
.pipe(map(entries => entries[entries.length - 1]?.contentRect.height), filter$1((height) => !!height))
|
|
9528
|
+
.subscribe(height => this.pageHeaderService.setPageHeadHeight(height));
|
|
9179
9529
|
}
|
|
9180
9530
|
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" }] }); }
|
|
9531
|
+
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
9532
|
}
|
|
9183
9533
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: PageHeaderComponent, decorators: [{
|
|
9184
9534
|
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"] }]
|
|
9535
|
+
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
9536
|
}], ctorParameters: () => [{ type: UserInterfaceService }, { type: PageHeaderService }, { type: PageTitleService }], propDecorators: { _contentrVcr: [{
|
|
9187
9537
|
type: ViewChild,
|
|
9188
9538
|
args: ['contentVcr', { static: true, read: ViewContainerRef }]
|
|
@@ -10578,12 +10928,12 @@ class FormioComponent {
|
|
|
10578
10928
|
this.refreshForm = new EventEmitter();
|
|
10579
10929
|
this.submission$ = new BehaviorSubject({});
|
|
10580
10930
|
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)));
|
|
10931
|
+
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
10932
|
this.options$ = new BehaviorSubject(undefined);
|
|
10583
10933
|
this.readOnly$ = new BehaviorSubject(false);
|
|
10584
10934
|
this.errors$ = new BehaviorSubject([]);
|
|
10585
10935
|
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)));
|
|
10936
|
+
this.currentLanguage$ = this.translateService.stream('key').pipe(map$1(() => this.translateService.currentLang), distinctUntilChanged$1(), tap$1(language => this.languageEventEmitter.emit(language)));
|
|
10587
10937
|
this._overrideOptions$ = new BehaviorSubject({});
|
|
10588
10938
|
this.formioOptions$ = combineLatest([
|
|
10589
10939
|
this.options$,
|
|
@@ -10600,7 +10950,7 @@ class FormioComponent {
|
|
|
10600
10950
|
}),
|
|
10601
10951
|
};
|
|
10602
10952
|
return deepmerge(defaultOptions, overrideOptions);
|
|
10603
|
-
}), distinctUntilChanged((prev, curr) => isEqual(prev, curr)), tap$1(options => this.logger.debug('Form.IO options used', options)));
|
|
10953
|
+
}), distinctUntilChanged$1((prev, curr) => isEqual(prev, curr)), tap$1(options => this.logger.debug('Form.IO options used', options)));
|
|
10604
10954
|
// Only renderOptions reaches form.io itself; getRendererOptions() drops everything else.
|
|
10605
10955
|
this.renderOptions$ = this.currentLanguage$.pipe(map$1(language => ({ language })));
|
|
10606
10956
|
this._storeTokenInLocalStorage = !this.configService.getFeatureToggle('disableFormioTokenInLocalStorage');
|
|
@@ -10874,7 +11224,7 @@ class FormioBuilderComponent {
|
|
|
10874
11224
|
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
10875
11225
|
this.change = new EventEmitter();
|
|
10876
11226
|
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)));
|
|
11227
|
+
this.currentLanguage$ = this.translateService.stream('key').pipe(map$1(() => this.translateService.currentLang), distinctUntilChanged$1(), tap$1(language => this.languageEventEmitter.emit(language)));
|
|
10878
11228
|
this.languageEventEmitter = new EventEmitter();
|
|
10879
11229
|
this.options$ = new BehaviorSubject(undefined);
|
|
10880
11230
|
this._overrideOptions$ = new BehaviorSubject({});
|
|
@@ -10894,7 +11244,7 @@ class FormioBuilderComponent {
|
|
|
10894
11244
|
}),
|
|
10895
11245
|
};
|
|
10896
11246
|
return deepmerge(defaultOptions, overrideOptions);
|
|
10897
|
-
}), distinctUntilChanged((prev, curr) => isEqual(prev, curr)), tap$1(() => this.triggerRebuild.emit()));
|
|
11247
|
+
}), distinctUntilChanged$1((prev, curr) => isEqual(prev, curr)), tap$1(() => this.triggerRebuild.emit()));
|
|
10898
11248
|
this.editFormModified$ = new BehaviorSubject(false);
|
|
10899
11249
|
this.modifyEditForm = () => {
|
|
10900
11250
|
const context$ = getContextObservable(this.route);
|
|
@@ -11956,7 +12306,7 @@ class ValuePathSelectorComponent {
|
|
|
11956
12306
|
return this.formGroup.get('selectedPath');
|
|
11957
12307
|
}
|
|
11958
12308
|
get _selectedPath$() {
|
|
11959
|
-
return this.selectedPath.valueChanges.pipe(startWith(this.selectedPath.value), distinctUntilChanged(), tap(value => {
|
|
12309
|
+
return this.selectedPath.valueChanges.pipe(startWith(this.selectedPath.value), distinctUntilChanged$1(), tap(value => {
|
|
11960
12310
|
if (this._onChangeFunction) {
|
|
11961
12311
|
this._onChangeFunction(value);
|
|
11962
12312
|
}
|
|
@@ -12754,6 +13104,35 @@ function registerFormioFlatpickr() {
|
|
|
12754
13104
|
};
|
|
12755
13105
|
}
|
|
12756
13106
|
|
|
13107
|
+
/*
|
|
13108
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
13109
|
+
*
|
|
13110
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
13111
|
+
* you may not use this file except in compliance with the License.
|
|
13112
|
+
* You may obtain a copy of the License at
|
|
13113
|
+
*
|
|
13114
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
13115
|
+
*
|
|
13116
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13117
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
13118
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13119
|
+
* See the License for the specific language governing permissions and
|
|
13120
|
+
* limitations under the License.
|
|
13121
|
+
*/
|
|
13122
|
+
const SANITIZE_CONFIG = {
|
|
13123
|
+
FORBID_TAGS: ['form', 'input', 'button', 'textarea', 'select'],
|
|
13124
|
+
};
|
|
13125
|
+
// Use an isolated DOMPurify instance so the anchor hook below does not leak onto
|
|
13126
|
+
// the shared singleton that formiojs (and other libraries) sanitize with.
|
|
13127
|
+
const purifier = createDOMPurify(window);
|
|
13128
|
+
purifier.addHook('afterSanitizeAttributes', node => {
|
|
13129
|
+
if (node.tagName === 'A') {
|
|
13130
|
+
node.setAttribute('target', '_blank');
|
|
13131
|
+
node.setAttribute('rel', 'noopener noreferrer');
|
|
13132
|
+
}
|
|
13133
|
+
});
|
|
13134
|
+
const sanitizeEmailHtml = (html) => purifier.sanitize(html, SANITIZE_CONFIG);
|
|
13135
|
+
|
|
12757
13136
|
/*
|
|
12758
13137
|
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
12759
13138
|
*
|
|
@@ -12772,7 +13151,7 @@ function registerFormioFlatpickr() {
|
|
|
12772
13151
|
class FormIoMailPreviewComponent {
|
|
12773
13152
|
set value(v) {
|
|
12774
13153
|
this._value = v;
|
|
12775
|
-
this.safeValue = this.sanitizer.bypassSecurityTrustHtml(v ?? 'Hier wordt het e-mailvoorbeeld getoond.');
|
|
13154
|
+
this.safeValue = this.sanitizer.bypassSecurityTrustHtml(sanitizeEmailHtml(v ?? 'Hier wordt het e-mailvoorbeeld getoond.'));
|
|
12776
13155
|
}
|
|
12777
13156
|
get value() {
|
|
12778
13157
|
return this._value;
|
|
@@ -18668,7 +19047,7 @@ class StatusSelectorComponent {
|
|
|
18668
19047
|
selected: !!selectedStatuses.find(selectedStatusKey => selectedStatusKey === status.key),
|
|
18669
19048
|
key: status.key,
|
|
18670
19049
|
tagType: status.tagType,
|
|
18671
|
-
}))), distinctUntilChanged((previous, current) => isEqual(previous, current)));
|
|
19050
|
+
}))), distinctUntilChanged$1((previous, current) => isEqual(previous, current)));
|
|
18672
19051
|
}
|
|
18673
19052
|
itemSelected(event) {
|
|
18674
19053
|
const newSelectedItems = event?.filter(item => item?.selected) || [];
|
|
@@ -19865,7 +20244,7 @@ class CaseTagsSelectorComponent {
|
|
|
19865
20244
|
selected: !!selectedCaseTags.find(selectedCaseTagKey => selectedCaseTagKey === caseTag.key),
|
|
19866
20245
|
key: caseTag.key,
|
|
19867
20246
|
tagType: caseTag.tagType,
|
|
19868
|
-
}))), distinctUntilChanged((previous, current) => isEqual(previous, current)));
|
|
20247
|
+
}))), distinctUntilChanged$1((previous, current) => isEqual(previous, current)));
|
|
19869
20248
|
}
|
|
19870
20249
|
set caseTags(value) {
|
|
19871
20250
|
this._caseTags$.next((value || []).map(caseTags => ({
|
|
@@ -20777,6 +21156,8 @@ class RenderInPageHeaderDirective {
|
|
|
20777
21156
|
this.pageTitleService = pageTitleService;
|
|
20778
21157
|
this.pageHeaderService = pageHeaderService;
|
|
20779
21158
|
this.fullWidth = false;
|
|
21159
|
+
/** Lets the actions move below the page title when both don't fit on one row. */
|
|
21160
|
+
this.wrap = false;
|
|
20780
21161
|
this._subscriptions = new Subscription();
|
|
20781
21162
|
}
|
|
20782
21163
|
ngOnInit() {
|
|
@@ -20797,11 +21178,12 @@ class RenderInPageHeaderDirective {
|
|
|
20797
21178
|
pageActionsVcr.createEmbeddedView(this.templateRef);
|
|
20798
21179
|
this.pageTitleService.setHasPageActions(true);
|
|
20799
21180
|
this.pageTitleService.setPageActionsFullWidth(this.fullWidth);
|
|
21181
|
+
this.pageTitleService.setPageActionsWrap(this.wrap);
|
|
20800
21182
|
}
|
|
20801
21183
|
});
|
|
20802
21184
|
}
|
|
20803
21185
|
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 }); }
|
|
21186
|
+
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
21187
|
}
|
|
20806
21188
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: RenderInPageHeaderDirective, decorators: [{
|
|
20807
21189
|
type: Directive,
|
|
@@ -20811,6 +21193,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
20811
21193
|
args: [TemplateRef]
|
|
20812
21194
|
}], fullWidth: [{
|
|
20813
21195
|
type: Input
|
|
21196
|
+
}], wrap: [{
|
|
21197
|
+
type: Input
|
|
20814
21198
|
}] } });
|
|
20815
21199
|
|
|
20816
21200
|
/*
|
|
@@ -21361,7 +21745,7 @@ class MuuriDirective {
|
|
|
21361
21745
|
return this._muuriSubject$.getValue();
|
|
21362
21746
|
}
|
|
21363
21747
|
get _containerWidth$() {
|
|
21364
|
-
return this._containerWidthSubject$.pipe(distinctUntilChanged());
|
|
21748
|
+
return this._containerWidthSubject$.pipe(distinctUntilChanged$1());
|
|
21365
21749
|
}
|
|
21366
21750
|
constructor(elementRef, renderer, ngZone) {
|
|
21367
21751
|
this.elementRef = elementRef;
|
|
@@ -21778,6 +22162,11 @@ class AssignmentComponent {
|
|
|
21778
22162
|
get assignButtonTranslationKey() {
|
|
21779
22163
|
return this.mode === 'case' ? 'assignment.assignThisCase' : 'assignment.assignThisTask';
|
|
21780
22164
|
}
|
|
22165
|
+
get assignedNames() {
|
|
22166
|
+
return [this._assigneeFullName || this._assigneeId, this._assignedTeamTitle]
|
|
22167
|
+
.filter(name => !!name)
|
|
22168
|
+
.join(' & ');
|
|
22169
|
+
}
|
|
21781
22170
|
get hasEditChanges() {
|
|
21782
22171
|
return (this.selectedUserId$.getValue() !== this._initialUserId ||
|
|
21783
22172
|
this.selectedTeamKey$.getValue() !== this._initialTeamKey);
|
|
@@ -21792,6 +22181,8 @@ class AssignmentComponent {
|
|
|
21792
22181
|
this._userProviderService = _userProviderService;
|
|
21793
22182
|
this.mode = 'case';
|
|
21794
22183
|
this.hasPermission = true;
|
|
22184
|
+
/** Icon-only, for tight layouts; names show as a tooltip. */
|
|
22185
|
+
this.compact = false;
|
|
21795
22186
|
this.assignmentChangedEvent = new EventEmitter();
|
|
21796
22187
|
this.unassignedEvent = new EventEmitter();
|
|
21797
22188
|
this._assigneeId = null;
|
|
@@ -21817,7 +22208,7 @@ class AssignmentComponent {
|
|
|
21817
22208
|
this._candidateTeamsSubscription = null;
|
|
21818
22209
|
this._candidateUsersSubscription = null;
|
|
21819
22210
|
this._subscriptions = new Subscription();
|
|
21820
|
-
this._iconService.registerAll([UserFollow16, Group16, User16]);
|
|
22211
|
+
this._iconService.registerAll([Edit16, UserFollow16, Group16, User16]);
|
|
21821
22212
|
this._subscriptions.add(this._userProviderService.getUserSubject().subscribe(user => {
|
|
21822
22213
|
this._currentUser = user;
|
|
21823
22214
|
}));
|
|
@@ -22012,7 +22403,7 @@ class AssignmentComponent {
|
|
|
22012
22403
|
this._candidateTeamsSubscription = null;
|
|
22013
22404
|
}
|
|
22014
22405
|
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 }); }
|
|
22406
|
+
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
22407
|
}
|
|
22017
22408
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AssignmentComponent, decorators: [{
|
|
22018
22409
|
type: Component,
|
|
@@ -22025,7 +22416,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
22025
22416
|
LayerModule,
|
|
22026
22417
|
ComboBoxModule,
|
|
22027
22418
|
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"] }]
|
|
22419
|
+
NgbTooltipModule,
|
|
22420
|
+
], 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
22421
|
}], ctorParameters: () => [{ type: CdsThemeService }, { type: i2$3.IconService }, { type: i1.TranslateService }, { type: i6$1.UserProviderService }], propDecorators: { hostDisplay: [{
|
|
22030
22422
|
type: HostBinding,
|
|
22031
22423
|
args: ['style.display']
|
|
@@ -22033,6 +22425,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
22033
22425
|
type: Input
|
|
22034
22426
|
}], hasPermission: [{
|
|
22035
22427
|
type: Input
|
|
22428
|
+
}], compact: [{
|
|
22429
|
+
type: Input
|
|
22036
22430
|
}], assigneeId: [{
|
|
22037
22431
|
type: Input
|
|
22038
22432
|
}], assigneeFullName: [{
|
|
@@ -22286,5 +22680,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
22286
22680
|
* Generated bundle index. Do not edit.
|
|
22287
22681
|
*/
|
|
22288
22682
|
|
|
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 };
|
|
22683
|
+
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
22684
|
//# sourceMappingURL=valtimo-components.mjs.map
|