@valtimo/plugin 13.49.1 → 13.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Inject, Injectable, signal, Pipe, NgModule, EventEmitter, Output, Input, Component, ViewContainerRef, ViewChild, ChangeDetectionStrategy, ViewChildren } from '@angular/core';
3
- import { BehaviorSubject, combineLatest, tap, take, Subscription, map as map$1, switchMap, throwError, forkJoin, of, skip, filter, Subject, catchError } from 'rxjs';
2
+ import { InjectionToken, Inject, Injectable, signal, Pipe, NgModule, EventEmitter, Output, Input, Component, ViewContainerRef, ViewChild, ChangeDetectionStrategy, forwardRef, inject, Injector, ViewChildren } from '@angular/core';
3
+ import { BehaviorSubject, combineLatest, tap, take, Subscription, switchMap, map as map$1, of, defer, catchError, forkJoin, shareReplay, throwError, skip, filter, Subject } from 'rxjs';
4
4
  import { map, tap as tap$1 } from 'rxjs/operators';
5
5
  import * as i2 from '@ngx-translate/core';
6
6
  import { TranslateModule } from '@ngx-translate/core';
@@ -14,8 +14,10 @@ import { RouterModule } from '@angular/router';
14
14
  import * as i1$1 from '@angular/common';
15
15
  import { CommonModule } from '@angular/common';
16
16
  import * as i2$2 from '@valtimo/components';
17
- import { ParagraphModule, FormModule, InputModule, FitPageDirective, ValuePathSelectorPrefix, SelectModule, CarbonMultiInputModule, RadioModule, InputLabelModule, CARBON_THEME, CurrentCarbonTheme, OverflowMenuComponent, OverflowMenuOptionComponent, ReadOnlyDirective, VModalComponent, MultiInputFormModule, TooltipIconModule, ValtimoCdsModalDirective, VModalModule, DatePickerModule as DatePickerModule$1 } from '@valtimo/components';
17
+ import { ParagraphModule, FormModule, InputModule, CurrentCarbonTheme, SidePanelService, CdsThemeService, FitPageDirective, ValuePathSelectorPrefix, SelectModule, CarbonMultiInputModule, RadioModule, InputLabelModule, CARBON_THEME, OverflowMenuComponent, OverflowMenuOptionComponent, ReadOnlyDirective, VModalComponent, MultiInputFormModule, TooltipIconModule, ValtimoCdsModalDirective, VModalModule, DatePickerModule as DatePickerModule$1 } from '@valtimo/components';
18
18
  import { validate } from 'uuid';
19
+ import * as i1$6 from '@valtimo/document';
20
+ import { DocumentService } from '@valtimo/document';
19
21
  import * as i1$3 from 'carbon-components-angular';
20
22
  import { LoadingModule, ComboBoxModule, LayerModule, NotificationModule, ToggleModule, ButtonModule, IconModule, DatePickerInputModule, DatePickerModule, TimePickerModule, ModalModule, InputModule as InputModule$1 } from 'carbon-components-angular';
21
23
  import { AuthGuardService } from '@valtimo/security';
@@ -25,7 +27,6 @@ import * as i7 from 'carbon-components-angular/dropdown';
25
27
  import flatpickr from 'flatpickr';
26
28
  import { Add16, TrashCan16, DataTable16, Checkmark16 } from '@carbon/icons';
27
29
  import * as i1$5 from '@valtimo/resource';
28
- import * as i1$6 from '@valtimo/document';
29
30
  import * as i4 from '@valtimo/process';
30
31
 
31
32
  /*
@@ -769,6 +770,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
769
770
  }]
770
771
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2$1.ConfigService }] });
771
772
 
773
+ /*
774
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
775
+ *
776
+ * Licensed under EUPL, Version 1.2 (the "License");
777
+ * you may not use this file except in compliance with the License.
778
+ * You may obtain a copy of the License at
779
+ *
780
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
781
+ *
782
+ * Unless required by applicable law or agreed to in writing, software
783
+ * distributed under the License is distributed on an "AS IS" basis,
784
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
785
+ * See the License for the specific language governing permissions and
786
+ * limitations under the License.
787
+ */
788
+ class ExternalPluginSidePanelService extends BaseApiService {
789
+ constructor(httpClient, configService) {
790
+ super(httpClient, configService);
791
+ this.httpClient = httpClient;
792
+ this.configService = configService;
793
+ }
794
+ getSidePanel(configurationId, bundleKey) {
795
+ const params = bundleKey ? new HttpParams().set('bundleKey', bundleKey) : undefined;
796
+ return this.httpClient.get(this.getApiUrl(`/v1/external-plugin/configuration/${configurationId}/side-panel`), { params });
797
+ }
798
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ExternalPluginSidePanelService, deps: [{ token: i1.HttpClient }, { token: i2$1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
799
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ExternalPluginSidePanelService, providedIn: 'root' }); }
800
+ }
801
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ExternalPluginSidePanelService, decorators: [{
802
+ type: Injectable,
803
+ args: [{
804
+ providedIn: 'root',
805
+ }]
806
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2$1.ConfigService }] });
807
+
772
808
  /*
773
809
  * Copyright 2015-2025 Ritense BV, the Netherlands.
774
810
  *
@@ -896,6 +932,22 @@ function isExternalPluginDefinitionIncompatible(definition) {
896
932
  * limitations under the License.
897
933
  */
