@epistola.app/valtimo-plugin 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"epistola.app-valtimo-plugin.mjs","sources":["../../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/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/epistola.module.ts","../../src/lib/assets/epistola-logo.ts","../../src/lib/epistola.specification.ts","../../src/lib/components/epistola-download/epistola-download.formio.ts","../../src/public_api.ts","../../src/epistola.app-valtimo-plugin.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {ConfigService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {EnvironmentInfo, 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 templates for a plugin configuration.\n */\n getTemplates(pluginConfigurationId: string): Observable<TemplateInfo[]> {\n return this.http.get<TemplateInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates`\n );\n }\n\n /**\n * Get template details including its fields.\n */\n getTemplateDetails(pluginConfigurationId: string, templateId: string): Observable<TemplateDetails> {\n return this.http.get<TemplateDetails>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}`\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): Observable<VariantInfo[]> {\n return this.http.get<VariantInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}/variants`\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","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 {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';\nimport {TemplateField} from '../../models';\n\nexport type InputMode = 'browse' | 'pv' | 'expression';\n\n/**\n * Recursive component that renders a single TemplateField node as part of a tree form.\n *\n * - SCALAR fields render as a label + input row with a 3-mode selector (browse / pv / expression)\n * - OBJECT fields render as a collapsible section with children indented inside\n * - ARRAY fields render as a collapsible section with source collection input and optional per-item field mappings\n *\n * Input modes:\n * - Browse (⊞): ValuePathSelector for doc:/case: paths\n * - PV (pv): Dropdown of discovered process variables (text fallback when none found)\n * - Expression (fx): Free-text input for manual expressions\n */\n@Component({\n selector: 'epistola-field-tree',\n templateUrl: './field-tree.component.html',\n styleUrls: ['./field-tree.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n PluginTranslatePipeModule,\n InputModule,\n ValuePathSelectorComponent\n ]\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 readonly ValuePathSelectorPrefix = ValuePathSelectorPrefix;\n\n inputMode: InputMode = 'browse';\n expanded = false;\n\n /** For ARRAY fields: whether to show per-item field mapping */\n arrayPerFieldMode = false;\n\n /** Completeness badge for collapsed object/array sections */\n mappedCount = 0;\n totalRequired = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] || changes['field']) {\n this.updateCompleteness();\n // Auto-expand if there are unmapped required children\n if (!this.expanded && this.totalRequired > 0 && this.mappedCount < this.totalRequired) {\n this.expanded = true;\n }\n }\n // Detect input mode from prefill value\n if (changes['value'] && this.value != null) {\n if (this.field?.fieldType === 'SCALAR') {\n this.inputMode = this.detectInputMode(this.value);\n } else if (this.field?.fieldType === 'ARRAY') {\n const sourceValue = this.getSourceValue();\n if (sourceValue) {\n this.inputMode = this.detectInputMode(sourceValue);\n }\n // Detect per-field mode from value shape\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n this.arrayPerFieldMode = true;\n }\n }\n }\n }\n\n toggleExpanded(): void {\n this.expanded = !this.expanded;\n }\n\n setInputMode(mode: InputMode): void {\n this.inputMode = mode;\n }\n\n /** Handle value change from ValuePathSelector (browse mode) */\n onBrowseValueChange(newValue: string): void {\n this.emitScalarValue(newValue);\n }\n\n /** Handle value change from PV dropdown */\n onPvChange(newValue: string): void {\n if (newValue) {\n this.emitScalarValue('pv:' + newValue);\n } else {\n this.emitScalarValue('');\n }\n }\n\n /** Handle value change from text input (expression mode) */\n onExpressionValueChange(newValue: string): void {\n this.emitScalarValue(newValue);\n }\n\n /** Handle child value change for OBJECT fields */\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 /** Get the current value for a child field within an OBJECT */\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 /** Get the string value for display (for SCALAR leaf inputs and direct array mode) */\n getStringValue(): string {\n return typeof this.value === 'string' ? this.value : '';\n }\n\n /** Get the PV name from a pv: prefixed value (for PV dropdown default selection) */\n getPvName(): string {\n const str = this.getStringValue();\n return str.startsWith('pv:') ? str.substring(3) : '';\n }\n\n // --- ARRAY-specific methods ---\n\n /** Get the source collection value (works for both direct string and _source format) */\n getSourceValue(): string {\n if (typeof this.value === 'string') {\n return this.value;\n }\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n return this.value['_source'] || '';\n }\n return '';\n }\n\n /** Get the PV name from the source value */\n getSourcePvName(): string {\n const source = this.getSourceValue();\n return source.startsWith('pv:') ? source.substring(3) : '';\n }\n\n toggleArrayPerFieldMode(): void {\n this.arrayPerFieldMode = !this.arrayPerFieldMode;\n\n if (this.arrayPerFieldMode) {\n // Switch from direct to per-field: convert string value to _source object\n const currentSource = this.getSourceValue();\n const obj: Record<string, any> = {_source: currentSource};\n this.valueChange.emit(obj);\n } else {\n // Switch from per-field to direct: extract _source as string value\n const source = this.getSourceValue();\n this.valueChange.emit(source || undefined);\n }\n }\n\n /** Handle source collection value change (used in ARRAY mode) */\n onSourceBrowseChange(newValue: string): void {\n this.updateSourceValue(newValue);\n }\n\n onSourcePvChange(newValue: string): void {\n this.updateSourceValue(newValue ? 'pv:' + newValue : '');\n }\n\n onSourceExpressionChange(newValue: string): void {\n this.updateSourceValue(newValue);\n }\n\n /** Handle per-item field mapping change */\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 /** Get the current source field name mapping for a child */\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 /** Check if the array has any children that can be mapped per-item */\n hasArrayChildren(): boolean {\n return !!(this.field?.children && this.field.children.length > 0);\n }\n\n private emitScalarValue(newValue: string): void {\n this.valueChange.emit(newValue || undefined);\n }\n\n private updateSourceValue(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 private updateCompleteness(): void {\n if (this.field?.fieldType === 'OBJECT' && this.field.children) {\n const stats = this.countRequiredMapped(this.field.children, this.value || {});\n this.mappedCount = stats.mapped;\n this.totalRequired = stats.total;\n } else if (this.field?.fieldType === 'ARRAY') {\n this.updateArrayCompleteness();\n }\n }\n\n private updateArrayCompleteness(): void {\n if (!this.field?.children || this.field.children.length === 0) {\n // No children: just check if source is set\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 // Per-field mode: count source + required children\n let total = 0;\n let mapped = 0;\n\n // Source counts as 1 required\n if (this.field?.required) {\n total++;\n if (this.value['_source'] && this.value['_source'].trim().length > 0) {\n mapped++;\n }\n }\n\n // Count required children\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 // Direct mode: just check if source is set\n this.totalRequired = this.field?.required ? 1 : 0;\n this.mappedCount = this.getSourceValue() ? (this.field?.required ? 1 : 0) : 0;\n }\n }\n\n private countRequiredMapped(\n fields: TemplateField[],\n mapping: Record<string, any>\n ): {mapped: number; total: number} {\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 = this.countRequiredMapped(field.children, nested);\n mapped += childStats.mapped;\n total += childStats.total;\n }\n }\n return {mapped, total};\n }\n\n private detectInputMode(value: any): InputMode {\n if (typeof value !== 'string') 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 private isResolvableValue(value: string): boolean {\n return value.startsWith('doc:') || value.startsWith('case:') || value.startsWith('pv:') || value.startsWith('template:');\n }\n}\n","<!-- SCALAR field: label row + input with 3-mode selector -->\n<div *ngIf=\"field.fieldType === 'SCALAR'\" class=\"field-row\" [class.field-required-unmapped]=\"field.required && !getStringValue()\">\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 <div class=\"field-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=\"field-input-control\" *ngIf=\"inputMode === 'browse'\">\n <valtimo-value-path-selector\n [name]=\"'field_' + field.path\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [notation]=\"'dots'\"\n [disabled]=\"disabled\"\n [defaultValue]=\"getStringValue()\"\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=\"field-input-control\" *ngIf=\"inputMode === 'pv'\">\n <select\n *ngIf=\"processVariables.length > 0; else pvFallback\"\n class=\"pv-select\"\n [disabled]=\"disabled\"\n (change)=\"onPvChange($any($event.target).value)\"\n >\n <option value=\"\">{{ 'pvPlaceholder' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let pv of processVariables\" [value]=\"pv\" [selected]=\"pv === getPvName()\">{{ pv }}</option>\n </select>\n <ng-template #pvFallback>\n <v-input\n [name]=\"'pvfb_' + field.path\"\n [defaultValue]=\"getPvName()\"\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=\"field-input-control\" *ngIf=\"inputMode === 'expression'\">\n <v-input\n [name]=\"'fx_' + field.path\"\n [defaultValue]=\"getStringValue()\"\n [disabled]=\"disabled\"\n [placeholder]=\"'e.g. pv:variableName or doc:path.to.field'\"\n (valueChange)=\"onExpressionValueChange($event)\"\n ></v-input>\n </div>\n </div>\n</div>\n\n<!-- OBJECT field: collapsible section with children -->\n<div *ngIf=\"field.fieldType === 'OBJECT'\" 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<!-- ARRAY field: collapsible section with source collection + optional per-item mapping -->\n<div *ngIf=\"field.fieldType === 'ARRAY'\" 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 <div class=\"field-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 <div class=\"field-input-control\" *ngIf=\"inputMode === 'browse'\">\n <valtimo-value-path-selector\n [name]=\"'field_' + field.path\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [notation]=\"'dots'\"\n [disabled]=\"disabled\"\n [defaultValue]=\"getSourceValue()\"\n [showCaseDefinitionSelector]=\"!caseDefinitionKey\"\n (valueChangeEvent)=\"onSourceBrowseChange($event)\"\n ></valtimo-value-path-selector>\n </div>\n\n <div class=\"field-input-control\" *ngIf=\"inputMode === 'pv'\">\n <select\n *ngIf=\"processVariables.length > 0; else pvSourceFallback\"\n class=\"pv-select\"\n [disabled]=\"disabled\"\n (change)=\"onSourcePvChange($any($event.target).value)\"\n >\n <option value=\"\">{{ 'pvPlaceholder' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let pv of processVariables\" [value]=\"pv\" [selected]=\"pv === getSourcePvName()\">{{ pv }}</option>\n </select>\n <ng-template #pvSourceFallback>\n <v-input\n [name]=\"'pvfb_' + field.path\"\n [defaultValue]=\"getSourcePvName()\"\n [disabled]=\"disabled\"\n [placeholder]=\"'pvPlaceholder' | pluginTranslate: pluginId | async\"\n (valueChange)=\"onSourcePvChange($event)\"\n ></v-input>\n </ng-template>\n </div>\n\n <div class=\"field-input-control\" *ngIf=\"inputMode === 'expression'\">\n <v-input\n [name]=\"'fx_' + field.path\"\n [defaultValue]=\"getSourceValue()\"\n [disabled]=\"disabled\"\n [placeholder]=\"'e.g. pv:variableName or doc:path.to.field'\"\n (valueChange)=\"onSourceExpressionChange($event)\"\n ></v-input>\n </div>\n </div>\n </div>\n\n <!-- Per-item field mapping toggle (only shown when array has children) -->\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 {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {Observable, Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {TemplateField} from '../../models';\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 imports: [\n CommonModule,\n PluginTranslatePipeModule,\n FieldTreeComponent\n ]\n})\nexport class DataMappingTreeComponent implements OnInit, OnDestroy {\n @Input() pluginId!: string;\n @Input() templateFields$!: Observable<TemplateField[]>;\n @Input() prefillMapping$!: Observable<Record<string, any>>;\n @Input() disabled$!: Observable<boolean>;\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 templateFields: TemplateField[] = [];\n mapping: Record<string, any> = {};\n disabled = false;\n\n private readonly destroy$ = new Subject<void>();\n\n ngOnInit(): void {\n this.templateFields$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(fields => {\n this.templateFields = fields;\n this.emitRequiredFieldsStatus();\n });\n\n this.prefillMapping$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(mapping => {\n if (mapping && Object.keys(mapping).length > 0) {\n this.mapping = {...mapping};\n }\n this.emitRequiredFieldsStatus();\n });\n\n this.disabled$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(disabled => {\n this.disabled = disabled;\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\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 = this.countRequiredMapped(this.templateFields, this.mapping);\n this.requiredFieldsStatus.emit(stats);\n }\n\n private countRequiredMapped(\n fields: TemplateField[],\n mapping: Record<string, any>\n ): {mapped: number; total: number} {\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 = this.countRequiredMapped(field.children, nested);\n mapped += childStats.mapped;\n total += childStats.total;\n }\n }\n return {mapped, total};\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 {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, filter, map, take, takeUntil} from 'rxjs/operators';\nimport {GenerateDocumentConfig, TemplateField, VariantInfo} 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 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 // Required inputs from FunctionConfigurationComponent\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<GenerateDocumentConfig>;\n\n // Optional inputs from FunctionConfigurationComponent\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 // Template options loaded from API\n templateOptions$ = new BehaviorSubject<SelectItem[]>([]);\n templatesLoading$ = new BehaviorSubject<boolean>(false);\n\n // Variant options loaded based on selected template\n variantOptions$ = new BehaviorSubject<SelectItem[]>([]);\n variantsLoading$ = new BehaviorSubject<boolean>(false);\n\n // Environment options loaded from API\n environmentOptions$ = new BehaviorSubject<SelectItem[]>([]);\n environmentsLoading$ = new BehaviorSubject<boolean>(false);\n\n // Template fields for data mapping\n templateFields$ = new BehaviorSubject<TemplateField[]>([]);\n templateFieldsLoading$ = new BehaviorSubject<boolean>(false);\n\n // Current data mapping (nested structure mirroring template schema)\n dataMapping$ = new BehaviorSubject<Record<string, any>>({});\n\n // Prefill data mapping observable for the tree\n prefillDataMapping$!: Observable<Record<string, any>>;\n\n outputFormatOptions: SelectItem[] = [\n {id: 'PDF', text: 'PDF'},\n {id: 'HTML', text: 'HTML'}\n ];\n\n // Show data mapping builder only when template is selected\n readonly selectedTemplateId$ = new BehaviorSubject<string>('');\n readonly selectedVariantId$ = new BehaviorSubject<string>('');\n\n // Variant selection mode: 'explicit' (dropdown) or 'attributes' (key-value pairs)\n variantSelectionMode: VariantSelectionMode = 'explicit';\n\n // Variant attributes for attribute-based selection\n variantAttributeEntries: {key: string; value: string}[] = [];\n\n // Case definition key from context (for ValuePathSelector)\n caseDefinitionKey: string | null = null;\n\n // Discovered process variables\n processVariables: string[] = [];\n\n // Required fields status\n requiredFieldsStatus: {mapped: number; total: number} = {mapped: 0, total: 0};\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 constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly processLinkStateService: ProcessLinkStateService\n ) {}\n\n ngOnInit(): void {\n this.initContext();\n this.initPrefillDataMapping();\n this.initPluginConfiguration();\n this.initTemplatesLoading();\n this.initEnvironmentsLoading();\n this.initVariantsLoading();\n this.initTemplateFieldsLoading();\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>;\n this.formValue$.next(formValue);\n\n // Update selected template if changed (also clears variant selection)\n if (formValue.templateId && formValue.templateId !== this.selectedTemplateId$.getValue()) {\n this.selectedTemplateId$.next(formValue.templateId);\n this.selectedVariantId$.next('');\n }\n\n // Update selected variant if changed\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 // Re-validate when data mapping changes\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 // Re-validate when required fields status changes\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: ''}];\n }\n // Re-validate\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n addAttributeEntry(): void {\n this.variantAttributeEntries = [...this.variantAttributeEntries, {key: '', value: ''}];\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 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 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 });\n }\n }\n\n private initPrefillDataMapping(): void {\n if (this.prefillConfiguration$) {\n this.prefillDataMapping$ = this.prefillConfiguration$.pipe(\n map(config => config?.dataMapping || {})\n );\n\n // Also set initial selected template, variant mode, and variant\n this.prefillConfiguration$.pipe(\n takeUntil(this.destroy$),\n filter(config => !!config?.templateId)\n ).subscribe(config => {\n this.selectedTemplateId$.next(config.templateId);\n if (config.variantAttributes && Object.keys(config.variantAttributes).length > 0) {\n this.variantSelectionMode = 'attributes';\n this.variantAttributeEntries = Object.entries(config.variantAttributes)\n .map(([key, value]) => ({key, value}));\n } else if (config.variantId) {\n this.variantSelectionMode = 'explicit';\n this.selectedVariantId$.next(config.variantId);\n }\n if (config.dataMapping) {\n this.dataMapping$.next(config.dataMapping);\n }\n });\n } else {\n this.prefillDataMapping$ = new BehaviorSubject({}).asObservable();\n }\n }\n\n private initPluginConfiguration(): void {\n const sources: Observable<string>[] = [];\n\n // Create mode: framework emits when user selects a plugin configuration\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 // Edit mode: read pluginConfigurationId from the ProcessLink entity\n // (selectedPluginConfigurationData$ does not emit in edit mode)\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 private initTemplatesLoading(): void {\n this.pluginConfigurationId$.pipe(\n takeUntil(this.destroy$),\n filter(id => !!id)\n ).subscribe(configurationId => {\n this.templatesLoading$.next(true);\n this.epistolaPluginService.getTemplates(configurationId).pipe(\n takeUntil(this.destroy$),\n catchError(() => of([]))\n ).subscribe(templates => {\n const options: SelectItem[] = templates.map(t => ({\n id: t.id,\n text: t.name\n }));\n this.templateOptions$.next(options);\n this.templatesLoading$.next(false);\n });\n });\n }\n\n private initEnvironmentsLoading(): void {\n this.pluginConfigurationId$.pipe(\n takeUntil(this.destroy$),\n filter(id => !!id)\n ).subscribe(configurationId => {\n this.environmentsLoading$.next(true);\n this.epistolaPluginService.getEnvironments(configurationId).pipe(\n takeUntil(this.destroy$),\n catchError(() => of([]))\n ).subscribe(environments => {\n const options: SelectItem[] = environments.map(e => ({\n id: e.id,\n text: e.name\n }));\n this.environmentOptions$.next(options);\n this.environmentsLoading$.next(false);\n });\n });\n }\n\n private initVariantsLoading(): void {\n combineLatest([\n this.pluginConfigurationId$,\n this.selectedTemplateId$\n ]).pipe(\n takeUntil(this.destroy$),\n filter(([configId, templateId]) => !!configId && !!templateId)\n ).subscribe(([configurationId, templateId]) => {\n this.variantsLoading$.next(true);\n this.epistolaPluginService.getVariants(configurationId, templateId).pipe(\n takeUntil(this.destroy$),\n catchError(() => of([]))\n ).subscribe(variants => {\n const options: SelectItem[] = variants.map(v => ({\n id: v.id,\n text: v.name + this.formatAttributes(v.attributes)\n }));\n this.variantOptions$.next(options);\n this.variantsLoading$.next(false);\n });\n });\n }\n\n private initTemplateFieldsLoading(): void {\n combineLatest([\n this.pluginConfigurationId$,\n this.selectedTemplateId$\n ]).pipe(\n takeUntil(this.destroy$),\n filter(([configId, templateId]) => !!configId && !!templateId)\n ).subscribe(([configurationId, templateId]) => {\n this.templateFieldsLoading$.next(true);\n this.epistolaPluginService.getTemplateDetails(configurationId, templateId).pipe(\n takeUntil(this.destroy$),\n catchError(() => of({fields: []} as any))\n ).subscribe(details => {\n this.templateFields$.next(details.fields || []);\n this.templateFieldsLoading$.next(false);\n });\n\n // Also load process variables if we have a case context\n this.loadProcessVariables();\n });\n }\n\n private loadProcessVariables(): void {\n // Try to discover process variables (best-effort, may not always have context)\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 });\n }\n }\n\n private handleValid(formValue: Partial<GenerateDocumentConfig>): void {\n const baseComplete = !!(\n formValue?.templateId &&\n formValue?.outputFormat &&\n formValue?.filename &&\n formValue?.resultProcessVariable\n );\n\n // Variant selection: if attribute mode is used, all entries must have both key and value filled.\n // Neither variant nor attributes are required — omitting both uses the template's default variant.\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 // Check if all required template fields are mapped\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 config: GenerateDocumentConfig = {\n templateId: formValue.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 = {};\n for (const entry of this.variantAttributeEntries) {\n if (entry.key && entry.value) {\n config.variantAttributes[entry.key] = entry.value;\n }\n }\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 templateOptions: templateOptions$ | async,\n templatesLoading: templatesLoading$ | async,\n variantOptions: variantOptions$ | async,\n variantsLoading: variantsLoading$ | async,\n environmentOptions: environmentOptions$ | async,\n environmentsLoading: environmentsLoading$ | async,\n templateFieldsLoading: templateFieldsLoading$ | async,\n selectedTemplateId: selectedTemplateId$ | async\n } as obs\"\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.templateOptions\"\n [defaultSelectionId]=\"obs.prefill?.templateId\"\n [disabled]=\"obs.disabled || obs.templatesLoading\"\n [required]=\"true\"\n [loading]=\"obs.templatesLoading\"\n >\n </v-select>\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.variantOptions\"\n [defaultSelectionId]=\"obs.prefill?.variantId\"\n [disabled]=\"obs.disabled || obs.variantsLoading || !obs.selectedTemplateId\"\n [required]=\"false\"\n [loading]=\"obs.variantsLoading\"\n >\n </v-select>\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 <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 <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 <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.environmentOptions\"\n [defaultSelectionId]=\"obs.prefill?.environmentId\"\n [disabled]=\"obs.disabled || obs.environmentsLoading\"\n [required]=\"false\"\n [loading]=\"obs.environmentsLoading\"\n >\n </v-select>\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<epistola-data-mapping-tree\n *ngIf=\"(selectedTemplateId$ | async)\"\n [pluginId]=\"pluginId\"\n [templateFields$]=\"templateFields$\"\n [disabled$]=\"disabled$\"\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 {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 {EpistolaDownloadComponent} from './components/epistola-download/epistola-download.component';\nimport {EpistolaPluginService} from './services';\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 FieldTreeComponent,\n EpistolaDownloadComponent\n ],\n exports: [\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n DataMappingTreeComponent,\n FieldTreeComponent,\n EpistolaDownloadComponent\n ],\n providers: [\n EpistolaPluginService\n ]\n})\nexport class EpistolaPluginModule {}\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 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 attributeValue: 'Waarde',\n addAttribute: 'Kenmerk toevoegen',\n removeAttribute: 'Kenmerk verwijderen',\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 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 attributeValue: 'Value',\n addAttribute: 'Add attribute',\n removeAttribute: 'Remove attribute',\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","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","/*\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/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';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3","take","i1.EpistolaPluginService","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"epistola.app-valtimo-plugin.mjs","sources":["../../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/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/epistola.module.ts","../../src/lib/assets/epistola-logo.ts","../../src/lib/epistola.specification.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/public_api.ts","../../src/epistola.app-valtimo-plugin.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {ConfigService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {EnvironmentInfo, 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 templates for a plugin configuration.\n */\n getTemplates(pluginConfigurationId: string): Observable<TemplateInfo[]> {\n return this.http.get<TemplateInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates`\n );\n }\n\n /**\n * Get template details including its fields.\n */\n getTemplateDetails(pluginConfigurationId: string, templateId: string): Observable<TemplateDetails> {\n return this.http.get<TemplateDetails>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}`\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): Observable<VariantInfo[]> {\n return this.http.get<VariantInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}/variants`\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 * 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, 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';\nimport {TemplateField} from '../../models';\nimport {countRequiredMapped} from '../../utils/template-field-utils';\n\nexport type InputMode = 'browse' | 'pv' | 'expression';\n\n/**\n * Recursive component that renders a single TemplateField node as part of a tree form.\n *\n * - SCALAR fields render as a label + input row with a 3-mode selector (browse / pv / expression)\n * - OBJECT fields render as a collapsible section with children indented inside\n * - ARRAY fields render as a collapsible section with source collection input and optional per-item field mappings\n *\n * Input modes:\n * - Browse (⊞): ValuePathSelector for doc:/case: paths\n * - PV (pv): Dropdown of discovered process variables (text fallback when none found)\n * - Expression (fx): Free-text input for manual expressions\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: [\n CommonModule,\n FormsModule,\n PluginTranslatePipeModule,\n InputModule,\n ValuePathSelectorComponent\n ]\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 readonly ValuePathSelectorPrefix = ValuePathSelectorPrefix;\n\n inputMode: InputMode = 'browse';\n expanded = false;\n\n /** For ARRAY fields: whether to show per-item field mapping */\n arrayPerFieldMode = false;\n\n /** Completeness badge for collapsed object/array sections */\n mappedCount = 0;\n totalRequired = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] || changes['field']) {\n this.updateCompleteness();\n // Auto-expand if there are unmapped required children\n if (!this.expanded && this.totalRequired > 0 && this.mappedCount < this.totalRequired) {\n this.expanded = true;\n }\n }\n // Detect input mode from prefill value\n if (changes['value'] && this.value != null) {\n if (this.field?.fieldType === 'SCALAR') {\n this.inputMode = this.detectInputMode(this.value);\n } else if (this.field?.fieldType === 'ARRAY') {\n const sourceValue = this.getSourceValue();\n if (sourceValue) {\n this.inputMode = this.detectInputMode(sourceValue);\n }\n // Detect per-field mode from value shape\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n this.arrayPerFieldMode = true;\n }\n }\n }\n }\n\n toggleExpanded(): void {\n this.expanded = !this.expanded;\n }\n\n setInputMode(mode: InputMode): void {\n this.inputMode = mode;\n }\n\n /** Handle value change from ValuePathSelector (browse mode) */\n onBrowseValueChange(newValue: string): void {\n this.emitScalarValue(newValue);\n }\n\n /** Handle value change from PV dropdown */\n onPvChange(newValue: string): void {\n if (newValue) {\n this.emitScalarValue('pv:' + newValue);\n } else {\n this.emitScalarValue('');\n }\n }\n\n /** Handle value change from text input (expression mode) */\n onExpressionValueChange(newValue: string): void {\n this.emitScalarValue(newValue);\n }\n\n /** Handle child value change for OBJECT fields */\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 /** Get the current value for a child field within an OBJECT */\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 /** Get the string value for display (for SCALAR leaf inputs and direct array mode) */\n getStringValue(): string {\n return typeof this.value === 'string' ? this.value : '';\n }\n\n /** Get the PV name from a pv: prefixed value (for PV dropdown default selection) */\n getPvName(): string {\n const str = this.getStringValue();\n return str.startsWith('pv:') ? str.substring(3) : '';\n }\n\n // --- ARRAY-specific methods ---\n\n /** Get the source collection value (works for both direct string and _source format) */\n getSourceValue(): string {\n if (typeof this.value === 'string') {\n return this.value;\n }\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n return this.value['_source'] || '';\n }\n return '';\n }\n\n /** Get the PV name from the source value */\n getSourcePvName(): string {\n const source = this.getSourceValue();\n return source.startsWith('pv:') ? source.substring(3) : '';\n }\n\n toggleArrayPerFieldMode(): void {\n this.arrayPerFieldMode = !this.arrayPerFieldMode;\n\n if (this.arrayPerFieldMode) {\n // Switch from direct to per-field: convert string value to _source object\n const currentSource = this.getSourceValue();\n const obj: Record<string, any> = {_source: currentSource};\n this.valueChange.emit(obj);\n } else {\n // Switch from per-field to direct: extract _source as string value\n const source = this.getSourceValue();\n this.valueChange.emit(source || undefined);\n }\n }\n\n /** Handle source collection value change (used in ARRAY mode) */\n onSourceBrowseChange(newValue: string): void {\n this.updateSourceValue(newValue);\n }\n\n onSourcePvChange(newValue: string): void {\n this.updateSourceValue(newValue ? 'pv:' + newValue : '');\n }\n\n onSourceExpressionChange(newValue: string): void {\n this.updateSourceValue(newValue);\n }\n\n /** Handle per-item field mapping change */\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 /** Get the current source field name mapping for a child */\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 /** Check if the array has any children that can be mapped per-item */\n hasArrayChildren(): boolean {\n return !!(this.field?.children && this.field.children.length > 0);\n }\n\n private emitScalarValue(newValue: string): void {\n this.valueChange.emit(newValue || undefined);\n }\n\n private updateSourceValue(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 private updateCompleteness(): void {\n if (this.field?.fieldType === 'OBJECT' && this.field.children) {\n const stats = countRequiredMapped(this.field.children, this.value || {});\n this.mappedCount = stats.mapped;\n this.totalRequired = stats.total;\n } else if (this.field?.fieldType === 'ARRAY') {\n this.updateArrayCompleteness();\n }\n }\n\n private updateArrayCompleteness(): void {\n if (!this.field?.children || this.field.children.length === 0) {\n // No children: just check if source is set\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 // Per-field mode: count source + required children\n let total = 0;\n let mapped = 0;\n\n // Source counts as 1 required\n if (this.field?.required) {\n total++;\n if (this.value['_source'] && this.value['_source'].trim().length > 0) {\n mapped++;\n }\n }\n\n // Count required children\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 // Direct mode: just check if source is set\n this.totalRequired = this.field?.required ? 1 : 0;\n this.mappedCount = this.getSourceValue() ? (this.field?.required ? 1 : 0) : 0;\n }\n }\n\n private detectInputMode(value: any): InputMode {\n if (typeof value !== 'string') 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 private isResolvableValue(value: string): boolean {\n return value.startsWith('doc:') || value.startsWith('case:') || value.startsWith('pv:') || value.startsWith('template:');\n }\n}\n","<!-- SCALAR field: label row + input with 3-mode selector -->\n<div *ngIf=\"field.fieldType === 'SCALAR'\" class=\"field-row\" [class.field-required-unmapped]=\"field.required && !getStringValue()\">\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 <div class=\"field-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=\"field-input-control\" *ngIf=\"inputMode === 'browse'\">\n <valtimo-value-path-selector\n [name]=\"'field_' + field.path\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [notation]=\"'dots'\"\n [disabled]=\"disabled\"\n [defaultValue]=\"getStringValue()\"\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=\"field-input-control\" *ngIf=\"inputMode === 'pv'\">\n <select\n *ngIf=\"processVariables.length > 0; else pvFallback\"\n class=\"pv-select\"\n [disabled]=\"disabled\"\n (change)=\"onPvChange($any($event.target).value)\"\n >\n <option value=\"\">{{ 'pvPlaceholder' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let pv of processVariables\" [value]=\"pv\" [selected]=\"pv === getPvName()\">{{ pv }}</option>\n </select>\n <ng-template #pvFallback>\n <v-input\n [name]=\"'pvfb_' + field.path\"\n [defaultValue]=\"getPvName()\"\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=\"field-input-control\" *ngIf=\"inputMode === 'expression'\">\n <v-input\n [name]=\"'fx_' + field.path\"\n [defaultValue]=\"getStringValue()\"\n [disabled]=\"disabled\"\n [placeholder]=\"'e.g. pv:variableName or doc:path.to.field'\"\n (valueChange)=\"onExpressionValueChange($event)\"\n ></v-input>\n </div>\n </div>\n</div>\n\n<!-- OBJECT field: collapsible section with children -->\n<div *ngIf=\"field.fieldType === 'OBJECT'\" 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<!-- ARRAY field: collapsible section with source collection + optional per-item mapping -->\n<div *ngIf=\"field.fieldType === 'ARRAY'\" 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 <div class=\"field-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 <div class=\"field-input-control\" *ngIf=\"inputMode === 'browse'\">\n <valtimo-value-path-selector\n [name]=\"'field_' + field.path\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [notation]=\"'dots'\"\n [disabled]=\"disabled\"\n [defaultValue]=\"getSourceValue()\"\n [showCaseDefinitionSelector]=\"!caseDefinitionKey\"\n (valueChangeEvent)=\"onSourceBrowseChange($event)\"\n ></valtimo-value-path-selector>\n </div>\n\n <div class=\"field-input-control\" *ngIf=\"inputMode === 'pv'\">\n <select\n *ngIf=\"processVariables.length > 0; else pvSourceFallback\"\n class=\"pv-select\"\n [disabled]=\"disabled\"\n (change)=\"onSourcePvChange($any($event.target).value)\"\n >\n <option value=\"\">{{ 'pvPlaceholder' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let pv of processVariables\" [value]=\"pv\" [selected]=\"pv === getSourcePvName()\">{{ pv }}</option>\n </select>\n <ng-template #pvSourceFallback>\n <v-input\n [name]=\"'pvfb_' + field.path\"\n [defaultValue]=\"getSourcePvName()\"\n [disabled]=\"disabled\"\n [placeholder]=\"'pvPlaceholder' | pluginTranslate: pluginId | async\"\n (valueChange)=\"onSourcePvChange($event)\"\n ></v-input>\n </ng-template>\n </div>\n\n <div class=\"field-input-control\" *ngIf=\"inputMode === 'expression'\">\n <v-input\n [name]=\"'fx_' + field.path\"\n [defaultValue]=\"getSourceValue()\"\n [disabled]=\"disabled\"\n [placeholder]=\"'e.g. pv:variableName or doc:path.to.field'\"\n (valueChange)=\"onSourceExpressionChange($event)\"\n ></v-input>\n </div>\n </div>\n </div>\n\n <!-- Per-item field mapping toggle (only shown when array has children) -->\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, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {Observable, Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\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 OnInit, OnDestroy {\n @Input() pluginId!: string;\n @Input() templateFields$!: Observable<TemplateField[]>;\n @Input() prefillMapping$!: Observable<Record<string, any>>;\n @Input() disabled$!: Observable<boolean>;\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 templateFields: TemplateField[] = [];\n mapping: Record<string, any> = {};\n disabled = false;\n\n private readonly destroy$ = new Subject<void>();\n\n ngOnInit(): void {\n this.templateFields$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(fields => {\n this.templateFields = fields;\n this.emitRequiredFieldsStatus();\n });\n\n this.prefillMapping$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(mapping => {\n if (mapping && Object.keys(mapping).length > 0) {\n this.mapping = {...mapping};\n }\n this.emitRequiredFieldsStatus();\n });\n\n this.disabled$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(disabled => {\n this.disabled = disabled;\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\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, filter, map, take, takeUntil} from 'rxjs/operators';\nimport {GenerateDocumentConfig, TemplateField, VariantInfo} 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 // Required inputs from FunctionConfigurationComponent\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<GenerateDocumentConfig>;\n\n // Optional inputs from FunctionConfigurationComponent\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 // Template options loaded from API\n templateOptions$ = new BehaviorSubject<SelectItem[]>([]);\n templatesLoading$ = new BehaviorSubject<boolean>(false);\n templatesError$ = new BehaviorSubject<string | null>(null);\n\n // Variant options loaded based on selected template\n variantOptions$ = new BehaviorSubject<SelectItem[]>([]);\n variantsLoading$ = new BehaviorSubject<boolean>(false);\n variantsError$ = new BehaviorSubject<string | null>(null);\n\n // Environment options loaded from API\n environmentOptions$ = new BehaviorSubject<SelectItem[]>([]);\n environmentsLoading$ = new BehaviorSubject<boolean>(false);\n environmentsError$ = new BehaviorSubject<string | null>(null);\n\n // Template fields for data mapping\n templateFields$ = new BehaviorSubject<TemplateField[]>([]);\n templateFieldsLoading$ = new BehaviorSubject<boolean>(false);\n templateFieldsError$ = new BehaviorSubject<string | null>(null);\n\n // Current data mapping (nested structure mirroring template schema)\n dataMapping$ = new BehaviorSubject<Record<string, any>>({});\n\n // Prefill data mapping observable for the tree\n prefillDataMapping$!: Observable<Record<string, any>>;\n\n outputFormatOptions: SelectItem[] = [\n {id: 'PDF', text: 'PDF'},\n {id: 'HTML', text: 'HTML'}\n ];\n\n // Show data mapping builder only when template is selected\n readonly selectedTemplateId$ = new BehaviorSubject<string>('');\n readonly selectedVariantId$ = new BehaviorSubject<string>('');\n\n // Variant selection mode: 'explicit' (dropdown) or 'attributes' (key-value pairs)\n variantSelectionMode: VariantSelectionMode = 'explicit';\n\n // Variant attributes for attribute-based selection\n variantAttributeEntries: {key: string; value: string}[] = [];\n\n // Case definition key from context (for ValuePathSelector)\n caseDefinitionKey: string | null = null;\n\n // Discovered process variables\n processVariables: string[] = [];\n\n // Required fields status\n requiredFieldsStatus: {mapped: number; total: number} = {mapped: 0, total: 0};\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 constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly processLinkStateService: ProcessLinkStateService,\n private readonly cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.initContext();\n this.initPrefillDataMapping();\n this.initPluginConfiguration();\n this.initTemplatesLoading();\n this.initEnvironmentsLoading();\n this.initVariantsLoading();\n this.initTemplateFieldsLoading();\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>;\n this.formValue$.next(formValue);\n\n // Update selected template if changed (also clears variant selection)\n if (formValue.templateId && formValue.templateId !== this.selectedTemplateId$.getValue()) {\n this.selectedTemplateId$.next(formValue.templateId);\n this.selectedVariantId$.next('');\n }\n\n // Update selected variant if changed\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 // Re-validate when data mapping changes\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 // Re-validate when required fields status changes\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: ''}];\n }\n // Re-validate\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n addAttributeEntry(): void {\n this.variantAttributeEntries = [...this.variantAttributeEntries, {key: '', value: ''}];\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 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 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 initPrefillDataMapping(): void {\n if (this.prefillConfiguration$) {\n this.prefillDataMapping$ = this.prefillConfiguration$.pipe(\n map(config => config?.dataMapping || {})\n );\n\n // Also set initial selected template, variant mode, and variant\n this.prefillConfiguration$.pipe(\n takeUntil(this.destroy$),\n filter(config => !!config?.templateId)\n ).subscribe(config => {\n this.selectedTemplateId$.next(config.templateId);\n if (config.variantAttributes && Object.keys(config.variantAttributes).length > 0) {\n this.variantSelectionMode = 'attributes';\n this.variantAttributeEntries = Object.entries(config.variantAttributes)\n .map(([key, value]) => ({key, value}));\n } else if (config.variantId) {\n this.variantSelectionMode = 'explicit';\n this.selectedVariantId$.next(config.variantId);\n }\n if (config.dataMapping) {\n this.dataMapping$.next(config.dataMapping);\n }\n this.cdr.markForCheck();\n });\n } else {\n this.prefillDataMapping$ = new BehaviorSubject({}).asObservable();\n }\n }\n\n private initPluginConfiguration(): void {\n const sources: Observable<string>[] = [];\n\n // Create mode: framework emits when user selects a plugin configuration\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 // Edit mode: read pluginConfigurationId from the ProcessLink entity\n // (selectedPluginConfigurationData$ does not emit in edit mode)\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 private initTemplatesLoading(): void {\n this.pluginConfigurationId$.pipe(\n takeUntil(this.destroy$),\n filter(id => !!id)\n ).subscribe(configurationId => {\n this.templatesLoading$.next(true);\n this.templatesError$.next(null);\n this.epistolaPluginService.getTemplates(configurationId).pipe(\n takeUntil(this.destroy$),\n catchError(() => {\n this.templatesError$.next('Failed to load templates');\n return of([]);\n })\n ).subscribe(templates => {\n const options: SelectItem[] = templates.map(t => ({\n id: t.id,\n text: t.name\n }));\n this.templateOptions$.next(options);\n this.templatesLoading$.next(false);\n });\n });\n }\n\n private initEnvironmentsLoading(): void {\n this.pluginConfigurationId$.pipe(\n takeUntil(this.destroy$),\n filter(id => !!id)\n ).subscribe(configurationId => {\n this.environmentsLoading$.next(true);\n this.environmentsError$.next(null);\n this.epistolaPluginService.getEnvironments(configurationId).pipe(\n takeUntil(this.destroy$),\n catchError(() => {\n this.environmentsError$.next('Failed to load environments');\n return of([]);\n })\n ).subscribe(environments => {\n const options: SelectItem[] = environments.map(e => ({\n id: e.id,\n text: e.name\n }));\n this.environmentOptions$.next(options);\n this.environmentsLoading$.next(false);\n });\n });\n }\n\n private initVariantsLoading(): void {\n combineLatest([\n this.pluginConfigurationId$,\n this.selectedTemplateId$\n ]).pipe(\n takeUntil(this.destroy$),\n filter(([configId, templateId]) => !!configId && !!templateId)\n ).subscribe(([configurationId, templateId]) => {\n this.variantsLoading$.next(true);\n this.variantsError$.next(null);\n this.epistolaPluginService.getVariants(configurationId, templateId).pipe(\n takeUntil(this.destroy$),\n catchError(() => {\n this.variantsError$.next('Failed to load variants');\n return of([]);\n })\n ).subscribe(variants => {\n const options: SelectItem[] = variants.map(v => ({\n id: v.id,\n text: v.name + this.formatAttributes(v.attributes)\n }));\n this.variantOptions$.next(options);\n this.variantsLoading$.next(false);\n });\n });\n }\n\n private initTemplateFieldsLoading(): void {\n combineLatest([\n this.pluginConfigurationId$,\n this.selectedTemplateId$\n ]).pipe(\n takeUntil(this.destroy$),\n filter(([configId, templateId]) => !!configId && !!templateId)\n ).subscribe(([configurationId, templateId]) => {\n this.templateFieldsLoading$.next(true);\n this.templateFieldsError$.next(null);\n this.epistolaPluginService.getTemplateDetails(configurationId, templateId).pipe(\n takeUntil(this.destroy$),\n catchError(() => {\n this.templateFieldsError$.next('Failed to load template fields');\n return of({fields: []} as any);\n })\n ).subscribe(details => {\n this.templateFields$.next(details.fields || []);\n this.templateFieldsLoading$.next(false);\n });\n\n // Also load process variables if we have a case context\n this.loadProcessVariables();\n });\n }\n\n private loadProcessVariables(): void {\n // Try to discover process variables (best-effort, may not always have context)\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>): void {\n const baseComplete = !!(\n formValue?.templateId &&\n formValue?.outputFormat &&\n formValue?.filename &&\n formValue?.resultProcessVariable\n );\n\n // Variant selection: if attribute mode is used, all entries must have both key and value filled.\n // Neither variant nor attributes are required — omitting both uses the template's default variant.\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 // Check if all required template fields are mapped\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 config: GenerateDocumentConfig = {\n templateId: formValue.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 = {};\n for (const entry of this.variantAttributeEntries) {\n if (entry.key && entry.value) {\n config.variantAttributes[entry.key] = entry.value;\n }\n }\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 templateOptions: templateOptions$ | async,\n templatesLoading: templatesLoading$ | async,\n templatesError: templatesError$ | async,\n variantOptions: variantOptions$ | async,\n variantsLoading: variantsLoading$ | async,\n variantsError: variantsError$ | async,\n environmentOptions: environmentOptions$ | async,\n environmentsLoading: environmentsLoading$ | async,\n environmentsError: environmentsError$ | async,\n templateFieldsLoading: templateFieldsLoading$ | async,\n selectedTemplateId: selectedTemplateId$ | async\n } as obs\"\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.templateOptions\"\n [defaultSelectionId]=\"obs.prefill?.templateId\"\n [disabled]=\"obs.disabled || obs.templatesLoading\"\n [required]=\"true\"\n [loading]=\"obs.templatesLoading\"\n >\n </v-select>\n <div *ngIf=\"obs.templatesError\" class=\"loading-error\">{{ obs.templatesError }}</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.variantOptions\"\n [defaultSelectionId]=\"obs.prefill?.variantId\"\n [disabled]=\"obs.disabled || obs.variantsLoading || !obs.selectedTemplateId\"\n [required]=\"false\"\n [loading]=\"obs.variantsLoading\"\n >\n </v-select>\n <div *ngIf=\"obs.variantsError\" class=\"loading-error\">{{ obs.variantsError }}</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 <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 <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 <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.environmentOptions\"\n [defaultSelectionId]=\"obs.prefill?.environmentId\"\n [disabled]=\"obs.disabled || obs.environmentsLoading\"\n [required]=\"false\"\n [loading]=\"obs.environmentsLoading\"\n >\n </v-select>\n <div *ngIf=\"obs.environmentsError\" class=\"loading-error\">{{ obs.environmentsError }}</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=\"templateFieldsError$ | async as templateFieldsError\" class=\"loading-error\">{{ templateFieldsError }}</div>\n\n<epistola-data-mapping-tree\n *ngIf=\"(selectedTemplateId$ | async)\"\n [pluginId]=\"pluginId\"\n [templateFields$]=\"templateFields$\"\n [disabled$]=\"disabled$\"\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} 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'}).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 {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 {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 {EpistolaPluginService} from './services';\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 FieldTreeComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent\n ],\n exports: [\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n DataMappingTreeComponent,\n FieldTreeComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent\n ],\n providers: [\n EpistolaPluginService\n ]\n})\nexport class EpistolaPluginModule {}\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 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 attributeValue: 'Waarde',\n addAttribute: 'Kenmerk toevoegen',\n removeAttribute: 'Kenmerk verwijderen',\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 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 attributeValue: 'Value',\n addAttribute: 'Add attribute',\n removeAttribute: 'Remove attribute',\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","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","/*\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/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';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3","take","i1.EpistolaPluginService","i5","i6","i4"],"mappings":"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"}