@epistola.app/valtimo-plugin 0.5.2 → 0.7.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.
Files changed (39) hide show
  1. package/fesm2022/epistola.app-valtimo-plugin.mjs +2531 -561
  2. package/fesm2022/epistola.app-valtimo-plugin.mjs.map +1 -1
  3. package/lib/assets/epistola-logo.d.ts +1 -1
  4. package/lib/components/epistola-admin-page/epistola-admin-page.component.d.ts +52 -0
  5. package/lib/components/epistola-document-preview/epistola-document-preview.component.d.ts +28 -5
  6. package/lib/components/epistola-document-preview/preview-utils.d.ts +18 -0
  7. package/lib/components/expected-structure/expected-structure.component.d.ts +11 -0
  8. package/lib/components/generate-document-configuration/generate-document-configuration.component.d.ts +29 -3
  9. package/lib/components/jsonata-editor/jsonata-editor.component.d.ts +29 -0
  10. package/lib/components/mapping-builder/builder-field/builder-field.component.d.ts +21 -0
  11. package/lib/components/mapping-builder/mapping-builder.component.d.ts +37 -0
  12. package/lib/components/mapping-preview/mapping-preview.component.d.ts +26 -0
  13. package/lib/components/override-builder/override-builder.component.d.ts +42 -0
  14. package/lib/components/override-builder/override-builder.formio.d.ts +4 -0
  15. package/lib/components/process-link-selector/process-link-selector.component.d.ts +31 -0
  16. package/lib/components/process-link-selector/process-link-selector.formio.d.ts +4 -0
  17. package/lib/epistola-admin-routing.module.d.ts +7 -0
  18. package/lib/epistola-enabled.guard.d.ts +2 -0
  19. package/lib/epistola-runtime-config.d.ts +28 -0
  20. package/lib/epistola.module.d.ts +11 -14
  21. package/lib/models/admin.d.ts +49 -0
  22. package/lib/models/config.d.ts +30 -2
  23. package/lib/models/expression.d.ts +13 -0
  24. package/lib/models/index.d.ts +2 -0
  25. package/lib/models/template.d.ts +0 -6
  26. package/lib/services/epistola-admin.service.d.ts +37 -0
  27. package/lib/services/epistola-menu.service.d.ts +13 -0
  28. package/lib/services/epistola-plugin.service.d.ts +16 -3
  29. package/lib/services/index.d.ts +2 -0
  30. package/lib/utils/jsonata-converter.d.ts +26 -0
  31. package/lib/utils/jsonata-monaco.d.ts +14 -0
  32. package/package.json +10 -6
  33. package/public_api.d.ts +9 -5
  34. package/lib/components/array-field/array-field.component.d.ts +0 -27
  35. package/lib/components/data-mapping-tree/data-mapping-tree.component.d.ts +0 -27
  36. package/lib/components/field-tree/field-tree.component.d.ts +0 -27
  37. package/lib/components/scalar-field/scalar-field.component.d.ts +0 -16
  38. package/lib/components/value-input/value-input.component.d.ts +0 -34
  39. package/lib/utils/template-field-utils.d.ts +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"epistola.app-valtimo-plugin.mjs","sources":["../../src/lib/models/async-resource.ts","../../src/lib/services/epistola-plugin.service.ts","../../src/lib/components/epistola-configuration/epistola-configuration.component.ts","../../src/lib/components/epistola-configuration/epistola-configuration.component.html","../../src/lib/utils/template-field-utils.ts","../../src/lib/components/value-input/value-input.component.ts","../../src/lib/components/value-input/value-input.component.html","../../src/lib/components/scalar-field/scalar-field.component.ts","../../src/lib/components/scalar-field/scalar-field.component.html","../../src/lib/components/array-field/array-field.component.ts","../../src/lib/components/array-field/array-field.component.html","../../src/lib/components/field-tree/field-tree.component.ts","../../src/lib/components/field-tree/field-tree.component.html","../../src/lib/components/data-mapping-tree/data-mapping-tree.component.ts","../../src/lib/components/data-mapping-tree/data-mapping-tree.component.html","../../src/lib/components/generate-document-configuration/generate-document-configuration.component.ts","../../src/lib/components/generate-document-configuration/generate-document-configuration.component.html","../../src/lib/components/check-job-status-configuration/check-job-status-configuration.component.ts","../../src/lib/components/check-job-status-configuration/check-job-status-configuration.component.html","../../src/lib/components/download-document-configuration/download-document-configuration.component.ts","../../src/lib/components/download-document-configuration/download-document-configuration.component.html","../../src/lib/components/epistola-download/epistola-download.component.ts","../../src/lib/components/epistola-retry-form/epistola-retry-form.component.ts","../../src/lib/components/epistola-preview-button/epistola-preview-button.component.ts","../../src/lib/components/epistola-document-preview/epistola-document-preview.component.ts","../../src/lib/components/epistola-download/epistola-download.formio.ts","../../src/lib/components/epistola-retry-form/epistola-retry-form.formio.ts","../../src/lib/components/epistola-preview-button/epistola-preview-button.formio.ts","../../src/lib/components/epistola-document-preview/epistola-document-preview.formio.ts","../../src/lib/epistola.module.ts","../../src/lib/assets/epistola-logo.ts","../../src/lib/epistola.specification.ts","../../src/public_api.ts","../../src/epistola.app-valtimo-plugin.ts"],"sourcesContent":["export interface AsyncResource<T> {\n data: T;\n loading: boolean;\n error: string | null;\n}\n\nexport function initialResource<T>(empty: T): AsyncResource<T> {\n return {data: empty, loading: false, error: null};\n}\n\nexport function loadingResource<T>(current: T): AsyncResource<T> {\n return {data: current, loading: true, error: null};\n}\n\nexport function successResource<T>(data: T): AsyncResource<T> {\n return {data, loading: false, error: null};\n}\n\nexport function errorResource<T>(current: T, error: string): AsyncResource<T> {\n return {data: current, loading: false, error};\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {ConfigService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {AttributeDefinition, CatalogInfo, EnvironmentInfo, PreviewSource, TemplateDetails, TemplateInfo, ValidationResult, VariantInfo} from '../models';\n\n/**\n * Service for interacting with Epistola plugin API endpoints.\n * Provides methods to fetch templates, environments, variants,\n * process variables, and validate mappings.\n */\n@Injectable()\nexport class EpistolaPluginService {\n private readonly apiEndpoint: string;\n\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n /**\n * Get all available catalogs for a plugin configuration.\n */\n getCatalogs(pluginConfigurationId: string): Observable<CatalogInfo[]> {\n return this.http.get<CatalogInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/catalogs`\n );\n }\n\n /**\n * Get all available templates for a plugin configuration and catalog.\n */\n getTemplates(pluginConfigurationId: string, catalogId?: string): Observable<TemplateInfo[]> {\n const params: Record<string, string> = {};\n if (catalogId) params['catalogId'] = catalogId;\n return this.http.get<TemplateInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates`,\n {params}\n );\n }\n\n /**\n * Get template details including its fields.\n */\n getTemplateDetails(pluginConfigurationId: string, templateId: string, catalogId: string): Observable<TemplateDetails> {\n return this.http.get<TemplateDetails>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}`,\n {params: {catalogId}}\n );\n }\n\n /**\n * Get all attribute definitions for a plugin configuration's tenant and catalog.\n */\n getAttributes(pluginConfigurationId: string, catalogId: string): Observable<AttributeDefinition[]> {\n const params: Record<string, string> = {};\n if (catalogId) params['catalogId'] = catalogId;\n return this.http.get<AttributeDefinition[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/attributes`,\n {params}\n );\n }\n\n /**\n * Get all available environments for a plugin configuration.\n */\n getEnvironments(pluginConfigurationId: string): Observable<EnvironmentInfo[]> {\n return this.http.get<EnvironmentInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/environments`\n );\n }\n\n /**\n * Get all variants for a specific template.\n */\n getVariants(pluginConfigurationId: string, templateId: string, catalogId: string): Observable<VariantInfo[]> {\n const params: Record<string, string> = {};\n if (catalogId) params['catalogId'] = catalogId;\n return this.http.get<VariantInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}/variants`,\n {params}\n );\n }\n\n /**\n * Discover process variable names for a given process definition.\n */\n getProcessVariables(processDefinitionKey: string): Observable<string[]> {\n return this.http.get<string[]>(\n `${this.apiEndpoint}/process-variables`,\n {params: {processDefinitionKey}}\n );\n }\n\n /**\n * Validate that a data mapping covers all required template fields.\n */\n validateMapping(\n pluginConfigurationId: string,\n templateId: string,\n dataMapping: Record<string, any>\n ): Observable<ValidationResult> {\n return this.http.post<ValidationResult>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}/validate-mapping`,\n {dataMapping}\n );\n }\n\n /**\n * Get a dynamically generated Formio form for retrying a failed document generation.\n */\n getRetryForm(\n processInstanceId: string,\n documentId?: string,\n sourceActivityId?: string\n ): Observable<any> {\n const params: Record<string, string> = {processInstanceId};\n if (documentId) {\n params['documentId'] = documentId;\n }\n if (sourceActivityId) {\n params['sourceActivityId'] = sourceActivityId;\n }\n return this.http.get<any>(`${this.apiEndpoint}/retry-form`, {params});\n }\n\n /**\n * Discover all previewable document sources for a given Valtimo document.\n */\n getPreviewSources(documentId: string): Observable<PreviewSource[]> {\n return this.http.get<PreviewSource[]>(\n `${this.apiEndpoint}/preview-sources`,\n {params: {documentId}}\n );\n }\n\n /**\n * Preview a document by dry-running the generate-document process link.\n * Returns the resolved data as a mock preview (Phase 1).\n */\n previewDocument(\n documentId: string,\n processDefinitionKey: string,\n sourceActivityId: string,\n processInstanceId?: string,\n overrides?: Record<string, any>\n ): Observable<any> {\n return this.http.post<any>(`${this.apiEndpoint}/preview`, {\n documentId,\n processDefinitionKey,\n sourceActivityId,\n processInstanceId: processInstanceId || null,\n overrides: overrides || null\n });\n }\n}\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginConfigurationComponent, PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule} from '@valtimo/components';\nimport {BehaviorSubject, combineLatest, Observable, Subscription, take} from 'rxjs';\nimport {delay, startWith} from 'rxjs/operators';\nimport {EpistolaPluginConfig} from '../../models';\n\n@Component({\n selector: 'epistola-configuration',\n templateUrl: './epistola-configuration.component.html',\n styleUrls: ['./epistola-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule]\n})\nexport class EpistolaConfigurationComponent\n implements PluginConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<EpistolaPluginConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<EpistolaPluginConfig> = new EventEmitter<EpistolaPluginConfig>();\n\n /** Epistola slug pattern: lowercase alphanumeric with hyphens, no leading/trailing hyphens. */\n private static readonly SLUG_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<EpistolaPluginConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n // Wrap disabled$ with startWith and delay to prevent NG0100 ExpressionChangedAfterItHasBeenCheckedError\n // The disabled$ observable from Valtimo's plugin framework can emit value changes after Angular's\n // change detection cycle completes, causing the error.\n this.safeDisabled$ = this.disabled$.pipe(\n startWith(true),\n delay(0)\n );\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as EpistolaPluginConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: EpistolaPluginConfig): void {\n const valid = !!(\n formValue?.configurationTitle &&\n formValue?.baseUrl &&\n formValue?.apiKey &&\n formValue?.tenantId &&\n this.isValidSlug(formValue.tenantId, 3, 63) &&\n this.isValidOptionalSlug(formValue.defaultEnvironmentId, 3, 30)\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private isValidSlug(value: string, minLength: number, maxLength: number): boolean {\n return (\n value.length >= minLength &&\n value.length <= maxLength &&\n EpistolaConfigurationComponent.SLUG_PATTERN.test(value)\n );\n }\n\n private isValidOptionalSlug(value: string | undefined, minLength: number, maxLength: number): boolean {\n if (!value) {\n return true;\n }\n return this.isValidSlug(value, minLength, maxLength);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null\n } as obs\"\n>\n <v-input\n name=\"configurationTitle\"\n [title]=\"'configurationTitle' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.configurationTitle\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"baseUrl\"\n [title]=\"'baseUrl' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'baseUrlTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.baseUrl\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"apiKey\"\n [title]=\"'apiKey' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'apiKeyTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.apiKey\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n type=\"password\"\n >\n </v-input>\n\n <v-input\n name=\"tenantId\"\n [title]=\"'tenantId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'tenantIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.tenantId\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"defaultEnvironmentId\"\n [title]=\"'defaultEnvironmentId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'defaultEnvironmentIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.defaultEnvironmentId\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"templateSyncEnabled\"\n type=\"checkbox\"\n [title]=\"'templateSyncEnabled' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'templateSyncEnabledTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.templateSyncEnabled ? 'true' : ''\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n</v-form>\n","import {TemplateField} from '../models';\n\nexport interface RequiredFieldsStatus {\n mapped: number;\n total: number;\n}\n\nexport function countRequiredMapped(\n fields: TemplateField[],\n mapping: Record<string, any>\n): RequiredFieldsStatus {\n let mapped = 0;\n let total = 0;\n for (const field of fields) {\n if (field.fieldType === 'SCALAR' && field.required) {\n total++;\n const val = mapping[field.name];\n if (typeof val === 'string' && val.trim().length > 0) {\n mapped++;\n }\n } else if (field.fieldType === 'ARRAY' && field.required) {\n total++;\n const val = mapping[field.name];\n if (typeof val === 'string' && val.trim().length > 0) {\n mapped++;\n } else if (typeof val === 'object' && val !== null && '_source' in val) {\n if (typeof val['_source'] === 'string' && val['_source'].trim().length > 0) {\n mapped++;\n }\n }\n } else if (field.fieldType === 'OBJECT' && field.children) {\n const nested = (typeof mapping[field.name] === 'object' && mapping[field.name] !== null)\n ? mapping[field.name]\n : {};\n const childStats = countRequiredMapped(field.children, nested);\n mapped += childStats.mapped;\n total += childStats.total;\n }\n }\n return {mapped, total};\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {InputModule, ValuePathSelectorComponent, ValuePathSelectorPrefix} from '@valtimo/components';\n\nexport type InputMode = 'browse' | 'pv' | 'expression';\n\n/**\n * Reusable 3-mode input (browse / pv / expression) for value resolver expressions.\n * Used by both ScalarFieldComponent and ArrayFieldComponent for source mapping.\n */\n@Component({\n selector: 'epistola-value-input',\n templateUrl: './value-input.component.html',\n styleUrls: ['./value-input.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n PluginTranslatePipeModule,\n InputModule,\n ValuePathSelectorComponent\n ]\n})\nexport class ValueInputComponent implements OnChanges {\n @Input() name = '';\n @Input() value = '';\n @Input() pluginId = '';\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n @Input() placeholder = 'e.g. pv:variableName or doc:path.to.field';\n\n @Output() valueChange = new EventEmitter<string>();\n\n readonly ValuePathSelectorPrefix = ValuePathSelectorPrefix;\n\n inputMode: InputMode = 'browse';\n selectedPv = '';\n browseDefault = '';\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n this.inputMode = this.detectInputMode(this.value);\n this.browseDefault = normalizeToDots(this.value);\n this.selectedPv = extractPvName(this.value);\n }\n if (changes['processVariables']) {\n this.cdr.markForCheck();\n }\n }\n\n setInputMode(mode: InputMode): void {\n this.inputMode = mode;\n }\n\n onBrowseValueChange(newValue: string): void {\n this.valueChange.emit(normalizeToDots(newValue));\n }\n\n onPvChange(newValue: string): void {\n this.selectedPv = newValue;\n this.valueChange.emit(newValue ? 'pv:' + newValue : '');\n }\n\n onExpressionValueChange(newValue: string): void {\n this.valueChange.emit(newValue);\n }\n\n private detectInputMode(value: string): InputMode {\n if (!value) return 'browse';\n if (value.startsWith('doc:') || value.startsWith('case:')) return 'browse';\n if (value.startsWith('pv:')) return 'pv';\n if (value.length > 0) return 'expression';\n return 'browse';\n }\n}\n\n/** Convert slash-notation paths (e.g. doc:/a/b) to dot notation (doc:a.b). */\nexport function normalizeToDots(value: string): string {\n if (typeof value !== 'string') return value;\n const colonIndex = value.indexOf(':');\n if (colonIndex < 0) return value;\n const prefix = value.substring(0, colonIndex);\n const path = value.substring(colonIndex + 1);\n if (!path.includes('/')) return value;\n const normalized = path.split('/').filter(p => p.length > 0).join('.');\n return `${prefix}:${normalized}`;\n}\n\nfunction extractPvName(value: string): string {\n if (typeof value === 'string' && value.startsWith('pv:')) {\n return value.substring(3);\n }\n return '';\n}\n","<div class=\"value-input\">\n <div class=\"input-mode-group\">\n <button type=\"button\" class=\"mode-btn\" [class.mode-active]=\"inputMode === 'browse'\" [disabled]=\"disabled\" (click)=\"setInputMode('browse')\" [title]=\"'browseMode' | pluginTranslate: pluginId | async\">⊞</button>\n <button type=\"button\" class=\"mode-btn\" [class.mode-active]=\"inputMode === 'pv'\" [disabled]=\"disabled\" (click)=\"setInputMode('pv')\" [title]=\"'pvMode' | pluginTranslate: pluginId | async\">pv</button>\n <button type=\"button\" class=\"mode-btn\" [class.mode-active]=\"inputMode === 'expression'\" [disabled]=\"disabled\" (click)=\"setInputMode('expression')\" [title]=\"'expressionMode' | pluginTranslate: pluginId | async\">fx</button>\n </div>\n\n <!-- Browse mode: ValuePathSelector -->\n <div class=\"input-control\" *ngIf=\"inputMode === 'browse'\">\n <valtimo-value-path-selector\n [name]=\"name\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [notation]=\"'dots'\"\n [disabled]=\"disabled\"\n [defaultValue]=\"browseDefault\"\n [showCaseDefinitionSelector]=\"!caseDefinitionKey\"\n (valueChangeEvent)=\"onBrowseValueChange($event)\"\n ></valtimo-value-path-selector>\n </div>\n\n <!-- PV mode: dropdown (when available) or text fallback -->\n <div class=\"input-control\" *ngIf=\"inputMode === 'pv'\">\n <select\n *ngIf=\"processVariables.length > 0; else pvFallback\"\n class=\"pv-select\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"selectedPv\"\n (ngModelChange)=\"onPvChange($event)\"\n >\n <option value=\"\">{{ 'pvPlaceholder' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let pv of processVariables\" [value]=\"pv\">{{ pv }}</option>\n </select>\n <ng-template #pvFallback>\n <v-input\n [name]=\"'pvfb_' + name\"\n [defaultValue]=\"selectedPv\"\n [disabled]=\"disabled\"\n [placeholder]=\"'pvPlaceholder' | pluginTranslate: pluginId | async\"\n (valueChange)=\"onPvChange($event)\"\n ></v-input>\n </ng-template>\n </div>\n\n <!-- Expression mode: text input -->\n <div class=\"input-control\" *ngIf=\"inputMode === 'expression'\">\n <v-input\n [name]=\"'fx_' + name\"\n [defaultValue]=\"value\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n (valueChange)=\"onExpressionValueChange($event)\"\n ></v-input>\n </div>\n</div>\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {TemplateField} from '../../models';\nimport {ValueInputComponent} from '../value-input/value-input.component';\n\n@Component({\n selector: 'epistola-scalar-field',\n templateUrl: './scalar-field.component.html',\n styleUrls: ['./scalar-field.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, PluginTranslatePipeModule, ValueInputComponent]\n})\nexport class ScalarFieldComponent {\n @Input() field!: TemplateField;\n @Input() value: any = undefined;\n @Input() pluginId!: string;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n get stringValue(): string {\n return typeof this.value === 'string' ? this.value : '';\n }\n\n onValueChange(newValue: string): void {\n this.valueChange.emit(newValue || undefined);\n }\n}\n","<div class=\"field-row\" [class.field-required-unmapped]=\"field.required && !stringValue\">\n <div class=\"field-label\">\n <span class=\"field-name\">{{ field.name }}</span>\n <span class=\"field-meta\">({{ field.type }}{{ field.required ? ', required' : '' }})</span>\n </div>\n <epistola-value-input\n [name]=\"'field_' + field.path\"\n [value]=\"stringValue\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onValueChange($event)\"\n ></epistola-value-input>\n</div>\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {InputModule} from '@valtimo/components';\nimport {TemplateField} from '../../models';\nimport {ValueInputComponent, normalizeToDots} from '../value-input/value-input.component';\n\n@Component({\n selector: 'epistola-array-field',\n templateUrl: './array-field.component.html',\n styleUrls: ['./array-field.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, PluginTranslatePipeModule, InputModule, ValueInputComponent]\n})\nexport class ArrayFieldComponent implements OnChanges {\n @Input() field!: TemplateField;\n @Input() value: any = undefined;\n @Input() pluginId!: string;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n expanded = false;\n arrayPerFieldMode = false;\n mappedCount = 0;\n totalRequired = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] || changes['field']) {\n this.updateCompleteness();\n if (!this.expanded && this.totalRequired > 0 && this.mappedCount < this.totalRequired) {\n this.expanded = true;\n }\n // Detect per-field mode from value shape\n if (changes['value'] && typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n this.arrayPerFieldMode = true;\n }\n }\n }\n\n toggleExpanded(): void {\n this.expanded = !this.expanded;\n }\n\n getSourceValue(): string {\n if (typeof this.value === 'string') {\n return normalizeToDots(this.value);\n }\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n return normalizeToDots(this.value['_source'] || '');\n }\n return '';\n }\n\n onSourceValueChange(newValue: string): void {\n if (this.arrayPerFieldMode) {\n const current = (typeof this.value === 'object' && this.value !== null) ? {...this.value} : {};\n current['_source'] = newValue || '';\n this.valueChange.emit(current);\n } else {\n this.valueChange.emit(newValue || undefined);\n }\n }\n\n toggleArrayPerFieldMode(): void {\n this.arrayPerFieldMode = !this.arrayPerFieldMode;\n\n if (this.arrayPerFieldMode) {\n const currentSource = this.getSourceValue();\n this.valueChange.emit({_source: currentSource});\n } else {\n const source = this.getSourceValue();\n this.valueChange.emit(source || undefined);\n }\n }\n\n onItemFieldChange(childName: string, sourceFieldName: string): void {\n const current = (typeof this.value === 'object' && this.value !== null) ? {...this.value} : {_source: ''};\n if (sourceFieldName && sourceFieldName.trim().length > 0) {\n current[childName] = sourceFieldName;\n } else {\n delete current[childName];\n }\n this.valueChange.emit(current);\n }\n\n getItemFieldValue(childName: string): string {\n if (typeof this.value === 'object' && this.value !== null) {\n return this.value[childName] || '';\n }\n return '';\n }\n\n hasArrayChildren(): boolean {\n return !!(this.field?.children && this.field.children.length > 0);\n }\n\n private updateCompleteness(): void {\n if (!this.field?.children || this.field.children.length === 0) {\n this.totalRequired = this.field?.required ? 1 : 0;\n this.mappedCount = this.getSourceValue() ? (this.field?.required ? 1 : 0) : 0;\n return;\n }\n\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n let total = 0;\n let mapped = 0;\n\n if (this.field?.required) {\n total++;\n if (this.value['_source'] && this.value['_source'].trim().length > 0) {\n mapped++;\n }\n }\n\n for (const child of this.field.children) {\n if (child.required) {\n total++;\n const val = this.value[child.name];\n if (typeof val === 'string' && val.trim().length > 0) {\n mapped++;\n }\n }\n }\n\n this.mappedCount = mapped;\n this.totalRequired = total;\n } else {\n this.totalRequired = this.field?.required ? 1 : 0;\n this.mappedCount = this.getSourceValue() ? (this.field?.required ? 1 : 0) : 0;\n }\n }\n}\n","<div class=\"field-array\">\n <div class=\"field-array-header\" (click)=\"toggleExpanded()\" [class.field-required-unmapped]=\"field.required && !getSourceValue()\">\n <span class=\"expand-icon\">{{ expanded ? '▼' : '▶' }}</span>\n <span class=\"field-name\">{{ field.name }}</span>\n <span class=\"field-meta\">(array{{ field.required ? ', required' : '' }})</span>\n <span class=\"completeness-badge\" *ngIf=\"totalRequired > 0 && !expanded\">\n {{ mappedCount }}/{{ totalRequired }}\n </span>\n <span class=\"mapped-indicator\" *ngIf=\"totalRequired === 0 && getSourceValue() && !expanded\">✓</span>\n </div>\n <div class=\"field-array-content\" *ngIf=\"expanded\">\n <!-- Source collection input -->\n <div class=\"field-row\">\n <div class=\"field-label\">\n <span class=\"field-name\">{{ 'mapCollectionTo' | pluginTranslate: pluginId | async }}</span>\n </div>\n <epistola-value-input\n [name]=\"'field_' + field.path\"\n [value]=\"getSourceValue()\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onSourceValueChange($event)\"\n ></epistola-value-input>\n </div>\n\n <!-- Per-item field mapping toggle -->\n <div class=\"array-per-field-toggle\" *ngIf=\"hasArrayChildren()\">\n <label class=\"toggle-label\">\n <input\n type=\"checkbox\"\n [checked]=\"arrayPerFieldMode\"\n [disabled]=\"disabled\"\n (change)=\"toggleArrayPerFieldMode()\"\n />\n <span>{{ 'itemFieldMapping' | pluginTranslate: pluginId | async }}</span>\n </label>\n </div>\n\n <!-- Per-item field mappings -->\n <div class=\"array-item-fields\" *ngIf=\"arrayPerFieldMode && hasArrayChildren()\">\n <div class=\"item-fields-header\">\n <span class=\"item-fields-title\">{{ 'itemFieldMappingTitle' | pluginTranslate: pluginId | async }}</span>\n </div>\n <div class=\"item-field-row\" *ngFor=\"let child of field.children\">\n <div class=\"item-field-label\">\n <span class=\"field-name\">{{ child.name }}</span>\n <span class=\"field-meta\">({{ child.type }}{{ child.required ? ', required' : '' }})</span>\n </div>\n <div class=\"item-field-input\">\n <v-input\n [name]=\"'itemField_' + child.path\"\n [defaultValue]=\"getItemFieldValue(child.name)\"\n [disabled]=\"disabled\"\n [placeholder]=\"'sourceFieldPlaceholder' | pluginTranslate: pluginId | async\"\n (valueChange)=\"onItemFieldChange(child.name, $event)\"\n ></v-input>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import {ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {TemplateField} from '../../models';\nimport {countRequiredMapped} from '../../utils/template-field-utils';\nimport {ScalarFieldComponent} from '../scalar-field/scalar-field.component';\nimport {ArrayFieldComponent} from '../array-field/array-field.component';\n\n/**\n * Recursive field tree component.\n * Dispatches SCALAR and ARRAY to dedicated sub-components.\n * Handles OBJECT inline to avoid circular import issues (OBJECT children recurse back to this component).\n * Uses forwardRef(() => FieldTreeComponent) in imports to allow self-referencing in the template.\n */\n@Component({\n selector: 'epistola-field-tree',\n templateUrl: './field-tree.component.html',\n styleUrls: ['./field-tree.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, PluginTranslatePipeModule, ScalarFieldComponent, ArrayFieldComponent, forwardRef(() => FieldTreeComponent)]\n})\nexport class FieldTreeComponent implements OnChanges {\n @Input() field!: TemplateField;\n @Input() value: any = undefined;\n @Input() pluginId!: string;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n // OBJECT-specific state\n expanded = false;\n mappedCount = 0;\n totalRequired = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.field?.fieldType === 'OBJECT' && (changes['value'] || changes['field'])) {\n if (this.field.children) {\n const stats = countRequiredMapped(this.field.children, this.value || {});\n this.mappedCount = stats.mapped;\n this.totalRequired = stats.total;\n }\n if (!this.expanded && this.totalRequired > 0 && this.mappedCount < this.totalRequired) {\n this.expanded = true;\n }\n }\n }\n\n toggleExpanded(): void {\n this.expanded = !this.expanded;\n }\n\n onChildChange(childName: string, childValue: any): void {\n const current = (typeof this.value === 'object' && this.value !== null) ? {...this.value} : {};\n if (childValue === undefined || childValue === null || childValue === '') {\n delete current[childName];\n } else {\n current[childName] = childValue;\n }\n this.valueChange.emit(Object.keys(current).length > 0 ? current : undefined);\n }\n\n getChildValue(childName: string): any {\n if (typeof this.value === 'object' && this.value !== null) {\n return this.value[childName];\n }\n return undefined;\n }\n}\n","@switch (field.fieldType) {\n @case ('SCALAR') {\n <epistola-scalar-field\n [field]=\"field\"\n [value]=\"value\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"valueChange.emit($event)\"\n ></epistola-scalar-field>\n }\n @case ('OBJECT') {\n <div class=\"field-object\">\n <div class=\"field-object-header\" (click)=\"toggleExpanded()\" [class.field-required-unmapped]=\"totalRequired > 0 && mappedCount < totalRequired\">\n <span class=\"expand-icon\">{{ expanded ? '▼' : '▶' }}</span>\n <span class=\"field-name\">{{ field.name }}</span>\n <span class=\"field-meta\">(object{{ field.required ? ', required' : '' }})</span>\n <span class=\"completeness-badge\" *ngIf=\"totalRequired > 0 && !expanded\">\n {{ mappedCount }}/{{ totalRequired }}\n </span>\n </div>\n <div class=\"field-object-children\" *ngIf=\"expanded\">\n <epistola-field-tree\n *ngFor=\"let child of field.children\"\n [field]=\"child\"\n [value]=\"getChildValue(child.name)\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onChildChange(child.name, $event)\"\n ></epistola-field-tree>\n </div>\n </div>\n }\n @case ('ARRAY') {\n <epistola-array-field\n [field]=\"field\"\n [value]=\"value\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"valueChange.emit($event)\"\n ></epistola-array-field>\n }\n}\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {TemplateField} from '../../models';\nimport {countRequiredMapped} from '../../utils/template-field-utils';\nimport {FieldTreeComponent} from '../field-tree/field-tree.component';\n\n/**\n * Top-level wrapper that hosts FieldTreeComponent instances for each top-level template field.\n * Manages the full nested mapping object, completeness tracking, and emits mapping changes.\n */\n@Component({\n selector: 'epistola-data-mapping-tree',\n templateUrl: './data-mapping-tree.component.html',\n styleUrls: ['./data-mapping-tree.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n PluginTranslatePipeModule,\n FieldTreeComponent\n ]\n})\nexport class DataMappingTreeComponent implements OnChanges {\n @Input() pluginId!: string;\n @Input() templateFields: TemplateField[] = [];\n @Input() prefillMapping: Record<string, any> = {};\n @Input() disabled = false;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n\n @Output() mappingChange = new EventEmitter<Record<string, any>>();\n @Output() requiredFieldsStatus = new EventEmitter<{mapped: number; total: number}>();\n\n mapping: Record<string, any> = {};\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['prefillMapping']) {\n const mapping = this.prefillMapping;\n if (mapping && Object.keys(mapping).length > 0) {\n this.mapping = {...mapping};\n }\n }\n if (changes['templateFields'] || changes['prefillMapping']) {\n this.emitRequiredFieldsStatus();\n }\n }\n\n onFieldValueChange(fieldName: string, value: any): void {\n if (value === undefined || value === null || value === '') {\n const {[fieldName]: _, ...rest} = this.mapping;\n this.mapping = rest;\n } else {\n this.mapping = {...this.mapping, [fieldName]: value};\n }\n this.mappingChange.emit(this.mapping);\n this.emitRequiredFieldsStatus();\n }\n\n getFieldValue(fieldName: string): any {\n return this.mapping[fieldName];\n }\n\n private emitRequiredFieldsStatus(): void {\n const stats = countRequiredMapped(this.templateFields, this.mapping);\n this.requiredFieldsStatus.emit(stats);\n }\n}\n","<div class=\"data-mapping-tree\">\n <div class=\"mapping-header\">\n <h5>{{ 'dataMappingTitle' | pluginTranslate: pluginId | async }}</h5>\n <p class=\"helper-text\">{{ 'dataMappingDescription' | pluginTranslate: pluginId | async }}</p>\n </div>\n\n <div class=\"field-tree-root\" *ngIf=\"templateFields.length > 0\">\n <epistola-field-tree\n *ngFor=\"let field of templateFields\"\n [field]=\"field\"\n [value]=\"getFieldValue(field.name)\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onFieldValueChange(field.name, $event)\"\n ></epistola-field-tree>\n </div>\n\n <div class=\"no-fields\" *ngIf=\"templateFields.length === 0\">\n <p>{{ 'noTemplateFields' | pluginTranslate: pluginId | async }}</p>\n </div>\n</div>\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {\n FunctionConfigurationComponent,\n PluginConfigurationData,\n PluginTranslatePipeModule\n} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule, SelectItem, SelectModule} from '@valtimo/components';\nimport {CaseManagementParams, ManagementContext} from '@valtimo/shared';\nimport {ProcessLinkStateService} from '@valtimo/process-link';\nimport {BehaviorSubject, combineLatest, merge, Observable, of, Subject, Subscription} from 'rxjs';\nimport {catchError, distinctUntilChanged, filter, map, shareReplay, switchMap, take, takeUntil, tap} from 'rxjs/operators';\nimport {AsyncResource, errorResource, GenerateDocumentConfig, initialResource, loadingResource, successResource, TemplateField} from '../../models';\nimport {EpistolaPluginService} from '../../services';\nimport {DataMappingTreeComponent} from '../data-mapping-tree/data-mapping-tree.component';\n\nexport type VariantSelectionMode = 'explicit' | 'attributes';\n\n@Component({\n selector: 'epistola-generate-document-configuration',\n templateUrl: './generate-document-configuration.component.html',\n styleUrls: ['./generate-document-configuration.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n PluginTranslatePipeModule,\n FormModule,\n InputModule,\n SelectModule,\n DataMappingTreeComponent\n ]\n})\nexport class GenerateDocumentConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<GenerateDocumentConfig>;\n @Input() selectedPluginConfigurationData$?: Observable<PluginConfigurationData>;\n @Input() context$?: Observable<[ManagementContext, CaseManagementParams]>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<GenerateDocumentConfig> = new EventEmitter<GenerateDocumentConfig>();\n\n catalogs$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n templates$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n variants$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n environments$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n templateFields$ = new BehaviorSubject<AsyncResource<TemplateField[]>>(initialResource([]));\n\n dataMapping$ = new BehaviorSubject<Record<string, any>>({});\n\n outputFormatOptions: SelectItem[] = [\n {id: 'PDF', text: 'PDF'},\n {id: 'HTML', text: 'HTML'}\n ];\n\n readonly selectedCatalogId$ = new BehaviorSubject<string>('');\n /** Composite ID: \"catalogId/templateId\" */\n readonly selectedTemplateId$ = new BehaviorSubject<string>('');\n readonly selectedVariantId$ = new BehaviorSubject<string>('');\n\n variantSelectionMode: VariantSelectionMode = 'explicit';\n variantAttributeEntries: {key: string; value: string; required: boolean; _customKey?: boolean}[] = [];\n availableAttributeKeys: string[] = [];\n caseDefinitionKey: string | null = null;\n processVariables: string[] = [];\n requiredFieldsStatus: {mapped: number; total: number} = {mapped: 0, total: 0};\n prefillDataMapping: Record<string, any> = {};\n\n private readonly destroy$ = new Subject<void>();\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<Partial<GenerateDocumentConfig> | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n private pluginConfigurationId$ = new BehaviorSubject<string>('');\n\n /** Resolves once with the prefill config (or empty config if none). */\n private prefill$!: Observable<GenerateDocumentConfig | null>;\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly processLinkStateService: ProcessLinkStateService,\n private readonly cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.prefill$ = this.resolvePrefill$();\n\n this.initContext();\n this.initPluginConfiguration();\n this.initCascade();\n this.openSaveSubscription();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as Partial<GenerateDocumentConfig & { catalogId: string; templateId: string }>;\n this.formValue$.next(formValue);\n\n // When catalog changes, reset template and variant selection\n if (formValue.catalogId && formValue.catalogId !== this.selectedCatalogId$.getValue()) {\n this.selectedCatalogId$.next(formValue.catalogId);\n this.selectedTemplateId$.next('');\n this.selectedVariantId$.next('');\n }\n\n // templateId from v-select is the template ID within the selected catalog\n if (formValue.templateId && formValue.templateId !== this.selectedTemplateId$.getValue()) {\n this.selectedTemplateId$.next(formValue.templateId);\n this.selectedVariantId$.next('');\n }\n\n if (formValue.variantId && formValue.variantId !== this.selectedVariantId$.getValue()) {\n this.selectedVariantId$.next(formValue.variantId);\n }\n\n this.handleValid(formValue);\n }\n\n onDataMappingChange(mapping: Record<string, any>): void {\n this.dataMapping$.next(mapping);\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n onRequiredFieldsStatusChange(status: {mapped: number; total: number}): void {\n this.requiredFieldsStatus = status;\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n onVariantSelectionModeChange(mode: VariantSelectionMode): void {\n this.variantSelectionMode = mode;\n if (mode === 'attributes' && this.variantAttributeEntries.length === 0) {\n this.variantAttributeEntries = [{key: '', value: '', required: true}];\n }\n this.revalidate();\n }\n\n addAttributeEntry(): void {\n this.variantAttributeEntries = [...this.variantAttributeEntries, {key: '', value: '', required: true}];\n this.revalidate();\n }\n\n removeAttributeEntry(index: number): void {\n this.variantAttributeEntries = this.variantAttributeEntries.filter((_, i) => i !== index);\n this.revalidate();\n }\n\n onAttributeEntryChange(): void {\n this.revalidate();\n }\n\n onKeySelected(entry: {key: string; value: string; required: boolean; _customKey?: boolean}, value: string): void {\n if (value === '__custom__') {\n entry._customKey = true;\n entry.key = '';\n } else {\n entry.key = value;\n }\n this.onAttributeEntryChange();\n }\n\n cancelCustomKey(entry: {key: string; value: string; required: boolean; _customKey?: boolean}): void {\n entry._customKey = false;\n entry.key = '';\n this.onAttributeEntryChange();\n }\n\n private revalidate(): void {\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n private formatAttributes(attributes: Record<string, string>): string {\n const entries = Object.entries(attributes || {});\n if (entries.length === 0) return '';\n return ` (${entries.map(([k, v]) => `${k}=${v}`).join(', ')})`;\n }\n\n /**\n * Creates a shared observable that resolves once with the prefill config\n * (or null if no prefill is provided). This is used to seed the cascade\n * with initial selection values before any loading starts.\n */\n private resolvePrefill$(): Observable<GenerateDocumentConfig | null> {\n if (!this.prefillConfiguration$) {\n return of(null).pipe(shareReplay(1));\n }\n return this.prefillConfiguration$.pipe(\n take(1),\n shareReplay(1)\n );\n }\n\n private initContext(): void {\n if (this.context$) {\n this.context$.pipe(\n takeUntil(this.destroy$),\n filter(([context]) => context === 'case')\n ).subscribe(([, params]) => {\n this.caseDefinitionKey = params.caseDefinitionKey;\n this.cdr.markForCheck();\n });\n }\n }\n\n private initPluginConfiguration(): void {\n const sources: Observable<string>[] = [];\n\n if (this.selectedPluginConfigurationData$) {\n sources.push(\n this.selectedPluginConfigurationData$.pipe(\n filter(config => !!config?.configurationId),\n map(config => config.configurationId)\n )\n );\n }\n\n sources.push(\n this.processLinkStateService.selectedProcessLink$.pipe(\n filter(processLink => !!processLink?.pluginConfigurationId),\n map(processLink => processLink.pluginConfigurationId!)\n )\n );\n\n merge(...sources).pipe(\n takeUntil(this.destroy$)\n ).subscribe(configurationId => {\n this.pluginConfigurationId$.next(configurationId);\n });\n }\n\n /**\n * Sets up the entire reactive cascade:\n *\n * pluginConfigurationId$ → catalogs (+ environments independently)\n * prefill + catalogs loaded → seed selectedCatalogId$\n * selectedCatalogId$ → templates (+ attributes)\n * prefill + templates loaded → seed selectedTemplateId$\n * selectedTemplateId$ → variants + templateFields\n * prefill + templateFields loaded → seed dataMapping\n */\n private initCascade(): void {\n const configId$ = this.pluginConfigurationId$.pipe(\n filter(id => !!id),\n distinctUntilChanged()\n );\n\n // ── Catalogs: load when pluginConfigurationId changes ──\n configId$.pipe(\n takeUntil(this.destroy$),\n tap(() => this.catalogs$.next(loadingResource(this.catalogs$.getValue().data))),\n switchMap(configurationId =>\n this.epistolaPluginService.getCatalogs(configurationId).pipe(\n map(catalogs => successResource(catalogs.map(c => ({id: c.id, text: c.name})))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load catalogs')))\n )\n )\n ).subscribe(resource => this.catalogs$.next(resource));\n\n // ── Environments: load when pluginConfigurationId changes (independent) ──\n configId$.pipe(\n takeUntil(this.destroy$),\n tap(() => this.environments$.next(loadingResource(this.environments$.getValue().data))),\n switchMap(configurationId =>\n this.epistolaPluginService.getEnvironments(configurationId).pipe(\n map(envs => successResource(envs.map(e => ({id: e.id, text: e.name})))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load environments')))\n )\n )\n ).subscribe(resource => this.environments$.next(resource));\n\n // ── Seed selectedCatalogId$ from prefill once catalogs are loaded ──\n combineLatest([\n this.prefill$.pipe(filter(config => !!config?.catalogId)),\n this.catalogs$.pipe(filter(c => !c.loading && c.data.length > 0))\n ]).pipe(\n takeUntil(this.destroy$),\n take(1)\n ).subscribe(([config]) => {\n this.selectedCatalogId$.next(config!.catalogId);\n });\n\n // ── Templates: load when catalogId changes ──\n const catalogId$ = this.selectedCatalogId$.pipe(\n filter(id => !!id),\n distinctUntilChanged()\n );\n\n combineLatest([configId$, catalogId$]).pipe(\n takeUntil(this.destroy$),\n tap(() => this.templates$.next(loadingResource(this.templates$.getValue().data))),\n switchMap(([configurationId, catalogId]) =>\n this.epistolaPluginService.getTemplates(configurationId, catalogId).pipe(\n map(templates => successResource(templates.map(t => ({id: t.id, text: t.name})))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load templates')))\n )\n )\n ).subscribe(resource => this.templates$.next(resource));\n\n // ── Attributes: load when catalogId changes ──\n combineLatest([configId$, catalogId$]).pipe(\n takeUntil(this.destroy$),\n switchMap(([configurationId, catalogId]) =>\n this.epistolaPluginService.getAttributes(configurationId, catalogId).pipe(\n catchError(() => of([]))\n )\n )\n ).subscribe(attributes => {\n this.availableAttributeKeys = attributes.map(a => a.key).sort();\n this.cdr.markForCheck();\n });\n\n // ── Seed selectedTemplateId$ from prefill once templates are loaded ──\n combineLatest([\n this.prefill$.pipe(filter(config => !!config?.templateId)),\n this.templates$.pipe(filter(t => !t.loading && t.data.length > 0))\n ]).pipe(\n takeUntil(this.destroy$),\n take(1)\n ).subscribe(([config]) => {\n this.selectedTemplateId$.next(config!.templateId);\n });\n\n // ── Variants: load when templateId changes ──\n const templateId$ = this.selectedTemplateId$.pipe(\n filter(id => !!id),\n distinctUntilChanged()\n );\n\n combineLatest([configId$, catalogId$, templateId$]).pipe(\n takeUntil(this.destroy$),\n tap(() => this.variants$.next(loadingResource(this.variants$.getValue().data))),\n switchMap(([configurationId, catalogId, templateId]) =>\n this.epistolaPluginService.getVariants(configurationId, templateId, catalogId).pipe(\n map(variants => successResource(variants.map(v => ({id: v.id, text: v.name + this.formatAttributes(v.attributes)})))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load variants')))\n )\n )\n ).subscribe(resource => this.variants$.next(resource));\n\n // ── Template fields: load when templateId changes ──\n combineLatest([configId$, catalogId$, templateId$]).pipe(\n takeUntil(this.destroy$),\n tap(() => {\n this.templateFields$.next(loadingResource(this.templateFields$.getValue().data));\n this.loadProcessVariables();\n }),\n switchMap(([configurationId, catalogId, templateId]) =>\n this.epistolaPluginService.getTemplateDetails(configurationId, templateId, catalogId).pipe(\n map(details => successResource(details.fields || [])),\n catchError(() => of(errorResource<TemplateField[]>([], 'Failed to load template fields')))\n )\n )\n ).subscribe(resource => this.templateFields$.next(resource));\n\n // ── Seed variant + dataMapping from prefill once templateFields are loaded ──\n combineLatest([\n this.prefill$.pipe(filter(config => !!config?.templateId)),\n this.templateFields$.pipe(filter(tf => !tf.loading && tf.data.length > 0))\n ]).pipe(\n takeUntil(this.destroy$),\n take(1)\n ).subscribe(([config]) => {\n if (!config) return;\n\n // Apply variant prefill\n if (config.variantAttributes && (Array.isArray(config.variantAttributes) ? config.variantAttributes.length > 0 : Object.keys(config.variantAttributes).length > 0)) {\n this.variantSelectionMode = 'attributes';\n if (Array.isArray(config.variantAttributes)) {\n this.variantAttributeEntries = config.variantAttributes\n .map(e => ({key: e.key, value: e.value, required: e.required !== false}));\n } else {\n this.variantAttributeEntries = Object.entries(config.variantAttributes as any)\n .map(([key, value]) => ({key, value: String(value), required: true}));\n }\n } else if (config.variantId) {\n this.variantSelectionMode = 'explicit';\n this.selectedVariantId$.next(config.variantId);\n }\n\n // Apply dataMapping prefill — templateFields are guaranteed loaded at this point.\n // Use setTimeout to ensure the tree component exists in the DOM (after *ngIf resolves)\n // before setting the prefill, so ngOnChanges fires correctly on the child.\n if (config.dataMapping) {\n this.dataMapping$.next(config.dataMapping);\n setTimeout(() => {\n this.prefillDataMapping = {...config.dataMapping};\n this.cdr.detectChanges();\n });\n } else {\n this.cdr.detectChanges();\n }\n });\n }\n\n private loadProcessVariables(): void {\n if (this.caseDefinitionKey) {\n this.epistolaPluginService.getProcessVariables(this.caseDefinitionKey).pipe(\n takeUntil(this.destroy$),\n catchError(() => of([]))\n ).subscribe(variables => {\n this.processVariables = variables;\n this.cdr.markForCheck();\n });\n }\n }\n\n private handleValid(formValue: Partial<GenerateDocumentConfig & { catalogId: string }>): void {\n const baseComplete = !!(\n this.selectedCatalogId$.getValue() &&\n formValue?.templateId &&\n formValue?.outputFormat &&\n formValue?.filename &&\n formValue?.resultProcessVariable\n );\n\n let variantValid = true;\n if (this.variantSelectionMode === 'attributes' && this.variantAttributeEntries.length > 0) {\n variantValid = this.variantAttributeEntries.every(e => !!e.key && !!e.value);\n }\n\n const requiredFieldsMapped = this.requiredFieldsStatus.total === 0 ||\n this.requiredFieldsStatus.mapped === this.requiredFieldsStatus.total;\n\n const valid = baseComplete && variantValid && requiredFieldsMapped;\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$, this.dataMapping$])\n .pipe(take(1))\n .subscribe(([formValue, valid, dataMapping]) => {\n if (valid && formValue) {\n const catalogId = this.selectedCatalogId$.getValue();\n const templateId = formValue.templateId!;\n\n const config: GenerateDocumentConfig = {\n catalogId,\n templateId,\n environmentId: formValue.environmentId || undefined,\n dataMapping: dataMapping,\n outputFormat: formValue.outputFormat as 'PDF' | 'HTML',\n filename: formValue.filename!,\n correlationId: formValue.correlationId || undefined,\n resultProcessVariable: formValue.resultProcessVariable!\n };\n\n if (this.variantSelectionMode === 'explicit') {\n config.variantId = formValue.variantId!;\n } else {\n config.variantAttributes = this.variantAttributeEntries\n .filter(e => e.key && e.value)\n .map(e => ({key: e.key, value: e.value, required: e.required}));\n }\n\n this.configuration.emit(config);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: disabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null,\n catalogs: catalogs$ | async,\n templates: templates$ | async,\n variants: variants$ | async,\n environments: environments$ | async,\n templateFields: templateFields$ | async,\n selectedCatalogId: selectedCatalogId$ | async,\n selectedTemplateId: selectedTemplateId$ | async\n } as obs\"\n>\n <v-select\n name=\"catalogId\"\n [title]=\"'catalogId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'catalogIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.catalogs.data\"\n [defaultSelectionId]=\"obs.prefill?.catalogId\"\n [disabled]=\"obs.disabled || obs.catalogs.loading\"\n [required]=\"true\"\n [loading]=\"obs.catalogs.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.catalogs.error\" class=\"loading-error\">{{ obs.catalogs.error }}</div>\n\n <v-select\n name=\"templateId\"\n [title]=\"'templateId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'templateIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.templates.data\"\n [defaultSelectionId]=\"obs.prefill?.templateId\"\n [disabled]=\"obs.disabled || obs.templates.loading || !obs.selectedCatalogId\"\n [required]=\"true\"\n [loading]=\"obs.templates.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.templates.error\" class=\"loading-error\">{{ obs.templates.error }}</div>\n\n <!-- Variant selection mode toggle -->\n <div class=\"variant-mode-toggle\" *ngIf=\"obs.selectedTemplateId\">\n <label class=\"variant-mode-label\">{{ 'variantSelectionMode' | pluginTranslate: pluginId | async }}</label>\n <div class=\"variant-mode-buttons\">\n <button\n type=\"button\"\n class=\"variant-mode-btn\"\n [class.active]=\"variantSelectionMode === 'explicit'\"\n (click)=\"onVariantSelectionModeChange('explicit')\"\n [disabled]=\"obs.disabled\"\n >{{ 'selectByVariant' | pluginTranslate: pluginId | async }}</button>\n <button\n type=\"button\"\n class=\"variant-mode-btn\"\n [class.active]=\"variantSelectionMode === 'attributes'\"\n (click)=\"onVariantSelectionModeChange('attributes')\"\n [disabled]=\"obs.disabled\"\n >{{ 'selectByAttributes' | pluginTranslate: pluginId | async }}</button>\n </div>\n </div>\n\n <!-- Explicit variant selection (dropdown) -->\n <v-select\n *ngIf=\"variantSelectionMode === 'explicit'\"\n name=\"variantId\"\n [title]=\"'variantId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'variantIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.variants.data\"\n [defaultSelectionId]=\"obs.prefill?.variantId\"\n [disabled]=\"obs.disabled || obs.variants.loading || !obs.selectedTemplateId\"\n [required]=\"false\"\n [loading]=\"obs.variants.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.variants.error\" class=\"loading-error\">{{ obs.variants.error }}</div>\n\n <!-- Attribute-based variant selection -->\n <div *ngIf=\"variantSelectionMode === 'attributes' && obs.selectedTemplateId\" class=\"variant-attributes-section\">\n <label class=\"variant-attributes-label\">{{ 'variantAttributes' | pluginTranslate: pluginId | async }}</label>\n <div class=\"variant-attributes-list\">\n <div *ngFor=\"let entry of variantAttributeEntries; let i = index\" class=\"variant-attribute-row\">\n <select\n *ngIf=\"!entry._customKey\"\n class=\"variant-attribute-input\"\n [ngModel]=\"entry.key\"\n (ngModelChange)=\"onKeySelected(entry, $event)\"\n [disabled]=\"obs.disabled\"\n >\n <option value=\"\" disabled>{{ 'attributeKey' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let key of availableAttributeKeys\" [value]=\"key\">{{ key }}</option>\n <option value=\"__custom__\">{{ 'attributeKeyCustom' | pluginTranslate: pluginId | async }}</option>\n </select>\n <div *ngIf=\"entry._customKey\" class=\"custom-key-input\">\n <input\n type=\"text\"\n class=\"variant-attribute-input\"\n [placeholder]=\"'attributeKey' | pluginTranslate: pluginId | async\"\n [(ngModel)]=\"entry.key\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <button type=\"button\" class=\"custom-key-cancel\" (click)=\"cancelCustomKey(entry)\" [disabled]=\"obs.disabled\">&times;</button>\n </div>\n <input\n type=\"text\"\n class=\"variant-attribute-input\"\n [placeholder]=\"'attributeValue' | pluginTranslate: pluginId | async\"\n [(ngModel)]=\"entry.value\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <label class=\"variant-attribute-required-toggle\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"entry.required\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <span class=\"required-label\">{{ (entry.required ? 'attributeRequired' : 'attributePreferred') | pluginTranslate: pluginId | async }}</span>\n </label>\n <button\n type=\"button\"\n class=\"variant-attribute-remove-btn\"\n (click)=\"removeAttributeEntry(i)\"\n [disabled]=\"obs.disabled\"\n title=\"{{ 'removeAttribute' | pluginTranslate: pluginId | async }}\"\n >&times;</button>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"variant-attribute-add-btn\"\n (click)=\"addAttributeEntry()\"\n [disabled]=\"obs.disabled\"\n >+ {{ 'addAttribute' | pluginTranslate: pluginId | async }}</button>\n </div>\n\n <v-select\n name=\"environmentId\"\n [title]=\"'environmentId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'environmentIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.environments.data\"\n [defaultSelectionId]=\"obs.prefill?.environmentId\"\n [disabled]=\"obs.disabled || obs.environments.loading\"\n [required]=\"false\"\n [loading]=\"obs.environments.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.environments.error\" class=\"loading-error\">{{ obs.environments.error }}</div>\n\n <v-select\n name=\"outputFormat\"\n [title]=\"'outputFormat' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'outputFormatTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"outputFormatOptions\"\n [defaultSelectionId]=\"obs.prefill?.outputFormat || 'PDF'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-select>\n\n <v-input\n name=\"filename\"\n [title]=\"'filename' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'filenameTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.filename\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"correlationId\"\n [title]=\"'correlationId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'correlationIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.correlationId\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"resultProcessVariable\"\n [title]=\"'resultProcessVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'resultProcessVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.resultProcessVariable\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n</v-form>\n\n<div *ngIf=\"(templateFields$ | async)?.error as templateFieldsError\" class=\"loading-error\">{{ templateFieldsError }}</div>\n\n<epistola-data-mapping-tree\n *ngIf=\"(selectedTemplateId$ | async)\"\n [pluginId]=\"pluginId\"\n [templateFields]=\"(templateFields$ | async)?.data ?? []\"\n [disabled]=\"!!(disabled$ | async)\"\n [prefillMapping]=\"prefillDataMapping\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n (mappingChange)=\"onDataMappingChange($event)\"\n (requiredFieldsStatus)=\"onRequiredFieldsStatusChange($event)\"\n></epistola-data-mapping-tree>\n\n<div class=\"validation-summary\" *ngIf=\"(selectedTemplateId$ | async) && requiredFieldsStatus.total > 0\">\n <span *ngIf=\"requiredFieldsStatus.mapped === requiredFieldsStatus.total\" class=\"validation-complete\">\n {{ 'requiredFieldsComplete' | pluginTranslate: pluginId | async }}\n </span>\n <span *ngIf=\"requiredFieldsStatus.mapped < requiredFieldsStatus.total\" class=\"validation-incomplete\">\n {{ requiredFieldsStatus.mapped }} / {{ requiredFieldsStatus.total }}\n {{ 'validationSummary' | pluginTranslate: pluginId | async }}\n </span>\n</div>\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FunctionConfigurationComponent, PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule} from '@valtimo/components';\nimport {BehaviorSubject, combineLatest, Observable, Subscription, take} from 'rxjs';\nimport {delay, startWith} from 'rxjs/operators';\nimport {CheckJobStatusConfig} from '../../models';\n\n@Component({\n selector: 'epistola-check-job-status-configuration',\n templateUrl: './check-job-status-configuration.component.html',\n styleUrls: ['./check-job-status-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule]\n})\nexport class CheckJobStatusConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<CheckJobStatusConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<CheckJobStatusConfig> = new EventEmitter<CheckJobStatusConfig>();\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<CheckJobStatusConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n this.safeDisabled$ = this.disabled$.pipe(\n startWith(true),\n delay(0)\n );\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as CheckJobStatusConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: CheckJobStatusConfig): void {\n const valid = !!(\n formValue?.requestIdVariable &&\n formValue?.statusVariable\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid && formValue) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null\n } as obs\"\n>\n <v-input\n name=\"requestIdVariable\"\n [title]=\"'requestIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'requestIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.requestIdVariable || 'epistolaRequestId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"statusVariable\"\n [title]=\"'statusVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'statusVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.statusVariable || 'epistolaStatus'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"documentIdVariable\"\n [title]=\"'documentIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'documentIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.documentIdVariable || 'epistolaDocumentId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"errorMessageVariable\"\n [title]=\"'errorMessageVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'errorMessageVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.errorMessageVariable || 'epistolaErrorMessage'\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n</v-form>\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FunctionConfigurationComponent, PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule} from '@valtimo/components';\nimport {BehaviorSubject, combineLatest, Observable, Subscription, take} from 'rxjs';\nimport {delay, startWith} from 'rxjs/operators';\nimport {DownloadDocumentConfig} from '../../models';\n\n@Component({\n selector: 'epistola-download-document-configuration',\n templateUrl: './download-document-configuration.component.html',\n styleUrls: ['./download-document-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule]\n})\nexport class DownloadDocumentConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<DownloadDocumentConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<DownloadDocumentConfig> = new EventEmitter<DownloadDocumentConfig>();\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<DownloadDocumentConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n this.safeDisabled$ = this.disabled$.pipe(\n startWith(true),\n delay(0)\n );\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as DownloadDocumentConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: DownloadDocumentConfig): void {\n const valid = !!(\n formValue?.documentIdVariable &&\n formValue?.contentVariable\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid && formValue) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null\n } as obs\"\n>\n <v-input\n name=\"documentIdVariable\"\n [title]=\"'documentIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'documentIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.documentIdVariable || 'epistolaDocumentId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"contentVariable\"\n [title]=\"'contentVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'contentVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.contentVariable || 'documentContent'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n</v-form>\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {FormioCustomComponent} from '@valtimo/components';\n\nexport interface DownloadData {\n documentId: string;\n tenantId: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-download-component',\n template: `\n <button\n type=\"button\"\n class=\"btn btn-outline-primary\"\n [disabled]=\"disabled || downloading || !hasRequiredData()\"\n (click)=\"download()\"\n >\n <i class=\"mdi mdi-download mr-1\"></i>\n {{ downloading ? 'Downloading...' : buttonLabel }}\n </button>\n <span *ngIf=\"error\" class=\"text-danger ml-2\">{{ error }}</span>\n `,\n})\nexport class EpistolaDownloadComponent implements FormioCustomComponent<DownloadData> {\n @Input() value: DownloadData;\n @Output() valueChange = new EventEmitter<DownloadData>();\n\n @Input() disabled = false;\n @Input() filename = 'document.pdf';\n @Input() label = 'Download PDF';\n\n downloading = false;\n error: string | null = null;\n\n get buttonLabel(): string {\n return this.label || 'Download PDF';\n }\n\n constructor(private readonly http: HttpClient) {}\n\n hasRequiredData(): boolean {\n return !!(this.value?.documentId && this.value?.tenantId);\n }\n\n download(): void {\n if (!this.hasRequiredData() || this.downloading) {\n return;\n }\n\n this.downloading = true;\n this.error = null;\n\n const {documentId, tenantId} = this.value;\n const url = `/api/v1/plugin/epistola/documents/${encodeURIComponent(documentId)}/download`\n + `?tenantId=${encodeURIComponent(tenantId)}`\n + `&filename=${encodeURIComponent(this.filename)}`;\n\n this.http.get(url, {responseType: 'blob'}).subscribe({\n next: (blob) => {\n const objectUrl = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = objectUrl;\n anchor.download = this.filename;\n anchor.click();\n URL.revokeObjectURL(objectUrl);\n this.downloading = false;\n },\n error: (err) => {\n console.error('Download failed', err);\n this.error = 'Download mislukt. Probeer opnieuw.';\n this.downloading = false;\n },\n });\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {FormioCustomComponent, FormIoStateService} from '@valtimo/components';\nimport {ConfigService} from '@valtimo/shared';\nimport {FormioModule} from '@formio/angular';\nimport {Subject, Subscription} from 'rxjs';\nimport {debounceTime, switchMap} from 'rxjs/operators';\nimport {EpistolaPluginService} from '../../services';\n\n@Component({\n standalone: true,\n imports: [CommonModule, FormioModule],\n selector: 'epistola-retry-form-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div *ngIf=\"loading\" class=\"epistola-retry-loading\">Loading form...</div>\n <div *ngIf=\"error\" class=\"epistola-retry-error\">{{ error }}</div>\n <div *ngIf=\"formDefinition && !loading\" class=\"epistola-retry-container\" [class.preview-expanded]=\"previewExpanded\">\n <div class=\"epistola-retry-form\" [hidden]=\"previewExpanded\">\n <formio\n [form]=\"formDefinition\"\n [submission]=\"submission\"\n (change)=\"onFormChange($event)\"\n [options]=\"formOptions\"\n ></formio>\n </div>\n <div class=\"epistola-retry-preview\">\n <div class=\"preview-header\">\n <span>Preview</span>\n <button type=\"button\" class=\"preview-toggle\" (click)=\"togglePreview()\">\n {{ previewExpanded ? 'Show form' : 'Expand' }}\n </button>\n </div>\n <div *ngIf=\"previewLoading\" class=\"preview-loading\">Generating preview...</div>\n <object *ngIf=\"previewUrl && !previewLoading\" [data]=\"previewUrl\" type=\"application/pdf\" class=\"preview-pdf\">\n PDF preview not supported in this browser.\n </object>\n <div *ngIf=\"previewError\" class=\"preview-error\">{{ previewError }}</div>\n <div *ngIf=\"!previewUrl && !previewLoading && !previewError\" class=\"preview-empty\">\n Edit fields to see a preview\n </div>\n </div>\n </div>\n `,\n styles: [`\n .epistola-retry-loading {\n padding: 1rem;\n color: #6c757d;\n }\n .epistola-retry-error {\n padding: 0.5rem;\n color: #dc3545;\n }\n .epistola-retry-container {\n display: flex;\n gap: 1rem;\n }\n .epistola-retry-form {\n flex: 2;\n min-width: 0;\n }\n .epistola-retry-preview {\n flex: 1;\n min-width: 0;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 1rem;\n background: #f8f9fa;\n display: flex;\n flex-direction: column;\n }\n .preview-expanded .epistola-retry-preview {\n flex: 1;\n }\n .preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: bold;\n margin-bottom: 0.5rem;\n color: #495057;\n }\n .preview-toggle {\n background: none;\n border: 1px solid #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.2rem 0.5rem;\n font-size: 0.75rem;\n cursor: pointer;\n }\n .preview-toggle:hover {\n background: #e9ecef;\n }\n .preview-loading {\n color: #6c757d;\n font-style: italic;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n min-height: 500px;\n }\n .preview-expanded .preview-pdf {\n min-height: 80vh;\n }\n .preview-error {\n color: #dc3545;\n }\n .preview-empty {\n color: #6c757d;\n font-style: italic;\n }\n `]\n})\nexport class EpistolaRetryFormComponent implements FormioCustomComponent<string>, OnChanges, OnDestroy {\n @Input() value!: string;\n @Output() valueChange = new EventEmitter<string>();\n\n @Input() disabled = false;\n @Input() label = 'Document Data';\n @Input() sourceActivityId?: string;\n\n formDefinition: any;\n submission: any;\n loading = true;\n error: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n previewLoading = false;\n previewError: string | null = null;\n previewExpanded = false;\n private loaded = false;\n private loadSubscription?: Subscription;\n private previewSubscription?: Subscription;\n private previewSubject = new Subject<any>();\n private currentBlobUrl: string | null = null;\n private resolvedSourceActivityId?: string;\n private processDefinitionKey?: string;\n private readonly apiEndpoint: string;\n\n formOptions: any = {\n noAlerts: true,\n buttonSettings: {showCancel: false, showSubmit: false, showPrevious: false, showNext: false}\n };\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly formIoStateService: FormIoStateService,\n private readonly cdr: ChangeDetectorRef,\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n // Debounce preview calls\n this.previewSubscription = this.previewSubject.pipe(debounceTime(1500)).subscribe(data => {\n this.loadPreview(data);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.loaded) {\n this.loaded = true;\n this.loadForm();\n }\n }\n\n ngOnDestroy(): void {\n this.loadSubscription?.unsubscribe();\n this.previewSubscription?.unsubscribe();\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n }\n }\n\n togglePreview(): void {\n this.previewExpanded = !this.previewExpanded;\n this.cdr.markForCheck();\n }\n\n onFormChange(event: any): void {\n if (event?.data) {\n const json = JSON.stringify(event.data);\n this.value = json; // Formio reads element.value on change event\n this.valueChange.emit(json);\n // Trigger debounced preview\n this.previewSubject.next(event.data);\n }\n }\n\n private loadPreview(formData: any): void {\n const documentId = this.formIoStateService.documentId;\n const processInstanceId = this.formIoStateService.processInstanceId;\n if (!documentId || !processInstanceId) return;\n\n this.previewLoading = true;\n this.previewError = null;\n this.cdr.markForCheck();\n\n // Revoke previous blob URL to prevent memory leaks\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n }\n\n this.http.post(`${this.apiEndpoint}/preview`, {\n documentId,\n processInstanceId,\n sourceActivityId: this.sourceActivityId || null,\n overrides: formData\n }, {responseType: 'blob', headers: new HttpHeaders().set('X-Skip-Interceptor', '422')}).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.previewError = null;\n this.previewLoading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.previewUrl = null;\n // Try to extract error message from JSON response body\n if (err.error instanceof Blob) {\n err.error.text().then((text: string) => {\n try {\n const body = JSON.parse(text);\n this.previewError = body.details || body.error || 'Preview could not be generated';\n } catch {\n this.previewError = 'Preview could not be generated';\n }\n this.previewLoading = false;\n this.cdr.markForCheck();\n });\n } else {\n this.previewError = err.error?.error || 'Preview could not be generated';\n this.previewLoading = false;\n this.cdr.markForCheck();\n }\n }\n });\n }\n\n private loadForm(): void {\n const processInstanceId = this.formIoStateService.processInstanceId;\n const documentId = this.formIoStateService.documentId;\n if (!processInstanceId) {\n this.error = 'Could not determine process instance ID.';\n this.loading = false;\n this.cdr.markForCheck();\n return;\n }\n\n this.loadSubscription = this.epistolaPluginService.getRetryForm(\n processInstanceId, documentId ?? undefined, this.sourceActivityId\n ).subscribe({\n next: (form) => {\n this.formDefinition = form;\n if (this.value) {\n try {\n this.submission = {data: JSON.parse(this.value)};\n } catch {\n // value is not valid JSON, start fresh\n }\n }\n this.loading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n console.error('Failed to load retry form', err);\n this.error = 'Failed to load the retry form. Please try again.';\n this.loading = false;\n this.cdr.markForCheck();\n }\n });\n }\n}\n","import {Component, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {FormioCustomComponent} from '@valtimo/components';\nimport {ConfigService} from '@valtimo/shared';\n\nexport interface PreviewButtonData {\n documentId: string;\n tenantId: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-preview-button-component',\n template: `\n <button\n type=\"button\"\n class=\"btn btn-outline-secondary\"\n [disabled]=\"disabled || loading || !hasRequiredData()\"\n (click)=\"openPreview()\"\n >\n <i class=\"mdi mdi-eye mr-1\"></i>\n {{ loading ? 'Loading...' : buttonLabel }}\n </button>\n\n <div *ngIf=\"modalOpen\" class=\"preview-modal-overlay\" (click)=\"closePreview()\">\n <div class=\"preview-modal-content\" (click)=\"$event.stopPropagation()\">\n <div class=\"preview-modal-header\">\n <span>Document Preview</span>\n <button type=\"button\" class=\"preview-modal-close\" (click)=\"closePreview()\">&times;</button>\n </div>\n <div class=\"preview-modal-body\">\n <div *ngIf=\"previewLoading\" class=\"preview-loading\">Generating preview...</div>\n <div *ngIf=\"previewError\" class=\"preview-error\">{{ previewError }}</div>\n <object\n *ngIf=\"previewUrl && !previewLoading\"\n [data]=\"previewUrl\"\n type=\"application/pdf\"\n class=\"preview-pdf\"\n >\n PDF preview is not supported in this browser.\n </object>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .preview-modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n }\n .preview-modal-content {\n background: white;\n border-radius: 8px;\n width: 90vw;\n height: 90vh;\n max-width: 1200px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\n }\n .preview-modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n font-weight: bold;\n font-size: 1rem;\n }\n .preview-modal-close {\n background: none;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n color: #6c757d;\n line-height: 1;\n padding: 0 0.25rem;\n }\n .preview-modal-close:hover {\n color: #333;\n }\n .preview-modal-body {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .preview-loading, .preview-error {\n padding: 2rem;\n text-align: center;\n }\n .preview-error {\n color: #dc3545;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n }\n `]\n})\nexport class EpistolaPreviewButtonComponent implements FormioCustomComponent<PreviewButtonData>, OnDestroy {\n @Input() value!: PreviewButtonData;\n @Output() valueChange = new EventEmitter<PreviewButtonData>();\n\n @Input() disabled = false;\n @Input() label = 'Preview PDF';\n\n modalOpen = false;\n loading = false;\n previewLoading = false;\n previewError: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n private currentBlobUrl: string | null = null;\n\n private readonly apiEndpoint: string;\n\n get buttonLabel(): string {\n return this.label || 'Preview PDF';\n }\n\n constructor(\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n ngOnDestroy(): void {\n this.revokeBlobUrl();\n }\n\n hasRequiredData(): boolean {\n return !!(this.value?.documentId && this.value?.tenantId);\n }\n\n openPreview(): void {\n if (!this.hasRequiredData() || this.loading) return;\n\n this.modalOpen = true;\n this.previewLoading = true;\n this.previewError = null;\n this.revokeBlobUrl();\n\n const {documentId, tenantId} = this.value;\n const url = `${this.apiEndpoint}/documents/${encodeURIComponent(documentId)}/download`\n + `?tenantId=${encodeURIComponent(tenantId)}`\n + `&filename=preview.pdf`;\n\n this.http.get(url, {responseType: 'blob'}).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.previewLoading = false;\n },\n error: () => {\n this.previewError = 'Could not load the document.';\n this.previewLoading = false;\n }\n });\n }\n\n closePreview(): void {\n this.modalOpen = false;\n this.revokeBlobUrl();\n this.previewUrl = null;\n this.previewError = null;\n }\n\n private revokeBlobUrl(): void {\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n }\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {FormioCustomComponent, FormIoStateService} from '@valtimo/components';\nimport {ConfigService} from '@valtimo/shared';\nimport {PreviewSource} from '../../models';\nimport {EpistolaPluginService} from '../../services';\nimport {Subscription} from 'rxjs';\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-document-preview-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"epistola-preview-panel\">\n <div class=\"preview-header\">\n <span>{{ label || 'Document Preview' }}</span>\n <div class=\"preview-controls\">\n <select\n *ngIf=\"sources.length > 1\"\n class=\"preview-select\"\n [value]=\"selectedIndex\"\n (change)=\"onSourceChange($event)\"\n >\n <option *ngFor=\"let source of sources; let i = index\" [value]=\"i\">\n {{ source.templateName }} ({{ source.activityId }})\n </option>\n </select>\n <button type=\"button\" class=\"preview-refresh\" [disabled]=\"loading || discovering\" (click)=\"refresh()\">\n <i class=\"mdi mdi-refresh mr-1\"></i>\n {{ loading ? 'Generating...' : 'Refresh' }}\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <div *ngIf=\"discovering\" class=\"preview-loading\">\n Discovering documents...\n </div>\n <div *ngIf=\"loading && !discovering\" class=\"preview-loading\">\n Generating preview...\n </div>\n <div *ngIf=\"error && !loading && !discovering\" class=\"preview-unavailable\">\n <i class=\"mdi mdi-information-outline\"></i>\n Preview is niet beschikbaar — niet alle gegevens zijn al ingevuld.\n </div>\n <object\n *ngIf=\"previewUrl && !loading && !discovering\"\n [data]=\"previewUrl\"\n type=\"application/pdf\"\n class=\"preview-pdf\"\n >\n PDF preview is not supported in this browser.\n </object>\n <div *ngIf=\"!previewUrl && !loading && !discovering && !error && sources.length === 0\" class=\"preview-empty\">\n No previewable documents found\n </div>\n </div>\n </div>\n `,\n styles: [`\n .epistola-preview-panel {\n border: 1px solid #dee2e6;\n border-radius: 4px;\n background: #f8f9fa;\n display: flex;\n flex-direction: column;\n }\n .preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid #dee2e6;\n font-weight: bold;\n color: #495057;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .preview-controls {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n .preview-select {\n border: 1px solid #ced4da;\n border-radius: 4px;\n padding: 0.25rem 0.5rem;\n font-size: 0.8rem;\n background: white;\n max-width: 300px;\n }\n .preview-refresh {\n background: none;\n border: 1px solid #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.25rem 0.75rem;\n font-size: 0.8rem;\n cursor: pointer;\n display: flex;\n align-items: center;\n white-space: nowrap;\n }\n .preview-refresh:hover:not(:disabled) {\n background: #e9ecef;\n }\n .preview-refresh:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .preview-body {\n display: flex;\n flex-direction: column;\n min-height: 500px;\n }\n .preview-loading {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n .preview-unavailable {\n padding: 1.5rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n .preview-unavailable i {\n margin-right: 0.25rem;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n min-height: 500px;\n }\n .preview-empty {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n `]\n})\nexport class EpistolaDocumentPreviewComponent implements FormioCustomComponent<null>, OnChanges, OnDestroy {\n @Input() value!: null;\n @Output() valueChange = new EventEmitter<null>();\n\n @Input() disabled = false;\n @Input() label = 'Document Preview';\n\n sources: PreviewSource[] = [];\n selectedIndex = 0;\n discovering = false;\n loading = false;\n error: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n private initialized = false;\n private currentBlobUrl: string | null = null;\n private discoverSubscription?: Subscription;\n private previewSubscription?: Subscription;\n private readonly apiEndpoint: string;\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService,\n private readonly formIoStateService: FormIoStateService,\n private readonly cdr: ChangeDetectorRef\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.initialized) {\n this.initialized = true;\n this.discoverSources();\n }\n }\n\n ngOnDestroy(): void {\n this.discoverSubscription?.unsubscribe();\n this.previewSubscription?.unsubscribe();\n this.revokeBlobUrl();\n }\n\n onSourceChange(event: Event): void {\n this.selectedIndex = +(event.target as HTMLSelectElement).value;\n this.loadPreview();\n }\n\n refresh(): void {\n this.loadPreview();\n }\n\n private discoverSources(): void {\n const documentId = this.formIoStateService.documentId;\n if (!documentId) {\n this.error = 'Could not determine document ID from context.';\n this.cdr.markForCheck();\n return;\n }\n\n this.discovering = true;\n this.error = null;\n this.cdr.markForCheck();\n\n this.discoverSubscription = this.epistolaPluginService.getPreviewSources(documentId).subscribe({\n next: (sources) => {\n this.sources = sources;\n this.discovering = false;\n this.cdr.markForCheck();\n if (sources.length > 0) {\n this.selectedIndex = 0;\n this.loadPreview();\n }\n },\n error: (err) => {\n this.error = err.error?.error || 'Failed to discover preview sources';\n this.discovering = false;\n this.cdr.markForCheck();\n }\n });\n }\n\n private loadPreview(): void {\n const source = this.sources[this.selectedIndex];\n if (!source) return;\n\n const documentId = this.formIoStateService.documentId;\n if (!documentId) return;\n\n this.loading = true;\n this.error = null;\n this.cdr.markForCheck();\n this.revokeBlobUrl();\n\n this.previewSubscription?.unsubscribe();\n this.previewSubscription = this.http.post(`${this.apiEndpoint}/preview`, {\n documentId,\n processInstanceId: source.processInstanceId,\n sourceActivityId: source.activityId,\n overrides: null\n }, {\n responseType: 'blob',\n headers: new HttpHeaders().set('X-Skip-Interceptor', '422')\n }).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.error = null;\n this.loading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.previewUrl = null;\n if (err.error instanceof Blob) {\n err.error.text().then((text: string) => {\n try {\n const body = JSON.parse(text);\n this.error = body.details || body.error || 'Preview could not be generated';\n } catch {\n this.error = 'Preview could not be generated';\n }\n this.loading = false;\n this.cdr.markForCheck();\n });\n } else {\n this.error = err.error?.error || 'Preview could not be generated';\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n });\n }\n\n private revokeBlobUrl(): void {\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n this.previewUrl = null;\n }\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaDownloadComponent} from './epistola-download.component';\n\nexport const EPISTOLA_DOWNLOAD_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-download',\n selector: 'epistola-download-button',\n title: 'Epistola Download',\n group: 'basic',\n icon: 'download',\n emptyValue: null,\n fieldOptions: ['filename', 'label'],\n};\n\nexport function registerEpistolaDownloadComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_DOWNLOAD_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_DOWNLOAD_OPTIONS, EpistolaDownloadComponent, injector);\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaRetryFormComponent} from './epistola-retry-form.component';\n\nexport const EPISTOLA_RETRY_FORM_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-retry-form',\n selector: 'epistola-retry-form-element',\n title: 'Epistola Retry Form',\n group: 'basic',\n icon: 'refresh',\n emptyValue: null,\n fieldOptions: ['sourceActivityId', 'label'], // sourceActivityId is optional (set via BPMN input parameter)\n};\n\nexport function registerEpistolaRetryFormComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_RETRY_FORM_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_RETRY_FORM_OPTIONS, EpistolaRetryFormComponent, injector);\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaPreviewButtonComponent} from './epistola-preview-button.component';\n\nexport const EPISTOLA_PREVIEW_BUTTON_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-preview-button',\n selector: 'epistola-preview-button-element',\n title: 'Epistola Preview',\n group: 'basic',\n icon: 'eye',\n emptyValue: null,\n fieldOptions: ['label'],\n};\n\nexport function registerEpistolaPreviewButtonComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_PREVIEW_BUTTON_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_PREVIEW_BUTTON_OPTIONS, EpistolaPreviewButtonComponent, injector);\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaDocumentPreviewComponent} from './epistola-document-preview.component';\n\nexport const EPISTOLA_DOCUMENT_PREVIEW_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-document-preview',\n selector: 'epistola-document-preview-element',\n title: 'Epistola Document Preview',\n group: 'basic',\n icon: 'file-pdf-o',\n emptyValue: null,\n fieldOptions: ['label'],\n};\n\nexport function registerEpistolaDocumentPreviewComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_DOCUMENT_PREVIEW_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_DOCUMENT_PREVIEW_OPTIONS, EpistolaDocumentPreviewComponent, injector);\n }\n}\n","import {ENVIRONMENT_INITIALIZER, inject, Injector, ModuleWithProviders, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClientModule} from '@angular/common/http';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, InputModule, SelectModule} from '@valtimo/components';\nimport {EpistolaConfigurationComponent} from './components/epistola-configuration/epistola-configuration.component';\nimport {\n GenerateDocumentConfigurationComponent\n} from './components/generate-document-configuration/generate-document-configuration.component';\nimport {\n CheckJobStatusConfigurationComponent\n} from './components/check-job-status-configuration/check-job-status-configuration.component';\nimport {\n DownloadDocumentConfigurationComponent\n} from './components/download-document-configuration/download-document-configuration.component';\nimport {DataMappingTreeComponent} from './components/data-mapping-tree/data-mapping-tree.component';\nimport {FieldTreeComponent} from './components/field-tree/field-tree.component';\nimport {ValueInputComponent} from './components/value-input/value-input.component';\nimport {ScalarFieldComponent} from './components/scalar-field/scalar-field.component';\nimport {ArrayFieldComponent} from './components/array-field/array-field.component';\nimport {EpistolaDownloadComponent} from './components/epistola-download/epistola-download.component';\nimport {EpistolaRetryFormComponent} from './components/epistola-retry-form/epistola-retry-form.component';\nimport {EpistolaPreviewButtonComponent} from './components/epistola-preview-button/epistola-preview-button.component';\nimport {EpistolaDocumentPreviewComponent} from './components/epistola-document-preview/epistola-document-preview.component';\nimport {EpistolaPluginService} from './services';\nimport {registerEpistolaDownloadComponent} from './components/epistola-download/epistola-download.formio';\nimport {registerEpistolaRetryFormComponent} from './components/epistola-retry-form/epistola-retry-form.formio';\nimport {registerEpistolaPreviewButtonComponent} from './components/epistola-preview-button/epistola-preview-button.formio';\nimport {registerEpistolaDocumentPreviewComponent} from './components/epistola-document-preview/epistola-document-preview.formio';\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n PluginTranslatePipeModule,\n FormModule,\n InputModule,\n SelectModule,\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n DataMappingTreeComponent,\n ValueInputComponent,\n ScalarFieldComponent,\n ArrayFieldComponent,\n FieldTreeComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent,\n EpistolaDocumentPreviewComponent\n ],\n exports: [\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n DataMappingTreeComponent,\n ValueInputComponent,\n ScalarFieldComponent,\n ArrayFieldComponent,\n FieldTreeComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent,\n EpistolaDocumentPreviewComponent\n ],\n providers: [\n EpistolaPluginService\n ]\n})\nexport class EpistolaPluginModule {\n static forRoot(): ModuleWithProviders<EpistolaPluginModule> {\n return {\n ngModule: EpistolaPluginModule,\n providers: [\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n const injector = inject(Injector);\n registerEpistolaDownloadComponent(injector);\n registerEpistolaRetryFormComponent(injector);\n registerEpistolaPreviewButtonComponent(injector);\n registerEpistolaDocumentPreviewComponent(injector);\n }\n }\n ]\n };\n }\n}\n","// Placeholder logo - a simple document icon in SVG format, base64 encoded\n// TODO: Replace with actual Epistola logo\nexport const EPISTOLA_PLUGIN_LOGO_BASE64 =\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzMzNjZjYyI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTQgMThINlY0aDd2NWg1djExeiIvPjxwYXRoIGQ9Ik04IDEyaDh2Mkg4em0wIDRoOHYtMkg4em0wLThWNmg0djJ6Ii8+PC9zdmc+';\n","import {PluginSpecification} from '@valtimo/plugin';\nimport {EpistolaConfigurationComponent} from './components/epistola-configuration/epistola-configuration.component';\nimport {\n GenerateDocumentConfigurationComponent\n} from './components/generate-document-configuration/generate-document-configuration.component';\nimport {\n CheckJobStatusConfigurationComponent\n} from './components/check-job-status-configuration/check-job-status-configuration.component';\nimport {\n DownloadDocumentConfigurationComponent\n} from './components/download-document-configuration/download-document-configuration.component';\nimport {EPISTOLA_PLUGIN_LOGO_BASE64} from './assets';\n\nconst epistolaPluginSpecification: PluginSpecification = {\n // Must match backend @Plugin(key = \"epistola\")\n pluginId: 'epistola',\n\n // Component for plugin-level configuration (tenantId)\n pluginConfigurationComponent: EpistolaConfigurationComponent,\n\n // Plugin logo\n pluginLogoBase64: EPISTOLA_PLUGIN_LOGO_BASE64,\n\n // Map action keys to their configuration components\n functionConfigurationComponents: {\n 'generate-document': GenerateDocumentConfigurationComponent,\n 'check-job-status': CheckJobStatusConfigurationComponent,\n 'download-document': DownloadDocumentConfigurationComponent,\n },\n\n // Translations\n pluginTranslations: {\n nl: {\n title: 'Epistola Document Suite',\n description: 'Documentgeneratie met Epistola',\n configurationTitle: 'Configuratienaam',\n baseUrl: 'Base URL',\n baseUrlTooltip: 'De basis URL van de Epistola API (bijv. https://api.epistola.app)',\n apiKey: 'API Key',\n apiKeyTooltip: 'De API sleutel voor authenticatie met Epistola',\n tenantId: 'Tenant ID',\n tenantIdTooltip: 'De tenant slug in Epistola (3-63 tekens, alleen kleine letters, cijfers en koppeltekens, bijv. \"mijn-tenant\")',\n defaultEnvironmentId: 'Standaard Omgeving',\n defaultEnvironmentIdTooltip: 'De standaard omgeving voor documentgeneratie (3-30 tekens, alleen kleine letters, cijfers en koppeltekens, bijv. \"productie\")',\n templateSyncEnabled: 'Template synchronisatie',\n templateSyncEnabledTooltip: 'Synchroniseer template definities automatisch van het classpath naar Epistola bij het opstarten',\n 'generate-document': 'Genereer Document',\n catalogId: 'Catalogus',\n catalogIdTooltip: 'Selecteer de catalogus waaruit een template gekozen wordt',\n templateId: 'Template',\n templateIdTooltip: 'Selecteer het template dat gebruikt wordt voor documentgeneratie',\n variantId: 'Variant',\n variantIdTooltip: 'Selecteer de template variant',\n variantSelectionMode: 'Variant selectie',\n variantSelectionModeTooltip: 'Kies hoe de variant geselecteerd wordt',\n selectByVariant: 'Selecteer variant',\n selectByAttributes: 'Selecteer op kenmerken',\n variantAttributes: 'Variant kenmerken',\n variantAttributesTooltip: 'Kenmerken voor automatische variant selectie. Waarden kunnen expressies zijn (doc:, pv:, case:).',\n attributeKey: 'Kenmerk',\n attributeKeyCustom: 'Aangepast...',\n attributeValue: 'Waarde',\n addAttribute: 'Kenmerk toevoegen',\n removeAttribute: 'Kenmerk verwijderen',\n attributeRequired: 'Verplicht',\n attributePreferred: 'Voorkeur',\n environmentId: 'Omgeving',\n environmentIdTooltip: 'Selecteer de doelomgeving (optioneel)',\n correlationId: 'Correlatie ID',\n correlationIdTooltip: 'Een optioneel correlatie ID voor het traceren van dit verzoek',\n dataMapping: 'Data Mapping',\n dataMappingTooltip: 'Koppeling van template velden naar data bronnen (doc:, pv:, case:)',\n outputFormat: 'Uitvoerformaat',\n outputFormatTooltip: 'Het gewenste formaat van het gegenereerde document',\n filename: 'Bestandsnaam',\n filenameTooltip: 'De bestandsnaam voor het gegenereerde document',\n resultProcessVariable: 'Resultaat Procesvariabele',\n resultProcessVariableTooltip: 'De naam van de procesvariabele waarin het request ID wordt opgeslagen',\n pdf: 'PDF',\n html: 'HTML',\n // Data mapping builder translations\n dataMappingTitle: 'Data Mapping',\n dataMappingDescription: 'Koppel template velden aan Valtimo data bronnen',\n templateField: 'Template veld',\n dataSource: 'Data bron',\n addMapping: 'Mapping toevoegen',\n noMappings: 'Nog geen mappings toegevoegd. Klik op \"Mapping toevoegen\" om te beginnen.',\n documentFields: 'Document velden',\n processVariables: 'Procesvariabelen',\n caseProperties: 'Zaak eigenschappen',\n sourceType: 'Brontype',\n sourceTypeDocument: 'Document veld',\n sourceTypeProcessVariable: 'Procesvariabele',\n sourceTypeManual: 'Handmatig',\n requiredFieldsMissing: 'Niet alle verplichte velden zijn gekoppeld',\n requiredFieldsComplete: 'Alle verplichte velden zijn gekoppeld',\n validationSummary: 'verplichte velden gekoppeld',\n fieldRequired: 'Verplicht',\n fieldOptional: 'Optioneel',\n mapCollectionTo: 'Koppel collectie aan',\n browseMode: 'Bladermodus',\n pvMode: 'Procesvariabele modus',\n pvPlaceholder: 'Naam procesvariabele',\n expressionMode: 'Expressiemodus',\n itemFieldMapping: 'Veldnamen per item koppelen',\n itemFieldMappingTitle: 'Veldkoppeling per item:',\n sourceFieldPlaceholder: 'Bronveldnaam',\n noTemplateFields: 'Geen template velden beschikbaar',\n // Check job status action\n 'check-job-status': 'Controleer Taakstatus',\n requestIdVariable: 'Request ID Variabele',\n requestIdVariableTooltip: 'Naam van de procesvariabele met het Epistola request ID',\n statusVariable: 'Status Variabele',\n statusVariableTooltip: 'Naam van de procesvariabele waarin de status wordt opgeslagen',\n documentIdVariable: 'Document ID Variabele',\n documentIdVariableTooltip: 'Naam van de procesvariabele waarin het document ID wordt opgeslagen (bij voltooiing)',\n errorMessageVariable: 'Foutmelding Variabele',\n errorMessageVariableTooltip: 'Naam van de procesvariabele waarin de foutmelding wordt opgeslagen (bij fout)',\n // Download document action\n 'download-document': 'Download Document',\n contentVariable: 'Inhoud Variabele',\n contentVariableTooltip: 'Naam van de procesvariabele waarin de documentinhoud (Base64) wordt opgeslagen'\n },\n en: {\n title: 'Epistola Document Suite',\n description: 'Document generation using Epistola',\n configurationTitle: 'Configuration name',\n baseUrl: 'Base URL',\n baseUrlTooltip: 'The base URL of the Epistola API (e.g. https://api.epistola.app)',\n apiKey: 'API Key',\n apiKeyTooltip: 'The API key for authentication with Epistola',\n tenantId: 'Tenant ID',\n tenantIdTooltip: 'The tenant slug in Epistola (3-63 chars, lowercase letters, digits and hyphens only, e.g. \"my-tenant\")',\n defaultEnvironmentId: 'Default Environment',\n defaultEnvironmentIdTooltip: 'The default environment for document generation (3-30 chars, lowercase letters, digits and hyphens only, e.g. \"production\")',\n templateSyncEnabled: 'Template sync',\n templateSyncEnabledTooltip: 'Automatically synchronize template definitions from classpath to Epistola on startup',\n 'generate-document': 'Generate Document',\n catalogId: 'Catalog',\n catalogIdTooltip: 'Select the catalog to choose a template from',\n templateId: 'Template',\n templateIdTooltip: 'Select the template to use for document generation',\n variantId: 'Variant',\n variantIdTooltip: 'Select the template variant',\n variantSelectionMode: 'Variant selection',\n variantSelectionModeTooltip: 'Choose how the variant is selected',\n selectByVariant: 'Select variant',\n selectByAttributes: 'Select by attributes',\n variantAttributes: 'Variant attributes',\n variantAttributesTooltip: 'Attributes for automatic variant selection. Values can be expressions (doc:, pv:, case:).',\n attributeKey: 'Attribute',\n attributeKeyCustom: 'Custom...',\n attributeValue: 'Value',\n addAttribute: 'Add attribute',\n removeAttribute: 'Remove attribute',\n attributeRequired: 'Required',\n attributePreferred: 'Preferred',\n environmentId: 'Environment',\n environmentIdTooltip: 'Select the target environment (optional)',\n correlationId: 'Correlation ID',\n correlationIdTooltip: 'An optional correlation ID for tracking this request',\n dataMapping: 'Data Mapping',\n dataMappingTooltip: 'Mapping of template fields to data sources (doc:, pv:, case:)',\n outputFormat: 'Output Format',\n outputFormatTooltip: 'The desired format of the generated document',\n filename: 'Filename',\n filenameTooltip: 'The filename for the generated document',\n resultProcessVariable: 'Result Process Variable',\n resultProcessVariableTooltip: 'The name of the process variable to store the request ID in',\n pdf: 'PDF',\n html: 'HTML',\n // Data mapping builder translations\n dataMappingTitle: 'Data Mapping',\n dataMappingDescription: 'Map template fields to Valtimo data sources',\n templateField: 'Template field',\n dataSource: 'Data source',\n addMapping: 'Add mapping',\n noMappings: 'No mappings added yet. Click \"Add mapping\" to start.',\n documentFields: 'Document fields',\n processVariables: 'Process variables',\n caseProperties: 'Case properties',\n sourceType: 'Source type',\n sourceTypeDocument: 'Document field',\n sourceTypeProcessVariable: 'Process variable',\n sourceTypeManual: 'Manual value',\n requiredFieldsMissing: 'Not all required fields are mapped',\n requiredFieldsComplete: 'All required fields are mapped',\n validationSummary: 'required fields mapped',\n fieldRequired: 'Required',\n fieldOptional: 'Optional',\n mapCollectionTo: 'Map collection to',\n browseMode: 'Browse mode',\n pvMode: 'Process variable mode',\n pvPlaceholder: 'Process variable name',\n expressionMode: 'Expression mode',\n itemFieldMapping: 'Map field names per item',\n itemFieldMappingTitle: 'Item field mapping:',\n sourceFieldPlaceholder: 'Source field name',\n noTemplateFields: 'No template fields available',\n // Check job status action\n 'check-job-status': 'Check Job Status',\n requestIdVariable: 'Request ID Variable',\n requestIdVariableTooltip: 'Name of the process variable containing the Epistola request ID',\n statusVariable: 'Status Variable',\n statusVariableTooltip: 'Name of the process variable to store the status in',\n documentIdVariable: 'Document ID Variable',\n documentIdVariableTooltip: 'Name of the process variable to store the document ID in (when completed)',\n errorMessageVariable: 'Error Message Variable',\n errorMessageVariableTooltip: 'Name of the process variable to store the error message in (when failed)',\n // Download document action\n 'download-document': 'Download Document',\n contentVariable: 'Content Variable',\n contentVariableTooltip: 'Name of the process variable to store the document content (Base64) in'\n }\n }\n};\n\nexport {epistolaPluginSpecification};\n","/*\n * Public API Surface of epistola plugin\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/epistola.module';\nexport * from './lib/epistola.specification';\nexport * from './lib/components/epistola-configuration/epistola-configuration.component';\nexport * from './lib/components/generate-document-configuration/generate-document-configuration.component';\nexport * from './lib/components/check-job-status-configuration/check-job-status-configuration.component';\nexport * from './lib/components/download-document-configuration/download-document-configuration.component';\nexport * from './lib/components/value-input/value-input.component';\nexport * from './lib/components/scalar-field/scalar-field.component';\nexport * from './lib/components/array-field/array-field.component';\nexport * from './lib/components/field-tree/field-tree.component';\nexport * from './lib/components/data-mapping-tree/data-mapping-tree.component';\nexport * from './lib/components/epistola-download/epistola-download.component';\nexport * from './lib/components/epistola-download/epistola-download.formio';\nexport * from './lib/components/epistola-retry-form/epistola-retry-form.component';\nexport * from './lib/components/epistola-retry-form/epistola-retry-form.formio';\nexport * from './lib/components/epistola-preview-button/epistola-preview-button.component';\nexport * from './lib/components/epistola-preview-button/epistola-preview-button.formio';\nexport * from './lib/components/epistola-document-preview/epistola-document-preview.component';\nexport * from './lib/components/epistola-document-preview/epistola-document-preview.formio';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3","i4","take","i1.EpistolaPluginService","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"epistola.app-valtimo-plugin.mjs","sources":["../../src/lib/models/async-resource.ts","../../src/lib/services/epistola-admin.service.ts","../../src/lib/services/epistola-menu.service.ts","../../src/lib/services/epistola-plugin.service.ts","../../src/lib/components/epistola-configuration/epistola-configuration.component.ts","../../src/lib/components/epistola-configuration/epistola-configuration.component.html","../../src/lib/utils/jsonata-monaco.ts","../../src/lib/components/jsonata-editor/jsonata-editor.component.ts","../../src/lib/components/expected-structure/expected-structure.component.ts","../../src/lib/components/mapping-builder/builder-field/builder-field.component.ts","../../src/lib/utils/jsonata-converter.ts","../../src/lib/components/mapping-builder/mapping-builder.component.ts","../../src/lib/components/mapping-preview/mapping-preview.component.ts","../../src/lib/components/epistola-document-preview/preview-utils.ts","../../src/lib/components/generate-document-configuration/generate-document-configuration.component.ts","../../src/lib/components/generate-document-configuration/generate-document-configuration.component.html","../../src/lib/components/check-job-status-configuration/check-job-status-configuration.component.ts","../../src/lib/components/check-job-status-configuration/check-job-status-configuration.component.html","../../src/lib/components/download-document-configuration/download-document-configuration.component.ts","../../src/lib/components/download-document-configuration/download-document-configuration.component.html","../../src/lib/components/epistola-download/epistola-download.component.ts","../../src/lib/components/epistola-retry-form/epistola-retry-form.component.ts","../../src/lib/components/epistola-preview-button/epistola-preview-button.component.ts","../../src/lib/components/epistola-document-preview/epistola-document-preview.component.ts","../../src/lib/components/epistola-admin-page/epistola-admin-page.component.ts","../../src/lib/components/epistola-admin-page/epistola-admin-page.component.html","../../src/lib/epistola-runtime-config.ts","../../src/lib/epistola-enabled.guard.ts","../../src/lib/epistola-admin-routing.module.ts","../../src/lib/components/epistola-download/epistola-download.formio.ts","../../src/lib/components/epistola-retry-form/epistola-retry-form.formio.ts","../../src/lib/components/epistola-preview-button/epistola-preview-button.formio.ts","../../src/lib/components/epistola-document-preview/epistola-document-preview.formio.ts","../../src/lib/components/override-builder/override-builder.component.ts","../../src/lib/components/override-builder/override-builder.formio.ts","../../src/lib/components/process-link-selector/process-link-selector.component.ts","../../src/lib/components/process-link-selector/process-link-selector.formio.ts","../../src/lib/epistola.module.ts","../../src/lib/assets/epistola-logo.ts","../../src/lib/epistola.specification.ts","../../src/public_api.ts","../../src/epistola.app-valtimo-plugin.ts"],"sourcesContent":["export interface AsyncResource<T> {\n data: T;\n loading: boolean;\n error: string | null;\n}\n\nexport function initialResource<T>(empty: T): AsyncResource<T> {\n return { data: empty, loading: false, error: null };\n}\n\nexport function loadingResource<T>(current: T): AsyncResource<T> {\n return { data: current, loading: true, error: null };\n}\n\nexport function successResource<T>(data: T): AsyncResource<T> {\n return { data, loading: false, error: null };\n}\n\nexport function errorResource<T>(current: T, error: string): AsyncResource<T> {\n return { data: current, loading: false, error };\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ConfigService } from '@valtimo/shared';\nimport { Observable } from 'rxjs';\nimport { ConnectionStatus, PendingJob, PluginUsageEntry, VersionInfo } from '../models';\n\n/**\n * Service for Epistola plugin administrative operations.\n * Provides health checks, version info, and usage overview.\n */\n@Injectable()\nexport class EpistolaAdminService {\n private readonly apiEndpoint: string;\n\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService,\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola/admin`;\n }\n\n /**\n * Check connectivity to Epistola for all plugin configurations.\n */\n getConnectionStatus(): Observable<ConnectionStatus[]> {\n return this.http.get<ConnectionStatus[]>(`${this.apiEndpoint}/health`);\n }\n\n /**\n * Get version information for the plugin and connected Epistola server.\n */\n getVersions(): Observable<VersionInfo> {\n return this.http.get<VersionInfo>(`${this.apiEndpoint}/versions`);\n }\n\n /**\n * Get an overview of all Epistola plugin usages across process definitions.\n */\n getPluginUsage(): Observable<PluginUsageEntry[]> {\n return this.http.get<PluginUsageEntry[]>(`${this.apiEndpoint}/usage`);\n }\n\n /**\n * Get all process instances currently waiting for an Epistola document generation result.\n */\n getPendingJobs(): Observable<PendingJob[]> {\n return this.http.get<PendingJob[]>(`${this.apiEndpoint}/pending`);\n }\n\n /**\n * Export a single process link as a .process-link.json file.\n */\n exportProcessLink(processLinkId: string): Observable<Blob> {\n return this.http.get(`${this.apiEndpoint}/export/${encodeURIComponent(processLinkId)}`, {\n responseType: 'blob',\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MenuService } from '@valtimo/components';\nimport { MenuItem, ROLE_ADMIN } from '@valtimo/shared';\nimport { Observable, of } from 'rxjs';\n\n/**\n * Registers the Epistola admin page menu item under the Admin > Other section.\n * Instantiated eagerly via ENVIRONMENT_INITIALIZER so the menu item\n * appears without any manual configuration in the host application.\n */\n@Injectable()\nexport class EpistolaMenuService {\n constructor(private readonly menuService: MenuService) {\n this.menuService.registerAppendMenuItemsFunction(\n (items: MenuItem[]): Observable<MenuItem[]> => {\n return of(\n items.map((item) => {\n const isAdminMenu = item.roles?.includes(ROLE_ADMIN) && item.children;\n if (!isAdminMenu) {\n return item;\n }\n return {\n ...item,\n children: [\n ...item.children!,\n {\n link: ['/epistola'],\n title: 'Epistola',\n sequence: 18,\n },\n ],\n };\n }),\n );\n },\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ConfigService } from '@valtimo/shared';\nimport { Observable } from 'rxjs';\nimport {\n AttributeDefinition,\n CatalogInfo,\n EnvironmentInfo,\n ExpressionFunctionInfo,\n JsonataValidationResult,\n PreviewSource,\n TemplateDetails,\n TemplateInfo,\n EvaluationResult,\n ValidateJsonataRequest,\n VariableSuggestions,\n VariantInfo,\n} from '../models';\n\n/**\n * Service for interacting with Epistola plugin API endpoints.\n * Provides methods to fetch templates, environments, variants,\n * process variables, and validate mappings.\n */\n@Injectable()\nexport class EpistolaPluginService {\n private readonly apiEndpoint: string;\n\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService,\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n /**\n * Get all available catalogs for a plugin configuration.\n */\n getCatalogs(pluginConfigurationId: string): Observable<CatalogInfo[]> {\n return this.http.get<CatalogInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/catalogs`,\n );\n }\n\n /**\n * Get all available templates for a plugin configuration and catalog.\n */\n getTemplates(pluginConfigurationId: string, catalogId?: string): Observable<TemplateInfo[]> {\n const params: Record<string, string> = {};\n if (catalogId) params['catalogId'] = catalogId;\n return this.http.get<TemplateInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates`,\n { params },\n );\n }\n\n /**\n * Get template details including its fields.\n */\n getTemplateDetails(\n pluginConfigurationId: string,\n templateId: string,\n catalogId: string,\n ): Observable<TemplateDetails> {\n return this.http.get<TemplateDetails>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}`,\n { params: { catalogId } },\n );\n }\n\n /**\n * Get all attribute definitions for a plugin configuration's tenant and catalog.\n */\n getAttributes(\n pluginConfigurationId: string,\n catalogId: string,\n ): Observable<AttributeDefinition[]> {\n const params: Record<string, string> = {};\n if (catalogId) params['catalogId'] = catalogId;\n return this.http.get<AttributeDefinition[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/attributes`,\n { params },\n );\n }\n\n /**\n * Get all available environments for a plugin configuration.\n */\n getEnvironments(pluginConfigurationId: string): Observable<EnvironmentInfo[]> {\n return this.http.get<EnvironmentInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/environments`,\n );\n }\n\n /**\n * Get all variants for a specific template.\n */\n getVariants(\n pluginConfigurationId: string,\n templateId: string,\n catalogId: string,\n ): Observable<VariantInfo[]> {\n const params: Record<string, string> = {};\n if (catalogId) params['catalogId'] = catalogId;\n return this.http.get<VariantInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}/variants`,\n { params },\n );\n }\n\n /**\n * Discover process variable names for a given process definition.\n */\n getProcessVariables(processDefinitionKey: string): Observable<string[]> {\n return this.http.get<string[]>(`${this.apiEndpoint}/process-variables`, {\n params: { processDefinitionKey },\n });\n }\n\n /**\n * Get variable suggestions for JSONata autocompletion.\n */\n getVariableSuggestions(\n caseDefinitionKey?: string,\n processDefinitionKey?: string,\n ): Observable<VariableSuggestions> {\n const params: Record<string, string> = {};\n if (caseDefinitionKey) params['caseDefinitionKey'] = caseDefinitionKey;\n if (processDefinitionKey) params['processDefinitionKey'] = processDefinitionKey;\n return this.http.get<VariableSuggestions>(`${this.apiEndpoint}/variable-suggestions`, {\n params,\n });\n }\n\n /**\n * Evaluate a JSONata expression against a real document.\n */\n evaluateMapping(\n expression: string,\n documentId: string,\n processInstanceId?: string,\n ): Observable<EvaluationResult> {\n return this.http.post<EvaluationResult>(`${this.apiEndpoint}/evaluate-mapping`, {\n expression,\n documentId,\n processInstanceId: processInstanceId ?? null,\n });\n }\n\n /**\n * Get a dynamically generated Formio form for retrying a failed document generation.\n */\n getRetryForm(\n processInstanceId: string,\n documentId?: string,\n sourceActivityId?: string,\n ): Observable<any> {\n const params: Record<string, string> = { processInstanceId };\n if (documentId) {\n params['documentId'] = documentId;\n }\n if (sourceActivityId) {\n params['sourceActivityId'] = sourceActivityId;\n }\n return this.http.get<any>(`${this.apiEndpoint}/retry-form`, { params });\n }\n\n /**\n * List all available expression functions for expr: data mapping values.\n */\n getExpressionFunctions(): Observable<ExpressionFunctionInfo[]> {\n return this.http.get<ExpressionFunctionInfo[]>(`${this.apiEndpoint}/expression-functions`);\n }\n\n /**\n * Validate the JSONata syntax of action-config expressions before save.\n * Parse-only; runtime errors (missing variables, type mismatches) are not detected.\n */\n validateJsonata(request: ValidateJsonataRequest): Observable<JsonataValidationResult> {\n return this.http.post<JsonataValidationResult>(`${this.apiEndpoint}/validate-jsonata`, request);\n }\n\n /**\n * Discover all previewable document sources for a given Valtimo document.\n */\n getPreviewSources(documentId: string): Observable<PreviewSource[]> {\n return this.http.get<PreviewSource[]>(`${this.apiEndpoint}/preview-sources`, {\n params: { documentId },\n });\n }\n\n /**\n * Preview a document by dry-running the generate-document process link.\n * Returns the resolved data as a mock preview (Phase 1).\n */\n previewDocument(\n documentId: string,\n processDefinitionKey: string,\n sourceActivityId: string,\n processInstanceId?: string,\n overrides?: Record<string, any>,\n ): Observable<any> {\n return this.http.post<any>(`${this.apiEndpoint}/preview`, {\n documentId,\n processDefinitionKey,\n sourceActivityId,\n processInstanceId: processInstanceId || null,\n overrides: overrides || null,\n });\n }\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PluginConfigurationComponent, PluginTranslatePipeModule } from '@valtimo/plugin';\nimport { FormModule, FormOutput, InputModule } from '@valtimo/components';\nimport { BehaviorSubject, combineLatest, Observable, Subscription, take } from 'rxjs';\nimport { delay, startWith } from 'rxjs/operators';\nimport { EpistolaPluginConfig } from '../../models';\n\n@Component({\n selector: 'epistola-configuration',\n templateUrl: './epistola-configuration.component.html',\n styleUrls: ['./epistola-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule],\n})\nexport class EpistolaConfigurationComponent\n implements PluginConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<EpistolaPluginConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<EpistolaPluginConfig> =\n new EventEmitter<EpistolaPluginConfig>();\n\n /** Epistola slug pattern: lowercase alphanumeric with hyphens, no leading/trailing hyphens. */\n private static readonly SLUG_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<EpistolaPluginConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n // Wrap disabled$ with startWith and delay to prevent NG0100 ExpressionChangedAfterItHasBeenCheckedError\n // The disabled$ observable from Valtimo's plugin framework can emit value changes after Angular's\n // change detection cycle completes, causing the error.\n this.safeDisabled$ = this.disabled$.pipe(startWith(true), delay(0));\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as EpistolaPluginConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: EpistolaPluginConfig): void {\n const valid = !!(\n formValue?.configurationTitle &&\n formValue?.baseUrl &&\n formValue?.apiKey &&\n formValue?.tenantId &&\n this.isValidSlug(formValue.tenantId, 3, 63) &&\n this.isValidOptionalSlug(formValue.defaultEnvironmentId, 3, 30)\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private isValidSlug(value: string, minLength: number, maxLength: number): boolean {\n return (\n value.length >= minLength &&\n value.length <= maxLength &&\n EpistolaConfigurationComponent.SLUG_PATTERN.test(value)\n );\n }\n\n private isValidOptionalSlug(\n value: string | undefined,\n minLength: number,\n maxLength: number,\n ): boolean {\n if (!value) {\n return true;\n }\n return this.isValidSlug(value, minLength, maxLength);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null,\n } as obs\"\n>\n <v-input\n name=\"configurationTitle\"\n [title]=\"'configurationTitle' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.configurationTitle\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"baseUrl\"\n [title]=\"'baseUrl' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'baseUrlTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.baseUrl\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"apiKey\"\n [title]=\"'apiKey' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'apiKeyTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.apiKey\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n type=\"password\"\n >\n </v-input>\n\n <v-input\n name=\"tenantId\"\n [title]=\"'tenantId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'tenantIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.tenantId\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"defaultEnvironmentId\"\n [title]=\"'defaultEnvironmentId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'defaultEnvironmentIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.defaultEnvironmentId\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"templateSyncEnabled\"\n type=\"checkbox\"\n [title]=\"'templateSyncEnabled' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'templateSyncEnabledTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.templateSyncEnabled ? 'true' : ''\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n</v-form>\n","import { ExpressionFunctionInfo, VariableSuggestions } from '../models';\n\n/**\n * Shared state for the JSONata completion provider.\n * Updated by the editor component when suggestions/functions change.\n */\nexport const jsonataCompletionData = {\n suggestions: null as VariableSuggestions | null,\n functions: [] as ExpressionFunctionInfo[],\n};\n\n/**\n * Register the JSONata language in Monaco editor.\n * Call this once when Monaco is available (e.g., in editor component OnInit).\n */\nexport function registerJsonataLanguage(monaco: any): void {\n // Only register once\n if (monaco.languages.getLanguages().some((lang: any) => lang.id === 'jsonata')) {\n return;\n }\n\n monaco.languages.register({ id: 'jsonata' });\n\n // Syntax highlighting via Monarch tokenizer\n monaco.languages.setMonarchTokensProvider('jsonata', {\n defaultToken: '',\n tokenPostfix: '.jsonata',\n\n keywords: ['true', 'false', 'null', 'in', 'and', 'or', 'not'],\n\n operators: ['&', '?', ':', '=', '!=', '>', '<', '>=', '<=', '+', '-', '*', '/', '%', '~>'],\n\n symbols: /[=><!~?:&|+\\-*/^%]+/,\n\n tokenizer: {\n root: [\n // Variables: $identifier\n [/\\$[a-zA-Z_]\\w*/, 'variable'],\n\n // Identifiers and keywords\n [\n /[a-zA-Z_]\\w*/,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'identifier',\n },\n },\n ],\n\n // Whitespace\n { include: '@whitespace' },\n\n // Strings\n [/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'],\n [/\"/, 'string', '@string_double'],\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'],\n [/'/, 'string', '@string_single'],\n\n // Numbers\n [/\\d+(\\.\\d+)?([eE][-+]?\\d+)?/, 'number'],\n\n // Delimiters and operators\n [/[{}()\\[\\]]/, '@brackets'],\n [/[,;.]/, 'delimiter'],\n [\n /@symbols/,\n {\n cases: {\n '@operators': 'operator',\n '@default': '',\n },\n },\n ],\n ],\n\n string_double: [\n [/[^\\\\\"]+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/\"/, 'string', '@pop'],\n ],\n\n string_single: [\n [/[^\\\\']+/, 'string'],\n [/\\\\./, 'string.escape'],\n [/'/, 'string', '@pop'],\n ],\n\n whitespace: [[/[ \\t\\r\\n]+/, 'white']],\n },\n });\n\n // Autocomplete provider\n monaco.languages.registerCompletionItemProvider('jsonata', {\n triggerCharacters: ['$', '.'],\n\n provideCompletionItems: (model: any, position: any) => {\n const textUntilPosition = model.getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn: 1,\n endLineNumber: position.lineNumber,\n endColumn: position.column,\n });\n\n const suggestions: any[] = [];\n const CompletionItemKind = monaco.languages.CompletionItemKind;\n\n // After \"$\" — suggest variables and functions\n if (textUntilPosition.endsWith('$')) {\n suggestions.push(\n ...['doc', 'pv', 'case'].map((v) => ({\n label: `$${v}`,\n kind: CompletionItemKind.Variable,\n insertText: v,\n detail: `Context variable`,\n })),\n );\n\n // Custom functions\n for (const func of jsonataCompletionData.functions) {\n suggestions.push({\n label: `$${func.name}`,\n kind: CompletionItemKind.Function,\n insertText: `${func.name}($0)`,\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\n detail: func.description || 'Custom function',\n });\n }\n\n // Built-in JSONata functions\n const builtins = [\n 'string',\n 'number',\n 'boolean',\n 'length',\n 'substring',\n 'uppercase',\n 'lowercase',\n 'trim',\n 'contains',\n 'split',\n 'join',\n 'sum',\n 'count',\n 'max',\n 'min',\n 'average',\n 'append',\n 'sort',\n 'reverse',\n 'keys',\n 'values',\n 'lookup',\n 'now',\n 'exists',\n 'type',\n 'not',\n ];\n for (const fn of builtins) {\n suggestions.push({\n label: `$${fn}`,\n kind: CompletionItemKind.Function,\n insertText: `${fn}($0)`,\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\n detail: 'Built-in JSONata function',\n });\n }\n }\n\n // After \"$doc.\" — suggest document paths\n if (/\\$doc\\.\\s*$/.test(textUntilPosition) || /\\$doc\\.[a-zA-Z_]*$/.test(textUntilPosition)) {\n const docPaths = jsonataCompletionData.suggestions?.doc || [];\n for (const path of docPaths) {\n suggestions.push({\n label: path,\n kind: CompletionItemKind.Field,\n insertText: path,\n detail: 'Document field',\n });\n }\n }\n\n // After \"$pv.\" — suggest process variables\n if (/\\$pv\\.\\s*$/.test(textUntilPosition) || /\\$pv\\.[a-zA-Z_]*$/.test(textUntilPosition)) {\n const pvNames = jsonataCompletionData.suggestions?.pv || [];\n for (const name of pvNames) {\n suggestions.push({\n label: name,\n kind: CompletionItemKind.Variable,\n insertText: name,\n detail: 'Process variable',\n });\n }\n }\n\n return { suggestions };\n },\n });\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PluginTranslatePipeModule } from '@valtimo/plugin';\nimport { EditorModule } from '@valtimo/components';\nimport { Subject, debounceTime, takeUntil } from 'rxjs';\nimport { ExpressionFunctionInfo, VariableSuggestions } from '../../models';\nimport { jsonataCompletionData, registerJsonataLanguage } from '../../utils/jsonata-monaco';\n\nimport * as _jsonata from 'jsonata';\nconst jsonata = (_jsonata as any).default || _jsonata;\n\n@Component({\n selector: 'epistola-jsonata-editor',\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, EditorModule],\n template: `\n <div class=\"jsonata-editor\">\n <valtimo-editor\n [model]=\"editorModel\"\n [editorOptions]=\"editorOptions\"\n [disabled]=\"disabled\"\n [heightPx]=\"250\"\n [formatOnLoad]=\"false\"\n (valueChangeEvent)=\"onEditorValueChange($event)\"\n ></valtimo-editor>\n <div class=\"jsonata-editor__footer\">\n <span *ngIf=\"error\" class=\"jsonata-editor__error\">{{ error }}</span>\n <span *ngIf=\"!error && expression\" class=\"jsonata-editor__valid\">&#x2713;</span>\n <span class=\"jsonata-editor__variables\">$doc · $pv · $case</span>\n </div>\n </div>\n `,\n styles: [\n `\n .jsonata-editor__footer {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 0.8em;\n }\n .jsonata-editor__error {\n color: #da1e28;\n }\n .jsonata-editor__valid {\n color: #198038;\n }\n .jsonata-editor__variables {\n margin-left: auto;\n color: #8d8d8d;\n font-family: monospace;\n }\n `,\n ],\n})\nexport class JsonataEditorComponent implements OnChanges, OnDestroy {\n @Input() expression: string = '';\n @Input() disabled: boolean = false;\n @Input() suggestions: VariableSuggestions | null = null;\n @Input() functions: ExpressionFunctionInfo[] = [];\n @Output() expressionChange = new EventEmitter<string>();\n @Output() validChange = new EventEmitter<boolean>();\n\n editorModel: { value: string; language: string } = { value: '', language: 'jsonata' };\n editorOptions: Record<string, any> = {\n minimap: { enabled: false },\n lineNumbers: 'on',\n scrollBeyondLastLine: false,\n fontSize: 13,\n tabSize: 2,\n wordWrap: 'on',\n renderWhitespace: 'none',\n };\n\n error: string | null = null;\n\n private destroy$ = new Subject<void>();\n private validate$ = new Subject<string>();\n private suppressChange = false;\n private languageRegistered = false;\n\n constructor() {\n this.validate$.pipe(debounceTime(300), takeUntil(this.destroy$)).subscribe((value) => {\n this.validateExpression(value);\n });\n\n // Try to register language eagerly if Monaco is already loaded\n this.tryRegisterLanguage();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['expression'] && !this.suppressChange) {\n this.editorModel = { value: this.expression || '', language: 'jsonata' };\n this.validate$.next(this.expression);\n }\n if (changes['suggestions']) {\n jsonataCompletionData.suggestions = this.suggestions;\n }\n if (changes['functions']) {\n jsonataCompletionData.functions = this.functions;\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onEditorValueChange(value: string): void {\n // Register language on first editor event (Monaco is now loaded)\n if (!this.languageRegistered) {\n this.tryRegisterLanguage();\n }\n\n if (this.suppressChange) return;\n this.suppressChange = true;\n this.expression = value;\n this.expressionChange.emit(value);\n this.validate$.next(value);\n setTimeout(() => (this.suppressChange = false));\n }\n\n private tryRegisterLanguage(): void {\n const m = (window as any).monaco;\n if (m) {\n registerJsonataLanguage(m);\n this.languageRegistered = true;\n jsonataCompletionData.suggestions = this.suggestions;\n jsonataCompletionData.functions = this.functions;\n }\n }\n\n private validateExpression(value: string): void {\n if (!value || !value.trim()) {\n this.error = null;\n this.validChange.emit(true);\n return;\n }\n try {\n jsonata(value);\n this.error = null;\n this.validChange.emit(true);\n } catch (e: any) {\n this.error = e.message || 'Invalid expression';\n this.validChange.emit(false);\n }\n }\n}\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PluginTranslatePipeModule } from '@valtimo/plugin';\nimport { TemplateField } from '../../models';\n\n@Component({\n selector: 'epistola-expected-structure',\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule],\n template: `\n <div class=\"expected\">\n <div class=\"expected__header\">\n {{ 'expectedStructure' | pluginTranslate: 'epistola' | async }}\n </div>\n <div *ngIf=\"!templateFields || templateFields.length === 0\" class=\"expected__empty\">\n {{ 'expectedStructureLoading' | pluginTranslate: 'epistola' | async }}\n </div>\n <pre *ngIf=\"templateFields && templateFields.length > 0\" class=\"expected__code\">{{\n structureText\n }}</pre>\n </div>\n `,\n styles: [\n `\n .expected {\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n overflow: hidden;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .expected__header {\n padding: 6px 12px;\n background: #f4f4f4;\n border-bottom: 1px solid #e0e0e0;\n font-size: 0.75em;\n color: #6f6f6f;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n .expected__code {\n flex: 1;\n font-family: 'IBM Plex Mono', monospace;\n font-size: 0.8em;\n line-height: 1.5;\n margin: 0;\n padding: 8px 12px;\n white-space: pre-wrap;\n overflow-y: auto;\n }\n .expected__empty {\n padding: 8px 12px;\n color: #8d8d8d;\n font-size: 0.85em;\n font-style: italic;\n }\n `,\n ],\n})\nexport class ExpectedStructureComponent implements OnChanges {\n @Input() templateFields: TemplateField[] = [];\n\n structureText: string = '{}';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['templateFields']) {\n this.structureText = this.buildStructure(this.templateFields, 0);\n }\n }\n\n private buildStructure(fields: TemplateField[], depth: number): string {\n if (!fields || fields.length === 0) return '{}';\n const indent = ' '.repeat(depth + 1);\n const closing = ' '.repeat(depth);\n\n const lines = fields.map((f) => {\n const req = f.required ? ' (required)' : '';\n if (f.fieldType === 'OBJECT' && f.children?.length) {\n const nested = this.buildStructure(f.children, depth + 1);\n return `${indent}\"${f.name}\": ${nested}${req}`;\n }\n if (f.fieldType === 'ARRAY') {\n if (f.children?.length) {\n const itemStructure = this.buildStructure(f.children, depth + 2);\n return `${indent}\"${f.name}\": [${itemStructure}]${req}`;\n }\n return `${indent}\"${f.name}\": array${req}`;\n }\n return `${indent}\"${f.name}\": ${f.type || 'any'}${req}`;\n });\n\n return `{\\n${lines.join(',\\n')}\\n${closing}}`;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { BuilderField } from '../../../utils/jsonata-converter';\n\n@Component({\n selector: 'epistola-builder-field',\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n <div class=\"builder-field\">\n <div\n class=\"builder-field__name\"\n [class.builder-field__name--clickable]=\"field.children\"\n (click)=\"field.children && collapseToggle.emit(path)\"\n >\n <span *ngIf=\"field.children\" class=\"builder-field__chevron\">{{\n collapsed ? '&#x25B6;' : '&#x25BC;'\n }}</span>\n <span class=\"builder-field__label\">{{ field.name }}</span>\n <span *ngIf=\"required\" class=\"builder-field__required\">*</span>\n <span *ngIf=\"field.children\" class=\"builder-field__type\">(object)</span>\n </div>\n\n <div class=\"builder-field__value\" *ngIf=\"!field.children\">\n <input\n *ngIf=\"field.mode === 'ref'\"\n type=\"text\"\n class=\"builder-field__input\"\n [ngModel]=\"field.value\"\n (ngModelChange)=\"valueChange.emit({ path: path, value: $event })\"\n [disabled]=\"disabled\"\n placeholder=\"$doc.path.to.field\"\n [attr.list]=\"'suggestions-' + path.join('-')\"\n />\n <datalist *ngIf=\"field.mode === 'ref'\" [id]=\"'suggestions-' + path.join('-')\">\n <option *ngFor=\"let s of suggestions\" [value]=\"s\"></option>\n </datalist>\n <input\n *ngIf=\"field.mode === 'raw'\"\n type=\"text\"\n class=\"builder-field__input builder-field__input--raw\"\n [ngModel]=\"field.value\"\n (ngModelChange)=\"valueChange.emit({ path: path, value: $event })\"\n [disabled]=\"disabled\"\n placeholder=\"JSONata expression\"\n />\n <button\n class=\"builder-field__mode-toggle\"\n (click)=\"modeToggle.emit(path)\"\n [disabled]=\"disabled\"\n [title]=\"field.mode === 'ref' ? 'Switch to raw JSONata' : 'Switch to reference'\"\n >\n {{ field.mode === 'ref' ? 'fx' : '·' }}\n </button>\n </div>\n\n <div *ngIf=\"field.children && !collapsed\" class=\"builder-field__children\">\n <epistola-builder-field\n *ngFor=\"let child of field.children; let j = index\"\n [field]=\"child\"\n [path]=\"path.concat(j)\"\n [suggestions]=\"suggestions\"\n [disabled]=\"disabled\"\n [collapsed]=\"isChildCollapsed(j)\"\n [collapsedPaths]=\"collapsedPaths\"\n [required]=\"false\"\n (valueChange)=\"valueChange.emit($event)\"\n (modeToggle)=\"modeToggle.emit($event)\"\n (collapseToggle)=\"collapseToggle.emit($event)\"\n ></epistola-builder-field>\n </div>\n </div>\n `,\n styles: [\n `\n .builder-field {\n margin-bottom: 4px;\n }\n .builder-field__name {\n margin-bottom: 2px;\n }\n .builder-field__name--clickable {\n cursor: pointer;\n user-select: none;\n }\n .builder-field__name--clickable:hover {\n color: #0f62fe;\n }\n .builder-field__chevron {\n font-size: 0.7em;\n margin-right: 4px;\n }\n .builder-field__label {\n font-weight: 500;\n font-size: 0.9em;\n }\n .builder-field__required {\n color: #da1e28;\n margin-left: 2px;\n }\n .builder-field__type {\n color: #8d8d8d;\n font-size: 0.8em;\n margin-left: 4px;\n }\n .builder-field__value {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n .builder-field__input {\n flex: 1;\n padding: 6px 8px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n font-size: 0.85em;\n font-family: 'IBM Plex Mono', monospace;\n }\n .builder-field__input:focus {\n outline: 2px solid #0f62fe;\n border-color: #0f62fe;\n }\n .builder-field__input--raw {\n background: #f4f4f4;\n }\n .builder-field__mode-toggle {\n width: 28px;\n height: 28px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n background: #fff;\n cursor: pointer;\n font-family: monospace;\n font-size: 0.8em;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .builder-field__mode-toggle:hover {\n background: #f4f4f4;\n }\n .builder-field__children {\n border-left: 2px solid #e0e0e0;\n padding-left: 12px;\n margin-top: 4px;\n }\n `,\n ],\n})\nexport class BuilderFieldComponent {\n @Input() field!: BuilderField;\n @Input() path: number[] = [];\n @Input() suggestions: string[] = [];\n @Input() disabled = false;\n @Input() collapsed = false;\n @Input() required = false;\n @Input() collapsedPaths: Set<string> = new Set();\n @Output() valueChange = new EventEmitter<{ path: number[]; value: string }>();\n @Output() modeToggle = new EventEmitter<number[]>();\n @Output() collapseToggle = new EventEmitter<number[]>();\n\n isChildCollapsed(childIndex: number): boolean {\n return this.collapsedPaths.has(this.path.concat(childIndex).join('.'));\n }\n}\n","import * as _jsonata from 'jsonata';\nconst jsonata = (_jsonata as any).default || _jsonata;\n\n/**\n * Represents a field in the visual builder.\n * - mode 'ref': a simple $doc/$pv/$case path reference\n * - mode 'raw': raw JSONata text the builder can't represent visually\n */\nexport interface BuilderField {\n name: string;\n mode: 'ref' | 'raw';\n value: string;\n children?: BuilderField[];\n}\n\n/**\n * Parse a JSONata expression into BuilderField array.\n * Only supports top-level object literals with simple path references or nested objects.\n * Anything else is stored as raw JSONata text.\n */\nexport function parseJsonataToBuilder(expression: string): BuilderField[] {\n if (!expression || !expression.trim()) {\n return [];\n }\n\n try {\n const ast = (jsonata(expression) as any).ast();\n if (ast.type === 'unary' && ast.value === '{') {\n return parseObjectEntries(ast.lhs, expression);\n }\n // Not a top-level object — can't represent in builder\n return [{ name: '_root', mode: 'raw', value: expression }];\n } catch {\n // Invalid JSONata — return as single raw field\n return [{ name: '_root', mode: 'raw', value: expression }];\n }\n}\n\n/**\n * Convert BuilderField array back to a JSONata expression string.\n */\nexport function builderToJsonata(fields: BuilderField[]): string {\n if (fields.length === 0) {\n return '';\n }\n // Special case: single _root raw field means the whole expression is raw\n if (fields.length === 1 && fields[0].name === '_root' && fields[0].mode === 'raw') {\n return fields[0].value;\n }\n\n const entries = fields.map((field) => formatFieldEntry(field)).filter(Boolean);\n return `{\\n${entries.join(',\\n')}\\n}`;\n}\n\n/**\n * Check if a JSONata expression can be fully represented by the builder\n * (i.e., all fields are simple refs or nested objects of simple refs).\n */\nexport function isBuilderCompatible(expression: string): boolean {\n const fields = parseJsonataToBuilder(expression);\n return fields.every((f) => f.mode === 'ref' || (f.children && f.children.every(isFieldSimple)));\n}\n\nfunction isFieldSimple(field: BuilderField): boolean {\n if (field.mode === 'raw') return false;\n if (field.children) return field.children.every(isFieldSimple);\n return true;\n}\n\nfunction parseObjectEntries(entries: any[][], source: string): BuilderField[] {\n return entries.map(([keyNode, valueNode]) => {\n const name = keyNode.value as string;\n return classifyValue(name, valueNode, source);\n });\n}\n\nfunction classifyValue(name: string, node: any, source: string): BuilderField {\n // Simple path reference: $doc.x.y, $pv.x, $case.x — store as JSONata directly\n if (node.type === 'path' && node.steps?.length > 0 && node.steps[0].type === 'variable') {\n const varName = node.steps[0].value; // doc, pv, case\n if (['doc', 'pv', 'case'].includes(varName)) {\n const path = node.steps\n .slice(1)\n .map((s: any) => s.value)\n .join('.');\n return { name, mode: 'ref', value: `$${varName}.${path}` };\n }\n }\n\n // String literal\n if (node.type === 'string') {\n return { name, mode: 'ref', value: `\"${node.value}\"` };\n }\n\n // Number literal\n if (node.type === 'number') {\n return { name, mode: 'ref', value: String(node.value) };\n }\n\n // Boolean literal (value node)\n if (node.type === 'value' && typeof node.value === 'boolean') {\n return { name, mode: 'ref', value: String(node.value) };\n }\n\n // Nested object\n if (node.type === 'unary' && node.value === '{' && node.lhs) {\n const children = parseObjectEntries(node.lhs, source);\n return { name, mode: 'ref', value: '', children };\n }\n\n // Anything else: extract raw source text\n const raw = extractSourceFragment(node, source);\n return { name, mode: 'raw', value: raw };\n}\n\n/**\n * Extract the source text for a node using position info.\n * Falls back to a generic representation if positions aren't useful.\n */\nfunction extractSourceFragment(node: any, source: string): string {\n // Try to reconstruct from AST for common patterns\n if (node.type === 'condition') {\n const cond = reconstructExpression(node.condition);\n const then = reconstructExpression(node.then);\n const els = reconstructExpression(node.else);\n return `${cond} ? ${then} : ${els}`;\n }\n if (node.type === 'binary') {\n const left = reconstructExpression(node.lhs);\n const right = reconstructExpression(node.rhs);\n return `${left} ${node.value} ${right}`;\n }\n if (node.type === 'function') {\n const name = reconstructExpression(node.procedure);\n const args = (node.arguments || []).map(reconstructExpression).join(', ');\n return `${name}(${args})`;\n }\n // Generic fallback\n return reconstructExpression(node);\n}\n\nfunction reconstructExpression(node: any): string {\n if (!node) return '';\n if (node.type === 'string') return `\"${node.value}\"`;\n if (node.type === 'number') return String(node.value);\n if (node.type === 'value') return String(node.value);\n if (node.type === 'path' && node.steps) {\n return node.steps.map((s: any) => (s.type === 'variable' ? `$${s.value}` : s.value)).join('.');\n }\n if (node.type === 'binary') {\n return `${reconstructExpression(node.lhs)} ${node.value} ${reconstructExpression(node.rhs)}`;\n }\n if (node.type === 'condition') {\n return `${reconstructExpression(node.condition)} ? ${reconstructExpression(node.then)} : ${reconstructExpression(node.else)}`;\n }\n if (node.type === 'function') {\n const proc = reconstructExpression(node.procedure);\n const args = (node.arguments || []).map(reconstructExpression).join(', ');\n return `${proc}(${args})`;\n }\n if (node.type === 'unary' && node.value === '{') {\n const entries = (node.lhs || [])\n .map(([k, v]: any[]) => `\"${k.value}\": ${reconstructExpression(v)}`)\n .join(', ');\n return `{${entries}}`;\n }\n return '...';\n}\n\nfunction formatFieldEntry(field: BuilderField, indent: string = ' '): string {\n if (field.children && field.children.length > 0) {\n const childEntries = field.children.map((c) => formatFieldEntry(c, indent + ' ')).join(',\\n');\n return `${indent}\"${field.name}\": {\\n${childEntries}\\n${indent}}`;\n }\n\n // Value is already valid JSONata (e.g. $doc.x.y, \"string\", 42, or raw expression)\n const value = field.value || 'null';\n return `${indent}\"${field.name}\": ${value}`;\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PluginTranslatePipeModule } from '@valtimo/plugin';\nimport { TemplateField, VariableSuggestions } from '../../models';\nimport { BuilderFieldComponent } from './builder-field/builder-field.component';\nimport {\n BuilderField,\n builderToJsonata,\n parseJsonataToBuilder,\n} from '../../utils/jsonata-converter';\n\n@Component({\n selector: 'epistola-mapping-builder',\n standalone: true,\n imports: [CommonModule, FormsModule, PluginTranslatePipeModule, BuilderFieldComponent],\n template: `\n <div class=\"mapping-builder\">\n <div\n *ngIf=\"fields.length === 0 && (!templateFields || templateFields.length === 0)\"\n class=\"mapping-builder__empty\"\n >\n {{ 'noTemplateFields' | pluginTranslate: 'epistola' | async }}\n </div>\n\n <epistola-builder-field\n *ngFor=\"let field of fields; let i = index\"\n [field]=\"field\"\n [path]=\"[i]\"\n [suggestions]=\"allSuggestions\"\n [disabled]=\"disabled\"\n [collapsed]=\"isCollapsed([i])\"\n [collapsedPaths]=\"collapsedPaths\"\n [required]=\"isRequired(field.name)\"\n (valueChange)=\"onNestedValueChange($event.path, $event.value)\"\n (modeToggle)=\"onNestedModeToggle($event)\"\n (collapseToggle)=\"toggleCollapse($event)\"\n ></epistola-builder-field>\n </div>\n `,\n styles: [\n `\n .mapping-builder__empty {\n color: #6f6f6f;\n font-size: 0.9em;\n padding: 12px 0;\n }\n .mapping-builder__row {\n margin-bottom: 8px;\n }\n .mapping-builder__row--child {\n margin-left: 20px;\n margin-bottom: 4px;\n }\n .mapping-builder__name {\n margin-bottom: 2px;\n }\n .mapping-builder__name--clickable {\n cursor: pointer;\n user-select: none;\n }\n .mapping-builder__name--clickable:hover {\n color: #0f62fe;\n }\n .mapping-builder__chevron {\n font-size: 0.7em;\n margin-right: 4px;\n }\n .mapping-builder__field-name {\n font-weight: 500;\n font-size: 0.9em;\n }\n .mapping-builder__required {\n color: #da1e28;\n margin-left: 2px;\n }\n .mapping-builder__type {\n color: #8d8d8d;\n font-size: 0.8em;\n margin-left: 4px;\n }\n .mapping-builder__value {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n .mapping-builder__input {\n flex: 1;\n padding: 6px 8px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n font-size: 0.85em;\n font-family: 'IBM Plex Mono', monospace;\n }\n .mapping-builder__input:focus {\n outline: 2px solid #0f62fe;\n border-color: #0f62fe;\n }\n .mapping-builder__input--raw {\n background: #f4f4f4;\n }\n .mapping-builder__mode-toggle {\n width: 28px;\n height: 28px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n background: #fff;\n cursor: pointer;\n font-family: monospace;\n font-size: 0.8em;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .mapping-builder__mode-toggle:hover {\n background: #f4f4f4;\n }\n .mapping-builder__children {\n border-left: 2px solid #e0e0e0;\n padding-left: 12px;\n margin-top: 4px;\n }\n `,\n ],\n})\nexport class MappingBuilderComponent implements OnChanges {\n @Input() expression: string = '';\n @Input() templateFields: TemplateField[] = [];\n @Input() suggestions: VariableSuggestions | null = null;\n @Input() disabled: boolean = false;\n @Output() expressionChange = new EventEmitter<string>();\n\n fields: BuilderField[] = [];\n allSuggestions: string[] = [];\n collapsedPaths = new Set<string>();\n private initialCollapseApplied = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n // Skip re-parse only when expression alone changed (from our own emit)\n const expressionChanged = !!changes['expression'];\n const templateFieldsChanged = !!changes['templateFields'];\n\n if (expressionChanged && !templateFieldsChanged && !changes['expression'].firstChange) {\n return; // Don't re-parse when we emit changes ourselves\n }\n if (expressionChanged || templateFieldsChanged) {\n this.rebuildFields();\n if (!this.initialCollapseApplied && this.fields.length > 0) {\n this.collapseAll();\n this.initialCollapseApplied = true;\n }\n }\n if (changes['suggestions']) {\n this.buildSuggestionList();\n }\n }\n\n onNestedValueChange(path: number[], value: string): void {\n const field = this.getFieldAtPath(path);\n if (field) {\n field.value = value;\n this.emit();\n }\n }\n\n onNestedModeToggle(path: number[]): void {\n const field = this.getFieldAtPath(path);\n if (field) {\n field.mode = field.mode === 'ref' ? 'raw' : 'ref';\n this.emit();\n }\n }\n\n isRequired(fieldName: string): boolean {\n return this.templateFields?.find((tf) => tf.name === fieldName)?.required ?? false;\n }\n\n isCollapsed(path: number[]): boolean {\n return this.collapsedPaths.has(path.join('.'));\n }\n\n toggleCollapse(path: number[]): void {\n const key = path.join('.');\n if (this.collapsedPaths.has(key)) {\n this.collapsedPaths.delete(key);\n } else {\n this.collapsedPaths.add(key);\n }\n }\n\n private collapseAll(): void {\n this.collapsedPaths.clear();\n this.fields.forEach((field, i) => {\n if (field.children) {\n this.collapsedPaths.add(String(i));\n this.collapseChildren(field.children, [i]);\n }\n });\n }\n\n private collapseChildren(children: BuilderField[], parentPath: number[]): void {\n children.forEach((child, j) => {\n if (child.children) {\n this.collapsedPaths.add([...parentPath, j].join('.'));\n this.collapseChildren(child.children, [...parentPath, j]);\n }\n });\n }\n\n private getFieldAtPath(path: number[]): BuilderField | null {\n if (path.length === 0) return null;\n let current: BuilderField = this.fields[path[0]];\n for (let i = 1; i < path.length; i++) {\n if (!current.children) return null;\n current = current.children[path[i]];\n }\n return current;\n }\n\n private emit(): void {\n const jsonata = builderToJsonata(this.fields);\n this.expressionChange.emit(jsonata);\n }\n\n /**\n * Ensure all template fields have a corresponding builder field.\n * Adds missing fields with empty values.\n */\n private buildSuggestionList(): void {\n if (!this.suggestions) {\n this.allSuggestions = [];\n return;\n }\n const docSuggestions = (this.suggestions.doc || []).map((p) => `$doc.${p}`);\n const pvSuggestions = (this.suggestions.pv || []).map((p) => `$pv.${p}`);\n this.allSuggestions = [...docSuggestions, ...pvSuggestions];\n }\n\n /**\n * Rebuild fields using template fields as the source of truth.\n * Expression values fill in where available; unmapped fields show empty.\n */\n private rebuildFields(): void {\n const parsed = parseJsonataToBuilder(this.expression);\n const parsedByName = new Map(parsed.map((f) => [f.name, f]));\n\n if (!this.templateFields || this.templateFields.length === 0) {\n // No template fields yet — use whatever we parsed\n this.fields = parsed;\n return;\n }\n\n // Template fields drive the structure\n this.fields = this.templateFields.map((tf) => {\n const existing = parsedByName.get(tf.name);\n if (existing) {\n return existing;\n }\n if (tf.fieldType === 'OBJECT' && tf.children?.length) {\n return {\n name: tf.name,\n mode: 'ref' as const,\n value: '',\n children: tf.children.map((c) => ({ name: c.name, mode: 'ref' as const, value: '' })),\n };\n }\n return { name: tf.name, mode: 'ref' as const, value: '' };\n });\n\n // Include extra fields from expression not in the template schema\n for (const p of parsed) {\n if (!this.templateFields.find((tf) => tf.name === p.name)) {\n this.fields.push(p);\n }\n }\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PluginTranslatePipeModule } from '@valtimo/plugin';\nimport { Subject, debounceTime, takeUntil } from 'rxjs';\nimport { EvaluationResult, TemplateField } from '../../models';\nimport { EpistolaPluginService } from '../../services';\n\n@Component({\n selector: 'epistola-mapping-preview',\n standalone: true,\n imports: [CommonModule, FormsModule, PluginTranslatePipeModule],\n template: `\n <div class=\"preview\">\n <div class=\"preview__header\">\n <span class=\"preview__title\">{{\n 'previewTitle' | pluginTranslate: 'epistola' | async\n }}</span>\n <div class=\"preview__controls\">\n <input\n type=\"text\"\n class=\"preview__doc-input\"\n [ngModel]=\"documentId\"\n (ngModelChange)=\"documentId = $event\"\n [placeholder]=\"'previewDocPlaceholder' | pluginTranslate: 'epistola' | async\"\n />\n <button\n class=\"preview__run-btn\"\n (click)=\"runPreview()\"\n [disabled]=\"!documentId || !expression || loading\"\n >\n &#x25B6;\n </button>\n </div>\n </div>\n\n <div class=\"preview__panels\">\n <!-- Expected structure -->\n <div class=\"preview__panel\">\n <div class=\"preview__panel-label\">\n {{ 'previewExpected' | pluginTranslate: 'epistola' | async }}\n </div>\n <pre class=\"preview__code\">{{ expectedJson }}</pre>\n </div>\n\n <!-- Produced output -->\n <div class=\"preview__panel\">\n <div class=\"preview__panel-label\">\n {{ 'previewProduced' | pluginTranslate: 'epistola' | async }}\n </div>\n <div *ngIf=\"loading\" class=\"preview__loading\">...</div>\n <pre *ngIf=\"!loading && result?.success\" class=\"preview__code\">{{\n result.result | json\n }}</pre>\n <div *ngIf=\"!loading && result && !result.success\" class=\"preview__error\">\n {{ result.error }}\n </div>\n <div *ngIf=\"!loading && !result\" class=\"preview__placeholder\">\n {{ 'previewRunHint' | pluginTranslate: 'epistola' | async }}\n </div>\n </div>\n </div>\n\n <!-- Missing fields warning -->\n <div *ngIf=\"missingRequired.length > 0\" class=\"preview__warnings\">\n <span class=\"preview__warning-icon\">&#x26A0;</span>\n {{ 'previewMissing' | pluginTranslate: 'epistola' | async }}:\n <strong>{{ missingRequired.join(', ') }}</strong>\n </div>\n </div>\n `,\n styles: [\n `\n .preview {\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n margin-top: 16px;\n overflow: hidden;\n }\n .preview__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: #f4f4f4;\n border-bottom: 1px solid #e0e0e0;\n }\n .preview__title {\n font-weight: 600;\n font-size: 0.85em;\n }\n .preview__controls {\n display: flex;\n gap: 4px;\n }\n .preview__doc-input {\n padding: 4px 8px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n font-size: 0.8em;\n width: 220px;\n font-family: monospace;\n }\n .preview__run-btn {\n padding: 4px 10px;\n border: 1px solid #0f62fe;\n border-radius: 4px;\n background: #0f62fe;\n color: white;\n cursor: pointer;\n font-size: 0.8em;\n }\n .preview__run-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n .preview__panels {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1px;\n background: #e0e0e0;\n }\n .preview__panel {\n background: white;\n padding: 8px 12px;\n min-height: 80px;\n }\n .preview__panel-label {\n font-size: 0.75em;\n color: #6f6f6f;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n }\n .preview__code {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 0.8em;\n line-height: 1.4;\n margin: 0;\n white-space: pre-wrap;\n word-break: break-word;\n }\n .preview__loading {\n color: #8d8d8d;\n }\n .preview__error {\n color: #da1e28;\n font-size: 0.85em;\n }\n .preview__placeholder {\n color: #8d8d8d;\n font-size: 0.85em;\n font-style: italic;\n }\n .preview__warnings {\n padding: 8px 12px;\n background: #fff8e1;\n border-top: 1px solid #e0e0e0;\n font-size: 0.85em;\n color: #663c00;\n }\n .preview__warning-icon {\n margin-right: 4px;\n }\n `,\n ],\n})\nexport class MappingPreviewComponent implements OnChanges, OnDestroy {\n @Input() expression: string = '';\n @Input() templateFields: TemplateField[] = [];\n @Input() caseDefinitionKey: string | null = null;\n\n documentId: string = '';\n loading = false;\n result: EvaluationResult | null = null;\n expectedJson: string = '';\n missingRequired: string[] = [];\n\n private destroy$ = new Subject<void>();\n private evaluate$ = new Subject<void>();\n\n constructor(private readonly epistolaPluginService: EpistolaPluginService) {\n this.evaluate$.pipe(debounceTime(300), takeUntil(this.destroy$)).subscribe(() => {\n this.doEvaluate();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['templateFields']) {\n this.expectedJson = this.buildExpectedJson();\n }\n if (changes['expression'] || changes['templateFields']) {\n this.checkMissingRequired();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n runPreview(): void {\n this.evaluate$.next();\n }\n\n private doEvaluate(): void {\n if (!this.documentId || !this.expression) return;\n this.loading = true;\n this.epistolaPluginService.evaluateMapping(this.expression, this.documentId).subscribe({\n next: (result) => {\n this.result = result;\n this.loading = false;\n if (result.success) {\n this.checkMissingRequired();\n }\n },\n error: (err) => {\n this.result = { success: false, result: null, error: err.message || 'Request failed' };\n this.loading = false;\n },\n });\n }\n\n private buildExpectedJson(): string {\n if (!this.templateFields || this.templateFields.length === 0) return '{}';\n const obj: Record<string, string> = {};\n for (const field of this.templateFields) {\n const type = field.type || 'any';\n obj[field.name] = field.required ? `${type} (required)` : type;\n }\n return JSON.stringify(obj, null, 2);\n }\n\n private checkMissingRequired(): void {\n if (!this.templateFields) {\n this.missingRequired = [];\n return;\n }\n const requiredFields = this.templateFields.filter((f) => f.required).map((f) => f.name);\n if (!this.result?.success || !this.result.result) {\n // If no evaluation result yet, check statically from expression\n this.missingRequired = requiredFields;\n return;\n }\n const producedKeys = new Set(Object.keys(this.result.result));\n this.missingRequired = requiredFields.filter((f) => !producedKeys.has(f));\n }\n}\n","import { OverrideMapping } from '../override-builder/override-builder.component';\n\nexport const FORM_REF_PREFIX = 'form:';\n\n/**\n * Detect if a string value is a JSONata expression (vs a plain literal).\n * Checks for characters that indicate JSONata operators: $, &, (, {, ?, [\n */\nexport function isExpression(value: string): boolean {\n return /[$&({?\\[]/.test(value);\n}\n\n/**\n * Expand dot-notation keys into nested objects.\n * e.g. { \"beslissing.tekst\": \"value\" } -> { beslissing: { tekst: \"value\" } }\n */\nexport function expandDotNotation(flat: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = {};\n for (const [key, value] of Object.entries(flat)) {\n const parts = key.split('.');\n let current = result;\n for (let i = 0; i < parts.length - 1; i++) {\n if (!current[parts[i]] || typeof current[parts[i]] !== 'object') {\n current[parts[i]] = {};\n }\n current = current[parts[i]];\n }\n current[parts[parts.length - 1]] = value;\n }\n return result;\n}\n\n/**\n * Given an override mapping (scope -> { inputPath -> \"form:<componentKey>\" })\n * and form data, produce the inputOverrides object for the backend.\n * The \"form:\" prefix identifies form field references; the remainder is the Formio component key.\n */\nexport function computeInputOverrides(\n mapping: OverrideMapping,\n formData: Record<string, any>,\n): Record<string, any> {\n const result: Record<string, any> = {};\n for (const [scope, fields] of Object.entries(mapping)) {\n if (scope !== 'doc' && scope !== 'pv') continue;\n const flatOverrides: Record<string, any> = {};\n for (const [inputPath, ref] of Object.entries(fields)) {\n const formFieldKey = String(ref).startsWith(FORM_REF_PREFIX)\n ? String(ref).substring(FORM_REF_PREFIX.length)\n : String(ref);\n const value = formData[formFieldKey];\n if (value !== undefined) {\n flatOverrides[inputPath] = value;\n }\n }\n if (Object.keys(flatOverrides).length > 0) {\n result[scope] = expandDotNotation(flatOverrides);\n }\n }\n return result;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n FunctionConfigurationComponent,\n PluginConfigurationData,\n PluginTranslatePipeModule,\n} from '@valtimo/plugin';\nimport { FormModule, FormOutput, InputModule, SelectItem, SelectModule } from '@valtimo/components';\nimport { CaseManagementParams, ManagementContext } from '@valtimo/shared';\nimport { ProcessLinkStateService } from '@valtimo/process-link';\nimport { BehaviorSubject, combineLatest, merge, Observable, of, Subject, Subscription } from 'rxjs';\nimport {\n catchError,\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\nimport {\n AsyncResource,\n errorResource,\n ExpressionFunctionInfo,\n GenerateDocumentConfig,\n initialResource,\n JsonataFieldError,\n loadingResource,\n successResource,\n TemplateField,\n ValidateJsonataRequest,\n VariableSuggestions,\n} from '../../models';\nimport { EpistolaPluginService } from '../../services';\nimport { JsonataEditorComponent } from '../jsonata-editor/jsonata-editor.component';\nimport { ExpectedStructureComponent } from '../expected-structure/expected-structure.component';\nimport { MappingBuilderComponent } from '../mapping-builder/mapping-builder.component';\nimport { MappingPreviewComponent } from '../mapping-preview/mapping-preview.component';\nimport { isExpression } from '../epistola-document-preview/preview-utils';\n\nexport type VariantSelectionMode = 'explicit' | 'attributes';\n\n@Component({\n selector: 'epistola-generate-document-configuration',\n templateUrl: './generate-document-configuration.component.html',\n styleUrls: ['./generate-document-configuration.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n PluginTranslatePipeModule,\n FormModule,\n InputModule,\n SelectModule,\n ExpectedStructureComponent,\n JsonataEditorComponent,\n MappingBuilderComponent,\n MappingPreviewComponent,\n ],\n})\nexport class GenerateDocumentConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<GenerateDocumentConfig>;\n @Input() selectedPluginConfigurationData$?: Observable<PluginConfigurationData>;\n @Input() context$?: Observable<[ManagementContext, CaseManagementParams]>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<GenerateDocumentConfig> =\n new EventEmitter<GenerateDocumentConfig>();\n\n catalogs$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n templates$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n variants$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n environments$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n templateFields$ = new BehaviorSubject<AsyncResource<TemplateField[]>>(initialResource([]));\n\n dataMapping$ = new BehaviorSubject<string>('');\n mappingMode: 'simple' | 'advanced' = 'simple';\n toolsCollapsed = true;\n activeToolTab: 'schema' | 'preview' = 'preview';\n\n outputFormatOptions: SelectItem[] = [\n { id: 'PDF', text: 'PDF' },\n { id: 'HTML', text: 'HTML' },\n ];\n\n readonly selectedCatalogId$ = new BehaviorSubject<string>('');\n /** Composite ID: \"catalogId/templateId\" */\n readonly selectedTemplateId$ = new BehaviorSubject<string>('');\n readonly selectedVariantId$ = new BehaviorSubject<string>('');\n\n variantSelectionMode: VariantSelectionMode = 'explicit';\n variantIdExpressionMode = false;\n variantIdExpression = '';\n filenameExpressionMode = false;\n filenameExpression = '';\n variantAttributeEntries: {\n key: string;\n value: string;\n required: boolean;\n _customKey?: boolean;\n _expressionMode?: boolean;\n }[] = [];\n availableAttributeKeys: string[] = [];\n caseDefinitionKey: string | null = null;\n processVariables: string[] = [];\n expressionFunctions: ExpressionFunctionInfo[] = [];\n variableSuggestions: VariableSuggestions | null = null;\n requiredFieldsStatus: { mapped: number; total: number } = { mapped: 0, total: 0 };\n prefillDataMapping: Record<string, any> = {};\n validationErrors$ = new BehaviorSubject<JsonataFieldError[]>([]);\n\n private readonly destroy$ = new Subject<void>();\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<Partial<GenerateDocumentConfig> | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n private pluginConfigurationId$ = new BehaviorSubject<string>('');\n\n /** Resolves once with the prefill config (or empty config if none). */\n private prefill$!: Observable<GenerateDocumentConfig | null>;\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly processLinkStateService: ProcessLinkStateService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit(): void {\n this.prefill$ = this.resolvePrefill$();\n\n this.initContext();\n this.initPluginConfiguration();\n this.initCascade();\n this.loadExpressionFunctions();\n this.openSaveSubscription();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as Partial<\n GenerateDocumentConfig & { catalogId: string; templateId: string }\n >;\n this.formValue$.next(formValue);\n\n // When catalog changes, reset template and variant selection\n if (formValue.catalogId && formValue.catalogId !== this.selectedCatalogId$.getValue()) {\n this.selectedCatalogId$.next(formValue.catalogId);\n this.selectedTemplateId$.next('');\n this.selectedVariantId$.next('');\n }\n\n // templateId from v-select is the template ID within the selected catalog\n if (formValue.templateId && formValue.templateId !== this.selectedTemplateId$.getValue()) {\n this.selectedTemplateId$.next(formValue.templateId);\n this.selectedVariantId$.next('');\n }\n\n if (formValue.variantId && formValue.variantId !== this.selectedVariantId$.getValue()) {\n this.selectedVariantId$.next(formValue.variantId);\n }\n\n this.handleValid(formValue);\n }\n\n onDataMappingChange(expression: string): void {\n this.dataMapping$.next(expression);\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n onRequiredFieldsStatusChange(status: { mapped: number; total: number }): void {\n this.requiredFieldsStatus = status;\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n onVariantSelectionModeChange(mode: VariantSelectionMode): void {\n this.variantSelectionMode = mode;\n if (mode === 'attributes' && this.variantAttributeEntries.length === 0) {\n this.variantAttributeEntries = [{ key: '', value: '', required: true }];\n }\n this.revalidate();\n }\n\n addAttributeEntry(): void {\n this.variantAttributeEntries = [\n ...this.variantAttributeEntries,\n { key: '', value: '', required: true },\n ];\n this.revalidate();\n }\n\n removeAttributeEntry(index: number): void {\n this.variantAttributeEntries = this.variantAttributeEntries.filter((_, i) => i !== index);\n this.revalidate();\n }\n\n onAttributeEntryChange(): void {\n this.revalidate();\n }\n\n onVariantIdExpressionChange(): void {\n this.revalidate();\n }\n\n onFilenameExpressionChange(): void {\n this.revalidate();\n }\n\n onKeySelected(\n entry: { key: string; value: string; required: boolean; _customKey?: boolean },\n value: string,\n ): void {\n if (value === '__custom__') {\n entry._customKey = true;\n entry.key = '';\n } else {\n entry.key = value;\n }\n this.onAttributeEntryChange();\n }\n\n cancelCustomKey(entry: {\n key: string;\n value: string;\n required: boolean;\n _customKey?: boolean;\n }): void {\n entry._customKey = false;\n entry.key = '';\n this.onAttributeEntryChange();\n }\n\n private revalidate(): void {\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n private formatAttributes(attributes: Record<string, string>): string {\n const entries = Object.entries(attributes || {});\n if (entries.length === 0) return '';\n return ` (${entries.map(([k, v]) => `${k}=${v}`).join(', ')})`;\n }\n\n /**\n * Creates a shared observable that resolves once with the prefill config\n * (or null if no prefill is provided). This is used to seed the cascade\n * with initial selection values before any loading starts.\n */\n private resolvePrefill$(): Observable<GenerateDocumentConfig | null> {\n if (!this.prefillConfiguration$) {\n return of(null).pipe(shareReplay(1));\n }\n return this.prefillConfiguration$.pipe(take(1), shareReplay(1));\n }\n\n private initContext(): void {\n if (this.context$) {\n this.context$\n .pipe(\n takeUntil(this.destroy$),\n filter(([context]) => context === 'case'),\n )\n .subscribe(([, params]) => {\n this.caseDefinitionKey = params.caseDefinitionKey;\n this.cdr.markForCheck();\n });\n }\n }\n\n private initPluginConfiguration(): void {\n const sources: Observable<string>[] = [];\n\n if (this.selectedPluginConfigurationData$) {\n sources.push(\n this.selectedPluginConfigurationData$.pipe(\n filter((config) => !!config?.configurationId),\n map((config) => config.configurationId),\n ),\n );\n }\n\n sources.push(\n this.processLinkStateService.selectedProcessLink$.pipe(\n filter((processLink) => !!processLink?.pluginConfigurationId),\n map((processLink) => processLink.pluginConfigurationId!),\n ),\n );\n\n merge(...sources)\n .pipe(takeUntil(this.destroy$))\n .subscribe((configurationId) => {\n this.pluginConfigurationId$.next(configurationId);\n });\n }\n\n /**\n * Sets up the entire reactive cascade:\n *\n * pluginConfigurationId$ → catalogs (+ environments independently)\n * prefill + catalogs loaded → seed selectedCatalogId$\n * selectedCatalogId$ → templates (+ attributes)\n * prefill + templates loaded → seed selectedTemplateId$\n * selectedTemplateId$ → variants + templateFields\n * prefill + templateFields loaded → seed dataMapping\n */\n private initCascade(): void {\n const configId$ = this.pluginConfigurationId$.pipe(\n filter((id) => !!id),\n distinctUntilChanged(),\n );\n\n // ── Catalogs: load when pluginConfigurationId changes ──\n configId$\n .pipe(\n takeUntil(this.destroy$),\n tap(() => this.catalogs$.next(loadingResource(this.catalogs$.getValue().data))),\n switchMap((configurationId) =>\n this.epistolaPluginService.getCatalogs(configurationId).pipe(\n map((catalogs) => successResource(catalogs.map((c) => ({ id: c.id, text: c.name })))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load catalogs'))),\n ),\n ),\n )\n .subscribe((resource) => this.catalogs$.next(resource));\n\n // ── Environments: load when pluginConfigurationId changes (independent) ──\n configId$\n .pipe(\n takeUntil(this.destroy$),\n tap(() => this.environments$.next(loadingResource(this.environments$.getValue().data))),\n switchMap((configurationId) =>\n this.epistolaPluginService.getEnvironments(configurationId).pipe(\n map((envs) => successResource(envs.map((e) => ({ id: e.id, text: e.name })))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load environments'))),\n ),\n ),\n )\n .subscribe((resource) => this.environments$.next(resource));\n\n // ── Seed selectedCatalogId$ from prefill once catalogs are loaded ──\n combineLatest([\n this.prefill$.pipe(filter((config) => !!config?.catalogId)),\n this.catalogs$.pipe(filter((c) => !c.loading && c.data.length > 0)),\n ])\n .pipe(takeUntil(this.destroy$), take(1))\n .subscribe(([config]) => {\n this.selectedCatalogId$.next(config!.catalogId);\n });\n\n // ── Templates: load when catalogId changes ──\n const catalogId$ = this.selectedCatalogId$.pipe(\n filter((id) => !!id),\n distinctUntilChanged(),\n );\n\n combineLatest([configId$, catalogId$])\n .pipe(\n takeUntil(this.destroy$),\n tap(() => this.templates$.next(loadingResource(this.templates$.getValue().data))),\n switchMap(([configurationId, catalogId]) =>\n this.epistolaPluginService.getTemplates(configurationId, catalogId).pipe(\n map((templates) => successResource(templates.map((t) => ({ id: t.id, text: t.name })))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load templates'))),\n ),\n ),\n )\n .subscribe((resource) => this.templates$.next(resource));\n\n // ── Attributes: load when catalogId changes ──\n combineLatest([configId$, catalogId$])\n .pipe(\n takeUntil(this.destroy$),\n switchMap(([configurationId, catalogId]) =>\n this.epistolaPluginService\n .getAttributes(configurationId, catalogId)\n .pipe(catchError(() => of([]))),\n ),\n )\n .subscribe((attributes) => {\n this.availableAttributeKeys = attributes.map((a) => a.key).sort();\n this.cdr.markForCheck();\n });\n\n // ── Seed selectedTemplateId$ from prefill once templates are loaded ──\n combineLatest([\n this.prefill$.pipe(filter((config) => !!config?.templateId)),\n this.templates$.pipe(filter((t) => !t.loading && t.data.length > 0)),\n ])\n .pipe(takeUntil(this.destroy$), take(1))\n .subscribe(([config]) => {\n this.selectedTemplateId$.next(config!.templateId);\n });\n\n // ── Variants: load when templateId changes ──\n const templateId$ = this.selectedTemplateId$.pipe(\n filter((id) => !!id),\n distinctUntilChanged(),\n );\n\n combineLatest([configId$, catalogId$, templateId$])\n .pipe(\n takeUntil(this.destroy$),\n tap(() => this.variants$.next(loadingResource(this.variants$.getValue().data))),\n switchMap(([configurationId, catalogId, templateId]) =>\n this.epistolaPluginService.getVariants(configurationId, templateId, catalogId).pipe(\n map((variants) =>\n successResource(\n variants.map((v) => ({\n id: v.id,\n text: v.name + this.formatAttributes(v.attributes),\n })),\n ),\n ),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load variants'))),\n ),\n ),\n )\n .subscribe((resource) => this.variants$.next(resource));\n\n // ── Template fields: load when templateId changes ──\n combineLatest([configId$, catalogId$, templateId$])\n .pipe(\n takeUntil(this.destroy$),\n tap(() => {\n this.templateFields$.next(loadingResource(this.templateFields$.getValue().data));\n this.loadProcessVariables();\n this.loadVariableSuggestions();\n }),\n switchMap(([configurationId, catalogId, templateId]) =>\n this.epistolaPluginService\n .getTemplateDetails(configurationId, templateId, catalogId)\n .pipe(\n map((details) => successResource(details.fields || [])),\n catchError(() =>\n of(errorResource<TemplateField[]>([], 'Failed to load template fields')),\n ),\n ),\n ),\n )\n .subscribe((resource) => this.templateFields$.next(resource));\n\n // ── Seed variant + dataMapping from prefill once templateFields are loaded ──\n combineLatest([\n this.prefill$.pipe(filter((config) => !!config?.templateId)),\n this.templateFields$.pipe(filter((tf) => !tf.loading && tf.data.length > 0)),\n ])\n .pipe(takeUntil(this.destroy$), take(1))\n .subscribe(([config]) => {\n if (!config) return;\n\n // Apply variant prefill\n if (\n config.variantAttributes &&\n (Array.isArray(config.variantAttributes)\n ? config.variantAttributes.length > 0\n : Object.keys(config.variantAttributes).length > 0)\n ) {\n this.variantSelectionMode = 'attributes';\n if (Array.isArray(config.variantAttributes)) {\n this.variantAttributeEntries = config.variantAttributes.map((e) => ({\n key: e.key,\n value: e.value,\n required: e.required !== false,\n _expressionMode: isExpression(e.value),\n }));\n } else {\n this.variantAttributeEntries = Object.entries(config.variantAttributes as any).map(\n ([key, value]) => ({ key, value: String(value), required: true }),\n );\n }\n } else if (config.variantId) {\n this.variantSelectionMode = 'explicit';\n if (isExpression(config.variantId)) {\n this.variantIdExpressionMode = true;\n this.variantIdExpression = config.variantId;\n } else {\n this.selectedVariantId$.next(config.variantId);\n }\n }\n\n // Detect expression mode for filename\n if (config.filename && isExpression(config.filename)) {\n this.filenameExpressionMode = true;\n this.filenameExpression = config.filename;\n }\n\n // Apply dataMapping prefill (JSONata expression string)\n if (config.dataMapping) {\n const expr = typeof config.dataMapping === 'string' ? config.dataMapping : '';\n this.dataMapping$.next(expr);\n } else {\n this.cdr.detectChanges();\n }\n });\n }\n\n private loadExpressionFunctions(): void {\n this.epistolaPluginService\n .getExpressionFunctions()\n .pipe(\n takeUntil(this.destroy$),\n catchError(() => of([])),\n )\n .subscribe((functions) => {\n this.expressionFunctions = functions;\n this.cdr.markForCheck();\n });\n }\n\n private loadProcessVariables(): void {\n if (this.caseDefinitionKey) {\n this.epistolaPluginService\n .getProcessVariables(this.caseDefinitionKey)\n .pipe(\n takeUntil(this.destroy$),\n catchError(() => of([])),\n )\n .subscribe((variables) => {\n this.processVariables = variables;\n this.cdr.markForCheck();\n });\n }\n }\n\n private loadVariableSuggestions(): void {\n this.epistolaPluginService\n .getVariableSuggestions(\n this.caseDefinitionKey ?? undefined,\n this.caseDefinitionKey ?? undefined,\n )\n .pipe(\n takeUntil(this.destroy$),\n catchError(() => of({ doc: [], pv: [] })),\n )\n .subscribe((suggestions) => {\n this.variableSuggestions = suggestions;\n this.cdr.markForCheck();\n });\n }\n\n private handleValid(formValue: Partial<GenerateDocumentConfig & { catalogId: string }>): void {\n const baseComplete = !!(\n this.selectedCatalogId$.getValue() &&\n formValue?.templateId &&\n formValue?.outputFormat &&\n formValue?.filename &&\n formValue?.resultProcessVariable\n );\n\n let variantValid = true;\n if (this.variantSelectionMode === 'attributes' && this.variantAttributeEntries.length > 0) {\n variantValid = this.variantAttributeEntries.every((e) => !!e.key && !!e.value);\n }\n\n const requiredFieldsMapped =\n this.requiredFieldsStatus.total === 0 ||\n this.requiredFieldsStatus.mapped === this.requiredFieldsStatus.total;\n\n const valid = baseComplete && variantValid && requiredFieldsMapped;\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$, this.dataMapping$])\n .pipe(take(1))\n .subscribe(([formValue, valid, dataMapping]) => {\n if (valid && formValue) {\n const catalogId = this.selectedCatalogId$.getValue();\n const templateId = formValue.templateId!;\n\n const config: GenerateDocumentConfig = {\n catalogId,\n templateId,\n environmentId: formValue.environmentId || undefined,\n dataMapping: dataMapping,\n outputFormat: formValue.outputFormat as 'PDF' | 'HTML',\n filename: this.filenameExpressionMode ? this.filenameExpression : formValue.filename!,\n correlationId: formValue.correlationId || undefined,\n resultProcessVariable: formValue.resultProcessVariable!,\n };\n\n if (this.variantSelectionMode === 'explicit') {\n config.variantId = this.variantIdExpressionMode\n ? this.variantIdExpression\n : formValue.variantId!;\n } else {\n config.variantAttributes = this.variantAttributeEntries\n .filter((e) => e.key && e.value)\n .map((e) => ({ key: e.key, value: e.value, required: e.required }));\n }\n\n this.validateAndEmit(config);\n }\n });\n });\n }\n\n /**\n * Build a JSONata validation request from the config and call the backend.\n * Only fields that are JSONata expressions get validated:\n * - dataMapping is always JSONata\n * - filename / variantId only when their `fx` toggle is on\n * - variant attribute values only when isExpression() reports true\n * On invalid response, surface errors and abort the emit.\n * If the validator endpoint itself fails (network/server), proceed with the\n * emit — the validation is a quality-of-life check, not a hard gate.\n */\n private validateAndEmit(config: GenerateDocumentConfig): void {\n const variantAttributeValues: Record<string, string> = {};\n if (config.variantAttributes) {\n for (const attr of config.variantAttributes) {\n if (isExpression(attr.value)) {\n variantAttributeValues[attr.key] = attr.value;\n }\n }\n }\n\n const request: ValidateJsonataRequest = {\n dataMapping: config.dataMapping || null,\n filename: this.filenameExpressionMode ? config.filename : null,\n variantId: this.variantIdExpressionMode ? config.variantId || null : null,\n variantAttributeValues:\n Object.keys(variantAttributeValues).length > 0 ? variantAttributeValues : null,\n };\n\n this.epistolaPluginService\n .validateJsonata(request)\n .pipe(\n take(1),\n catchError(() => of({ valid: true, errors: [] as JsonataFieldError[] })),\n )\n .subscribe((result) => {\n if (result.valid) {\n this.validationErrors$.next([]);\n this.configuration.emit(config);\n } else {\n this.validationErrors$.next(result.errors);\n this.cdr.markForCheck();\n }\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: disabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null,\n catalogs: catalogs$ | async,\n templates: templates$ | async,\n variants: variants$ | async,\n environments: environments$ | async,\n templateFields: templateFields$ | async,\n selectedCatalogId: selectedCatalogId$ | async,\n selectedTemplateId: selectedTemplateId$ | async,\n validationErrors: validationErrors$ | async,\n } as obs\"\n>\n <div\n *ngIf=\"obs.validationErrors && obs.validationErrors.length > 0\"\n class=\"jsonata-validation-errors\"\n >\n <strong>{{ 'jsonataValidationErrorsHeading' | pluginTranslate: pluginId | async }}</strong>\n <ul>\n <li *ngFor=\"let err of obs.validationErrors\">\n <code>{{ err.field }}</code\n >: {{ err.message }}\n </li>\n </ul>\n </div>\n <v-select\n name=\"catalogId\"\n [title]=\"'catalogId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'catalogIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.catalogs.data\"\n [defaultSelectionId]=\"obs.prefill?.catalogId\"\n [disabled]=\"obs.disabled || obs.catalogs.loading\"\n [required]=\"true\"\n [loading]=\"obs.catalogs.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.catalogs.error\" class=\"loading-error\">{{ obs.catalogs.error }}</div>\n\n <v-select\n name=\"templateId\"\n [title]=\"'templateId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'templateIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.templates.data\"\n [defaultSelectionId]=\"obs.prefill?.templateId\"\n [disabled]=\"obs.disabled || obs.templates.loading || !obs.selectedCatalogId\"\n [required]=\"true\"\n [loading]=\"obs.templates.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.templates.error\" class=\"loading-error\">{{ obs.templates.error }}</div>\n\n <!-- Variant selection mode toggle -->\n <div class=\"variant-mode-toggle\" *ngIf=\"obs.selectedTemplateId\">\n <label class=\"variant-mode-label\">{{\n 'variantSelectionMode' | pluginTranslate: pluginId | async\n }}</label>\n <div class=\"variant-mode-buttons\">\n <button\n type=\"button\"\n class=\"variant-mode-btn\"\n [class.active]=\"variantSelectionMode === 'explicit'\"\n (click)=\"onVariantSelectionModeChange('explicit')\"\n [disabled]=\"obs.disabled\"\n >\n {{ 'selectByVariant' | pluginTranslate: pluginId | async }}\n </button>\n <button\n type=\"button\"\n class=\"variant-mode-btn\"\n [class.active]=\"variantSelectionMode === 'attributes'\"\n (click)=\"onVariantSelectionModeChange('attributes')\"\n [disabled]=\"obs.disabled\"\n >\n {{ 'selectByAttributes' | pluginTranslate: pluginId | async }}\n </button>\n </div>\n </div>\n\n <!-- Explicit variant selection (dropdown or expression) -->\n <div *ngIf=\"variantSelectionMode === 'explicit'\" class=\"field-with-fx\">\n <v-select\n *ngIf=\"!variantIdExpressionMode\"\n name=\"variantId\"\n [title]=\"'variantId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'variantIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.variants.data\"\n [defaultSelectionId]=\"obs.prefill?.variantId\"\n [disabled]=\"obs.disabled || obs.variants.loading || !obs.selectedTemplateId\"\n [required]=\"false\"\n [loading]=\"obs.variants.loading\"\n >\n </v-select>\n <div *ngIf=\"variantIdExpressionMode\" class=\"fx-input-group\">\n <label class=\"fx-input-label\">{{ 'variantId' | pluginTranslate: pluginId | async }}</label>\n <input\n type=\"text\"\n class=\"fx-input\"\n [ngModel]=\"variantIdExpression\"\n (ngModelChange)=\"variantIdExpression = $event; onVariantIdExpressionChange()\"\n [disabled]=\"obs.disabled\"\n placeholder=\"$pv.letterType\"\n />\n </div>\n <button\n type=\"button\"\n class=\"fx-toggle\"\n (click)=\"variantIdExpressionMode = !variantIdExpressionMode\"\n [disabled]=\"obs.disabled\"\n [title]=\"variantIdExpressionMode ? 'Switch to dropdown' : 'Switch to expression'\"\n >\n {{ variantIdExpressionMode ? '·' : 'fx' }}\n </button>\n </div>\n <div *ngIf=\"obs.variants.error\" class=\"loading-error\">{{ obs.variants.error }}</div>\n\n <!-- Attribute-based variant selection -->\n <div\n *ngIf=\"variantSelectionMode === 'attributes' && obs.selectedTemplateId\"\n class=\"variant-attributes-section\"\n >\n <label class=\"variant-attributes-label\">{{\n 'variantAttributes' | pluginTranslate: pluginId | async\n }}</label>\n <div class=\"variant-attributes-list\">\n <div\n *ngFor=\"let entry of variantAttributeEntries; let i = index\"\n class=\"variant-attribute-row\"\n >\n <select\n *ngIf=\"!entry._customKey\"\n class=\"variant-attribute-input\"\n [ngModel]=\"entry.key\"\n (ngModelChange)=\"onKeySelected(entry, $event)\"\n [disabled]=\"obs.disabled\"\n >\n <option value=\"\" disabled>\n {{ 'attributeKey' | pluginTranslate: pluginId | async }}\n </option>\n <option *ngFor=\"let key of availableAttributeKeys\" [value]=\"key\">{{ key }}</option>\n <option value=\"__custom__\">\n {{ 'attributeKeyCustom' | pluginTranslate: pluginId | async }}\n </option>\n </select>\n <div *ngIf=\"entry._customKey\" class=\"custom-key-input\">\n <input\n type=\"text\"\n class=\"variant-attribute-input\"\n [placeholder]=\"'attributeKey' | pluginTranslate: pluginId | async\"\n [(ngModel)]=\"entry.key\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <button\n type=\"button\"\n class=\"custom-key-cancel\"\n (click)=\"cancelCustomKey(entry)\"\n [disabled]=\"obs.disabled\"\n >\n &times;\n </button>\n </div>\n <div class=\"attribute-value-with-fx\">\n <input\n type=\"text\"\n class=\"variant-attribute-input\"\n [class.fx-input]=\"entry._expressionMode\"\n [placeholder]=\"\n entry._expressionMode\n ? '$pv.language'\n : ('attributeValue' | pluginTranslate: pluginId | async)\n \"\n [(ngModel)]=\"entry.value\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <button\n type=\"button\"\n class=\"fx-toggle fx-toggle--inline\"\n (click)=\"entry._expressionMode = !entry._expressionMode\"\n [disabled]=\"obs.disabled\"\n [title]=\"entry._expressionMode ? 'Switch to plain value' : 'Switch to expression'\"\n >\n {{ entry._expressionMode ? '·' : 'fx' }}\n </button>\n </div>\n <label class=\"variant-attribute-required-toggle\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"entry.required\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <span class=\"required-label\">{{\n (entry.required ? 'attributeRequired' : 'attributePreferred')\n | pluginTranslate: pluginId\n | async\n }}</span>\n </label>\n <button\n type=\"button\"\n class=\"variant-attribute-remove-btn\"\n (click)=\"removeAttributeEntry(i)\"\n [disabled]=\"obs.disabled\"\n title=\"{{ 'removeAttribute' | pluginTranslate: pluginId | async }}\"\n >\n &times;\n </button>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"variant-attribute-add-btn\"\n (click)=\"addAttributeEntry()\"\n [disabled]=\"obs.disabled\"\n >\n + {{ 'addAttribute' | pluginTranslate: pluginId | async }}\n </button>\n </div>\n\n <v-select\n name=\"environmentId\"\n [title]=\"'environmentId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'environmentIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.environments.data\"\n [defaultSelectionId]=\"obs.prefill?.environmentId\"\n [disabled]=\"obs.disabled || obs.environments.loading\"\n [required]=\"false\"\n [loading]=\"obs.environments.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.environments.error\" class=\"loading-error\">{{ obs.environments.error }}</div>\n\n <v-select\n name=\"outputFormat\"\n [title]=\"'outputFormat' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'outputFormatTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"outputFormatOptions\"\n [defaultSelectionId]=\"obs.prefill?.outputFormat || 'PDF'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-select>\n\n <div class=\"field-with-fx\">\n <v-input\n *ngIf=\"!filenameExpressionMode\"\n name=\"filename\"\n [title]=\"'filename' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'filenameTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.filename\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n <div *ngIf=\"filenameExpressionMode\" class=\"fx-input-group\">\n <label class=\"fx-input-label\">{{ 'filename' | pluginTranslate: pluginId | async }}</label>\n <input\n type=\"text\"\n class=\"fx-input\"\n [ngModel]=\"filenameExpression\"\n (ngModelChange)=\"filenameExpression = $event; onFilenameExpressionChange()\"\n [disabled]=\"obs.disabled\"\n placeholder='\"besluit-\" & $doc.name & \".pdf\"'\n />\n </div>\n <button\n type=\"button\"\n class=\"fx-toggle\"\n (click)=\"filenameExpressionMode = !filenameExpressionMode\"\n [disabled]=\"obs.disabled\"\n [title]=\"filenameExpressionMode ? 'Switch to plain input' : 'Switch to expression'\"\n >\n {{ filenameExpressionMode ? '·' : 'fx' }}\n </button>\n </div>\n\n <v-input\n name=\"correlationId\"\n [title]=\"'correlationId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'correlationIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.correlationId\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"resultProcessVariable\"\n [title]=\"'resultProcessVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'resultProcessVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.resultProcessVariable\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n</v-form>\n\n<div *ngIf=\"(templateFields$ | async)?.error as templateFieldsError\" class=\"loading-error\">\n {{ templateFieldsError }}\n</div>\n\n<div *ngIf=\"selectedTemplateId$ | async\" class=\"mapping-section\">\n <h5 class=\"mapping-section__title\">\n {{ 'dataMappingTitle' | pluginTranslate: pluginId | async }}\n </h5>\n <p class=\"mapping-section__description\">\n {{ 'dataMappingDescription' | pluginTranslate: pluginId | async }}\n </p>\n <div class=\"mapping-mode-toggle\">\n <button\n class=\"mapping-mode-toggle__btn\"\n [class.mapping-mode-toggle__btn--active]=\"mappingMode === 'simple'\"\n (click)=\"mappingMode = 'simple'\"\n >\n {{ 'mappingModeSimple' | pluginTranslate: pluginId | async }}\n </button>\n <button\n class=\"mapping-mode-toggle__btn\"\n [class.mapping-mode-toggle__btn--active]=\"mappingMode === 'advanced'\"\n (click)=\"mappingMode = 'advanced'\"\n >\n {{ 'mappingModeAdvanced' | pluginTranslate: pluginId | async }}\n </button>\n </div>\n\n <!-- Editor area (full width) -->\n <epistola-mapping-builder\n *ngIf=\"mappingMode === 'simple'\"\n [expression]=\"dataMapping$ | async\"\n [templateFields]=\"(templateFields$ | async)?.data ?? []\"\n [suggestions]=\"variableSuggestions\"\n [disabled]=\"!!(disabled$ | async)\"\n (expressionChange)=\"onDataMappingChange($event)\"\n ></epistola-mapping-builder>\n\n <epistola-jsonata-editor\n *ngIf=\"mappingMode === 'advanced'\"\n [expression]=\"dataMapping$ | async\"\n [disabled]=\"!!(disabled$ | async)\"\n [suggestions]=\"variableSuggestions\"\n [functions]=\"expressionFunctions\"\n (expressionChange)=\"onDataMappingChange($event)\"\n ></epistola-jsonata-editor>\n\n <!-- Bottom tabs: Schema + Preview (collapsible) -->\n <div class=\"mapping-tools\" [class.mapping-tools--collapsed]=\"toolsCollapsed\">\n <div class=\"mapping-tools__header\" (click)=\"toolsCollapsed = !toolsCollapsed\">\n <span class=\"mapping-tools__chevron\">{{ toolsCollapsed ? '&#x25B6;' : '&#x25BC;' }}</span>\n <span>{{ 'mappingTools' | pluginTranslate: pluginId | async }}</span>\n </div>\n <div *ngIf=\"!toolsCollapsed\" class=\"mapping-tools__content\">\n <div class=\"mapping-tools__tabs\">\n <button\n class=\"mapping-tools__tab\"\n [class.mapping-tools__tab--active]=\"activeToolTab === 'schema'\"\n (click)=\"activeToolTab = 'schema'\"\n >\n {{ 'expectedStructure' | pluginTranslate: pluginId | async }}\n </button>\n <button\n class=\"mapping-tools__tab\"\n [class.mapping-tools__tab--active]=\"activeToolTab === 'preview'\"\n (click)=\"activeToolTab = 'preview'\"\n >\n {{ 'previewTitle' | pluginTranslate: pluginId | async }}\n </button>\n </div>\n\n <epistola-expected-structure\n *ngIf=\"activeToolTab === 'schema'\"\n [templateFields]=\"(templateFields$ | async)?.data ?? []\"\n ></epistola-expected-structure>\n\n <epistola-mapping-preview\n *ngIf=\"activeToolTab === 'preview'\"\n [expression]=\"dataMapping$ | async\"\n [templateFields]=\"(templateFields$ | async)?.data ?? []\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n ></epistola-mapping-preview>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FunctionConfigurationComponent, PluginTranslatePipeModule } from '@valtimo/plugin';\nimport { FormModule, FormOutput, InputModule } from '@valtimo/components';\nimport { BehaviorSubject, combineLatest, Observable, Subscription, take } from 'rxjs';\nimport { delay, startWith } from 'rxjs/operators';\nimport { CheckJobStatusConfig } from '../../models';\n\n@Component({\n selector: 'epistola-check-job-status-configuration',\n templateUrl: './check-job-status-configuration.component.html',\n styleUrls: ['./check-job-status-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule],\n})\nexport class CheckJobStatusConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<CheckJobStatusConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<CheckJobStatusConfig> =\n new EventEmitter<CheckJobStatusConfig>();\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<CheckJobStatusConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n this.safeDisabled$ = this.disabled$.pipe(startWith(true), delay(0));\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as CheckJobStatusConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: CheckJobStatusConfig): void {\n const valid = !!(formValue?.requestIdVariable && formValue?.statusVariable);\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid && formValue) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null,\n } as obs\"\n>\n <v-input\n name=\"requestIdVariable\"\n [title]=\"'requestIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'requestIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.requestIdVariable || 'epistolaRequestId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"statusVariable\"\n [title]=\"'statusVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'statusVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.statusVariable || 'epistolaStatus'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"documentIdVariable\"\n [title]=\"'documentIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'documentIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.documentIdVariable || 'epistolaDocumentId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"errorMessageVariable\"\n [title]=\"'errorMessageVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'errorMessageVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.errorMessageVariable || 'epistolaErrorMessage'\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n</v-form>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FunctionConfigurationComponent, PluginTranslatePipeModule } from '@valtimo/plugin';\nimport { FormModule, FormOutput, InputModule } from '@valtimo/components';\nimport { BehaviorSubject, combineLatest, Observable, Subscription, take } from 'rxjs';\nimport { delay, startWith } from 'rxjs/operators';\nimport { DownloadDocumentConfig } from '../../models';\n\n@Component({\n selector: 'epistola-download-document-configuration',\n templateUrl: './download-document-configuration.component.html',\n styleUrls: ['./download-document-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule],\n})\nexport class DownloadDocumentConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<DownloadDocumentConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<DownloadDocumentConfig> =\n new EventEmitter<DownloadDocumentConfig>();\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<DownloadDocumentConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n this.safeDisabled$ = this.disabled$.pipe(startWith(true), delay(0));\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as DownloadDocumentConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: DownloadDocumentConfig): void {\n const valid = !!(formValue?.documentIdVariable && formValue?.contentVariable);\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid && formValue) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null,\n } as obs\"\n>\n <v-input\n name=\"documentIdVariable\"\n [title]=\"'documentIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'documentIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.documentIdVariable || 'epistolaDocumentId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"contentVariable\"\n [title]=\"'contentVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'contentVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.contentVariable || 'documentContent'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n</v-form>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { FormioCustomComponent } from '@valtimo/components';\n\nexport interface DownloadData {\n documentId: string;\n tenantId: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-download-component',\n template: `\n <button\n type=\"button\"\n class=\"btn btn-outline-primary\"\n [disabled]=\"disabled || downloading || !hasRequiredData()\"\n (click)=\"download()\"\n >\n <i class=\"mdi mdi-download mr-1\"></i>\n {{ downloading ? 'Downloading...' : buttonLabel }}\n </button>\n <span *ngIf=\"error\" class=\"text-danger ml-2\">{{ error }}</span>\n `,\n})\nexport class EpistolaDownloadComponent implements FormioCustomComponent<DownloadData> {\n @Input() value: DownloadData;\n @Output() valueChange = new EventEmitter<DownloadData>();\n\n @Input() disabled = false;\n @Input() filename = 'document.pdf';\n @Input() label = 'Download PDF';\n\n downloading = false;\n error: string | null = null;\n\n get buttonLabel(): string {\n return this.label || 'Download PDF';\n }\n\n constructor(private readonly http: HttpClient) {}\n\n hasRequiredData(): boolean {\n return !!(this.value?.documentId && this.value?.tenantId);\n }\n\n download(): void {\n if (!this.hasRequiredData() || this.downloading) {\n return;\n }\n\n this.downloading = true;\n this.error = null;\n\n const { documentId, tenantId } = this.value;\n const url =\n `/api/v1/plugin/epistola/documents/${encodeURIComponent(documentId)}/download` +\n `?tenantId=${encodeURIComponent(tenantId)}` +\n `&filename=${encodeURIComponent(this.filename)}`;\n\n this.http.get(url, { responseType: 'blob' }).subscribe({\n next: (blob) => {\n const objectUrl = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = objectUrl;\n anchor.download = this.filename;\n anchor.click();\n URL.revokeObjectURL(objectUrl);\n this.downloading = false;\n },\n error: (err) => {\n console.error('Download failed', err);\n this.error = 'Download mislukt. Probeer opnieuw.';\n this.downloading = false;\n },\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { FormioCustomComponent, FormIoStateService } from '@valtimo/components';\nimport { ConfigService } from '@valtimo/shared';\nimport { FormioModule } from '@formio/angular';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\nimport { EpistolaPluginService } from '../../services';\n\n@Component({\n standalone: true,\n imports: [CommonModule, FormioModule],\n selector: 'epistola-retry-form-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div *ngIf=\"loading\" class=\"epistola-retry-loading\">Loading form...</div>\n <div *ngIf=\"error\" class=\"epistola-retry-error\">{{ error }}</div>\n <div\n *ngIf=\"formDefinition && !loading\"\n class=\"epistola-retry-container\"\n [class.preview-expanded]=\"previewExpanded\"\n >\n <div class=\"epistola-retry-form\" [hidden]=\"previewExpanded\">\n <formio\n [form]=\"formDefinition\"\n [submission]=\"submission\"\n (change)=\"onFormChange($event)\"\n [options]=\"formOptions\"\n ></formio>\n </div>\n <div class=\"epistola-retry-preview\">\n <div class=\"preview-header\">\n <span>Preview</span>\n <button type=\"button\" class=\"preview-toggle\" (click)=\"togglePreview()\">\n {{ previewExpanded ? 'Show form' : 'Expand' }}\n </button>\n </div>\n <div *ngIf=\"previewLoading\" class=\"preview-loading\">Generating preview...</div>\n <object\n *ngIf=\"previewUrl && !previewLoading\"\n [data]=\"previewUrl\"\n type=\"application/pdf\"\n class=\"preview-pdf\"\n >\n PDF preview not supported in this browser.\n </object>\n <div *ngIf=\"previewError\" class=\"preview-error\">{{ previewError }}</div>\n <div *ngIf=\"!previewUrl && !previewLoading && !previewError\" class=\"preview-empty\">\n Edit fields to see a preview\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n .epistola-retry-loading {\n padding: 1rem;\n color: #6c757d;\n }\n .epistola-retry-error {\n padding: 0.5rem;\n color: #dc3545;\n }\n .epistola-retry-container {\n display: flex;\n gap: 1rem;\n }\n .epistola-retry-form {\n flex: 2;\n min-width: 0;\n }\n .epistola-retry-preview {\n flex: 1;\n min-width: 0;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 1rem;\n background: #f8f9fa;\n display: flex;\n flex-direction: column;\n }\n .preview-expanded .epistola-retry-preview {\n flex: 1;\n }\n .preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: bold;\n margin-bottom: 0.5rem;\n color: #495057;\n }\n .preview-toggle {\n background: none;\n border: 1px solid #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.2rem 0.5rem;\n font-size: 0.75rem;\n cursor: pointer;\n }\n .preview-toggle:hover {\n background: #e9ecef;\n }\n .preview-loading {\n color: #6c757d;\n font-style: italic;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n min-height: 500px;\n }\n .preview-expanded .preview-pdf {\n min-height: 80vh;\n }\n .preview-error {\n color: #dc3545;\n }\n .preview-empty {\n color: #6c757d;\n font-style: italic;\n }\n `,\n ],\n})\nexport class EpistolaRetryFormComponent\n implements FormioCustomComponent<string>, OnChanges, OnDestroy\n{\n @Input() value!: string;\n @Output() valueChange = new EventEmitter<string>();\n\n @Input() disabled = false;\n @Input() label = 'Document Data';\n @Input() sourceActivityId?: string;\n\n formDefinition: any;\n submission: any;\n loading = true;\n error: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n previewLoading = false;\n previewError: string | null = null;\n previewExpanded = false;\n private loaded = false;\n private loadSubscription?: Subscription;\n private previewSubscription?: Subscription;\n private previewSubject = new Subject<any>();\n private currentBlobUrl: string | null = null;\n private resolvedSourceActivityId?: string;\n private processDefinitionKey?: string;\n private readonly apiEndpoint: string;\n\n formOptions: any = {\n noAlerts: true,\n buttonSettings: { showCancel: false, showSubmit: false, showPrevious: false, showNext: false },\n };\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly formIoStateService: FormIoStateService,\n private readonly cdr: ChangeDetectorRef,\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService,\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n // Debounce preview calls\n this.previewSubscription = this.previewSubject.pipe(debounceTime(1500)).subscribe((data) => {\n this.loadPreview(data);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.loaded) {\n this.loaded = true;\n this.loadForm();\n }\n }\n\n ngOnDestroy(): void {\n this.loadSubscription?.unsubscribe();\n this.previewSubscription?.unsubscribe();\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n }\n }\n\n togglePreview(): void {\n this.previewExpanded = !this.previewExpanded;\n this.cdr.markForCheck();\n }\n\n onFormChange(event: any): void {\n if (event?.data) {\n const json = JSON.stringify(event.data);\n this.value = json; // Formio reads element.value on change event\n this.valueChange.emit(json);\n // Trigger debounced preview\n this.previewSubject.next(event.data);\n }\n }\n\n private loadPreview(formData: any): void {\n const documentId = this.formIoStateService.documentId;\n const processInstanceId = this.formIoStateService.processInstanceId;\n if (!documentId || !processInstanceId) return;\n\n this.previewLoading = true;\n this.previewError = null;\n this.cdr.markForCheck();\n\n // Revoke previous blob URL to prevent memory leaks\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n }\n\n this.http\n .post(\n `${this.apiEndpoint}/preview`,\n {\n documentId,\n processInstanceId,\n sourceActivityId: this.sourceActivityId || null,\n overrides: formData,\n },\n { responseType: 'blob', headers: new HttpHeaders().set('X-Skip-Interceptor', '422') },\n )\n .subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.previewError = null;\n this.previewLoading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.previewUrl = null;\n // Try to extract error message from JSON response body\n if (err.error instanceof Blob) {\n err.error.text().then((text: string) => {\n try {\n const body = JSON.parse(text);\n this.previewError = body.details || body.error || 'Preview could not be generated';\n } catch {\n this.previewError = 'Preview could not be generated';\n }\n this.previewLoading = false;\n this.cdr.markForCheck();\n });\n } else {\n this.previewError = err.error?.error || 'Preview could not be generated';\n this.previewLoading = false;\n this.cdr.markForCheck();\n }\n },\n });\n }\n\n private loadForm(): void {\n const processInstanceId = this.formIoStateService.processInstanceId;\n const documentId = this.formIoStateService.documentId;\n if (!processInstanceId) {\n this.error = 'Could not determine process instance ID.';\n this.loading = false;\n this.cdr.markForCheck();\n return;\n }\n\n this.loadSubscription = this.epistolaPluginService\n .getRetryForm(processInstanceId, documentId ?? undefined, this.sourceActivityId)\n .subscribe({\n next: (form) => {\n this.formDefinition = form;\n if (this.value) {\n try {\n this.submission = { data: JSON.parse(this.value) };\n } catch {\n // value is not valid JSON, start fresh\n }\n }\n this.loading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n console.error('Failed to load retry form', err);\n this.error = 'Failed to load the retry form. Please try again.';\n this.loading = false;\n this.cdr.markForCheck();\n },\n });\n }\n}\n","import { Component, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { FormioCustomComponent } from '@valtimo/components';\nimport { ConfigService } from '@valtimo/shared';\n\nexport interface PreviewButtonData {\n documentId: string;\n tenantId: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-preview-button-component',\n template: `\n <button\n type=\"button\"\n class=\"btn btn-outline-secondary\"\n [disabled]=\"disabled || loading || !hasRequiredData()\"\n (click)=\"openPreview()\"\n >\n <i class=\"mdi mdi-eye mr-1\"></i>\n {{ loading ? 'Loading...' : buttonLabel }}\n </button>\n\n <div *ngIf=\"modalOpen\" class=\"preview-modal-overlay\" (click)=\"closePreview()\">\n <div class=\"preview-modal-content\" (click)=\"$event.stopPropagation()\">\n <div class=\"preview-modal-header\">\n <span>Document Preview</span>\n <button type=\"button\" class=\"preview-modal-close\" (click)=\"closePreview()\">\n &times;\n </button>\n </div>\n <div class=\"preview-modal-body\">\n <div *ngIf=\"previewLoading\" class=\"preview-loading\">Generating preview...</div>\n <div *ngIf=\"previewError\" class=\"preview-error\">{{ previewError }}</div>\n <object\n *ngIf=\"previewUrl && !previewLoading\"\n [data]=\"previewUrl\"\n type=\"application/pdf\"\n class=\"preview-pdf\"\n >\n PDF preview is not supported in this browser.\n </object>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n .preview-modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n }\n .preview-modal-content {\n background: white;\n border-radius: 8px;\n width: 90vw;\n height: 90vh;\n max-width: 1200px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\n }\n .preview-modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n font-weight: bold;\n font-size: 1rem;\n }\n .preview-modal-close {\n background: none;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n color: #6c757d;\n line-height: 1;\n padding: 0 0.25rem;\n }\n .preview-modal-close:hover {\n color: #333;\n }\n .preview-modal-body {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .preview-loading,\n .preview-error {\n padding: 2rem;\n text-align: center;\n }\n .preview-error {\n color: #dc3545;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n }\n `,\n ],\n})\nexport class EpistolaPreviewButtonComponent\n implements FormioCustomComponent<PreviewButtonData>, OnDestroy\n{\n @Input() value!: PreviewButtonData;\n @Output() valueChange = new EventEmitter<PreviewButtonData>();\n\n @Input() disabled = false;\n @Input() label = 'Preview PDF';\n\n modalOpen = false;\n loading = false;\n previewLoading = false;\n previewError: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n private currentBlobUrl: string | null = null;\n\n private readonly apiEndpoint: string;\n\n get buttonLabel(): string {\n return this.label || 'Preview PDF';\n }\n\n constructor(\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService,\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n ngOnDestroy(): void {\n this.revokeBlobUrl();\n }\n\n hasRequiredData(): boolean {\n return !!(this.value?.documentId && this.value?.tenantId);\n }\n\n openPreview(): void {\n if (!this.hasRequiredData() || this.loading) return;\n\n this.modalOpen = true;\n this.previewLoading = true;\n this.previewError = null;\n this.revokeBlobUrl();\n\n const { documentId, tenantId } = this.value;\n const url =\n `${this.apiEndpoint}/documents/${encodeURIComponent(documentId)}/download` +\n `?tenantId=${encodeURIComponent(tenantId)}` +\n `&filename=preview.pdf`;\n\n this.http.get(url, { responseType: 'blob' }).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.previewLoading = false;\n },\n error: () => {\n this.previewError = 'Could not load the document.';\n this.previewLoading = false;\n },\n });\n }\n\n closePreview(): void {\n this.modalOpen = false;\n this.revokeBlobUrl();\n this.previewUrl = null;\n this.previewError = null;\n }\n\n private revokeBlobUrl(): void {\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { FormioCustomComponent, FormIoStateService } from '@valtimo/components';\nimport { ConfigService } from '@valtimo/shared';\nimport { PreviewSource } from '../../models';\nimport { EpistolaPluginService } from '../../services';\nimport { Subscription } from 'rxjs';\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-document-preview-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- Design-time view: show configuration summary when no runtime context -->\n <div *ngIf=\"designMode\" class=\"epistola-preview-panel\">\n <div class=\"preview-header\">\n <span>{{ label || 'Document Preview' }}</span>\n </div>\n <div class=\"preview-body design-info\">\n <div class=\"design-section\" *ngIf=\"sourceActivityId\">\n <div class=\"design-label\">Process</div>\n <div class=\"design-value\">{{ processDefinitionKey || '(any)' }}</div>\n <div class=\"design-label\">Activity</div>\n <div class=\"design-value\">{{ sourceActivityId }}</div>\n </div>\n <div class=\"design-section\" *ngIf=\"overrideMapping\">\n <div class=\"design-label\">Input Overrides</div>\n <div *ngFor=\"let scope of overrideMappingScopes\" class=\"design-mapping\">\n <div *ngFor=\"let entry of overrideMappingEntries(scope)\" class=\"design-entry\">\n <span class=\"design-scope\">{{ scope }}</span\n >.{{ entry.path }}\n <i class=\"mdi mdi-arrow-left\"></i>\n <span class=\"design-field\">{{ entry.field }}</span>\n </div>\n </div>\n </div>\n <div *ngIf=\"!sourceActivityId\" class=\"design-unconfigured\">\n Auto-discover mode (no process link configured)\n </div>\n </div>\n </div>\n\n <!-- Runtime view: actual preview -->\n <div *ngIf=\"!designMode\" class=\"epistola-preview-panel\">\n <div class=\"preview-header\">\n <span>{{ label || 'Document Preview' }}</span>\n <div class=\"preview-controls\">\n <select\n *ngIf=\"!sourceActivityId && sources.length > 1\"\n class=\"preview-select\"\n [value]=\"selectedIndex\"\n (change)=\"onSourceChange($event)\"\n >\n <option *ngFor=\"let source of sources; let i = index\" [value]=\"i\">\n {{ source.templateName }} ({{ source.activityId }})\n </option>\n </select>\n <button\n type=\"button\"\n class=\"preview-refresh\"\n [disabled]=\"loading || discovering\"\n (click)=\"refresh()\"\n >\n <i class=\"mdi mdi-refresh mr-1\"></i>\n {{ loading ? 'Generating...' : 'Refresh' }}\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <div *ngIf=\"discovering\" class=\"preview-loading\">Discovering documents...</div>\n <div *ngIf=\"loading && !discovering\" class=\"preview-loading\">Generating preview...</div>\n <div *ngIf=\"error && !loading && !discovering\" class=\"preview-unavailable\">\n <i class=\"mdi mdi-information-outline\"></i>\n Preview is niet beschikbaar — niet alle gegevens zijn al ingevuld.\n </div>\n <object\n *ngIf=\"previewUrl && !loading && !discovering\"\n [data]=\"previewUrl\"\n type=\"application/pdf\"\n class=\"preview-pdf\"\n >\n PDF preview is not supported in this browser.\n </object>\n <div\n *ngIf=\"\n !previewUrl &&\n !loading &&\n !discovering &&\n !error &&\n !sourceActivityId &&\n sources.length === 0\n \"\n class=\"preview-empty\"\n >\n No previewable documents found\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n .epistola-preview-panel {\n border: 1px solid #dee2e6;\n border-radius: 4px;\n background: #f8f9fa;\n display: flex;\n flex-direction: column;\n }\n .preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid #dee2e6;\n font-weight: bold;\n color: #495057;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .preview-controls {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n .preview-select {\n border: 1px solid #ced4da;\n border-radius: 4px;\n padding: 0.25rem 0.5rem;\n font-size: 0.8rem;\n background: white;\n max-width: 300px;\n }\n .preview-refresh {\n background: none;\n border: 1px solid #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.25rem 0.75rem;\n font-size: 0.8rem;\n cursor: pointer;\n display: flex;\n align-items: center;\n white-space: nowrap;\n }\n .preview-refresh:hover:not(:disabled) {\n background: #e9ecef;\n }\n .preview-refresh:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .preview-body {\n display: flex;\n flex-direction: column;\n min-height: 500px;\n }\n .preview-loading {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n .preview-unavailable {\n padding: 1.5rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n .preview-unavailable i {\n margin-right: 0.25rem;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n min-height: 500px;\n }\n .preview-empty {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n .design-info {\n padding: 1rem;\n min-height: auto;\n }\n .design-section {\n margin-bottom: 0.75rem;\n }\n .design-label {\n font-size: 0.7rem;\n text-transform: uppercase;\n color: #868e96;\n font-weight: 600;\n letter-spacing: 0.05em;\n }\n .design-value {\n font-family: monospace;\n font-size: 0.85rem;\n color: #212529;\n margin-bottom: 0.25rem;\n }\n .design-mapping {\n margin-top: 0.25rem;\n }\n .design-entry {\n font-family: monospace;\n font-size: 0.8rem;\n color: #495057;\n padding: 0.15rem 0;\n }\n .design-scope {\n color: #0d6efd;\n }\n .design-field {\n color: #198754;\n }\n .design-entry i {\n font-size: 0.7rem;\n margin: 0 0.25rem;\n color: #adb5bd;\n }\n .design-unconfigured {\n color: #6c757d;\n font-style: italic;\n font-size: 0.85rem;\n }\n `,\n ],\n})\nexport class EpistolaDocumentPreviewComponent\n implements FormioCustomComponent<Record<string, any> | null>, OnChanges, OnDestroy\n{\n @Input() value!: Record<string, any> | null;\n @Output() valueChange = new EventEmitter<Record<string, any> | null>();\n\n @Input() disabled = false;\n @Input() label = 'Document Preview';\n @Input() processDefinitionKey?: string;\n @Input() sourceActivityId?: string;\n @Input() overrideMapping?: Record<string, any>;\n\n sources: PreviewSource[] = [];\n selectedIndex = 0;\n discovering = false;\n loading = false;\n error: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n designMode = false;\n private initialized = false;\n private currentBlobUrl: string | null = null;\n private discoverSubscription?: Subscription;\n private previewSubscription?: Subscription;\n private readonly apiEndpoint: string;\n\n /** Whether the component is in configured mode (explicit process link) vs auto-discover mode */\n private get configuredMode(): boolean {\n return !!this.sourceActivityId;\n }\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService,\n private readonly formIoStateService: FormIoStateService,\n private readonly cdr: ChangeDetectorRef,\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n get overrideMappingScopes(): string[] {\n return this.overrideMapping ? Object.keys(this.overrideMapping) : [];\n }\n\n overrideMappingEntries(scope: string): { path: string; field: string }[] {\n const fields = this.overrideMapping?.[scope];\n if (!fields || typeof fields !== 'object') return [];\n return Object.entries(fields).map(([path, field]) => ({ path, field: String(field) }));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.initialized) {\n this.initialized = true;\n\n // Detect design mode: no runtime context (Formio builder)\n const documentId = this.formIoStateService.documentId;\n if (!documentId) {\n this.designMode = true;\n this.cdr.markForCheck();\n return;\n }\n\n if (this.configuredMode) {\n this.loadConfiguredPreview();\n } else {\n this.discoverSources();\n }\n return;\n }\n\n // In configured mode, react to value changes (input overrides from Formio wrapper)\n if (this.configuredMode && changes['value']) {\n this.loadConfiguredPreview();\n }\n }\n\n ngOnDestroy(): void {\n this.discoverSubscription?.unsubscribe();\n this.previewSubscription?.unsubscribe();\n this.revokeBlobUrl();\n }\n\n onSourceChange(event: Event): void {\n this.selectedIndex = +(event.target as HTMLSelectElement).value;\n this.loadDiscoveredPreview();\n }\n\n refresh(): void {\n if (this.configuredMode) {\n this.loadConfiguredPreview();\n } else {\n this.loadDiscoveredPreview();\n }\n }\n\n /**\n * Configured mode: preview using the explicitly configured process link + input overrides.\n */\n private loadConfiguredPreview(): void {\n const documentId = this.formIoStateService.documentId;\n if (!documentId) {\n this.error = 'Could not determine document ID from context.';\n this.cdr.markForCheck();\n return;\n }\n\n this.loading = true;\n this.error = null;\n this.cdr.markForCheck();\n this.revokeBlobUrl();\n\n this.previewSubscription?.unsubscribe();\n this.previewSubscription = this.http\n .post(\n `${this.apiEndpoint}/preview`,\n {\n documentId,\n processDefinitionKey: this.processDefinitionKey || null,\n processInstanceId: this.formIoStateService.processInstanceId || null,\n sourceActivityId: this.sourceActivityId,\n inputOverrides: this.value || null,\n overrides: null,\n },\n {\n responseType: 'blob',\n headers: new HttpHeaders().set('X-Skip-Interceptor', '422'),\n },\n )\n .subscribe({\n next: (blob) => this.handlePreviewSuccess(blob),\n error: (err) => this.handlePreviewError(err),\n });\n }\n\n /**\n * Auto-discover mode: discover sources from running process instances.\n */\n private discoverSources(): void {\n const documentId = this.formIoStateService.documentId;\n if (!documentId) {\n this.error = 'Could not determine document ID from context.';\n this.cdr.markForCheck();\n return;\n }\n\n this.discovering = true;\n this.error = null;\n this.cdr.markForCheck();\n\n this.discoverSubscription = this.epistolaPluginService.getPreviewSources(documentId).subscribe({\n next: (sources) => {\n this.sources = sources;\n this.discovering = false;\n this.cdr.markForCheck();\n if (sources.length > 0) {\n this.selectedIndex = 0;\n this.loadDiscoveredPreview();\n }\n },\n error: (err) => {\n this.error = err.error?.error || 'Failed to discover preview sources';\n this.discovering = false;\n this.cdr.markForCheck();\n },\n });\n }\n\n /**\n * Auto-discover mode: load preview for the selected discovered source.\n */\n private loadDiscoveredPreview(): void {\n const source = this.sources[this.selectedIndex];\n if (!source) return;\n\n const documentId = this.formIoStateService.documentId;\n if (!documentId) return;\n\n this.loading = true;\n this.error = null;\n this.cdr.markForCheck();\n this.revokeBlobUrl();\n\n this.previewSubscription?.unsubscribe();\n this.previewSubscription = this.http\n .post(\n `${this.apiEndpoint}/preview`,\n {\n documentId,\n processInstanceId: source.processInstanceId,\n sourceActivityId: source.activityId,\n overrides: null,\n },\n {\n responseType: 'blob',\n headers: new HttpHeaders().set('X-Skip-Interceptor', '422'),\n },\n )\n .subscribe({\n next: (blob) => this.handlePreviewSuccess(blob),\n error: (err) => this.handlePreviewError(err),\n });\n }\n\n private handlePreviewSuccess(blob: Blob): void {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.error = null;\n this.loading = false;\n this.cdr.markForCheck();\n }\n\n private handlePreviewError(err: any): void {\n this.previewUrl = null;\n if (err.error instanceof Blob) {\n err.error.text().then((text: string) => {\n try {\n const body = JSON.parse(text);\n this.error = body.details || body.error || 'Preview could not be generated';\n } catch {\n this.error = 'Preview could not be generated';\n }\n this.loading = false;\n this.cdr.markForCheck();\n });\n } else {\n this.error = err.error?.error || 'Preview could not be generated';\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n private revokeBlobUrl(): void {\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n this.previewUrl = null;\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { PluginTranslatePipeModule } from '@valtimo/plugin';\nimport { TabsModule } from 'carbon-components-angular/tabs';\nimport { TagModule } from 'carbon-components-angular/tag';\nimport { EpistolaAdminService } from '../../services/epistola-admin.service';\nimport { ConnectionStatus, PendingJob, PluginUsageEntry } from '../../models';\n\n/**\n * Combined view model for a single plugin configuration card.\n */\ninterface ConfigurationCard {\n configurationId: string;\n configurationTitle: string;\n tenantId: string;\n reachable: boolean;\n latencyMs: number;\n errorMessage?: string;\n serverVersion?: string;\n usageCount: number;\n problemCount: number;\n usageEntries: PluginUsageEntry[];\n pendingJobs: PendingJob[];\n}\n\n@Component({\n selector: 'epistola-admin-page',\n templateUrl: './epistola-admin-page.component.html',\n styleUrls: ['./epistola-admin-page.component.scss'],\n standalone: true,\n imports: [CommonModule, RouterModule, PluginTranslatePipeModule, TabsModule, TagModule],\n})\nexport class EpistolaAdminPageComponent implements OnInit {\n cards: ConfigurationCard[] = [];\n selectedCard: ConfigurationCard | null = null;\n activeTab: 'actions' | 'pending' = 'actions';\n loading = false;\n pluginVersion: string | null = null;\n\n private connectionStatuses: ConnectionStatus[] = [];\n private usageEntries: PluginUsageEntry[] = [];\n private pendingJobs: PendingJob[] = [];\n private connectionLoaded = false;\n private usageLoaded = false;\n private pendingLoaded = false;\n private deepLinkConfigId: string | null = null;\n\n constructor(\n private readonly adminService: EpistolaAdminService,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n ) {}\n\n ngOnInit(): void {\n this.deepLinkConfigId = this.route.snapshot.queryParamMap.get('configurationId');\n const tab = this.route.snapshot.queryParamMap.get('tab');\n if (tab === 'pending' || tab === 'actions') {\n this.activeTab = tab;\n }\n this.loadData();\n this.loadPluginVersion();\n }\n\n selectConfiguration(card: ConfigurationCard): void {\n this.selectedCard = card;\n this.activeTab = 'actions';\n this.updateUrl(card.configurationId, this.activeTab);\n }\n\n backToOverview(): void {\n this.selectedCard = null;\n this.activeTab = 'actions';\n this.updateUrl(null, null);\n }\n\n setActiveTab(tab: 'actions' | 'pending'): void {\n this.activeTab = tab;\n this.updateUrl(this.selectedCard?.configurationId ?? null, tab);\n }\n\n refresh(): void {\n this.selectedCard = null;\n this.loadData();\n }\n\n exportProcessLink(entry: PluginUsageEntry): void {\n this.adminService.exportProcessLink(entry.processLinkId).subscribe({\n next: (blob) => {\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `${entry.activityId}.process-link.json`;\n anchor.click();\n URL.revokeObjectURL(url);\n },\n });\n }\n\n private updateUrl(configurationId: string | null, tab: string | null): void {\n this.router.navigate([], {\n relativeTo: this.route,\n queryParams: {\n configurationId: configurationId ?? null,\n tab: tab ?? null,\n },\n replaceUrl: true,\n });\n }\n\n private loadData(): void {\n this.loading = true;\n this.connectionLoaded = false;\n this.usageLoaded = false;\n this.pendingLoaded = false;\n\n this.adminService.getConnectionStatus().subscribe({\n next: (statuses) => {\n this.connectionStatuses = statuses;\n this.connectionLoaded = true;\n this.tryBuildCards();\n },\n error: () => {\n this.connectionStatuses = [];\n this.connectionLoaded = true;\n this.tryBuildCards();\n },\n });\n\n this.adminService.getPluginUsage().subscribe({\n next: (entries) => {\n this.usageEntries = entries;\n this.usageLoaded = true;\n this.tryBuildCards();\n },\n error: () => {\n this.usageEntries = [];\n this.usageLoaded = true;\n this.tryBuildCards();\n },\n });\n\n this.adminService.getPendingJobs().subscribe({\n next: (jobs) => {\n this.pendingJobs = jobs;\n this.pendingLoaded = true;\n this.tryBuildCards();\n },\n error: () => {\n this.pendingJobs = [];\n this.pendingLoaded = true;\n this.tryBuildCards();\n },\n });\n }\n\n private tryBuildCards(): void {\n if (!this.connectionLoaded || !this.usageLoaded || !this.pendingLoaded) {\n return;\n }\n\n this.cards = this.connectionStatuses.map((status) => {\n const entries = this.usageEntries.filter((e) => e.configurationId === status.configurationId);\n const jobs = this.pendingJobs.filter((j) => j.tenantId === status.tenantId);\n const problemCount = entries.reduce((sum, e) => sum + e.problems.length, 0);\n\n return {\n configurationId: status.configurationId,\n configurationTitle: status.configurationTitle,\n tenantId: status.tenantId,\n reachable: status.reachable,\n latencyMs: status.latencyMs,\n errorMessage: status.errorMessage,\n serverVersion: status.serverVersion,\n usageCount: entries.length,\n problemCount,\n usageEntries: entries,\n pendingJobs: jobs,\n };\n });\n\n // Restore deep link selection\n if (this.deepLinkConfigId) {\n const match = this.cards.find((c) => c.configurationId === this.deepLinkConfigId);\n if (match) {\n this.selectedCard = match;\n }\n this.deepLinkConfigId = null;\n }\n\n this.loading = false;\n }\n\n private loadPluginVersion(): void {\n this.adminService.getVersions().subscribe({\n next: (info) => {\n this.pluginVersion = info.pluginVersion;\n },\n });\n }\n}\n","<div class=\"epistola-admin\">\n <!-- Overview: card grid (no configuration selected) -->\n <ng-container *ngIf=\"!selectedCard\">\n <div class=\"d-flex justify-content-between align-items-center mb-3\">\n <div class=\"d-flex align-items-center\">\n <h5 class=\"mb-0\">{{ 'epistolaAdminOverview' | pluginTranslate: 'epistola' | async }}</h5>\n <span *ngIf=\"pluginVersion\" class=\"version-badge ms-2\">v{{ pluginVersion }}</span>\n </div>\n <button class=\"btn btn-outline-primary btn-sm\" (click)=\"refresh()\" [disabled]=\"loading\">\n {{ 'epistolaAdminRefresh' | pluginTranslate: 'epistola' | async }}\n </button>\n </div>\n\n <div *ngIf=\"loading\" class=\"text-muted\">\n {{ 'epistolaAdminLoading' | pluginTranslate: 'epistola' | async }}\n </div>\n\n <div *ngIf=\"!loading && cards.length === 0\" class=\"text-muted\">\n {{ 'epistolaAdminNoConfigurations' | pluginTranslate: 'epistola' | async }}\n </div>\n\n <div *ngIf=\"!loading && cards.length > 0\" class=\"card-grid\">\n <div\n *ngFor=\"let card of cards\"\n class=\"config-card\"\n [class.config-card--ok]=\"card.reachable && card.problemCount === 0\"\n [class.config-card--warning]=\"card.reachable && card.problemCount > 0\"\n [class.config-card--error]=\"!card.reachable\"\n (click)=\"selectConfiguration(card)\"\n >\n <div class=\"config-card__header\">\n <span\n class=\"status-dot\"\n [class.status-dot--ok]=\"card.reachable\"\n [class.status-dot--error]=\"!card.reachable\"\n >\n </span>\n <h5 class=\"config-card__title\">{{ card.configurationTitle }}</h5>\n </div>\n\n <div class=\"config-card__body\">\n <div class=\"config-card__field\">\n <span class=\"config-card__label\">{{\n 'epistolaAdminTenantId' | pluginTranslate: 'epistola' | async\n }}</span>\n <code class=\"config-card__value\">{{ card.tenantId }}</code>\n </div>\n <div class=\"config-card__field\">\n <span class=\"config-card__label\">{{\n 'epistolaAdminStatus' | pluginTranslate: 'epistola' | async\n }}</span>\n <cds-tag size=\"sm\" [type]=\"card.reachable ? 'green' : 'red'\">\n {{\n card.reachable\n ? ('epistolaAdminConnected' | pluginTranslate: 'epistola' | async)\n : ('epistolaAdminUnreachable' | pluginTranslate: 'epistola' | async)\n }}\n </cds-tag>\n </div>\n <div *ngIf=\"card.serverVersion\" class=\"config-card__field\">\n <span class=\"config-card__label\">{{\n 'epistolaAdminServerVersion' | pluginTranslate: 'epistola' | async\n }}</span>\n <span class=\"config-card__value\">{{ card.serverVersion }}</span>\n </div>\n <div class=\"config-card__field\">\n <span class=\"config-card__label\">{{\n 'epistolaAdminPluginActions' | pluginTranslate: 'epistola' | async\n }}</span>\n <span class=\"config-card__value\">{{ card.usageCount }}</span>\n </div>\n <div *ngIf=\"card.pendingJobs.length > 0\" class=\"config-card__field\">\n <span class=\"config-card__label\">{{\n 'epistolaAdminPendingJobs' | pluginTranslate: 'epistola' | async\n }}</span>\n <cds-tag size=\"sm\" type=\"blue\">{{ card.pendingJobs.length }}</cds-tag>\n </div>\n <div *ngIf=\"card.problemCount > 0\" class=\"config-card__field\">\n <span class=\"config-card__label\">{{\n 'epistolaAdminProblems' | pluginTranslate: 'epistola' | async\n }}</span>\n <cds-tag size=\"sm\" type=\"red\">{{ card.problemCount }}</cds-tag>\n </div>\n </div>\n\n <div class=\"config-card__footer\">\n <span class=\"config-card__latency\">{{ card.latencyMs }} ms</span>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- Detail view: selected configuration -->\n <ng-container *ngIf=\"selectedCard\">\n <div class=\"detail-header mb-3\">\n <button class=\"btn btn-link btn-sm p-0\" (click)=\"backToOverview()\">\n &larr; {{ 'epistolaAdminBackToOverview' | pluginTranslate: 'epistola' | async }}\n </button>\n </div>\n\n <div class=\"detail-summary mb-4\">\n <h4>\n <span\n class=\"status-dot me-2\"\n [class.status-dot--ok]=\"selectedCard.reachable\"\n [class.status-dot--error]=\"!selectedCard.reachable\"\n >\n </span>\n {{ selectedCard.configurationTitle }}\n </h4>\n\n <table class=\"table table-sm detail-info-table\">\n <tbody>\n <tr>\n <th>{{ 'epistolaAdminTenantId' | pluginTranslate: 'epistola' | async }}</th>\n <td>\n <code>{{ selectedCard.tenantId }}</code>\n </td>\n </tr>\n <tr>\n <th>{{ 'epistolaAdminStatus' | pluginTranslate: 'epistola' | async }}</th>\n <td>\n <cds-tag size=\"sm\" [type]=\"selectedCard.reachable ? 'green' : 'red'\">\n {{\n selectedCard.reachable\n ? ('epistolaAdminConnected' | pluginTranslate: 'epistola' | async)\n : ('epistolaAdminUnreachable' | pluginTranslate: 'epistola' | async)\n }}\n </cds-tag>\n <span class=\"text-muted ms-2\">{{ selectedCard.latencyMs }} ms</span>\n </td>\n </tr>\n <tr *ngIf=\"selectedCard.serverVersion\">\n <th>{{ 'epistolaAdminServerVersion' | pluginTranslate: 'epistola' | async }}</th>\n <td>{{ selectedCard.serverVersion }}</td>\n </tr>\n <tr *ngIf=\"selectedCard.errorMessage\">\n <th>{{ 'epistolaAdminError' | pluginTranslate: 'epistola' | async }}</th>\n <td class=\"text-danger\">{{ selectedCard.errorMessage }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <!-- Tabs -->\n <ng-template #actionsHeading>\n {{ 'epistolaAdminPluginActions' | pluginTranslate: 'epistola' | async }}\n <cds-tag size=\"sm\" type=\"gray\" class=\"ms-1\">{{ selectedCard.usageEntries.length }}</cds-tag>\n </ng-template>\n\n <ng-template #pendingHeading>\n {{ 'epistolaAdminPendingJobs' | pluginTranslate: 'epistola' | async }}\n <cds-tag\n size=\"sm\"\n [type]=\"selectedCard.pendingJobs.length > 0 ? 'blue' : 'gray'\"\n class=\"ms-1\"\n >\n {{ selectedCard.pendingJobs.length }}\n </cds-tag>\n </ng-template>\n\n <cds-tabs [cacheActive]=\"true\" type=\"contained\">\n <cds-tab\n [heading]=\"actionsHeading\"\n [active]=\"activeTab === 'actions'\"\n (selected)=\"setActiveTab('actions')\"\n >\n <div *ngIf=\"selectedCard.usageEntries.length === 0\" class=\"text-muted mt-3 mb-3\">\n {{ 'epistolaAdminNoUsageForConfig' | pluginTranslate: 'epistola' | async }}\n </div>\n\n <table *ngIf=\"selectedCard.usageEntries.length > 0\" class=\"table table-striped mt-3\">\n <thead>\n <tr>\n <th>{{ 'epistolaAdminCase' | pluginTranslate: 'epistola' | async }}</th>\n <th>{{ 'epistolaAdminProcess' | pluginTranslate: 'epistola' | async }}</th>\n <th>{{ 'epistolaAdminActivity' | pluginTranslate: 'epistola' | async }}</th>\n <th>{{ 'epistolaAdminAction' | pluginTranslate: 'epistola' | async }}</th>\n <th>{{ 'epistolaAdminProblems' | pluginTranslate: 'epistola' | async }}</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let entry of selectedCard.usageEntries\"\n [class.table-warning]=\"entry.problems.length > 0\"\n >\n <td>{{ entry.caseDefinitionKey || '-' }}</td>\n <td>\n <a\n *ngIf=\"entry.caseDefinitionKey && entry.caseDefinitionVersionTag\"\n [routerLink]=\"[\n '/case-management',\n 'case',\n entry.caseDefinitionKey,\n 'version',\n entry.caseDefinitionVersionTag,\n 'processes',\n entry.processDefinitionKey,\n ]\"\n class=\"usage-link\"\n >\n {{ entry.processDefinitionName }}\n </a>\n <span *ngIf=\"!entry.caseDefinitionKey || !entry.caseDefinitionVersionTag\">\n {{ entry.processDefinitionName }}\n </span>\n </td>\n <td>{{ entry.activityName }}</td>\n <td>\n <code>{{ entry.actionKey }}</code>\n </td>\n <td>\n <cds-tag *ngIf=\"entry.problems.length === 0\" size=\"sm\" type=\"green\">OK</cds-tag>\n <cds-tag\n *ngFor=\"let problem of entry.problems\"\n size=\"sm\"\n type=\"red\"\n class=\"d-block mb-1\"\n >\n {{ problem }}\n </cds-tag>\n </td>\n <td>\n <button\n class=\"btn btn-sm btn-outline-secondary\"\n (click)=\"exportProcessLink(entry)\"\n [title]=\"'epistolaAdminExport' | pluginTranslate: 'epistola' | async\"\n >\n &#x2913;\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </cds-tab>\n\n <cds-tab\n [heading]=\"pendingHeading\"\n [active]=\"activeTab === 'pending'\"\n (selected)=\"setActiveTab('pending')\"\n >\n <div *ngIf=\"selectedCard.pendingJobs.length === 0\" class=\"text-muted mt-3 mb-3\">\n {{ 'epistolaAdminNoPendingJobs' | pluginTranslate: 'epistola' | async }}\n </div>\n\n <table *ngIf=\"selectedCard.pendingJobs.length > 0\" class=\"table table-striped mt-3\">\n <thead>\n <tr>\n <th>{{ 'epistolaAdminProcess' | pluginTranslate: 'epistola' | async }}</th>\n <th>{{ 'epistolaAdminActivity' | pluginTranslate: 'epistola' | async }}</th>\n <th>{{ 'epistolaAdminRequestId' | pluginTranslate: 'epistola' | async }}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let job of selectedCard.pendingJobs\">\n <td>{{ job.processDefinitionName }}</td>\n <td>{{ job.activityName }}</td>\n <td>\n <code>{{ job.requestId }}</code>\n </td>\n </tr>\n </tbody>\n </table>\n </cds-tab>\n </cds-tabs>\n </ng-container>\n</div>\n","export interface EpistolaRuntimeEnv {\n epistolaEnabled?: boolean | string;\n}\n\ninterface EpistolaRuntimeWindow {\n env?: EpistolaRuntimeEnv;\n}\n\ndeclare global {\n interface Window extends EpistolaRuntimeWindow {}\n}\n\nfunction isRuntimeWindow(value: unknown): value is EpistolaRuntimeWindow {\n return typeof value === 'object' && value !== null;\n}\n\n/**\n * Reads the runtime feature flag that decides whether the Epistola plugin\n * surfaces (admin menu, /epistola route, plugin specification, Formio\n * components) should activate in the host Valtimo app.\n *\n * The flag is sourced from `window['env']['epistolaEnabled']`, populated at\n * container start by `envsubst` against `assets/config.template.js` (the\n * standard Valtimo runtime-config pattern). Defaults to enabled — only the\n * literal `false` or string `'false'` disables the plugin, matching the\n * backend's `epistola.enabled` `matchIfMissing = true` semantics.\n *\n * Exposed as a runtime helper rather than evaluated directly in `@NgModule`\n * decorator metadata because Angular's AOT compiler cannot statically resolve\n * `window` accesses (NG1010). Read from runtime code such as specification\n * property getters, route guards, or the environment initializer instead.\n */\nexport function isEpistolaEnabled(): boolean {\n const runtimeWindow = Reflect.get(globalThis, 'window');\n if (!runtimeWindow) return true;\n if (!isRuntimeWindow(runtimeWindow)) return true;\n const flag = runtimeWindow.env ? runtimeWindow.env.epistolaEnabled : undefined;\n return flag !== false && flag !== 'false';\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { isEpistolaEnabled } from './epistola-runtime-config';\n\nexport const epistolaEnabledGuard: CanActivateFn = () => {\n if (isEpistolaEnabled()) return true;\n return inject(Router).parseUrl('/');\n};\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { AuthGuardService } from '@valtimo/security';\nimport { EpistolaAdminPageComponent } from './components/epistola-admin-page/epistola-admin-page.component';\nimport { epistolaEnabledGuard } from './epistola-enabled.guard';\n\nconst routes: Routes = [\n {\n path: 'epistola',\n component: EpistolaAdminPageComponent,\n canActivate: [epistolaEnabledGuard, AuthGuardService],\n data: { title: 'Epistola', roles: ['ROLE_ADMIN'] },\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n})\nexport class EpistolaAdminRoutingModule {}\n","import { Injector } from '@angular/core';\nimport { FormioCustomComponentInfo, registerCustomFormioComponent } from '@valtimo/components';\nimport { EpistolaDownloadComponent } from './epistola-download.component';\n\nexport const EPISTOLA_DOWNLOAD_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-download',\n selector: 'epistola-download-button',\n title: 'Epistola Download',\n group: 'basic',\n icon: 'download',\n emptyValue: null,\n fieldOptions: ['filename', 'label'],\n};\n\nexport function registerEpistolaDownloadComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_DOWNLOAD_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_DOWNLOAD_OPTIONS, EpistolaDownloadComponent, injector);\n }\n}\n","import { Injector } from '@angular/core';\nimport { FormioCustomComponentInfo, registerCustomFormioComponent } from '@valtimo/components';\nimport { EpistolaRetryFormComponent } from './epistola-retry-form.component';\n\nexport const EPISTOLA_RETRY_FORM_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-retry-form',\n selector: 'epistola-retry-form-element',\n title: 'Epistola Retry Form',\n group: 'basic',\n icon: 'refresh',\n emptyValue: null,\n fieldOptions: ['sourceActivityId', 'label'], // sourceActivityId is optional (set via BPMN input parameter)\n};\n\nexport function registerEpistolaRetryFormComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_RETRY_FORM_OPTIONS.selector)) {\n registerCustomFormioComponent(\n EPISTOLA_RETRY_FORM_OPTIONS,\n EpistolaRetryFormComponent,\n injector,\n );\n }\n}\n","import { Injector } from '@angular/core';\nimport { FormioCustomComponentInfo, registerCustomFormioComponent } from '@valtimo/components';\nimport { EpistolaPreviewButtonComponent } from './epistola-preview-button.component';\n\nexport const EPISTOLA_PREVIEW_BUTTON_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-preview-button',\n selector: 'epistola-preview-button-element',\n title: 'Epistola Preview',\n group: 'basic',\n icon: 'eye',\n emptyValue: null,\n fieldOptions: ['label'],\n};\n\nexport function registerEpistolaPreviewButtonComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_PREVIEW_BUTTON_OPTIONS.selector)) {\n registerCustomFormioComponent(\n EPISTOLA_PREVIEW_BUTTON_OPTIONS,\n EpistolaPreviewButtonComponent,\n injector,\n );\n }\n}\n","import { Injector } from '@angular/core';\nimport { FormioCustomComponentInfo, registerCustomFormioComponent } from '@valtimo/components';\nimport { EpistolaDocumentPreviewComponent } from './epistola-document-preview.component';\nimport { computeInputOverrides } from './preview-utils';\n\nexport const EPISTOLA_DOCUMENT_PREVIEW_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-document-preview',\n selector: 'epistola-document-preview-element',\n title: 'Epistola Document Preview',\n group: 'basic',\n icon: 'file-pdf-o',\n emptyValue: null,\n fieldOptions: ['label', 'processDefinitionKey', 'sourceActivityId', 'overrideMapping'],\n editForm: () => ({\n components: [\n {\n type: 'epistola-process-link-selector',\n key: 'processLinkSelection',\n label: 'Process Link',\n weight: 10,\n validate: { required: true },\n },\n {\n type: 'epistola-override-builder',\n key: 'overrideMapping',\n label: 'Input Overrides',\n weight: 20,\n },\n ],\n }),\n};\n\nexport function registerEpistolaDocumentPreviewComponent(injector: Injector): void {\n if (customElements.get(EPISTOLA_DOCUMENT_PREVIEW_OPTIONS.selector)) {\n return;\n }\n\n // Register the base component (Angular element + Formio component class)\n registerCustomFormioComponent(\n EPISTOLA_DOCUMENT_PREVIEW_OPTIONS,\n EpistolaDocumentPreviewComponent,\n injector,\n );\n\n // Get the Formio Components registry and the registered base class\n const Formio = (window as any).Formio;\n if (!Formio?.Components) return;\n\n const BasePreviewComponent = Formio.Components.components[EPISTOLA_DOCUMENT_PREVIEW_OPTIONS.type];\n if (!BasePreviewComponent) return;\n\n // Extend the base class to listen for form data changes and compute input overrides\n class PreviewWithOverrides extends BasePreviewComponent {\n private _debounceTimer: any = null;\n private _changeListenerAttached = false;\n\n attach(element: HTMLElement) {\n // Bidirectional sync between processLinkSelection object and separate properties.\n // The editForm uses processLinkSelection (single field), while the component\n // config and Angular inputs use processDefinitionKey + sourceActivityId.\n if (this.component?.processLinkSelection) {\n const sel = this.component.processLinkSelection;\n this.component.processDefinitionKey = sel.processDefinitionKey || '';\n this.component.sourceActivityId = sel.sourceActivityId || '';\n } else if (this.component?.processDefinitionKey && this.component?.sourceActivityId) {\n this.component.processLinkSelection = {\n processDefinitionKey: this.component.processDefinitionKey,\n sourceActivityId: this.component.sourceActivityId,\n };\n }\n\n const result = super.attach(element);\n\n if (this._customAngularElement) {\n this._customAngularElement['processDefinitionKey'] =\n this.component.processDefinitionKey || '';\n this._customAngularElement['sourceActivityId'] = this.component.sourceActivityId || '';\n }\n\n // Listen to form changes and compute input overrides from the mapping\n if (this.root && this.component?.overrideMapping && !this._changeListenerAttached) {\n this._changeListenerAttached = true;\n this.root.on('change', () => {\n this._computeAndSetOverrides();\n });\n // Compute initial value\n this._computeAndSetOverrides();\n }\n\n return result;\n }\n\n private _computeAndSetOverrides() {\n if (this._debounceTimer) {\n clearTimeout(this._debounceTimer);\n }\n this._debounceTimer = setTimeout(() => {\n const mapping = this.component?.overrideMapping;\n const formData = this.root?.data;\n if (mapping && formData) {\n const overrides = computeInputOverrides(mapping, formData);\n if (Object.keys(overrides).length > 0) {\n this.setValue(overrides);\n }\n }\n }, 1500);\n }\n }\n\n // Re-register with the extended class\n Formio.Components.setComponent(EPISTOLA_DOCUMENT_PREVIEW_OPTIONS.type, PreviewWithOverrides);\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FormioCustomComponent } from '@valtimo/components';\n\nconst FORM_REF_PREFIX = 'form:';\n\ninterface OverrideRow {\n scope: 'doc' | 'pv';\n inputPath: string;\n formFieldKey: string;\n}\n\nexport interface FormFieldOption {\n key: string;\n label: string;\n}\n\n/**\n * Override mapping format: scope → { inputPath → \"form:<componentKey>\" }\n * The \"form:\" prefix identifies this as a reference to a Formio component.\n */\nexport type OverrideMapping = Record<string, Record<string, string>>;\n\n@Component({\n standalone: true,\n imports: [CommonModule, FormsModule],\n selector: 'epistola-override-builder-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"override-builder\">\n <div class=\"builder-header\">\n <span class=\"builder-label\">{{ label || 'Input Overrides' }}</span>\n <button type=\"button\" class=\"mode-toggle\" (click)=\"toggleMode()\">\n {{ advancedMode ? 'Simple' : 'Advanced' }}\n </button>\n </div>\n\n <!-- Simple mode: table -->\n <div *ngIf=\"!advancedMode\" class=\"builder-table\">\n <div *ngIf=\"rows.length > 0\" class=\"table-header\">\n <span class=\"col-scope\">Scope</span>\n <span class=\"col-path\">Input Path</span>\n <span class=\"col-field\">Form Field</span>\n <span class=\"col-action\"></span>\n </div>\n <div *ngFor=\"let row of rows; let i = index\" class=\"table-row\">\n <select class=\"col-scope\" [(ngModel)]=\"row.scope\" (ngModelChange)=\"emitChange()\">\n <option value=\"doc\">doc</option>\n <option value=\"pv\">pv</option>\n </select>\n <input\n class=\"col-path\"\n type=\"text\"\n [(ngModel)]=\"row.inputPath\"\n (ngModelChange)=\"emitChange()\"\n placeholder=\"e.g. beslissing.tekst\"\n />\n <!-- Dropdown when form fields are available, text input as fallback -->\n <select\n *ngIf=\"availableFields.length > 0\"\n class=\"col-field\"\n [(ngModel)]=\"row.formFieldKey\"\n (ngModelChange)=\"emitChange()\"\n >\n <option value=\"\">-- Select field --</option>\n <option *ngFor=\"let field of availableFields\" [value]=\"field.key\">\n {{ field.label }}\n </option>\n </select>\n <input\n *ngIf=\"availableFields.length === 0\"\n class=\"col-field\"\n type=\"text\"\n [(ngModel)]=\"row.formFieldKey\"\n (ngModelChange)=\"emitChange()\"\n placeholder=\"form field key\"\n />\n <button type=\"button\" class=\"col-action remove-btn\" (click)=\"removeRow(i)\">\n <i class=\"mdi mdi-close\"></i>\n </button>\n </div>\n <button type=\"button\" class=\"add-btn\" (click)=\"addRow()\">\n <i class=\"mdi mdi-plus mr-1\"></i> Add override\n </button>\n </div>\n\n <!-- Advanced mode: JSON editor -->\n <div *ngIf=\"advancedMode\" class=\"builder-advanced\">\n <textarea\n class=\"json-editor\"\n [ngModel]=\"jsonText\"\n (ngModelChange)=\"onJsonChange($event)\"\n placeholder='{ \"pv\": { \"motivation\": \"form:pv:motivation\" } }'\n rows=\"6\"\n ></textarea>\n <div *ngIf=\"jsonError\" class=\"json-error\">{{ jsonError }}</div>\n </div>\n </div>\n `,\n styles: [\n `\n .override-builder {\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 0.75rem;\n background: #f8f9fa;\n }\n .builder-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.5rem;\n }\n .builder-label {\n font-weight: 600;\n font-size: 0.85rem;\n color: #495057;\n }\n .mode-toggle {\n background: none;\n border: 1px solid #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.15rem 0.5rem;\n font-size: 0.75rem;\n cursor: pointer;\n }\n .mode-toggle:hover {\n background: #e9ecef;\n }\n .table-header {\n display: flex;\n gap: 0.5rem;\n padding: 0.25rem 0;\n font-size: 0.75rem;\n color: #6c757d;\n font-weight: 600;\n }\n .table-row {\n display: flex;\n gap: 0.5rem;\n margin-bottom: 0.25rem;\n align-items: center;\n }\n .col-scope {\n width: 70px;\n flex-shrink: 0;\n }\n .col-path {\n flex: 1;\n min-width: 0;\n }\n .col-field {\n flex: 1;\n min-width: 0;\n }\n .col-action {\n width: 30px;\n flex-shrink: 0;\n }\n .table-row select,\n .table-row input {\n border: 1px solid #ced4da;\n border-radius: 4px;\n padding: 0.25rem 0.4rem;\n font-size: 0.8rem;\n background: white;\n }\n .remove-btn {\n background: none;\n border: none;\n color: #dc3545;\n cursor: pointer;\n padding: 0.25rem;\n font-size: 0.9rem;\n }\n .remove-btn:hover {\n color: #a71d2a;\n }\n .add-btn {\n background: none;\n border: 1px dashed #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.25rem 0.75rem;\n font-size: 0.8rem;\n cursor: pointer;\n margin-top: 0.25rem;\n display: flex;\n align-items: center;\n }\n .add-btn:hover {\n background: #e9ecef;\n border-color: #495057;\n }\n .json-editor {\n width: 100%;\n border: 1px solid #ced4da;\n border-radius: 4px;\n padding: 0.5rem;\n font-family: monospace;\n font-size: 0.8rem;\n resize: vertical;\n background: white;\n }\n .json-error {\n color: #dc3545;\n font-size: 0.75rem;\n margin-top: 0.25rem;\n }\n `,\n ],\n})\nexport class EpistolaOverrideBuilderComponent implements FormioCustomComponent<OverrideMapping | null> {\n @Input() value!: OverrideMapping | null;\n @Output() valueChange = new EventEmitter<OverrideMapping | null>();\n\n @Input() disabled = false;\n @Input() label = 'Input Overrides';\n @Input() availableFields: FormFieldOption[] = [];\n\n rows: OverrideRow[] = [];\n advancedMode = false;\n jsonText = '';\n jsonError: string | null = null;\n\n private initialized = false;\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n ngOnChanges(): void {\n if (!this.initialized && this.value) {\n this.initialized = true;\n this.rows = this.mappingToRows(this.value);\n this.jsonText = JSON.stringify(this.value, null, 2);\n }\n this.cdr.markForCheck();\n }\n\n toggleMode(): void {\n this.advancedMode = !this.advancedMode;\n if (this.advancedMode) {\n const mapping = this.rowsToMapping();\n this.jsonText = Object.keys(mapping).length > 0 ? JSON.stringify(mapping, null, 2) : '';\n this.jsonError = null;\n } else {\n try {\n const parsed = this.jsonText.trim() ? JSON.parse(this.jsonText) : {};\n this.rows = this.mappingToRows(parsed);\n this.jsonError = null;\n } catch {\n // Keep current rows if JSON is invalid\n }\n }\n }\n\n addRow(): void {\n this.rows.push({ scope: 'doc', inputPath: '', formFieldKey: '' });\n }\n\n removeRow(index: number): void {\n this.rows.splice(index, 1);\n this.emitChange();\n }\n\n emitChange(): void {\n const mapping = this.rowsToMapping();\n this.value = Object.keys(mapping).length > 0 ? mapping : null;\n this.valueChange.emit(this.value);\n }\n\n onJsonChange(text: string): void {\n this.jsonText = text;\n if (!text.trim()) {\n this.jsonError = null;\n this.value = null;\n this.valueChange.emit(null);\n return;\n }\n try {\n const parsed = JSON.parse(text);\n this.jsonError = null;\n this.value = parsed;\n this.valueChange.emit(parsed);\n } catch (e) {\n this.jsonError = 'Invalid JSON';\n }\n }\n\n private rowsToMapping(): OverrideMapping {\n const mapping: OverrideMapping = {};\n for (const row of this.rows) {\n if (row.inputPath && row.formFieldKey) {\n if (!mapping[row.scope]) {\n mapping[row.scope] = {};\n }\n mapping[row.scope][row.inputPath] = FORM_REF_PREFIX + row.formFieldKey;\n }\n }\n return mapping;\n }\n\n private mappingToRows(mapping: OverrideMapping): OverrideRow[] {\n const rows: OverrideRow[] = [];\n for (const [scope, fields] of Object.entries(mapping)) {\n if (scope === 'doc' || scope === 'pv') {\n for (const [path, ref] of Object.entries(fields)) {\n const formFieldKey = String(ref).startsWith(FORM_REF_PREFIX)\n ? String(ref).substring(FORM_REF_PREFIX.length)\n : String(ref);\n rows.push({ scope, inputPath: path, formFieldKey });\n }\n }\n }\n return rows;\n }\n}\n","import { Injector } from '@angular/core';\nimport { FormioCustomComponentInfo, registerCustomFormioComponent } from '@valtimo/components';\nimport { EpistolaOverrideBuilderComponent } from './override-builder.component';\n\nexport const EPISTOLA_OVERRIDE_BUILDER_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-override-builder',\n selector: 'epistola-override-builder-element',\n title: 'Epistola Override Builder',\n group: 'basic',\n icon: 'list',\n emptyValue: null,\n fieldOptions: ['label', 'availableFields'],\n};\n\n/**\n * Recursively collect input field keys and labels from a Formio component tree.\n * Skips epistola custom components (which are builder UI, not form fields).\n */\nfunction collectFormFields(components: any[]): { key: string; label: string }[] {\n const fields: { key: string; label: string }[] = [];\n for (const comp of components) {\n if (comp.input && comp.key && comp.type !== 'button' && !comp.type?.startsWith('epistola-')) {\n fields.push({ key: comp.key, label: comp.label || comp.key });\n }\n if (comp.components) {\n fields.push(...collectFormFields(comp.components));\n }\n if (comp.columns) {\n for (const col of comp.columns) {\n if (col.components) {\n fields.push(...collectFormFields(col.components));\n }\n }\n }\n }\n return fields;\n}\n\nexport function registerEpistolaOverrideBuilderComponent(injector: Injector): void {\n if (customElements.get(EPISTOLA_OVERRIDE_BUILDER_OPTIONS.selector)) {\n return;\n }\n\n // Register the base component (Angular element + Formio component class)\n registerCustomFormioComponent(\n EPISTOLA_OVERRIDE_BUILDER_OPTIONS,\n EpistolaOverrideBuilderComponent,\n injector,\n );\n\n // Get the Formio Components registry and the registered base class\n const Formio = (window as any).Formio;\n if (!Formio?.Components) return;\n\n const BaseComponent = Formio.Components.components[EPISTOLA_OVERRIDE_BUILDER_OPTIONS.type];\n if (!BaseComponent) return;\n\n // Extend the base class to pass available form fields to the Angular component\n class OverrideBuilderWithFields extends BaseComponent {\n attach(element: HTMLElement) {\n // Set form fields on the component BEFORE super.attach() reads fieldOptions\n this.component.availableFields = this._extractFormFields();\n return super.attach(element);\n }\n\n private _extractFormFields(): { key: string; label: string }[] {\n // The Formio builder passes the main form schema as options.editForm\n // when opening the edit dialog (editFormOptions.editForm = this.form).\n const components = this.options?.editForm?.components;\n if (Array.isArray(components)) {\n return collectFormFields(components);\n }\n return [];\n }\n }\n\n // Re-register with the extended class\n Formio.Components.setComponent(EPISTOLA_OVERRIDE_BUILDER_OPTIONS.type, OverrideBuilderWithFields);\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FormioCustomComponent } from '@valtimo/components';\nimport { EpistolaAdminService } from '../../services';\nimport { PluginUsageEntry } from '../../models';\nimport { Subscription } from 'rxjs';\n\nexport interface ProcessLinkSelection {\n processDefinitionKey: string;\n sourceActivityId: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule, FormsModule],\n selector: 'epistola-process-link-selector-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"process-link-selector\">\n <label class=\"selector-label\">{{ label || 'Process Link' }}</label>\n <select\n class=\"selector-dropdown\"\n [ngModel]=\"selectedKey\"\n (ngModelChange)=\"onSelect($event)\"\n [disabled]=\"disabled || loading\"\n >\n <option value=\"\">{{ loading ? 'Loading...' : '-- Select a process link --' }}</option>\n <option *ngFor=\"let entry of filteredEntries\" [value]=\"entryKey(entry)\">\n {{ entry.processDefinitionName }} / {{ entry.activityName }} ({{ entry.activityId }})\n </option>\n </select>\n <div *ngIf=\"error\" class=\"selector-error\">{{ error }}</div>\n </div>\n `,\n styles: [\n `\n .process-link-selector {\n margin-bottom: 0.5rem;\n }\n .selector-label {\n display: block;\n font-weight: 600;\n font-size: 0.85rem;\n color: #495057;\n margin-bottom: 0.25rem;\n }\n .selector-dropdown {\n width: 100%;\n border: 1px solid #ced4da;\n border-radius: 4px;\n padding: 0.4rem 0.5rem;\n font-size: 0.85rem;\n background: white;\n }\n .selector-error {\n color: #dc3545;\n font-size: 0.75rem;\n margin-top: 0.25rem;\n }\n `,\n ],\n})\nexport class EpistolaProcessLinkSelectorComponent\n implements FormioCustomComponent<ProcessLinkSelection | null>, OnChanges, OnDestroy\n{\n @Input() value!: ProcessLinkSelection | null;\n @Output() valueChange = new EventEmitter<ProcessLinkSelection | null>();\n\n @Input() disabled = false;\n @Input() label = 'Process Link';\n\n filteredEntries: PluginUsageEntry[] = [];\n selectedKey = '';\n loading = false;\n error: string | null = null;\n\n private initialized = false;\n private loadSubscription?: Subscription;\n\n constructor(\n private readonly adminService: EpistolaAdminService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.initialized) {\n this.initialized = true;\n this.loadEntries();\n }\n // Restore selection whenever value changes (Formio may set it after init)\n if (changes['value'] && this.value) {\n this.selectedKey = `${this.value.processDefinitionKey}::${this.value.sourceActivityId}`;\n this.cdr.markForCheck();\n }\n }\n\n ngOnDestroy(): void {\n this.loadSubscription?.unsubscribe();\n }\n\n onSelect(key: string): void {\n this.selectedKey = key;\n if (!key) {\n this.value = null;\n this.valueChange.emit(null);\n return;\n }\n const [processDefinitionKey, sourceActivityId] = key.split('::');\n this.value = { processDefinitionKey, sourceActivityId };\n this.valueChange.emit(this.value);\n }\n\n entryKey(entry: PluginUsageEntry): string {\n return `${entry.processDefinitionKey}::${entry.activityId}`;\n }\n\n private loadEntries(): void {\n this.loading = true;\n this.cdr.markForCheck();\n\n this.loadSubscription = this.adminService.getPluginUsage().subscribe({\n next: (entries) => {\n this.filteredEntries = entries.filter((e) => e.actionKey === 'generate-document');\n this.loading = false;\n\n // Restore selection from value\n if (this.value) {\n this.selectedKey = `${this.value.processDefinitionKey}::${this.value.sourceActivityId}`;\n }\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.error = 'Failed to load process links';\n this.loading = false;\n this.cdr.markForCheck();\n },\n });\n }\n}\n","import { Injector } from '@angular/core';\nimport { FormioCustomComponentInfo, registerCustomFormioComponent } from '@valtimo/components';\nimport { EpistolaProcessLinkSelectorComponent } from './process-link-selector.component';\n\nexport const EPISTOLA_PROCESS_LINK_SELECTOR_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-process-link-selector',\n selector: 'epistola-process-link-selector-element',\n title: 'Epistola Process Link Selector',\n group: 'basic',\n icon: 'link',\n emptyValue: null,\n fieldOptions: ['label'],\n};\n\nexport function registerEpistolaProcessLinkSelectorComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_PROCESS_LINK_SELECTOR_OPTIONS.selector)) {\n registerCustomFormioComponent(\n EPISTOLA_PROCESS_LINK_SELECTOR_OPTIONS,\n EpistolaProcessLinkSelectorComponent,\n injector,\n );\n }\n}\n","import {\n ENVIRONMENT_INITIALIZER,\n inject,\n Injector,\n ModuleWithProviders,\n NgModule,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { PluginTranslatePipeModule } from '@valtimo/plugin';\nimport { FormModule, InputModule, SelectModule } from '@valtimo/components';\nimport { EpistolaConfigurationComponent } from './components/epistola-configuration/epistola-configuration.component';\nimport { GenerateDocumentConfigurationComponent } from './components/generate-document-configuration/generate-document-configuration.component';\nimport { CheckJobStatusConfigurationComponent } from './components/check-job-status-configuration/check-job-status-configuration.component';\nimport { DownloadDocumentConfigurationComponent } from './components/download-document-configuration/download-document-configuration.component';\nimport { EpistolaDownloadComponent } from './components/epistola-download/epistola-download.component';\nimport { EpistolaRetryFormComponent } from './components/epistola-retry-form/epistola-retry-form.component';\nimport { EpistolaPreviewButtonComponent } from './components/epistola-preview-button/epistola-preview-button.component';\nimport { EpistolaDocumentPreviewComponent } from './components/epistola-document-preview/epistola-document-preview.component';\nimport { EpistolaAdminPageComponent } from './components/epistola-admin-page/epistola-admin-page.component';\nimport { EpistolaPluginService, EpistolaAdminService, EpistolaMenuService } from './services';\nimport { EpistolaAdminRoutingModule } from './epistola-admin-routing.module';\nimport { isEpistolaEnabled } from './epistola-runtime-config';\nimport { registerEpistolaDownloadComponent } from './components/epistola-download/epistola-download.formio';\nimport { registerEpistolaRetryFormComponent } from './components/epistola-retry-form/epistola-retry-form.formio';\nimport { registerEpistolaPreviewButtonComponent } from './components/epistola-preview-button/epistola-preview-button.formio';\nimport { registerEpistolaDocumentPreviewComponent } from './components/epistola-document-preview/epistola-document-preview.formio';\nimport { registerEpistolaOverrideBuilderComponent } from './components/override-builder/override-builder.formio';\nimport { registerEpistolaProcessLinkSelectorComponent } from './components/process-link-selector/process-link-selector.formio';\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n PluginTranslatePipeModule,\n FormModule,\n InputModule,\n SelectModule,\n EpistolaAdminRoutingModule,\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent,\n EpistolaDocumentPreviewComponent,\n EpistolaAdminPageComponent,\n ],\n exports: [\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent,\n EpistolaDocumentPreviewComponent,\n EpistolaAdminPageComponent,\n ],\n providers: [EpistolaPluginService, EpistolaAdminService],\n})\nexport class EpistolaPluginModule {\n static forRoot(): ModuleWithProviders<EpistolaPluginModule> {\n return {\n ngModule: EpistolaPluginModule,\n providers: [\n EpistolaMenuService,\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n if (!isEpistolaEnabled()) return;\n const injector = inject(Injector);\n registerEpistolaDownloadComponent(injector);\n registerEpistolaRetryFormComponent(injector);\n registerEpistolaPreviewButtonComponent(injector);\n registerEpistolaOverrideBuilderComponent(injector);\n registerEpistolaProcessLinkSelectorComponent(injector);\n registerEpistolaDocumentPreviewComponent(injector);\n // Eagerly create EpistolaMenuService to trigger menu registration\n inject(EpistolaMenuService);\n },\n },\n ],\n };\n }\n}\n","export const EPISTOLA_PLUGIN_LOGO_BASE64 =\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjAgMTIwIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjEyMCI+CiAgPCEtLSBTdGFjayBiYXNlIC0tPgogIDxyZWN0IHg9IjM2IiB5PSIxNiIgd2lkdGg9IjU0IiBoZWlnaHQ9IjcwIiByeD0iMyIgZmlsbD0iI2U2YzJiMCIgc3Ryb2tlPSIjNGYyZjJiIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0icm90YXRlKDUgNjMgNTEpIi8+CiAgPHJlY3QgeD0iMzIiIHk9IjIyIiB3aWR0aD0iNTQiIGhlaWdodD0iNzAiIHJ4PSIzIiBmaWxsPSIjZjBkOGM4IiBzdHJva2U9IiM0ZjJmMmIiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjI4IiB5PSIyOCIgd2lkdGg9IjU0IiBoZWlnaHQ9IjcwIiByeD0iMyIgZmlsbD0iI2Y1ZWJlMyIgc3Ryb2tlPSIjNGYyZjJiIiBzdHJva2Utd2lkdGg9IjIuNSIvPgogIDxsaW5lIHgxPSIzOCIgeTE9IjQ0IiB4Mj0iNzIiIHkyPSI0NCIgc3Ryb2tlPSIjYzRhODgyIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgogIDxsaW5lIHgxPSIzOCIgeTE9IjU0IiB4Mj0iNzIiIHkyPSI1NCIgc3Ryb2tlPSIjYzRhODgyIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgogIDxsaW5lIHgxPSIzOCIgeTE9IjY0IiB4Mj0iNTgiIHkyPSI2NCIgc3Ryb2tlPSIjYzRhODgyIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgogIDwhLS0gV2F4IHNlYWwgd2l0aCBjaGVja21hcmsgLS0+CiAgPGNpcmNsZSBjeD0iNTUiIGN5PSI4NCIgcj0iMTUiIGZpbGw9IiNiODVjM2MiIHN0cm9rZT0iIzRmMmYyYiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGNpcmNsZSBjeD0iNTUiIGN5PSI4NCIgcj0iMTAuNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZDQ4MzZhIiBzdHJva2Utd2lkdGg9IjEiLz4KICA8cG9seWxpbmUgcG9pbnRzPSI0OSw4NCA1Myw4OSA2Miw3OCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNGYyZjJiIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=';\n","import { PluginSpecification } from '@valtimo/plugin';\nimport { EpistolaConfigurationComponent } from './components/epistola-configuration/epistola-configuration.component';\nimport { GenerateDocumentConfigurationComponent } from './components/generate-document-configuration/generate-document-configuration.component';\nimport { CheckJobStatusConfigurationComponent } from './components/check-job-status-configuration/check-job-status-configuration.component';\nimport { DownloadDocumentConfigurationComponent } from './components/download-document-configuration/download-document-configuration.component';\nimport { EPISTOLA_PLUGIN_LOGO_BASE64 } from './assets';\nimport { isEpistolaEnabled } from './epistola-runtime-config';\n\nconst EPISTOLA_PLUGIN_ID = 'epistola';\nconst DISABLED_EPISTOLA_PLUGIN_ID = '__epistola_disabled__';\n\nconst epistolaPluginSpecification: PluginSpecification = {\n get pluginId(): string {\n return isEpistolaEnabled() ? EPISTOLA_PLUGIN_ID : DISABLED_EPISTOLA_PLUGIN_ID;\n },\n\n // Component for plugin-level configuration (tenantId)\n pluginConfigurationComponent: EpistolaConfigurationComponent,\n\n // Plugin logo\n pluginLogoBase64: EPISTOLA_PLUGIN_LOGO_BASE64,\n\n // Map action keys to their configuration components\n functionConfigurationComponents: {\n 'generate-document': GenerateDocumentConfigurationComponent,\n 'check-job-status': CheckJobStatusConfigurationComponent,\n 'download-document': DownloadDocumentConfigurationComponent,\n },\n\n // Translations\n pluginTranslations: {\n nl: {\n title: 'Epistola Document Suite',\n description: 'Documentgeneratie met Epistola',\n configurationTitle: 'Configuratienaam',\n baseUrl: 'Base URL',\n baseUrlTooltip: 'De basis URL van de Epistola API (bijv. https://api.epistola.app)',\n apiKey: 'API Key',\n apiKeyTooltip: 'De API sleutel voor authenticatie met Epistola',\n tenantId: 'Tenant ID',\n tenantIdTooltip:\n 'De tenant slug in Epistola (3-63 tekens, alleen kleine letters, cijfers en koppeltekens, bijv. \"mijn-tenant\")',\n defaultEnvironmentId: 'Standaard Omgeving',\n defaultEnvironmentIdTooltip:\n 'De standaard omgeving voor documentgeneratie (3-30 tekens, alleen kleine letters, cijfers en koppeltekens, bijv. \"productie\")',\n templateSyncEnabled: 'Template synchronisatie',\n templateSyncEnabledTooltip:\n 'Synchroniseer template definities automatisch van het classpath naar Epistola bij het opstarten',\n 'generate-document': 'Genereer Document',\n catalogId: 'Catalogus',\n catalogIdTooltip: 'Selecteer de catalogus waaruit een template gekozen wordt',\n templateId: 'Template',\n templateIdTooltip: 'Selecteer het template dat gebruikt wordt voor documentgeneratie',\n variantId: 'Variant',\n variantIdTooltip: 'Selecteer de template variant',\n variantSelectionMode: 'Variant selectie',\n variantSelectionModeTooltip: 'Kies hoe de variant geselecteerd wordt',\n selectByVariant: 'Selecteer variant',\n selectByAttributes: 'Selecteer op kenmerken',\n variantAttributes: 'Variant kenmerken',\n variantAttributesTooltip:\n 'Kenmerken voor automatische variant selectie. Waarden kunnen expressies zijn (doc:, pv:, case:).',\n attributeKey: 'Kenmerk',\n attributeKeyCustom: 'Aangepast...',\n attributeValue: 'Waarde',\n addAttribute: 'Kenmerk toevoegen',\n removeAttribute: 'Kenmerk verwijderen',\n attributeRequired: 'Verplicht',\n attributePreferred: 'Voorkeur',\n environmentId: 'Omgeving',\n environmentIdTooltip: 'Selecteer de doelomgeving (optioneel)',\n correlationId: 'Correlatie ID',\n correlationIdTooltip: 'Een optioneel correlatie ID voor het traceren van dit verzoek',\n dataMapping: 'Data Mapping',\n dataMappingTooltip: 'Koppeling van template velden naar data bronnen (doc:, pv:, case:)',\n outputFormat: 'Uitvoerformaat',\n outputFormatTooltip: 'Het gewenste formaat van het gegenereerde document',\n filename: 'Bestandsnaam',\n filenameTooltip: 'De bestandsnaam voor het gegenereerde document',\n resultProcessVariable: 'Resultaat Procesvariabele',\n resultProcessVariableTooltip:\n 'De naam van de procesvariabele waarin het request ID wordt opgeslagen',\n pdf: 'PDF',\n html: 'HTML',\n // Data mapping builder translations\n dataMappingTitle: 'Data Mapping',\n dataMappingDescription: 'Koppel template velden aan Valtimo data bronnen',\n jsonataDescription:\n 'JSONata expressie die de template data genereert. Gebruik $doc, $pv en $case voor toegang tot document-, procesvariabelen- en zaakdata.',\n mappingModeSimple: 'Eenvoudig',\n mappingModeAdvanced: 'Geavanceerd',\n mappingTools: 'Schema & Voorbeeld',\n expectedStructure: 'Verwacht schema',\n expectedStructureLoading: 'Schema laden...',\n previewTitle: 'Voorbeeld',\n previewDocPlaceholder: 'Document ID',\n previewExpected: 'Verwacht',\n previewProduced: 'Geproduceerd',\n previewRunHint: 'Voer een document ID in en klik ▶ om een voorbeeld te zien',\n previewMissing: 'Ontbrekende verplichte velden',\n templateField: 'Template veld',\n dataSource: 'Data bron',\n addMapping: 'Mapping toevoegen',\n noMappings: 'Nog geen mappings toegevoegd. Klik op \"Mapping toevoegen\" om te beginnen.',\n documentFields: 'Document velden',\n processVariables: 'Procesvariabelen',\n caseProperties: 'Zaak eigenschappen',\n sourceType: 'Brontype',\n sourceTypeDocument: 'Document veld',\n sourceTypeProcessVariable: 'Procesvariabele',\n sourceTypeManual: 'Handmatig',\n requiredFieldsMissing: 'Niet alle verplichte velden zijn gekoppeld',\n requiredFieldsComplete: 'Alle verplichte velden zijn gekoppeld',\n validationSummary: 'verplichte velden gekoppeld',\n jsonataValidationErrorsHeading: 'Ongeldige JSONata-expressies:',\n fieldRequired: 'Verplicht',\n fieldOptional: 'Optioneel',\n mapCollectionTo: 'Koppel collectie aan',\n browseMode: 'Bladermodus',\n pvMode: 'Procesvariabele modus',\n pvPlaceholder: 'Naam procesvariabele',\n expressionMode: 'Expressiemodus',\n availableFunctions: 'Beschikbare functies',\n itemFieldMapping: 'Veldnamen per item koppelen',\n itemFieldMappingTitle: 'Veldkoppeling per item:',\n sourceFieldPlaceholder: 'Bronveldnaam',\n noTemplateFields: 'Geen template velden beschikbaar',\n // Check job status action\n 'check-job-status': 'Controleer Taakstatus',\n requestIdVariable: 'Request ID Variabele',\n requestIdVariableTooltip: 'Naam van de procesvariabele met het Epistola request ID',\n statusVariable: 'Status Variabele',\n statusVariableTooltip: 'Naam van de procesvariabele waarin de status wordt opgeslagen',\n documentIdVariable: 'Document ID Variabele',\n documentIdVariableTooltip:\n 'Naam van de procesvariabele waarin het document ID wordt opgeslagen (bij voltooiing)',\n errorMessageVariable: 'Foutmelding Variabele',\n errorMessageVariableTooltip:\n 'Naam van de procesvariabele waarin de foutmelding wordt opgeslagen (bij fout)',\n // Download document action\n 'download-document': 'Download Document',\n contentVariable: 'Inhoud Variabele',\n contentVariableTooltip:\n 'Naam van de procesvariabele waarin de documentinhoud (Base64) wordt opgeslagen',\n // Admin page\n epistolaAdminOverview: 'Overzicht',\n epistolaAdminRefresh: 'Vernieuwen',\n epistolaAdminLoading: 'Laden...',\n epistolaAdminNoConfigurations: 'Geen Epistola plugin configuraties gevonden.',\n epistolaAdminTenantId: 'Tenant ID',\n epistolaAdminStatus: 'Status',\n epistolaAdminConnected: 'Verbonden',\n epistolaAdminUnreachable: 'Onbereikbaar',\n epistolaAdminError: 'Fout',\n epistolaAdminPluginActions: 'Plugin acties',\n epistolaAdminProblems: 'Problemen',\n epistolaAdminBackToOverview: 'Terug naar overzicht',\n epistolaAdminNoUsageForConfig: 'Geen procesacties geconfigureerd voor deze verbinding.',\n epistolaAdminCase: 'Zaak',\n epistolaAdminProcess: 'Proces',\n epistolaAdminActivity: 'Activiteit',\n epistolaAdminAction: 'Actie',\n epistolaAdminServerVersion: 'Server versie',\n epistolaAdminExport: 'Exporteren',\n epistolaAdminPendingJobs: 'Wachtende taken',\n epistolaAdminNoPendingJobs: 'Geen wachtende taken voor deze verbinding.',\n epistolaAdminConfiguration: 'Configuratie',\n epistolaAdminRequestId: 'Request ID',\n },\n en: {\n title: 'Epistola Document Suite',\n description: 'Document generation using Epistola',\n configurationTitle: 'Configuration name',\n baseUrl: 'Base URL',\n baseUrlTooltip: 'The base URL of the Epistola API (e.g. https://api.epistola.app)',\n apiKey: 'API Key',\n apiKeyTooltip: 'The API key for authentication with Epistola',\n tenantId: 'Tenant ID',\n tenantIdTooltip:\n 'The tenant slug in Epistola (3-63 chars, lowercase letters, digits and hyphens only, e.g. \"my-tenant\")',\n defaultEnvironmentId: 'Default Environment',\n defaultEnvironmentIdTooltip:\n 'The default environment for document generation (3-30 chars, lowercase letters, digits and hyphens only, e.g. \"production\")',\n templateSyncEnabled: 'Template sync',\n templateSyncEnabledTooltip:\n 'Automatically synchronize template definitions from classpath to Epistola on startup',\n 'generate-document': 'Generate Document',\n catalogId: 'Catalog',\n catalogIdTooltip: 'Select the catalog to choose a template from',\n templateId: 'Template',\n templateIdTooltip: 'Select the template to use for document generation',\n variantId: 'Variant',\n variantIdTooltip: 'Select the template variant',\n variantSelectionMode: 'Variant selection',\n variantSelectionModeTooltip: 'Choose how the variant is selected',\n selectByVariant: 'Select variant',\n selectByAttributes: 'Select by attributes',\n variantAttributes: 'Variant attributes',\n variantAttributesTooltip:\n 'Attributes for automatic variant selection. Values can be expressions (doc:, pv:, case:).',\n attributeKey: 'Attribute',\n attributeKeyCustom: 'Custom...',\n attributeValue: 'Value',\n addAttribute: 'Add attribute',\n removeAttribute: 'Remove attribute',\n attributeRequired: 'Required',\n attributePreferred: 'Preferred',\n environmentId: 'Environment',\n environmentIdTooltip: 'Select the target environment (optional)',\n correlationId: 'Correlation ID',\n correlationIdTooltip: 'An optional correlation ID for tracking this request',\n dataMapping: 'Data Mapping',\n dataMappingTooltip: 'Mapping of template fields to data sources (doc:, pv:, case:)',\n outputFormat: 'Output Format',\n outputFormatTooltip: 'The desired format of the generated document',\n filename: 'Filename',\n filenameTooltip: 'The filename for the generated document',\n resultProcessVariable: 'Result Process Variable',\n resultProcessVariableTooltip: 'The name of the process variable to store the request ID in',\n pdf: 'PDF',\n html: 'HTML',\n // Data mapping builder translations\n dataMappingTitle: 'Data Mapping',\n dataMappingDescription: 'Map template fields to Valtimo data sources',\n mappingModeSimple: 'Simple',\n mappingModeAdvanced: 'Advanced',\n mappingTools: 'Schema & Preview',\n expectedStructure: 'Expected schema',\n expectedStructureLoading: 'Loading schema...',\n previewTitle: 'Preview',\n previewDocPlaceholder: 'Document ID',\n previewExpected: 'Expected',\n previewProduced: 'Produced',\n previewRunHint: 'Enter a document ID and click ▶ to preview the output',\n previewMissing: 'Missing required fields',\n jsonataDescription:\n 'JSONata expression that generates the template data. Use $doc, $pv and $case to access document, process variable and case data.',\n templateField: 'Template field',\n dataSource: 'Data source',\n addMapping: 'Add mapping',\n noMappings: 'No mappings added yet. Click \"Add mapping\" to start.',\n documentFields: 'Document fields',\n processVariables: 'Process variables',\n caseProperties: 'Case properties',\n sourceType: 'Source type',\n sourceTypeDocument: 'Document field',\n sourceTypeProcessVariable: 'Process variable',\n sourceTypeManual: 'Manual value',\n requiredFieldsMissing: 'Not all required fields are mapped',\n requiredFieldsComplete: 'All required fields are mapped',\n validationSummary: 'required fields mapped',\n jsonataValidationErrorsHeading: 'Invalid JSONata expressions:',\n fieldRequired: 'Required',\n fieldOptional: 'Optional',\n mapCollectionTo: 'Map collection to',\n browseMode: 'Browse mode',\n pvMode: 'Process variable mode',\n pvPlaceholder: 'Process variable name',\n expressionMode: 'Expression mode',\n availableFunctions: 'Available functions',\n itemFieldMapping: 'Map field names per item',\n itemFieldMappingTitle: 'Item field mapping:',\n sourceFieldPlaceholder: 'Source field name',\n noTemplateFields: 'No template fields available',\n // Check job status action\n 'check-job-status': 'Check Job Status',\n requestIdVariable: 'Request ID Variable',\n requestIdVariableTooltip: 'Name of the process variable containing the Epistola request ID',\n statusVariable: 'Status Variable',\n statusVariableTooltip: 'Name of the process variable to store the status in',\n documentIdVariable: 'Document ID Variable',\n documentIdVariableTooltip:\n 'Name of the process variable to store the document ID in (when completed)',\n errorMessageVariable: 'Error Message Variable',\n errorMessageVariableTooltip:\n 'Name of the process variable to store the error message in (when failed)',\n // Download document action\n 'download-document': 'Download Document',\n contentVariable: 'Content Variable',\n contentVariableTooltip:\n 'Name of the process variable to store the document content (Base64) in',\n // Admin page\n epistolaAdminOverview: 'Overview',\n epistolaAdminRefresh: 'Refresh',\n epistolaAdminLoading: 'Loading...',\n epistolaAdminNoConfigurations: 'No Epistola plugin configurations found.',\n epistolaAdminTenantId: 'Tenant ID',\n epistolaAdminStatus: 'Status',\n epistolaAdminConnected: 'Connected',\n epistolaAdminUnreachable: 'Unreachable',\n epistolaAdminError: 'Error',\n epistolaAdminPluginActions: 'Plugin actions',\n epistolaAdminProblems: 'Problems',\n epistolaAdminBackToOverview: 'Back to overview',\n epistolaAdminNoUsageForConfig: 'No process actions configured for this connection.',\n epistolaAdminCase: 'Case',\n epistolaAdminProcess: 'Process',\n epistolaAdminActivity: 'Activity',\n epistolaAdminAction: 'Action',\n epistolaAdminServerVersion: 'Server version',\n epistolaAdminExport: 'Export',\n epistolaAdminPendingJobs: 'Pending jobs',\n epistolaAdminNoPendingJobs: 'No pending jobs for this connection.',\n epistolaAdminConfiguration: 'Configuration',\n epistolaAdminRequestId: 'Request ID',\n },\n },\n};\n\nexport { epistolaPluginSpecification };\n","/*\n * Public API Surface of epistola plugin\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/epistola.module';\nexport * from './lib/epistola.specification';\nexport * from './lib/epistola-runtime-config';\nexport * from './lib/epistola-admin-routing.module';\nexport * from './lib/components/epistola-admin-page/epistola-admin-page.component';\nexport * from './lib/components/epistola-configuration/epistola-configuration.component';\nexport * from './lib/components/generate-document-configuration/generate-document-configuration.component';\nexport * from './lib/components/check-job-status-configuration/check-job-status-configuration.component';\nexport * from './lib/components/download-document-configuration/download-document-configuration.component';\nexport * from './lib/components/jsonata-editor/jsonata-editor.component';\nexport * from './lib/components/mapping-builder/mapping-builder.component';\nexport * from './lib/components/epistola-download/epistola-download.component';\nexport * from './lib/components/epistola-download/epistola-download.formio';\nexport * from './lib/components/epistola-retry-form/epistola-retry-form.component';\nexport * from './lib/components/epistola-retry-form/epistola-retry-form.formio';\nexport * from './lib/components/epistola-preview-button/epistola-preview-button.component';\nexport * from './lib/components/epistola-preview-button/epistola-preview-button.formio';\nexport * from './lib/components/epistola-document-preview/epistola-document-preview.component';\nexport * from './lib/components/epistola-document-preview/epistola-document-preview.formio';\nexport * from './lib/components/override-builder/override-builder.component';\nexport * from './lib/components/override-builder/override-builder.formio';\nexport * from './lib/components/process-link-selector/process-link-selector.component';\nexport * from './lib/components/process-link-selector/process-link-selector.formio';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","jsonata","i1.EpistolaPluginService","i3","i4","FORM_REF_PREFIX","take","takeUntil","i5","i6","debounceTime","i1.EpistolaAdminService"],"mappings":"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"}