898
934
 
935
+ /*
936
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
937
+ *
938
+ * Licensed under EUPL, Version 1.2 (the "License");
939
+ * you may not use this file except in compliance with the License.
940
+ * You may obtain a copy of the License at
941
+ *
942
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
943
+ *
944
+ * Unless required by applicable law or agreed to in writing, software
945
+ * distributed under the License is distributed on an "AS IS" basis,
946
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
947
+ * See the License for the specific language governing permissions and
948
+ * limitations under the License.
949
+ */
950
+
899
951
  /*
900
952
  * Copyright 2015-2025 Ritense BV, the Netherlands.
901
953
  *
@@ -1346,6 +1398,75 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1346
1398
  }]
1347
1399
  }] });
1348
1400
 
1401
+ /*
1402
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
1403
+ *
1404
+ * Licensed under EUPL, Version 1.2 (the "License");
1405
+ * you may not use this file except in compliance with the License.
1406
+ * You may obtain a copy of the License at
1407
+ *
1408
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1409
+ *
1410
+ * Unless required by applicable law or agreed to in writing, software
1411
+ * distributed under the License is distributed on an "AS IS" basis,
1412
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1413
+ * See the License for the specific language governing permissions and
1414
+ * limitations under the License.
1415
+ */
1416
+ /**
1417
+ * Side-panel content for an external-plugin `side-panel` bundle. Owns its own user-token session,
1418
+ * so the token lives exactly as long as the panel content.
1419
+ */
1420
+ class ExternalPluginSidePanelComponent {
1421
+ constructor(sidePanelApiService, sessionService) {
1422
+ this.sidePanelApiService = sidePanelApiService;
1423
+ this.sessionService = sessionService;
1424
+ this.bundleKey = null;
1425
+ this.context = {};
1426
+ this.$iframeReady = signal(false);
1427
+ this.$panel = signal(null);
1428
+ this.$pluginDataUrl = signal(null);
1429
+ this.$state = signal('loading');
1430
+ this._subscriptions = new Subscription();
1431
+ }
1432
+ ngOnInit() {
1433
+ this._subscriptions.add(this.sidePanelApiService
1434
+ .getSidePanel(this.configurationId, this.bundleKey)
1435
+ .pipe(switchMap(panel => this.sessionService.startSession(panel.configurationId).pipe(map$1(() => panel))))
1436
+ .subscribe({
1437
+ next: panel => {
1438
+ this.$panel.set(panel);
1439
+ this.$pluginDataUrl.set(derivePluginDataUrl(panel.bundleUrl));
1440
+ this.$state.set('ready');
1441
+ },
1442
+ error: () => this.$state.set('error'),
1443
+ }));
1444
+ }
1445
+ ngOnDestroy() {
1446
+ this._subscriptions.unsubscribe();
1447
+ }
1448
+ onIframeReady() {
1449
+ this.$iframeReady.set(true);
1450
+ }
1451
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ExternalPluginSidePanelComponent, deps: [{ token: ExternalPluginSidePanelService }, { token: ExternalPluginSessionService }], target: i0.ɵɵFactoryTarget.Component }); }
1452
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: ExternalPluginSidePanelComponent, isStandalone: true, selector: "valtimo-external-plugin-side-panel", inputs: { bundleKey: "bundleKey", configurationId: "configurationId", context: "context" }, providers: [ExternalPluginSessionService], 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 class=\"external-plugin-side-panel\">\n @switch ($state()) {\n @case ('loading') {\n <div class=\"external-plugin-side-panel__status\">\n <cds-loading [isActive]=\"true\" [overlay]=\"false\" size=\"normal\"></cds-loading>\n </div>\n }\n\n @case ('error') {\n <div class=\"external-plugin-side-panel__status external-plugin-side-panel__status--error\">\n {{ 'sidePanel.loadError' | translate }}\n </div>\n }\n\n @case ('ready') {\n @if (!$iframeReady()) {\n <div class=\"external-plugin-side-panel__status\">\n <cds-loading [isActive]=\"true\" [overlay]=\"false\" size=\"normal\"></cds-loading>\n </div>\n }\n\n <valtimo-external-plugin-iframe\n [allowedEndpoints]=\"sessionService.$allowedEndpoints()\"\n [bundleUrl]=\"$panel()!.bundleUrl\"\n [configurationId]=\"$panel()!.configurationId\"\n [context]=\"context\"\n [pluginDataUrl]=\"$pluginDataUrl()\"\n [userToken]=\"sessionService.$userToken()\"\n (readyEvent)=\"onIframeReady()\"\n ></valtimo-external-plugin-iframe>\n }\n }\n</div>\n", styles: [".external-plugin-side-panel{display:flex;flex-direction:column;height:100%}.external-plugin-side-panel ::ng-deep valtimo-external-plugin-iframe{display:block;flex:1;min-height:0}.external-plugin-side-panel ::ng-deep .external-plugin-iframe{width:100%;height:100%;border:0}.external-plugin-side-panel__status{display:flex;align-items:center;justify-content:center;padding:var(--cds-spacing-07);color:var(--cds-text-secondary)}.external-plugin-side-panel__status--error{color:var(--cds-text-error)}\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: i0.forwardRef(() => CommonModule) }, { kind: "ngmodule", type: i0.forwardRef(() => LoadingModule) }, { kind: "component", type: i0.forwardRef(() => i1$3.Loading), selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "ngmodule", type: i0.forwardRef(() => TranslateModule) }, { kind: "pipe", type: i0.forwardRef(() => i2.TranslatePipe), name: "translate" }, { kind: "component", type: i0.forwardRef(() => ExternalPluginIframeComponent), selector: "valtimo-external-plugin-iframe", inputs: ["bundleUrl", "context", "prefillConfiguration", "userToken", "pluginDataUrl", "allowedEndpoints", "configurationId", "autoHeight"], outputs: ["configurationChangedEvent", "readyEvent", "taskCompletedEvent", "submitTaskEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1453
+ }
1454
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ExternalPluginSidePanelComponent, decorators: [{
1455
+ type: Component,
1456
+ args: [{ standalone: true, selector: 'valtimo-external-plugin-side-panel', changeDetection: ChangeDetectionStrategy.OnPush, providers: [ExternalPluginSessionService], imports: [
1457
+ CommonModule,
1458
+ LoadingModule,
1459
+ TranslateModule,
1460
+ forwardRef(() => ExternalPluginIframeComponent),
1461
+ ], 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 class=\"external-plugin-side-panel\">\n @switch ($state()) {\n @case ('loading') {\n <div class=\"external-plugin-side-panel__status\">\n <cds-loading [isActive]=\"true\" [overlay]=\"false\" size=\"normal\"></cds-loading>\n </div>\n }\n\n @case ('error') {\n <div class=\"external-plugin-side-panel__status external-plugin-side-panel__status--error\">\n {{ 'sidePanel.loadError' | translate }}\n </div>\n }\n\n @case ('ready') {\n @if (!$iframeReady()) {\n <div class=\"external-plugin-side-panel__status\">\n <cds-loading [isActive]=\"true\" [overlay]=\"false\" size=\"normal\"></cds-loading>\n </div>\n }\n\n <valtimo-external-plugin-iframe\n [allowedEndpoints]=\"sessionService.$allowedEndpoints()\"\n [bundleUrl]=\"$panel()!.bundleUrl\"\n [configurationId]=\"$panel()!.configurationId\"\n [context]=\"context\"\n [pluginDataUrl]=\"$pluginDataUrl()\"\n [userToken]=\"sessionService.$userToken()\"\n (readyEvent)=\"onIframeReady()\"\n ></valtimo-external-plugin-iframe>\n }\n }\n</div>\n", styles: [".external-plugin-side-panel{display:flex;flex-direction:column;height:100%}.external-plugin-side-panel ::ng-deep valtimo-external-plugin-iframe{display:block;flex:1;min-height:0}.external-plugin-side-panel ::ng-deep .external-plugin-iframe{width:100%;height:100%;border:0}.external-plugin-side-panel__status{display:flex;align-items:center;justify-content:center;padding:var(--cds-spacing-07);color:var(--cds-text-secondary)}.external-plugin-side-panel__status--error{color:var(--cds-text-error)}\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"] }]
1462
+ }], ctorParameters: () => [{ type: ExternalPluginSidePanelService }, { type: ExternalPluginSessionService }], propDecorators: { bundleKey: [{
1463
+ type: Input
1464
+ }], configurationId: [{
1465
+ type: Input
1466
+ }], context: [{
1467
+ type: Input
1468
+ }] } });
1469
+
1349
1470
  /*
1350
1471
  * Copyright 2015-2026 Ritense BV, the Netherlands.
1351
1472
  *
@@ -1367,11 +1488,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1367
1488
  * scroll.
1368
1489
  */
1369
1490
  const MAX_IFRAME_HEIGHT = 20000;
1491
+ const MAX_PANEL_TEXT_LENGTH = 200;
1492
+ /** Context keys that name the case; only GZAC's surface context may set them. */
1493
+ const CASE_CONTEXT_KEYS = ['documentId', 'caseDefinitionKey'];
1370
1494
  class ExternalPluginIframeComponent {
1371
- constructor(_sanitizer, _translateService, _configService) {
1495
+ constructor(_sanitizer, _translateService, _configService,
1496
+ // Defaults keep subclasses that call super() with the original three arguments working.
1497
+ _sidePanelService = inject(SidePanelService), _cdsThemeService = inject(CdsThemeService), _injector = inject(Injector)) {
1372
1498
  this._sanitizer = _sanitizer;
1373
1499
  this._translateService = _translateService;
1374
1500
  this._configService = _configService;
1501
+ this._sidePanelService = _sidePanelService;
1502
+ this._cdsThemeService = _cdsThemeService;
1503
+ this._injector = _injector;
1375
1504
  this.context = {};
1376
1505
  this.prefillConfiguration = null;
1377
1506
  /**
@@ -1407,6 +1536,10 @@ class ExternalPluginIframeComponent {
1407
1536
  this.submitTaskEvent = new EventEmitter();
1408
1537
  this.$trustedUrl = signal(null);
1409
1538
  this._onMessageBound = this._onMessage.bind(this);
1539
+ this._subscriptions = new Subscription();
1540
+ /** Offers waiting for their case to resolve, by key without the case. */
1541
+ this._pendingPanelOffers = new Map();
1542
+ this._theme = CurrentCarbonTheme.WHITE;
1410
1543
  this._apiBasePath = this._deriveApiBasePath();
1411
1544
  }
1412
1545
  ngOnInit() {
@@ -1416,9 +1549,16 @@ class ExternalPluginIframeComponent {
1416
1549
  this.$trustedUrl.set(this._sanitizer.bypassSecurityTrustResourceUrl(this.bundleUrl));
1417
1550
  }
1418
1551
  window.addEventListener('message', this._onMessageBound);
1552
+ this._subscriptions.add(this._cdsThemeService.currentTheme$.subscribe(theme => {
1553
+ const changed = theme !== this._theme;
1554
+ this._theme = theme;
1555
+ if (changed)
1556
+ this._postToIframe('themeChanged', { theme });
1557
+ }));
1419
1558
  }
1420
1559
  ngOnDestroy() {
1421
1560
  window.removeEventListener('message', this._onMessageBound);
1561
+ this._subscriptions.unsubscribe();
1422
1562
  }
1423
1563
  triggerSave() {
1424
1564
  this._postToIframe('save', {});
@@ -1439,7 +1579,7 @@ class ExternalPluginIframeComponent {
1439
1579
  onIframeLoad() {
1440
1580
  this._postToIframe('init', {
1441
1581
  context: this.context,
1442
- theme: 'white',
1582
+ theme: this._theme,
1443
1583
  locale: this._translateService.currentLang ?? this._translateService.defaultLang ?? 'en',
1444
1584
  });
1445
1585
  }
@@ -1483,7 +1623,140 @@ class ExternalPluginIframeComponent {
1483
1623
  case 'proxyRequest':
1484
1624
  void this._handleProxyRequest(data.payload);
1485
1625
  break;
1626
+ case 'offerPanel':
1627
+ this._offerPanel(data.payload);
1628
+ break;
1629
+ case 'withdrawPanel':
1630
+ this._withdrawPanel(data.payload);
1631
+ break;
1632
+ }
1633
+ }
1634
+ /**
1635
+ * Offers one of this configuration's own `side-panel` bundles to the app-wide side panel. The
1636
+ * bundle URL is resolved by GZAC, never taken from the iframe. This surface's context is trusted
1637
+ * and overrides same-named keys in the plugin-supplied context; the keys naming the case are
1638
+ * GZAC's alone.
1639
+ */
1640
+ _offerPanel(payload) {
1641
+ const offer = this._parsePanelOffer(payload);
1642
+ if (!offer || !this.configurationId)
1643
+ return;
1644
+ const configurationId = this.configurationId;
1645
+ const documentId = this._contextString('documentId');
1646
+ // Per case: the same key offered for another case gets a fresh iframe with that case's context.
1647
+ const key = `${this._panelKeyBase(offer.bundleKey, offer.key)}:${encodeURIComponent(documentId ?? '')}`;
1648
+ const pluginContext = Object.fromEntries(Object.entries(offer.context ?? {}).filter(([name]) => !CASE_CONTEXT_KEYS.includes(name)));
1649
+ this._cancelPendingPanelOffer(offer.bundleKey, offer.key);
1650
+ const subscription = this._caseOrigin(documentId).subscribe(origin => {
1651
+ this._pendingPanelOffers.delete(this._panelKeyBase(offer.bundleKey, offer.key));
1652
+ this._sidePanelService.offer({
1653
+ key,
1654
+ title: offer.title,
1655
+ subtitle: offer.subtitle,
1656
+ // Named by GZAC, never by the plugin, so the user can trust which case it is for.
1657
+ origin,
1658
+ pinned: offer.pinned,
1659
+ component: ExternalPluginSidePanelComponent,
1660
+ inputs: {
1661
+ bundleKey: offer.bundleKey ?? null,
1662
+ configurationId,
1663
+ context: { ...pluginContext, ...this.context },
1664
+ },
1665
+ });
1666
+ });
1667
+ if (!subscription.closed) {
1668
+ this._pendingPanelOffers.set(this._panelKeyBase(offer.bundleKey, offer.key), subscription);
1669
+ }
1670
+ }
1671
+ /**
1672
+ * Withdraws the panel only when it still shows this configuration's content under that key, for
1673
+ * whichever case it was offered.
1674
+ */
1675
+ _withdrawPanel(payload) {
1676
+ const { bundleKey, key } = (payload ?? {});
1677
+ if (!this.configurationId || !this._isPanelText(key))
1678
+ return;
1679
+ if (bundleKey !== undefined && !this._isPanelText(bundleKey))
1680
+ return;
1681
+ this._cancelPendingPanelOffer(bundleKey, key);
1682
+ const keyBase = `${this._panelKeyBase(bundleKey, key)}:`;
1683
+ this._sidePanelService.current$.pipe(take(1)).subscribe(current => {
1684
+ if (current?.key.startsWith(keyBase))
1685
+ this._sidePanelService.withdraw(current.key);
1686
+ });
1687
+ }
1688
+ _cancelPendingPanelOffer(bundleKey, key) {
1689
+ const keyBase = this._panelKeyBase(bundleKey, key);
1690
+ this._pendingPanelOffers.get(keyBase)?.unsubscribe();
1691
+ this._pendingPanelOffers.delete(keyBase);
1692
+ }
1693
+ /** Synchronous when the surface names the case; a task form only knows its document. */
1694
+ _caseOrigin(documentId) {
1695
+ if (!documentId)
1696
+ return of(undefined);
1697
+ const caseDefinitionKey = this._contextString('caseDefinitionKey');
1698
+ const caseDefinitionKey$ = caseDefinitionKey
1699
+ ? of(caseDefinitionKey)
1700
+ : defer(() => this._injector.get(DocumentService).getDocument(documentId)).pipe(map$1(document => document?.definitionId?.name || null), catchError(() => of(null)));
1701
+ return caseDefinitionKey$.pipe(map$1(definitionKey => definitionKey
1702
+ ? {
1703
+ route: ['/cases', definitionKey, 'document', documentId],
1704
+ label: this._caseLabel(definitionKey, documentId),
1705
+ }
1706
+ : undefined));
1707
+ }
1708
+ /** E.g. "Inwonerplan #12". Resolved only once shown. */
1709
+ _caseLabel(caseDefinitionKey, documentId) {
1710
+ return defer(() => {
1711
+ const documentService = this._injector.get(DocumentService);
1712
+ return forkJoin({
1713
+ caseDefinition: documentService
1714
+ .getActiveCaseDefinition(caseDefinitionKey)
1715
+ .pipe(catchError(() => of(null))),
1716
+ documentDefinition: documentService
1717
+ .getDocumentDefinition(caseDefinitionKey)
1718
+ .pipe(catchError(() => of(null))),
1719
+ document: documentService.getDocument(documentId).pipe(catchError(() => of(null))),
1720
+ });
1721
+ }).pipe(map$1(({ caseDefinition, documentDefinition, document }) => {
1722
+ const name = caseDefinition?.name || documentDefinition?.schema?.title || caseDefinitionKey;
1723
+ return document?.sequence ? `${name} #${document.sequence}` : name;
1724
+ }), shareReplay({ bufferSize: 1, refCount: false }));
1725
+ }
1726
+ _contextString(name) {
1727
+ const value = this.context?.[name];
1728
+ return typeof value === 'string' && value ? value : null;
1729
+ }
1730
+ _isPanelText(value) {
1731
+ return typeof value === 'string' && value.length > 0 && value.length <= MAX_PANEL_TEXT_LENGTH;
1732
+ }
1733
+ _panelKeyBase(bundleKey, key) {
1734
+ return `external-plugin:${this.configurationId}:${encodeURIComponent(bundleKey ?? '')}:${encodeURIComponent(key)}`;
1735
+ }
1736
+ _parsePanelOffer(payload) {
1737
+ if (!payload || typeof payload !== 'object')
1738
+ return null;
1739
+ const { bundleKey, key, title, subtitle, pinned, context } = payload;
1740
+ if (!this._isPanelText(key) || !this._isPanelText(title))
1741
+ return null;
1742
+ if (bundleKey !== undefined && !this._isPanelText(bundleKey))
1743
+ return null;
1744
+ if (subtitle !== undefined && !this._isPanelText(subtitle))
1745
+ return null;
1746
+ if (pinned !== undefined && typeof pinned !== 'boolean')
1747
+ return null;
1748
+ if (context !== undefined &&
1749
+ (!context || typeof context !== 'object' || Array.isArray(context))) {
1750
+ return null;
1486
1751
  }
1752
+ return {
1753
+ bundleKey: bundleKey,
1754
+ key,
1755
+ title,
1756
+ subtitle: subtitle,
1757
+ pinned: pinned,
1758
+ context: context,
1759
+ };
1487
1760
  }
1488
1761
  /**
1489
1762
  * Size the iframe to the height its content reported. The iframe is at an opaque origin, so this
@@ -1663,13 +1936,13 @@ class ExternalPluginIframeComponent {
1663
1936
  .replace(/§§/g, '.*');
1664
1937
  return new RegExp(`^${regex}$`).test(pathname);
1665
1938
  }
1666
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ExternalPluginIframeComponent, deps: [{ token: i3.DomSanitizer }, { token: i2.TranslateService }, { token: i2$1.ConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
1939
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ExternalPluginIframeComponent, deps: [{ token: i3.DomSanitizer }, { token: i2.TranslateService }, { token: i2$1.ConfigService }, { token: i2$2.SidePanelService }, { token: i2$2.CdsThemeService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
1667
1940
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: ExternalPluginIframeComponent, isStandalone: true, selector: "valtimo-external-plugin-iframe", inputs: { bundleUrl: "bundleUrl", context: "context", prefillConfiguration: "prefillConfiguration", userToken: "userToken", pluginDataUrl: "pluginDataUrl", allowedEndpoints: "allowedEndpoints", configurationId: "configurationId", autoHeight: "autoHeight" }, outputs: { configurationChangedEvent: "configurationChangedEvent", readyEvent: "readyEvent", taskCompletedEvent: "taskCompletedEvent", submitTaskEvent: "submitTaskEvent" }, viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["pluginIframe"], descendants: 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<!--\n sandbox is deliberately WITHOUT allow-same-origin (opaque origin, no access to the GZAC session\n or token \u2014 see the parent-proxy model). `allow-forms` lets a plugin use an idiomatic <form> to\n submit (e.g. a task-form): without it the browser blocks the submit event before the plugin's\n handler can forward it via postMessage. It grants nothing beyond what allow-scripts already can\n (a script can already POST via fetch), and does not weaken origin isolation.\n-->\n<iframe\n *ngIf=\"$trustedUrl() as url\"\n #pluginIframe\n [src]=\"url\"\n (load)=\"onIframeLoad()\"\n sandbox=\"allow-scripts allow-forms\"\n class=\"external-plugin-iframe\"\n></iframe>\n", styles: [":host{display:block;height:100%}.external-plugin-iframe{display:block;width:100%;height:100%;border:none}\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$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1668
1941
  }
1669
1942
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: ExternalPluginIframeComponent, decorators: [{
1670
1943
  type: Component,
1671
1944
  args: [{ standalone: true, selector: 'valtimo-external-plugin-iframe', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], 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<!--\n sandbox is deliberately WITHOUT allow-same-origin (opaque origin, no access to the GZAC session\n or token \u2014 see the parent-proxy model). `allow-forms` lets a plugin use an idiomatic <form> to\n submit (e.g. a task-form): without it the browser blocks the submit event before the plugin's\n handler can forward it via postMessage. It grants nothing beyond what allow-scripts already can\n (a script can already POST via fetch), and does not weaken origin isolation.\n-->\n<iframe\n *ngIf=\"$trustedUrl() as url\"\n #pluginIframe\n [src]=\"url\"\n (load)=\"onIframeLoad()\"\n sandbox=\"allow-scripts allow-forms\"\n class=\"external-plugin-iframe\"\n></iframe>\n", styles: [":host{display:block;height:100%}.external-plugin-iframe{display:block;width:100%;height:100%;border:none}\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"] }]
1672
- }], ctorParameters: () => [{ type: i3.DomSanitizer }, { type: i2.TranslateService }, { type: i2$1.ConfigService }], propDecorators: { iframeRef: [{
1945
+ }], ctorParameters: () => [{ type: i3.DomSanitizer }, { type: i2.TranslateService }, { type: i2$1.ConfigService }, { type: i2$2.SidePanelService }, { type: i2$2.CdsThemeService }, { type: i0.Injector }], propDecorators: { iframeRef: [{
1673
1946
  type: ViewChild,
1674
1947
  args: ['pluginIframe']
1675
1948
  }], bundleUrl: [{
@@ -12895,5 +13168,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
12895
13168
  * Generated bundle index. Do not edit.
12896
13169
  */
12897
13170
 
12898
- export { AddDocumentTrefwoordConfigurationComponent, BESLUITEN_API_CONFIGURATION_TEST_IDS, BesluitenApiConfigurationComponent, BesluitenApiPluginModule, CATALOGI_API_CONFIGURATION_TEST_IDS, CatalogiApiConfigurationComponent, CatalogiApiPluginModule, CompletePortalTaskComponent, CreateMedewerkerZaakRolComponent, CreateNatuurlijkPersoonZaakRolComponent, CreateNietNatuurlijkPersoonZaakRolComponent, CreateOrganisatorischeEenheidZaakRolComponent, CreatePersoonComponent, CreatePortalTaskComponent, CreateVestigingZaakRolComponent, CreateZaakBesluitConfigurationComponent, CreateZaakConfigurationComponent, CreateZaakNotitieConfigurationComponent, CreateZaakObjectConfigurationComponent, CreateZaakResultaatConfigurationComponent, CreateZaakeigenschapComponent, DEFAULT_PLUGIN_CONFIGURATION_TEST_IDS, DOCUMENTEN_API_CONFIGURATION_TEST_IDS, DeleteDocumentLinkConfigurationComponent, DeleteObjectComponent, DeleteZaakResultatenConfigurationComponent, DeleteZaakRolComponent, DeleteZaakeigenschapComponent, DocumentenApiConfigurationComponent, DocumentenApiPluginModule, DocumentenApiPreviewConfigurationComponent, DocumentenApiPreviewPluginModule, DownloadDocumentConfigurationComponent, EXTERNAL_PLUGIN_KEY_PREFIX, EndHersteltermijnComponent, ExactPluginModule, ExternalPluginIframeComponent, ExternalPluginPageComponent, ExternalPluginPageRoutingModule, ExternalPluginPageService, ExternalPluginService, ExternalPluginSessionService, ExternalPluginTaskFormSubmissionService, ExternalPluginUserTokenService, GenerateDocumentConfigurationComponent, GetAuditTrailConfigurationComponent, GetBesluitConfigurationComponent, GetBesluittypeConfigurationComponent, GetEigenschapConfigurationComponent, GetInformatieobjecttypeConfigurationComponent, GetInformatieobjecttypenConfigurationComponent, GetResultaattypeConfigurationComponent, GetResultaattypenConfigurationComponent, GetRoltypeConfigurationComponent, GetRoltypenConfigurationComponent, GetStatustypeConfigurationComponent, GetStatustypenConfigurationComponent, GetTemplateNamesComponent, GetZaakInformatieobjectenComponent, GetZaakbesluitenConfigurationComponent, KLANTINTERACTIES_API_CONFIGURATION_TEST_IDS, KlantinteractiesApiConfigurationComponent, KlantinteractiesApiPluginModule, LinkDocumentToBesluitConfigurationComponent, LinkDocumentToObjectConfigurationComponent, LinkDocumentToZaakConfigurationComponent, LinkUploadedDocumentToZaakConfigurationComponent, NOTIFICATIES_API_CONFIGURATION_TEST_IDS, NotificatiesApiConfigurationComponent, NotificatiesApiPluginModule, OBJECTEN_API_CONFIGURATION_TEST_IDS, OBJECTTYPEN_API_CONFIGURATION_TEST_IDS, OBJECT_TOKEN_AUTHENTICATION_CONFIGURATION_TEST_IDS, OPEN_KLANT_TOKEN_AUTHENTICATION_CONFIGURATION_TEST_IDS, OPEN_NOTIFICATIES_CONFIGURATION_TEST_IDS, OPEN_ZAAK_CONFIGURATION_TEST_IDS, ObjectTokenAuthencationConfigurationComponent, ObjectTokenAuthenticationPluginModule, ObjectenApiConfigurationComponent, ObjectenApiPluginModule, ObjecttypenApiConfigurationComponent, ObjecttypenApiPluginModule, OpenKlantTokenAuthenticationConfigurationComponent, OpenKlantTokenAuthenticationPluginModule, OpenNotificatiesConfigurationComponent, OpenNotificatiesPluginModule, OpenZaakConfigurationComponent, OpenZaakPluginModule, PLUGINS_TOKEN, PLUGIN_CATALOG_TEST_IDS, PLUGIN_EDIT_MODAL_TEST_IDS, PORTAALTAAK_CONFIGURATION_TEST_IDS, PatchZaakBesluitConfigurationComponent, PatchZaakConfigurationComponent, PatchZaakNotitieConfigurationComponent, PluginConfigurationContainerComponent, PluginConfigurationContainerModule, PluginConfigurationMappingComponent, PluginManagementService, PluginService, PluginTranslatePipe, PluginTranslatePipeModule, PluginTranslationService, PortaaltaakConfigurationComponent, PortaaltaakPluginModule, PublishNotificatieConfigurationComponent, ReceiveNotificatieConfigurationComponent, RelateerZakenComponent, SMART_DOCUMENTS_CONFIGURATION_TEST_IDS, SetZaakStatusConfigurationComponent, SetZaakopschortingComponent, SmartDocumentsConfigurationComponent, SmartDocumentsPluginModule, StartHersteltermijnConfigurationComponent, StoreTempDocumentConfigurationComponent, StoreUploadedDocumentConfigurationComponent, StoreUploadedDocumentInPartsConfigurationComponent, UpdateZaakeigenschapComponent, VERZOEK_CONFIGURATION_TEST_IDS, VerzoekConfigurationComponent, VerzoekPluginModule, ZAKEN_API_CONFIGURATION_TEST_IDS, ZAKEN_API_CREATE_ZAAK_ACTION_TEST_IDS, ZakenApiConfigurationComponent, ZakenApiPluginModule, besluitenApiPluginSpecification, catalogiApiPluginSpecification, derivePluginDataUrl, documentenApiPluginSpecification, documentenApiPreviewPluginSpecification, exactPluginSpecification, extractExternalDefinitionId, getExternalPluginDescription, getExternalPluginDisplayName, getExternalPluginName, isExternalPluginDefinitionIncompatible, isExternalPluginKey, klantinteractiesApiPluginSpecification, notificatiesApiPluginSpecification, objectTokenAuthenticationPluginSpecification, objectenApiPluginSpecification, objecttypenApiPluginSpecification, openKlantTokenAuthenticationPluginSpecification, openNotificatiesPluginSpecification, openZaakPluginSpecification, portaaltaakPluginSpecification, smartDocumentsPluginSpecification, toExternalPluginKey, verzoekPluginSpecification, zakenApiPluginSpecification };
13171
+ export { AddDocumentTrefwoordConfigurationComponent, BESLUITEN_API_CONFIGURATION_TEST_IDS, BesluitenApiConfigurationComponent, BesluitenApiPluginModule, CATALOGI_API_CONFIGURATION_TEST_IDS, CatalogiApiConfigurationComponent, CatalogiApiPluginModule, CompletePortalTaskComponent, CreateMedewerkerZaakRolComponent, CreateNatuurlijkPersoonZaakRolComponent, CreateNietNatuurlijkPersoonZaakRolComponent, CreateOrganisatorischeEenheidZaakRolComponent, CreatePersoonComponent, CreatePortalTaskComponent, CreateVestigingZaakRolComponent, CreateZaakBesluitConfigurationComponent, CreateZaakConfigurationComponent, CreateZaakNotitieConfigurationComponent, CreateZaakObjectConfigurationComponent, CreateZaakResultaatConfigurationComponent, CreateZaakeigenschapComponent, DEFAULT_PLUGIN_CONFIGURATION_TEST_IDS, DOCUMENTEN_API_CONFIGURATION_TEST_IDS, DeleteDocumentLinkConfigurationComponent, DeleteObjectComponent, DeleteZaakResultatenConfigurationComponent, DeleteZaakRolComponent, DeleteZaakeigenschapComponent, DocumentenApiConfigurationComponent, DocumentenApiPluginModule, DocumentenApiPreviewConfigurationComponent, DocumentenApiPreviewPluginModule, DownloadDocumentConfigurationComponent, EXTERNAL_PLUGIN_KEY_PREFIX, EndHersteltermijnComponent, ExactPluginModule, ExternalPluginIframeComponent, ExternalPluginPageComponent, ExternalPluginPageRoutingModule, ExternalPluginPageService, ExternalPluginService, ExternalPluginSessionService, ExternalPluginSidePanelComponent, ExternalPluginSidePanelService, ExternalPluginTaskFormSubmissionService, ExternalPluginUserTokenService, GenerateDocumentConfigurationComponent, GetAuditTrailConfigurationComponent, GetBesluitConfigurationComponent, GetBesluittypeConfigurationComponent, GetEigenschapConfigurationComponent, GetInformatieobjecttypeConfigurationComponent, GetInformatieobjecttypenConfigurationComponent, GetResultaattypeConfigurationComponent, GetResultaattypenConfigurationComponent, GetRoltypeConfigurationComponent, GetRoltypenConfigurationComponent, GetStatustypeConfigurationComponent, GetStatustypenConfigurationComponent, GetTemplateNamesComponent, GetZaakInformatieobjectenComponent, GetZaakbesluitenConfigurationComponent, KLANTINTERACTIES_API_CONFIGURATION_TEST_IDS, KlantinteractiesApiConfigurationComponent, KlantinteractiesApiPluginModule, LinkDocumentToBesluitConfigurationComponent, LinkDocumentToObjectConfigurationComponent, LinkDocumentToZaakConfigurationComponent, LinkUploadedDocumentToZaakConfigurationComponent, NOTIFICATIES_API_CONFIGURATION_TEST_IDS, NotificatiesApiConfigurationComponent, NotificatiesApiPluginModule, OBJECTEN_API_CONFIGURATION_TEST_IDS, OBJECTTYPEN_API_CONFIGURATION_TEST_IDS, OBJECT_TOKEN_AUTHENTICATION_CONFIGURATION_TEST_IDS, OPEN_KLANT_TOKEN_AUTHENTICATION_CONFIGURATION_TEST_IDS, OPEN_NOTIFICATIES_CONFIGURATION_TEST_IDS, OPEN_ZAAK_CONFIGURATION_TEST_IDS, ObjectTokenAuthencationConfigurationComponent, ObjectTokenAuthenticationPluginModule, ObjectenApiConfigurationComponent, ObjectenApiPluginModule, ObjecttypenApiConfigurationComponent, ObjecttypenApiPluginModule, OpenKlantTokenAuthenticationConfigurationComponent, OpenKlantTokenAuthenticationPluginModule, OpenNotificatiesConfigurationComponent, OpenNotificatiesPluginModule, OpenZaakConfigurationComponent, OpenZaakPluginModule, PLUGINS_TOKEN, PLUGIN_CATALOG_TEST_IDS, PLUGIN_EDIT_MODAL_TEST_IDS, PORTAALTAAK_CONFIGURATION_TEST_IDS, PatchZaakBesluitConfigurationComponent, PatchZaakConfigurationComponent, PatchZaakNotitieConfigurationComponent, PluginConfigurationContainerComponent, PluginConfigurationContainerModule, PluginConfigurationMappingComponent, PluginManagementService, PluginService, PluginTranslatePipe, PluginTranslatePipeModule, PluginTranslationService, PortaaltaakConfigurationComponent, PortaaltaakPluginModule, PublishNotificatieConfigurationComponent, ReceiveNotificatieConfigurationComponent, RelateerZakenComponent, SMART_DOCUMENTS_CONFIGURATION_TEST_IDS, SetZaakStatusConfigurationComponent, SetZaakopschortingComponent, SmartDocumentsConfigurationComponent, SmartDocumentsPluginModule, StartHersteltermijnConfigurationComponent, StoreTempDocumentConfigurationComponent, StoreUploadedDocumentConfigurationComponent, StoreUploadedDocumentInPartsConfigurationComponent, UpdateZaakeigenschapComponent, VERZOEK_CONFIGURATION_TEST_IDS, VerzoekConfigurationComponent, VerzoekPluginModule, ZAKEN_API_CONFIGURATION_TEST_IDS, ZAKEN_API_CREATE_ZAAK_ACTION_TEST_IDS, ZakenApiConfigurationComponent, ZakenApiPluginModule, besluitenApiPluginSpecification, catalogiApiPluginSpecification, derivePluginDataUrl, documentenApiPluginSpecification, documentenApiPreviewPluginSpecification, exactPluginSpecification, extractExternalDefinitionId, getExternalPluginDescription, getExternalPluginDisplayName, getExternalPluginName, isExternalPluginDefinitionIncompatible, isExternalPluginKey, klantinteractiesApiPluginSpecification, notificatiesApiPluginSpecification, objectTokenAuthenticationPluginSpecification, objectenApiPluginSpecification, objecttypenApiPluginSpecification, openKlantTokenAuthenticationPluginSpecification, openNotificatiesPluginSpecification, openZaakPluginSpecification, portaaltaakPluginSpecification, smartDocumentsPluginSpecification, toExternalPluginKey, verzoekPluginSpecification, zakenApiPluginSpecification };
12899
13172
  //# sourceMappingURL=valtimo-plugin.mjs.map