@epistola.app/valtimo-plugin 0.4.5 → 0.5.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/models/async-resource.ts","../../src/lib/services/epistola-plugin.service.ts","../../src/lib/components/epistola-configuration/epistola-configuration.component.ts","../../src/lib/components/epistola-configuration/epistola-configuration.component.html","../../src/lib/utils/template-field-utils.ts","../../src/lib/components/value-input/value-input.component.ts","../../src/lib/components/value-input/value-input.component.html","../../src/lib/components/scalar-field/scalar-field.component.ts","../../src/lib/components/scalar-field/scalar-field.component.html","../../src/lib/components/array-field/array-field.component.ts","../../src/lib/components/array-field/array-field.component.html","../../src/lib/components/field-tree/field-tree.component.ts","../../src/lib/components/field-tree/field-tree.component.html","../../src/lib/components/data-mapping-tree/data-mapping-tree.component.ts","../../src/lib/components/data-mapping-tree/data-mapping-tree.component.html","../../src/lib/components/generate-document-configuration/generate-document-configuration.component.ts","../../src/lib/components/generate-document-configuration/generate-document-configuration.component.html","../../src/lib/components/check-job-status-configuration/check-job-status-configuration.component.ts","../../src/lib/components/check-job-status-configuration/check-job-status-configuration.component.html","../../src/lib/components/download-document-configuration/download-document-configuration.component.ts","../../src/lib/components/download-document-configuration/download-document-configuration.component.html","../../src/lib/components/epistola-download/epistola-download.component.ts","../../src/lib/components/epistola-retry-form/epistola-retry-form.component.ts","../../src/lib/components/epistola-preview-button/epistola-preview-button.component.ts","../../src/lib/components/epistola-document-preview/epistola-document-preview.component.ts","../../src/lib/components/epistola-download/epistola-download.formio.ts","../../src/lib/components/epistola-retry-form/epistola-retry-form.formio.ts","../../src/lib/components/epistola-preview-button/epistola-preview-button.formio.ts","../../src/lib/components/epistola-document-preview/epistola-document-preview.formio.ts","../../src/lib/epistola.module.ts","../../src/lib/assets/epistola-logo.ts","../../src/lib/epistola.specification.ts","../../src/public_api.ts","../../src/epistola.app-valtimo-plugin.ts"],"sourcesContent":["export interface AsyncResource<T> {\n data: T;\n loading: boolean;\n error: string | null;\n}\n\nexport function initialResource<T>(empty: T): AsyncResource<T> {\n return {data: empty, loading: false, error: null};\n}\n\nexport function loadingResource<T>(current: T): AsyncResource<T> {\n return {data: current, loading: true, error: null};\n}\n\nexport function successResource<T>(data: T): AsyncResource<T> {\n return {data, loading: false, error: null};\n}\n\nexport function errorResource<T>(current: T, error: string): AsyncResource<T> {\n return {data: current, loading: false, error};\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {ConfigService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {AttributeDefinition, EnvironmentInfo, PreviewSource, TemplateDetails, TemplateInfo, ValidationResult, VariantInfo} from '../models';\n\n/**\n * Service for interacting with Epistola plugin API endpoints.\n * Provides methods to fetch templates, environments, variants,\n * process variables, and validate mappings.\n */\n@Injectable()\nexport class EpistolaPluginService {\n private readonly apiEndpoint: string;\n\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n /**\n * Get all available 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 attribute definitions for a plugin configuration's tenant.\n */\n getAttributes(pluginConfigurationId: string): Observable<AttributeDefinition[]> {\n return this.http.get<AttributeDefinition[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/attributes`\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 * Discover all previewable document sources for a given Valtimo document.\n */\n getPreviewSources(documentId: string): Observable<PreviewSource[]> {\n return this.http.get<PreviewSource[]>(\n `${this.apiEndpoint}/preview-sources`,\n {params: {documentId}}\n );\n }\n\n /**\n * Preview a document by dry-running the generate-document process link.\n * Returns the resolved data as a mock preview (Phase 1).\n */\n previewDocument(\n documentId: string,\n processDefinitionKey: string,\n sourceActivityId: string,\n processInstanceId?: string,\n overrides?: Record<string, any>\n ): Observable<any> {\n return this.http.post<any>(`${this.apiEndpoint}/preview`, {\n documentId,\n processDefinitionKey,\n sourceActivityId,\n processInstanceId: processInstanceId || null,\n overrides: overrides || null\n });\n }\n}\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginConfigurationComponent, PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule} from '@valtimo/components';\nimport {BehaviorSubject, combineLatest, Observable, Subscription, take} from 'rxjs';\nimport {delay, startWith} from 'rxjs/operators';\nimport {EpistolaPluginConfig} from '../../models';\n\n@Component({\n selector: 'epistola-configuration',\n templateUrl: './epistola-configuration.component.html',\n styleUrls: ['./epistola-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule]\n})\nexport class EpistolaConfigurationComponent\n implements PluginConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<EpistolaPluginConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<EpistolaPluginConfig> = new EventEmitter<EpistolaPluginConfig>();\n\n /** Epistola slug pattern: lowercase alphanumeric with hyphens, no leading/trailing hyphens. */\n private static readonly SLUG_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<EpistolaPluginConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n // Wrap disabled$ with startWith and delay to prevent NG0100 ExpressionChangedAfterItHasBeenCheckedError\n // The disabled$ observable from Valtimo's plugin framework can emit value changes after Angular's\n // change detection cycle completes, causing the error.\n this.safeDisabled$ = this.disabled$.pipe(\n startWith(true),\n delay(0)\n );\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as EpistolaPluginConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: EpistolaPluginConfig): void {\n const valid = !!(\n formValue?.configurationTitle &&\n formValue?.baseUrl &&\n formValue?.apiKey &&\n formValue?.tenantId &&\n this.isValidSlug(formValue.tenantId, 3, 63) &&\n this.isValidOptionalSlug(formValue.defaultEnvironmentId, 3, 30)\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private isValidSlug(value: string, minLength: number, maxLength: number): boolean {\n return (\n value.length >= minLength &&\n value.length <= maxLength &&\n EpistolaConfigurationComponent.SLUG_PATTERN.test(value)\n );\n }\n\n private isValidOptionalSlug(value: string | undefined, minLength: number, maxLength: number): boolean {\n if (!value) {\n return true;\n }\n return this.isValidSlug(value, minLength, maxLength);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null\n } as obs\"\n>\n <v-input\n name=\"configurationTitle\"\n [title]=\"'configurationTitle' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.configurationTitle\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"baseUrl\"\n [title]=\"'baseUrl' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'baseUrlTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.baseUrl\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"apiKey\"\n [title]=\"'apiKey' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'apiKeyTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.apiKey\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n type=\"password\"\n >\n </v-input>\n\n <v-input\n name=\"tenantId\"\n [title]=\"'tenantId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'tenantIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.tenantId\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"defaultEnvironmentId\"\n [title]=\"'defaultEnvironmentId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'defaultEnvironmentIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.defaultEnvironmentId\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"templateSyncEnabled\"\n type=\"checkbox\"\n [title]=\"'templateSyncEnabled' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'templateSyncEnabledTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.templateSyncEnabled ? 'true' : ''\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n</v-form>\n","import {TemplateField} from '../models';\n\nexport interface RequiredFieldsStatus {\n mapped: number;\n total: number;\n}\n\nexport function countRequiredMapped(\n fields: TemplateField[],\n mapping: Record<string, any>\n): RequiredFieldsStatus {\n let mapped = 0;\n let total = 0;\n for (const field of fields) {\n if (field.fieldType === 'SCALAR' && field.required) {\n total++;\n const val = mapping[field.name];\n if (typeof val === 'string' && val.trim().length > 0) {\n mapped++;\n }\n } else if (field.fieldType === 'ARRAY' && field.required) {\n total++;\n const val = mapping[field.name];\n if (typeof val === 'string' && val.trim().length > 0) {\n mapped++;\n } else if (typeof val === 'object' && val !== null && '_source' in val) {\n if (typeof val['_source'] === 'string' && val['_source'].trim().length > 0) {\n mapped++;\n }\n }\n } else if (field.fieldType === 'OBJECT' && field.children) {\n const nested = (typeof mapping[field.name] === 'object' && mapping[field.name] !== null)\n ? mapping[field.name]\n : {};\n const childStats = countRequiredMapped(field.children, nested);\n mapped += childStats.mapped;\n total += childStats.total;\n }\n }\n return {mapped, total};\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {InputModule, ValuePathSelectorComponent, ValuePathSelectorPrefix} from '@valtimo/components';\n\nexport type InputMode = 'browse' | 'pv' | 'expression';\n\n/**\n * Reusable 3-mode input (browse / pv / expression) for value resolver expressions.\n * Used by both ScalarFieldComponent and ArrayFieldComponent for source mapping.\n */\n@Component({\n selector: 'epistola-value-input',\n templateUrl: './value-input.component.html',\n styleUrls: ['./value-input.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n PluginTranslatePipeModule,\n InputModule,\n ValuePathSelectorComponent\n ]\n})\nexport class ValueInputComponent implements OnChanges {\n @Input() name = '';\n @Input() value = '';\n @Input() pluginId = '';\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n @Input() placeholder = 'e.g. pv:variableName or doc:path.to.field';\n\n @Output() valueChange = new EventEmitter<string>();\n\n readonly ValuePathSelectorPrefix = ValuePathSelectorPrefix;\n\n inputMode: InputMode = 'browse';\n selectedPv = '';\n browseDefault = '';\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n this.inputMode = this.detectInputMode(this.value);\n this.browseDefault = normalizeToDots(this.value);\n this.selectedPv = extractPvName(this.value);\n }\n if (changes['processVariables']) {\n this.cdr.markForCheck();\n }\n }\n\n setInputMode(mode: InputMode): void {\n this.inputMode = mode;\n }\n\n onBrowseValueChange(newValue: string): void {\n this.valueChange.emit(normalizeToDots(newValue));\n }\n\n onPvChange(newValue: string): void {\n this.selectedPv = newValue;\n this.valueChange.emit(newValue ? 'pv:' + newValue : '');\n }\n\n onExpressionValueChange(newValue: string): void {\n this.valueChange.emit(newValue);\n }\n\n private detectInputMode(value: string): InputMode {\n if (!value) return 'browse';\n if (value.startsWith('doc:') || value.startsWith('case:')) return 'browse';\n if (value.startsWith('pv:')) return 'pv';\n if (value.length > 0) return 'expression';\n return 'browse';\n }\n}\n\n/** Convert slash-notation paths (e.g. doc:/a/b) to dot notation (doc:a.b). */\nexport function normalizeToDots(value: string): string {\n if (typeof value !== 'string') return value;\n const colonIndex = value.indexOf(':');\n if (colonIndex < 0) return value;\n const prefix = value.substring(0, colonIndex);\n const path = value.substring(colonIndex + 1);\n if (!path.includes('/')) return value;\n const normalized = path.split('/').filter(p => p.length > 0).join('.');\n return `${prefix}:${normalized}`;\n}\n\nfunction extractPvName(value: string): string {\n if (typeof value === 'string' && value.startsWith('pv:')) {\n return value.substring(3);\n }\n return '';\n}\n","<div class=\"value-input\">\n <div class=\"input-mode-group\">\n <button type=\"button\" class=\"mode-btn\" [class.mode-active]=\"inputMode === 'browse'\" [disabled]=\"disabled\" (click)=\"setInputMode('browse')\" [title]=\"'browseMode' | pluginTranslate: pluginId | async\">⊞</button>\n <button type=\"button\" class=\"mode-btn\" [class.mode-active]=\"inputMode === 'pv'\" [disabled]=\"disabled\" (click)=\"setInputMode('pv')\" [title]=\"'pvMode' | pluginTranslate: pluginId | async\">pv</button>\n <button type=\"button\" class=\"mode-btn\" [class.mode-active]=\"inputMode === 'expression'\" [disabled]=\"disabled\" (click)=\"setInputMode('expression')\" [title]=\"'expressionMode' | pluginTranslate: pluginId | async\">fx</button>\n </div>\n\n <!-- Browse mode: ValuePathSelector -->\n <div class=\"input-control\" *ngIf=\"inputMode === 'browse'\">\n <valtimo-value-path-selector\n [name]=\"name\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [notation]=\"'dots'\"\n [disabled]=\"disabled\"\n [defaultValue]=\"browseDefault\"\n [showCaseDefinitionSelector]=\"!caseDefinitionKey\"\n (valueChangeEvent)=\"onBrowseValueChange($event)\"\n ></valtimo-value-path-selector>\n </div>\n\n <!-- PV mode: dropdown (when available) or text fallback -->\n <div class=\"input-control\" *ngIf=\"inputMode === 'pv'\">\n <select\n *ngIf=\"processVariables.length > 0; else pvFallback\"\n class=\"pv-select\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"selectedPv\"\n (ngModelChange)=\"onPvChange($event)\"\n >\n <option value=\"\">{{ 'pvPlaceholder' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let pv of processVariables\" [value]=\"pv\">{{ pv }}</option>\n </select>\n <ng-template #pvFallback>\n <v-input\n [name]=\"'pvfb_' + name\"\n [defaultValue]=\"selectedPv\"\n [disabled]=\"disabled\"\n [placeholder]=\"'pvPlaceholder' | pluginTranslate: pluginId | async\"\n (valueChange)=\"onPvChange($event)\"\n ></v-input>\n </ng-template>\n </div>\n\n <!-- Expression mode: text input -->\n <div class=\"input-control\" *ngIf=\"inputMode === 'expression'\">\n <v-input\n [name]=\"'fx_' + name\"\n [defaultValue]=\"value\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n (valueChange)=\"onExpressionValueChange($event)\"\n ></v-input>\n </div>\n</div>\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {TemplateField} from '../../models';\nimport {ValueInputComponent} from '../value-input/value-input.component';\n\n@Component({\n selector: 'epistola-scalar-field',\n templateUrl: './scalar-field.component.html',\n styleUrls: ['./scalar-field.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, PluginTranslatePipeModule, ValueInputComponent]\n})\nexport class ScalarFieldComponent {\n @Input() field!: TemplateField;\n @Input() value: any = undefined;\n @Input() pluginId!: string;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n get stringValue(): string {\n return typeof this.value === 'string' ? this.value : '';\n }\n\n onValueChange(newValue: string): void {\n this.valueChange.emit(newValue || undefined);\n }\n}\n","<div class=\"field-row\" [class.field-required-unmapped]=\"field.required && !stringValue\">\n <div class=\"field-label\">\n <span class=\"field-name\">{{ field.name }}</span>\n <span class=\"field-meta\">({{ field.type }}{{ field.required ? ', required' : '' }})</span>\n </div>\n <epistola-value-input\n [name]=\"'field_' + field.path\"\n [value]=\"stringValue\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onValueChange($event)\"\n ></epistola-value-input>\n</div>\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {InputModule} from '@valtimo/components';\nimport {TemplateField} from '../../models';\nimport {ValueInputComponent, normalizeToDots} from '../value-input/value-input.component';\n\n@Component({\n selector: 'epistola-array-field',\n templateUrl: './array-field.component.html',\n styleUrls: ['./array-field.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, PluginTranslatePipeModule, InputModule, ValueInputComponent]\n})\nexport class ArrayFieldComponent implements OnChanges {\n @Input() field!: TemplateField;\n @Input() value: any = undefined;\n @Input() pluginId!: string;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n expanded = false;\n arrayPerFieldMode = false;\n mappedCount = 0;\n totalRequired = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] || changes['field']) {\n this.updateCompleteness();\n if (!this.expanded && this.totalRequired > 0 && this.mappedCount < this.totalRequired) {\n this.expanded = true;\n }\n // Detect per-field mode from value shape\n if (changes['value'] && typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n this.arrayPerFieldMode = true;\n }\n }\n }\n\n toggleExpanded(): void {\n this.expanded = !this.expanded;\n }\n\n getSourceValue(): string {\n if (typeof this.value === 'string') {\n return normalizeToDots(this.value);\n }\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n return normalizeToDots(this.value['_source'] || '');\n }\n return '';\n }\n\n onSourceValueChange(newValue: string): void {\n if (this.arrayPerFieldMode) {\n const current = (typeof this.value === 'object' && this.value !== null) ? {...this.value} : {};\n current['_source'] = newValue || '';\n this.valueChange.emit(current);\n } else {\n this.valueChange.emit(newValue || undefined);\n }\n }\n\n toggleArrayPerFieldMode(): void {\n this.arrayPerFieldMode = !this.arrayPerFieldMode;\n\n if (this.arrayPerFieldMode) {\n const currentSource = this.getSourceValue();\n this.valueChange.emit({_source: currentSource});\n } else {\n const source = this.getSourceValue();\n this.valueChange.emit(source || undefined);\n }\n }\n\n onItemFieldChange(childName: string, sourceFieldName: string): void {\n const current = (typeof this.value === 'object' && this.value !== null) ? {...this.value} : {_source: ''};\n if (sourceFieldName && sourceFieldName.trim().length > 0) {\n current[childName] = sourceFieldName;\n } else {\n delete current[childName];\n }\n this.valueChange.emit(current);\n }\n\n getItemFieldValue(childName: string): string {\n if (typeof this.value === 'object' && this.value !== null) {\n return this.value[childName] || '';\n }\n return '';\n }\n\n hasArrayChildren(): boolean {\n return !!(this.field?.children && this.field.children.length > 0);\n }\n\n private updateCompleteness(): void {\n if (!this.field?.children || this.field.children.length === 0) {\n this.totalRequired = this.field?.required ? 1 : 0;\n this.mappedCount = this.getSourceValue() ? (this.field?.required ? 1 : 0) : 0;\n return;\n }\n\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n let total = 0;\n let mapped = 0;\n\n if (this.field?.required) {\n total++;\n if (this.value['_source'] && this.value['_source'].trim().length > 0) {\n mapped++;\n }\n }\n\n for (const child of this.field.children) {\n if (child.required) {\n total++;\n const val = this.value[child.name];\n if (typeof val === 'string' && val.trim().length > 0) {\n mapped++;\n }\n }\n }\n\n this.mappedCount = mapped;\n this.totalRequired = total;\n } else {\n this.totalRequired = this.field?.required ? 1 : 0;\n this.mappedCount = this.getSourceValue() ? (this.field?.required ? 1 : 0) : 0;\n }\n }\n}\n","<div class=\"field-array\">\n <div class=\"field-array-header\" (click)=\"toggleExpanded()\" [class.field-required-unmapped]=\"field.required && !getSourceValue()\">\n <span class=\"expand-icon\">{{ expanded ? '▼' : '▶' }}</span>\n <span class=\"field-name\">{{ field.name }}</span>\n <span class=\"field-meta\">(array{{ field.required ? ', required' : '' }})</span>\n <span class=\"completeness-badge\" *ngIf=\"totalRequired > 0 && !expanded\">\n {{ mappedCount }}/{{ totalRequired }}\n </span>\n <span class=\"mapped-indicator\" *ngIf=\"totalRequired === 0 && getSourceValue() && !expanded\">✓</span>\n </div>\n <div class=\"field-array-content\" *ngIf=\"expanded\">\n <!-- Source collection input -->\n <div class=\"field-row\">\n <div class=\"field-label\">\n <span class=\"field-name\">{{ 'mapCollectionTo' | pluginTranslate: pluginId | async }}</span>\n </div>\n <epistola-value-input\n [name]=\"'field_' + field.path\"\n [value]=\"getSourceValue()\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onSourceValueChange($event)\"\n ></epistola-value-input>\n </div>\n\n <!-- Per-item field mapping toggle -->\n <div class=\"array-per-field-toggle\" *ngIf=\"hasArrayChildren()\">\n <label class=\"toggle-label\">\n <input\n type=\"checkbox\"\n [checked]=\"arrayPerFieldMode\"\n [disabled]=\"disabled\"\n (change)=\"toggleArrayPerFieldMode()\"\n />\n <span>{{ 'itemFieldMapping' | pluginTranslate: pluginId | async }}</span>\n </label>\n </div>\n\n <!-- Per-item field mappings -->\n <div class=\"array-item-fields\" *ngIf=\"arrayPerFieldMode && hasArrayChildren()\">\n <div class=\"item-fields-header\">\n <span class=\"item-fields-title\">{{ 'itemFieldMappingTitle' | pluginTranslate: pluginId | async }}</span>\n </div>\n <div class=\"item-field-row\" *ngFor=\"let child of field.children\">\n <div class=\"item-field-label\">\n <span class=\"field-name\">{{ child.name }}</span>\n <span class=\"field-meta\">({{ child.type }}{{ child.required ? ', required' : '' }})</span>\n </div>\n <div class=\"item-field-input\">\n <v-input\n [name]=\"'itemField_' + child.path\"\n [defaultValue]=\"getItemFieldValue(child.name)\"\n [disabled]=\"disabled\"\n [placeholder]=\"'sourceFieldPlaceholder' | pluginTranslate: pluginId | async\"\n (valueChange)=\"onItemFieldChange(child.name, $event)\"\n ></v-input>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import {ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {TemplateField} from '../../models';\nimport {countRequiredMapped} from '../../utils/template-field-utils';\nimport {ScalarFieldComponent} from '../scalar-field/scalar-field.component';\nimport {ArrayFieldComponent} from '../array-field/array-field.component';\n\n/**\n * Recursive field tree component.\n * Dispatches SCALAR and ARRAY to dedicated sub-components.\n * Handles OBJECT inline to avoid circular import issues (OBJECT children recurse back to this component).\n * Uses forwardRef(() => FieldTreeComponent) in imports to allow self-referencing in the template.\n */\n@Component({\n selector: 'epistola-field-tree',\n templateUrl: './field-tree.component.html',\n styleUrls: ['./field-tree.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, PluginTranslatePipeModule, ScalarFieldComponent, ArrayFieldComponent, forwardRef(() => FieldTreeComponent)]\n})\nexport class FieldTreeComponent implements OnChanges {\n @Input() field!: TemplateField;\n @Input() value: any = undefined;\n @Input() pluginId!: string;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n // OBJECT-specific state\n expanded = false;\n mappedCount = 0;\n totalRequired = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.field?.fieldType === 'OBJECT' && (changes['value'] || changes['field'])) {\n if (this.field.children) {\n const stats = countRequiredMapped(this.field.children, this.value || {});\n this.mappedCount = stats.mapped;\n this.totalRequired = stats.total;\n }\n if (!this.expanded && this.totalRequired > 0 && this.mappedCount < this.totalRequired) {\n this.expanded = true;\n }\n }\n }\n\n toggleExpanded(): void {\n this.expanded = !this.expanded;\n }\n\n onChildChange(childName: string, childValue: any): void {\n const current = (typeof this.value === 'object' && this.value !== null) ? {...this.value} : {};\n if (childValue === undefined || childValue === null || childValue === '') {\n delete current[childName];\n } else {\n current[childName] = childValue;\n }\n this.valueChange.emit(Object.keys(current).length > 0 ? current : undefined);\n }\n\n getChildValue(childName: string): any {\n if (typeof this.value === 'object' && this.value !== null) {\n return this.value[childName];\n }\n return undefined;\n }\n}\n","@switch (field.fieldType) {\n @case ('SCALAR') {\n <epistola-scalar-field\n [field]=\"field\"\n [value]=\"value\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"valueChange.emit($event)\"\n ></epistola-scalar-field>\n }\n @case ('OBJECT') {\n <div class=\"field-object\">\n <div class=\"field-object-header\" (click)=\"toggleExpanded()\" [class.field-required-unmapped]=\"totalRequired > 0 && mappedCount < totalRequired\">\n <span class=\"expand-icon\">{{ expanded ? '▼' : '▶' }}</span>\n <span class=\"field-name\">{{ field.name }}</span>\n <span class=\"field-meta\">(object{{ field.required ? ', required' : '' }})</span>\n <span class=\"completeness-badge\" *ngIf=\"totalRequired > 0 && !expanded\">\n {{ mappedCount }}/{{ totalRequired }}\n </span>\n </div>\n <div class=\"field-object-children\" *ngIf=\"expanded\">\n <epistola-field-tree\n *ngFor=\"let child of field.children\"\n [field]=\"child\"\n [value]=\"getChildValue(child.name)\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onChildChange(child.name, $event)\"\n ></epistola-field-tree>\n </div>\n </div>\n }\n @case ('ARRAY') {\n <epistola-array-field\n [field]=\"field\"\n [value]=\"value\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"valueChange.emit($event)\"\n ></epistola-array-field>\n }\n}\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {TemplateField} from '../../models';\nimport {countRequiredMapped} from '../../utils/template-field-utils';\nimport {FieldTreeComponent} from '../field-tree/field-tree.component';\n\n/**\n * Top-level wrapper that hosts FieldTreeComponent instances for each top-level template field.\n * Manages the full nested mapping object, completeness tracking, and emits mapping changes.\n */\n@Component({\n selector: 'epistola-data-mapping-tree',\n templateUrl: './data-mapping-tree.component.html',\n styleUrls: ['./data-mapping-tree.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n PluginTranslatePipeModule,\n FieldTreeComponent\n ]\n})\nexport class DataMappingTreeComponent implements OnChanges {\n @Input() pluginId!: string;\n @Input() templateFields: TemplateField[] = [];\n @Input() prefillMapping: Record<string, any> = {};\n @Input() disabled = false;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n\n @Output() mappingChange = new EventEmitter<Record<string, any>>();\n @Output() requiredFieldsStatus = new EventEmitter<{mapped: number; total: number}>();\n\n mapping: Record<string, any> = {};\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['prefillMapping']) {\n const mapping = this.prefillMapping;\n if (mapping && Object.keys(mapping).length > 0) {\n this.mapping = {...mapping};\n }\n }\n if (changes['templateFields'] || changes['prefillMapping']) {\n this.emitRequiredFieldsStatus();\n }\n }\n\n onFieldValueChange(fieldName: string, value: any): void {\n if (value === undefined || value === null || value === '') {\n const {[fieldName]: _, ...rest} = this.mapping;\n this.mapping = rest;\n } else {\n this.mapping = {...this.mapping, [fieldName]: value};\n }\n this.mappingChange.emit(this.mapping);\n this.emitRequiredFieldsStatus();\n }\n\n getFieldValue(fieldName: string): any {\n return this.mapping[fieldName];\n }\n\n private emitRequiredFieldsStatus(): void {\n const stats = countRequiredMapped(this.templateFields, this.mapping);\n this.requiredFieldsStatus.emit(stats);\n }\n}\n","<div class=\"data-mapping-tree\">\n <div class=\"mapping-header\">\n <h5>{{ 'dataMappingTitle' | pluginTranslate: pluginId | async }}</h5>\n <p class=\"helper-text\">{{ 'dataMappingDescription' | pluginTranslate: pluginId | async }}</p>\n </div>\n\n <div class=\"field-tree-root\" *ngIf=\"templateFields.length > 0\">\n <epistola-field-tree\n *ngFor=\"let field of templateFields\"\n [field]=\"field\"\n [value]=\"getFieldValue(field.name)\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onFieldValueChange(field.name, $event)\"\n ></epistola-field-tree>\n </div>\n\n <div class=\"no-fields\" *ngIf=\"templateFields.length === 0\">\n <p>{{ 'noTemplateFields' | pluginTranslate: pluginId | async }}</p>\n </div>\n</div>\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {\n FunctionConfigurationComponent,\n PluginConfigurationData,\n PluginTranslatePipeModule\n} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule, SelectItem, SelectModule} from '@valtimo/components';\nimport {CaseManagementParams, ManagementContext} from '@valtimo/shared';\nimport {ProcessLinkStateService} from '@valtimo/process-link';\nimport {BehaviorSubject, combineLatest, merge, Observable, of, Subject, Subscription} from 'rxjs';\nimport {catchError, filter, map, switchMap, take, takeUntil, tap} from 'rxjs/operators';\nimport {AsyncResource, errorResource, GenerateDocumentConfig, initialResource, loadingResource, successResource, TemplateField} from '../../models';\nimport {EpistolaPluginService} from '../../services';\nimport {DataMappingTreeComponent} from '../data-mapping-tree/data-mapping-tree.component';\n\nexport type VariantSelectionMode = 'explicit' | 'attributes';\n\n@Component({\n selector: 'epistola-generate-document-configuration',\n templateUrl: './generate-document-configuration.component.html',\n styleUrls: ['./generate-document-configuration.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n PluginTranslatePipeModule,\n FormModule,\n InputModule,\n SelectModule,\n DataMappingTreeComponent\n ]\n})\nexport class GenerateDocumentConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<GenerateDocumentConfig>;\n @Input() selectedPluginConfigurationData$?: Observable<PluginConfigurationData>;\n @Input() context$?: Observable<[ManagementContext, CaseManagementParams]>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<GenerateDocumentConfig> = new EventEmitter<GenerateDocumentConfig>();\n\n templates$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n variants$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n environments$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n templateFields$ = new BehaviorSubject<AsyncResource<TemplateField[]>>(initialResource([]));\n\n dataMapping$ = new BehaviorSubject<Record<string, any>>({});\n\n outputFormatOptions: SelectItem[] = [\n {id: 'PDF', text: 'PDF'},\n {id: 'HTML', text: 'HTML'}\n ];\n\n readonly selectedTemplateId$ = new BehaviorSubject<string>('');\n readonly selectedVariantId$ = new BehaviorSubject<string>('');\n\n variantSelectionMode: VariantSelectionMode = 'explicit';\n variantAttributeEntries: {key: string; value: string; required: boolean; _customKey?: boolean}[] = [];\n availableAttributeKeys: string[] = [];\n caseDefinitionKey: string | null = null;\n processVariables: string[] = [];\n requiredFieldsStatus: {mapped: number; total: number} = {mapped: 0, total: 0};\n prefillDataMapping: Record<string, any> = {};\n\n private readonly destroy$ = new Subject<void>();\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<Partial<GenerateDocumentConfig> | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n private pluginConfigurationId$ = new BehaviorSubject<string>('');\n\n 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.initPrefill();\n this.initPluginConfiguration();\n this.initTemplatesLoading();\n this.initEnvironmentsLoading();\n this.initAttributesLoading();\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 if (formValue.templateId && formValue.templateId !== this.selectedTemplateId$.getValue()) {\n this.selectedTemplateId$.next(formValue.templateId);\n this.selectedVariantId$.next('');\n }\n\n if (formValue.variantId && formValue.variantId !== this.selectedVariantId$.getValue()) {\n this.selectedVariantId$.next(formValue.variantId);\n }\n\n this.handleValid(formValue);\n }\n\n onDataMappingChange(mapping: Record<string, any>): void {\n this.dataMapping$.next(mapping);\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n onRequiredFieldsStatusChange(status: {mapped: number; total: number}): void {\n this.requiredFieldsStatus = status;\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n onVariantSelectionModeChange(mode: VariantSelectionMode): void {\n this.variantSelectionMode = mode;\n if (mode === 'attributes' && this.variantAttributeEntries.length === 0) {\n this.variantAttributeEntries = [{key: '', value: '', required: true}];\n }\n this.revalidate();\n }\n\n addAttributeEntry(): void {\n this.variantAttributeEntries = [...this.variantAttributeEntries, {key: '', value: '', required: true}];\n this.revalidate();\n }\n\n removeAttributeEntry(index: number): void {\n this.variantAttributeEntries = this.variantAttributeEntries.filter((_, i) => i !== index);\n this.revalidate();\n }\n\n onAttributeEntryChange(): void {\n this.revalidate();\n }\n\n onKeySelected(entry: {key: string; value: string; required: boolean; _customKey?: boolean}, value: string): void {\n if (value === '__custom__') {\n entry._customKey = true;\n entry.key = '';\n } else {\n entry.key = value;\n }\n this.onAttributeEntryChange();\n }\n\n cancelCustomKey(entry: {key: string; value: string; required: boolean; _customKey?: boolean}): void {\n entry._customKey = false;\n entry.key = '';\n this.onAttributeEntryChange();\n }\n\n private revalidate(): void {\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n private formatAttributes(attributes: Record<string, string>): string {\n const entries = Object.entries(attributes || {});\n if (entries.length === 0) return '';\n return ` (${entries.map(([k, v]) => `${k}=${v}`).join(', ')})`;\n }\n\n 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 initPrefill(): void {\n if (this.prefillConfiguration$) {\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 && (Array.isArray(config.variantAttributes) ? config.variantAttributes.length > 0 : Object.keys(config.variantAttributes).length > 0)) {\n this.variantSelectionMode = 'attributes';\n if (Array.isArray(config.variantAttributes)) {\n // New format: VariantAttributeEntry[]\n this.variantAttributeEntries = config.variantAttributes\n .map(e => ({key: e.key, value: e.value, required: e.required !== false}));\n } else {\n // Old format: Record<string, string> — treat all as required\n this.variantAttributeEntries = Object.entries(config.variantAttributes as any)\n .map(([key, value]) => ({key, value: String(value), required: true}));\n }\n } else if (config.variantId) {\n this.variantSelectionMode = 'explicit';\n this.selectedVariantId$.next(config.variantId);\n }\n if (config.dataMapping) {\n this.prefillDataMapping = config.dataMapping;\n this.dataMapping$.next(config.dataMapping);\n }\n this.cdr.markForCheck();\n });\n }\n }\n\n private initPluginConfiguration(): void {\n const sources: Observable<string>[] = [];\n\n if (this.selectedPluginConfigurationData$) {\n sources.push(\n this.selectedPluginConfigurationData$.pipe(\n filter(config => !!config?.configurationId),\n map(config => config.configurationId)\n )\n );\n }\n\n sources.push(\n this.processLinkStateService.selectedProcessLink$.pipe(\n filter(processLink => !!processLink?.pluginConfigurationId),\n map(processLink => processLink.pluginConfigurationId!)\n )\n );\n\n merge(...sources).pipe(\n takeUntil(this.destroy$)\n ).subscribe(configurationId => {\n this.pluginConfigurationId$.next(configurationId);\n });\n }\n\n private initTemplatesLoading(): void {\n this.pluginConfigurationId$.pipe(\n takeUntil(this.destroy$),\n filter(id => !!id),\n tap(() => this.templates$.next(loadingResource(this.templates$.getValue().data))),\n switchMap(configurationId =>\n this.epistolaPluginService.getTemplates(configurationId).pipe(\n catchError(() => {\n this.templates$.next(errorResource([], 'Failed to load templates'));\n return of(null);\n })\n )\n ),\n filter(result => result !== null)\n ).subscribe(templates => {\n this.templates$.next(successResource(templates.map(t => ({id: t.id, text: t.name}))));\n });\n }\n\n private initEnvironmentsLoading(): void {\n this.pluginConfigurationId$.pipe(\n takeUntil(this.destroy$),\n filter(id => !!id),\n tap(() => this.environments$.next(loadingResource(this.environments$.getValue().data))),\n switchMap(configurationId =>\n this.epistolaPluginService.getEnvironments(configurationId).pipe(\n catchError(() => {\n this.environments$.next(errorResource([], 'Failed to load environments'));\n return of(null);\n })\n )\n ),\n filter(result => result !== null)\n ).subscribe(environments => {\n this.environments$.next(successResource(environments.map(e => ({id: e.id, text: e.name}))));\n });\n }\n\n private initAttributesLoading(): void {\n this.pluginConfigurationId$.pipe(\n takeUntil(this.destroy$),\n filter(id => !!id),\n switchMap(configurationId =>\n this.epistolaPluginService.getAttributes(configurationId).pipe(\n catchError(() => of([]))\n )\n )\n ).subscribe(attributes => {\n this.availableAttributeKeys = attributes.map(a => a.key).sort();\n this.cdr.markForCheck();\n });\n }\n\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 tap(() => this.variants$.next(loadingResource(this.variants$.getValue().data))),\n switchMap(([configurationId, templateId]) =>\n this.epistolaPluginService.getVariants(configurationId, templateId).pipe(\n catchError(() => {\n this.variants$.next(errorResource([], 'Failed to load variants'));\n return of(null);\n })\n )\n ),\n filter(result => result !== null)\n ).subscribe(variants => {\n this.variants$.next(successResource(\n variants.map(v => ({id: v.id, text: v.name + this.formatAttributes(v.attributes)}))\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 tap(() => {\n this.templateFields$.next(loadingResource(this.templateFields$.getValue().data));\n this.loadProcessVariables();\n }),\n switchMap(([configurationId, templateId]) =>\n this.epistolaPluginService.getTemplateDetails(configurationId, templateId).pipe(\n catchError(() => {\n this.templateFields$.next(errorResource([], 'Failed to load template fields'));\n return of(null);\n })\n )\n ),\n filter(result => result !== null)\n ).subscribe(details => {\n this.templateFields$.next(successResource(details.fields || []));\n });\n }\n\n private loadProcessVariables(): void {\n if (this.caseDefinitionKey) {\n this.epistolaPluginService.getProcessVariables(this.caseDefinitionKey).pipe(\n takeUntil(this.destroy$),\n catchError(() => of([]))\n ).subscribe(variables => {\n this.processVariables = variables;\n this.cdr.markForCheck();\n });\n }\n }\n\n private handleValid(formValue: Partial<GenerateDocumentConfig>): void {\n const baseComplete = !!(\n formValue?.templateId &&\n formValue?.outputFormat &&\n formValue?.filename &&\n formValue?.resultProcessVariable\n );\n\n let variantValid = true;\n if (this.variantSelectionMode === 'attributes' && this.variantAttributeEntries.length > 0) {\n variantValid = this.variantAttributeEntries.every(e => !!e.key && !!e.value);\n }\n\n const requiredFieldsMapped = this.requiredFieldsStatus.total === 0 ||\n this.requiredFieldsStatus.mapped === this.requiredFieldsStatus.total;\n\n const valid = baseComplete && variantValid && requiredFieldsMapped;\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$, this.dataMapping$])\n .pipe(take(1))\n .subscribe(([formValue, valid, dataMapping]) => {\n if (valid && formValue) {\n const 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 = this.variantAttributeEntries\n .filter(e => e.key && e.value)\n .map(e => ({key: e.key, value: e.value, required: e.required}));\n }\n\n this.configuration.emit(config);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: disabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null,\n templates: templates$ | async,\n variants: variants$ | async,\n environments: environments$ | async,\n templateFields: templateFields$ | 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.templates.data\"\n [defaultSelectionId]=\"obs.prefill?.templateId\"\n [disabled]=\"obs.disabled || obs.templates.loading\"\n [required]=\"true\"\n [loading]=\"obs.templates.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.templates.error\" class=\"loading-error\">{{ obs.templates.error }}</div>\n\n <!-- Variant selection mode toggle -->\n <div class=\"variant-mode-toggle\" *ngIf=\"obs.selectedTemplateId\">\n <label class=\"variant-mode-label\">{{ 'variantSelectionMode' | pluginTranslate: pluginId | async }}</label>\n <div class=\"variant-mode-buttons\">\n <button\n type=\"button\"\n class=\"variant-mode-btn\"\n [class.active]=\"variantSelectionMode === 'explicit'\"\n (click)=\"onVariantSelectionModeChange('explicit')\"\n [disabled]=\"obs.disabled\"\n >{{ 'selectByVariant' | pluginTranslate: pluginId | async }}</button>\n <button\n type=\"button\"\n class=\"variant-mode-btn\"\n [class.active]=\"variantSelectionMode === 'attributes'\"\n (click)=\"onVariantSelectionModeChange('attributes')\"\n [disabled]=\"obs.disabled\"\n >{{ 'selectByAttributes' | pluginTranslate: pluginId | async }}</button>\n </div>\n </div>\n\n <!-- Explicit variant selection (dropdown) -->\n <v-select\n *ngIf=\"variantSelectionMode === 'explicit'\"\n name=\"variantId\"\n [title]=\"'variantId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'variantIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.variants.data\"\n [defaultSelectionId]=\"obs.prefill?.variantId\"\n [disabled]=\"obs.disabled || obs.variants.loading || !obs.selectedTemplateId\"\n [required]=\"false\"\n [loading]=\"obs.variants.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.variants.error\" class=\"loading-error\">{{ obs.variants.error }}</div>\n\n <!-- Attribute-based variant selection -->\n <div *ngIf=\"variantSelectionMode === 'attributes' && obs.selectedTemplateId\" class=\"variant-attributes-section\">\n <label class=\"variant-attributes-label\">{{ 'variantAttributes' | pluginTranslate: pluginId | async }}</label>\n <div class=\"variant-attributes-list\">\n <div *ngFor=\"let entry of variantAttributeEntries; let i = index\" class=\"variant-attribute-row\">\n <select\n *ngIf=\"!entry._customKey\"\n class=\"variant-attribute-input\"\n [ngModel]=\"entry.key\"\n (ngModelChange)=\"onKeySelected(entry, $event)\"\n [disabled]=\"obs.disabled\"\n >\n <option value=\"\" disabled>{{ 'attributeKey' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let key of availableAttributeKeys\" [value]=\"key\">{{ key }}</option>\n <option value=\"__custom__\">{{ 'attributeKeyCustom' | pluginTranslate: pluginId | async }}</option>\n </select>\n <div *ngIf=\"entry._customKey\" class=\"custom-key-input\">\n <input\n type=\"text\"\n class=\"variant-attribute-input\"\n [placeholder]=\"'attributeKey' | pluginTranslate: pluginId | async\"\n [(ngModel)]=\"entry.key\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <button type=\"button\" class=\"custom-key-cancel\" (click)=\"cancelCustomKey(entry)\" [disabled]=\"obs.disabled\">&times;</button>\n </div>\n <input\n type=\"text\"\n class=\"variant-attribute-input\"\n [placeholder]=\"'attributeValue' | pluginTranslate: pluginId | async\"\n [(ngModel)]=\"entry.value\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <label class=\"variant-attribute-required-toggle\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"entry.required\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <span class=\"required-label\">{{ (entry.required ? 'attributeRequired' : 'attributePreferred') | pluginTranslate: pluginId | async }}</span>\n </label>\n <button\n type=\"button\"\n class=\"variant-attribute-remove-btn\"\n (click)=\"removeAttributeEntry(i)\"\n [disabled]=\"obs.disabled\"\n title=\"{{ 'removeAttribute' | pluginTranslate: pluginId | async }}\"\n >&times;</button>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"variant-attribute-add-btn\"\n (click)=\"addAttributeEntry()\"\n [disabled]=\"obs.disabled\"\n >+ {{ 'addAttribute' | pluginTranslate: pluginId | async }}</button>\n </div>\n\n <v-select\n name=\"environmentId\"\n [title]=\"'environmentId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'environmentIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.environments.data\"\n [defaultSelectionId]=\"obs.prefill?.environmentId\"\n [disabled]=\"obs.disabled || obs.environments.loading\"\n [required]=\"false\"\n [loading]=\"obs.environments.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.environments.error\" class=\"loading-error\">{{ obs.environments.error }}</div>\n\n <v-select\n name=\"outputFormat\"\n [title]=\"'outputFormat' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'outputFormatTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"outputFormatOptions\"\n [defaultSelectionId]=\"obs.prefill?.outputFormat || 'PDF'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-select>\n\n <v-input\n name=\"filename\"\n [title]=\"'filename' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'filenameTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.filename\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"correlationId\"\n [title]=\"'correlationId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'correlationIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.correlationId\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"resultProcessVariable\"\n [title]=\"'resultProcessVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'resultProcessVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.resultProcessVariable\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n</v-form>\n\n<div *ngIf=\"(templateFields$ | async)?.error as templateFieldsError\" class=\"loading-error\">{{ templateFieldsError }}</div>\n\n<epistola-data-mapping-tree\n *ngIf=\"(selectedTemplateId$ | async)\"\n [pluginId]=\"pluginId\"\n [templateFields]=\"(templateFields$ | async)?.data ?? []\"\n [disabled]=\"!!(disabled$ | async)\"\n [prefillMapping]=\"prefillDataMapping\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n (mappingChange)=\"onDataMappingChange($event)\"\n (requiredFieldsStatus)=\"onRequiredFieldsStatusChange($event)\"\n></epistola-data-mapping-tree>\n\n<div class=\"validation-summary\" *ngIf=\"(selectedTemplateId$ | async) && requiredFieldsStatus.total > 0\">\n <span *ngIf=\"requiredFieldsStatus.mapped === requiredFieldsStatus.total\" class=\"validation-complete\">\n {{ 'requiredFieldsComplete' | pluginTranslate: pluginId | async }}\n </span>\n <span *ngIf=\"requiredFieldsStatus.mapped < requiredFieldsStatus.total\" class=\"validation-incomplete\">\n {{ requiredFieldsStatus.mapped }} / {{ requiredFieldsStatus.total }}\n {{ 'validationSummary' | pluginTranslate: pluginId | async }}\n </span>\n</div>\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FunctionConfigurationComponent, PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule} from '@valtimo/components';\nimport {BehaviorSubject, combineLatest, Observable, Subscription, take} from 'rxjs';\nimport {delay, startWith} from 'rxjs/operators';\nimport {CheckJobStatusConfig} from '../../models';\n\n@Component({\n selector: 'epistola-check-job-status-configuration',\n templateUrl: './check-job-status-configuration.component.html',\n styleUrls: ['./check-job-status-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule]\n})\nexport class CheckJobStatusConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<CheckJobStatusConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<CheckJobStatusConfig> = new EventEmitter<CheckJobStatusConfig>();\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<CheckJobStatusConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n this.safeDisabled$ = this.disabled$.pipe(\n startWith(true),\n delay(0)\n );\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as CheckJobStatusConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: CheckJobStatusConfig): void {\n const valid = !!(\n formValue?.requestIdVariable &&\n formValue?.statusVariable\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid && formValue) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null\n } as obs\"\n>\n <v-input\n name=\"requestIdVariable\"\n [title]=\"'requestIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'requestIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.requestIdVariable || 'epistolaRequestId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"statusVariable\"\n [title]=\"'statusVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'statusVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.statusVariable || 'epistolaStatus'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"documentIdVariable\"\n [title]=\"'documentIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'documentIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.documentIdVariable || 'epistolaDocumentId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"errorMessageVariable\"\n [title]=\"'errorMessageVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'errorMessageVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.errorMessageVariable || 'epistolaErrorMessage'\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n</v-form>\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FunctionConfigurationComponent, PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule} from '@valtimo/components';\nimport {BehaviorSubject, combineLatest, Observable, Subscription, take} from 'rxjs';\nimport {delay, startWith} from 'rxjs/operators';\nimport {DownloadDocumentConfig} from '../../models';\n\n@Component({\n selector: 'epistola-download-document-configuration',\n templateUrl: './download-document-configuration.component.html',\n styleUrls: ['./download-document-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule]\n})\nexport class DownloadDocumentConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<DownloadDocumentConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<DownloadDocumentConfig> = new EventEmitter<DownloadDocumentConfig>();\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<DownloadDocumentConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n this.safeDisabled$ = this.disabled$.pipe(\n startWith(true),\n delay(0)\n );\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as DownloadDocumentConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: DownloadDocumentConfig): void {\n const valid = !!(\n formValue?.documentIdVariable &&\n formValue?.contentVariable\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid && formValue) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null\n } as obs\"\n>\n <v-input\n name=\"documentIdVariable\"\n [title]=\"'documentIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'documentIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.documentIdVariable || 'epistolaDocumentId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"contentVariable\"\n [title]=\"'contentVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'contentVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.contentVariable || 'documentContent'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n</v-form>\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {FormioCustomComponent} from '@valtimo/components';\n\nexport interface DownloadData {\n documentId: string;\n tenantId: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-download-component',\n template: `\n <button\n type=\"button\"\n class=\"btn btn-outline-primary\"\n [disabled]=\"disabled || downloading || !hasRequiredData()\"\n (click)=\"download()\"\n >\n <i class=\"mdi mdi-download mr-1\"></i>\n {{ downloading ? 'Downloading...' : buttonLabel }}\n </button>\n <span *ngIf=\"error\" class=\"text-danger ml-2\">{{ error }}</span>\n `,\n})\nexport class EpistolaDownloadComponent implements FormioCustomComponent<DownloadData> {\n @Input() value: DownloadData;\n @Output() valueChange = new EventEmitter<DownloadData>();\n\n @Input() disabled = false;\n @Input() filename = 'document.pdf';\n @Input() label = 'Download PDF';\n\n downloading = false;\n error: string | null = null;\n\n get buttonLabel(): string {\n return this.label || 'Download PDF';\n }\n\n constructor(private readonly http: HttpClient) {}\n\n hasRequiredData(): boolean {\n return !!(this.value?.documentId && this.value?.tenantId);\n }\n\n download(): void {\n if (!this.hasRequiredData() || this.downloading) {\n return;\n }\n\n this.downloading = true;\n this.error = null;\n\n const {documentId, tenantId} = this.value;\n const url = `/api/v1/plugin/epistola/documents/${encodeURIComponent(documentId)}/download`\n + `?tenantId=${encodeURIComponent(tenantId)}`\n + `&filename=${encodeURIComponent(this.filename)}`;\n\n this.http.get(url, {responseType: 'blob'}).subscribe({\n next: (blob) => {\n const objectUrl = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = objectUrl;\n anchor.download = this.filename;\n anchor.click();\n URL.revokeObjectURL(objectUrl);\n this.downloading = false;\n },\n error: (err) => {\n console.error('Download failed', err);\n this.error = 'Download mislukt. Probeer opnieuw.';\n this.downloading = false;\n },\n });\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {FormioCustomComponent, FormIoStateService} from '@valtimo/components';\nimport {ConfigService} from '@valtimo/shared';\nimport {FormioModule} from '@formio/angular';\nimport {Subject, Subscription} from 'rxjs';\nimport {debounceTime, switchMap} from 'rxjs/operators';\nimport {EpistolaPluginService} from '../../services';\n\n@Component({\n standalone: true,\n imports: [CommonModule, FormioModule],\n selector: 'epistola-retry-form-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div *ngIf=\"loading\" class=\"epistola-retry-loading\">Loading form...</div>\n <div *ngIf=\"error\" class=\"epistola-retry-error\">{{ error }}</div>\n <div *ngIf=\"formDefinition && !loading\" class=\"epistola-retry-container\" [class.preview-expanded]=\"previewExpanded\">\n <div class=\"epistola-retry-form\" [hidden]=\"previewExpanded\">\n <formio\n [form]=\"formDefinition\"\n [submission]=\"submission\"\n (change)=\"onFormChange($event)\"\n [options]=\"formOptions\"\n ></formio>\n </div>\n <div class=\"epistola-retry-preview\">\n <div class=\"preview-header\">\n <span>Preview</span>\n <button type=\"button\" class=\"preview-toggle\" (click)=\"togglePreview()\">\n {{ previewExpanded ? 'Show form' : 'Expand' }}\n </button>\n </div>\n <div *ngIf=\"previewLoading\" class=\"preview-loading\">Generating preview...</div>\n <object *ngIf=\"previewUrl && !previewLoading\" [data]=\"previewUrl\" type=\"application/pdf\" class=\"preview-pdf\">\n PDF preview not supported in this browser.\n </object>\n <div *ngIf=\"previewError\" class=\"preview-error\">{{ previewError }}</div>\n <div *ngIf=\"!previewUrl && !previewLoading && !previewError\" class=\"preview-empty\">\n Edit fields to see a preview\n </div>\n </div>\n </div>\n `,\n styles: [`\n .epistola-retry-loading {\n padding: 1rem;\n color: #6c757d;\n }\n .epistola-retry-error {\n padding: 0.5rem;\n color: #dc3545;\n }\n .epistola-retry-container {\n display: flex;\n gap: 1rem;\n }\n .epistola-retry-form {\n flex: 2;\n min-width: 0;\n }\n .epistola-retry-preview {\n flex: 1;\n min-width: 0;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 1rem;\n background: #f8f9fa;\n display: flex;\n flex-direction: column;\n }\n .preview-expanded .epistola-retry-preview {\n flex: 1;\n }\n .preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: bold;\n margin-bottom: 0.5rem;\n color: #495057;\n }\n .preview-toggle {\n background: none;\n border: 1px solid #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.2rem 0.5rem;\n font-size: 0.75rem;\n cursor: pointer;\n }\n .preview-toggle:hover {\n background: #e9ecef;\n }\n .preview-loading {\n color: #6c757d;\n font-style: italic;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n min-height: 500px;\n }\n .preview-expanded .preview-pdf {\n min-height: 80vh;\n }\n .preview-error {\n color: #dc3545;\n }\n .preview-empty {\n color: #6c757d;\n font-style: italic;\n }\n `]\n})\nexport class EpistolaRetryFormComponent implements FormioCustomComponent<string>, OnChanges, OnDestroy {\n @Input() value!: string;\n @Output() valueChange = new EventEmitter<string>();\n\n @Input() disabled = false;\n @Input() label = 'Document Data';\n @Input() sourceActivityId?: string;\n\n formDefinition: any;\n submission: any;\n loading = true;\n error: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n previewLoading = false;\n previewError: string | null = null;\n previewExpanded = false;\n private loaded = false;\n private loadSubscription?: Subscription;\n private previewSubscription?: Subscription;\n private previewSubject = new Subject<any>();\n private currentBlobUrl: string | null = null;\n private resolvedSourceActivityId?: string;\n private processDefinitionKey?: string;\n private readonly apiEndpoint: string;\n\n formOptions: any = {\n noAlerts: true,\n buttonSettings: {showCancel: false, showSubmit: false, showPrevious: false, showNext: false}\n };\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly formIoStateService: FormIoStateService,\n private readonly cdr: ChangeDetectorRef,\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n // Debounce preview calls\n this.previewSubscription = this.previewSubject.pipe(debounceTime(1500)).subscribe(data => {\n this.loadPreview(data);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.loaded) {\n this.loaded = true;\n this.loadForm();\n }\n }\n\n ngOnDestroy(): void {\n this.loadSubscription?.unsubscribe();\n this.previewSubscription?.unsubscribe();\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n }\n }\n\n togglePreview(): void {\n this.previewExpanded = !this.previewExpanded;\n this.cdr.markForCheck();\n }\n\n onFormChange(event: any): void {\n if (event?.data) {\n const json = JSON.stringify(event.data);\n this.value = json; // Formio reads element.value on change event\n this.valueChange.emit(json);\n // Trigger debounced preview\n this.previewSubject.next(event.data);\n }\n }\n\n private loadPreview(formData: any): void {\n const documentId = this.formIoStateService.documentId;\n const processInstanceId = this.formIoStateService.processInstanceId;\n if (!documentId || !processInstanceId) return;\n\n this.previewLoading = true;\n this.previewError = null;\n this.cdr.markForCheck();\n\n // Revoke previous blob URL to prevent memory leaks\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n }\n\n this.http.post(`${this.apiEndpoint}/preview`, {\n documentId,\n processInstanceId,\n sourceActivityId: this.sourceActivityId || null,\n overrides: formData\n }, {responseType: 'blob', headers: new HttpHeaders().set('X-Skip-Interceptor', '422')}).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.previewError = null;\n this.previewLoading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.previewUrl = null;\n // Try to extract error message from JSON response body\n if (err.error instanceof Blob) {\n err.error.text().then((text: string) => {\n try {\n const body = JSON.parse(text);\n this.previewError = body.details || body.error || 'Preview could not be generated';\n } catch {\n this.previewError = 'Preview could not be generated';\n }\n this.previewLoading = false;\n this.cdr.markForCheck();\n });\n } else {\n this.previewError = err.error?.error || 'Preview could not be generated';\n this.previewLoading = false;\n this.cdr.markForCheck();\n }\n }\n });\n }\n\n private loadForm(): void {\n const processInstanceId = this.formIoStateService.processInstanceId;\n const documentId = this.formIoStateService.documentId;\n if (!processInstanceId) {\n this.error = 'Could not determine process instance ID.';\n this.loading = false;\n this.cdr.markForCheck();\n return;\n }\n\n this.loadSubscription = this.epistolaPluginService.getRetryForm(\n processInstanceId, documentId ?? undefined, this.sourceActivityId\n ).subscribe({\n next: (form) => {\n this.formDefinition = form;\n if (this.value) {\n try {\n this.submission = {data: JSON.parse(this.value)};\n } catch {\n // value is not valid JSON, start fresh\n }\n }\n this.loading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n console.error('Failed to load retry form', err);\n this.error = 'Failed to load the retry form. Please try again.';\n this.loading = false;\n this.cdr.markForCheck();\n }\n });\n }\n}\n","import {Component, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {FormioCustomComponent} from '@valtimo/components';\nimport {ConfigService} from '@valtimo/shared';\n\nexport interface PreviewButtonData {\n documentId: string;\n tenantId: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-preview-button-component',\n template: `\n <button\n type=\"button\"\n class=\"btn btn-outline-secondary\"\n [disabled]=\"disabled || loading || !hasRequiredData()\"\n (click)=\"openPreview()\"\n >\n <i class=\"mdi mdi-eye mr-1\"></i>\n {{ loading ? 'Loading...' : buttonLabel }}\n </button>\n\n <div *ngIf=\"modalOpen\" class=\"preview-modal-overlay\" (click)=\"closePreview()\">\n <div class=\"preview-modal-content\" (click)=\"$event.stopPropagation()\">\n <div class=\"preview-modal-header\">\n <span>Document Preview</span>\n <button type=\"button\" class=\"preview-modal-close\" (click)=\"closePreview()\">&times;</button>\n </div>\n <div class=\"preview-modal-body\">\n <div *ngIf=\"previewLoading\" class=\"preview-loading\">Generating preview...</div>\n <div *ngIf=\"previewError\" class=\"preview-error\">{{ previewError }}</div>\n <object\n *ngIf=\"previewUrl && !previewLoading\"\n [data]=\"previewUrl\"\n type=\"application/pdf\"\n class=\"preview-pdf\"\n >\n PDF preview is not supported in this browser.\n </object>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .preview-modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n }\n .preview-modal-content {\n background: white;\n border-radius: 8px;\n width: 90vw;\n height: 90vh;\n max-width: 1200px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\n }\n .preview-modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n font-weight: bold;\n font-size: 1rem;\n }\n .preview-modal-close {\n background: none;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n color: #6c757d;\n line-height: 1;\n padding: 0 0.25rem;\n }\n .preview-modal-close:hover {\n color: #333;\n }\n .preview-modal-body {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .preview-loading, .preview-error {\n padding: 2rem;\n text-align: center;\n }\n .preview-error {\n color: #dc3545;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n }\n `]\n})\nexport class EpistolaPreviewButtonComponent implements FormioCustomComponent<PreviewButtonData>, OnDestroy {\n @Input() value!: PreviewButtonData;\n @Output() valueChange = new EventEmitter<PreviewButtonData>();\n\n @Input() disabled = false;\n @Input() label = 'Preview PDF';\n\n modalOpen = false;\n loading = false;\n previewLoading = false;\n previewError: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n private currentBlobUrl: string | null = null;\n\n private readonly apiEndpoint: string;\n\n get buttonLabel(): string {\n return this.label || 'Preview PDF';\n }\n\n constructor(\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n ngOnDestroy(): void {\n this.revokeBlobUrl();\n }\n\n hasRequiredData(): boolean {\n return !!(this.value?.documentId && this.value?.tenantId);\n }\n\n openPreview(): void {\n if (!this.hasRequiredData() || this.loading) return;\n\n this.modalOpen = true;\n this.previewLoading = true;\n this.previewError = null;\n this.revokeBlobUrl();\n\n const {documentId, tenantId} = this.value;\n const url = `${this.apiEndpoint}/documents/${encodeURIComponent(documentId)}/download`\n + `?tenantId=${encodeURIComponent(tenantId)}`\n + `&filename=preview.pdf`;\n\n this.http.get(url, {responseType: 'blob'}).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.previewLoading = false;\n },\n error: () => {\n this.previewError = 'Could not load the document.';\n this.previewLoading = false;\n }\n });\n }\n\n closePreview(): void {\n this.modalOpen = false;\n this.revokeBlobUrl();\n this.previewUrl = null;\n this.previewError = null;\n }\n\n private revokeBlobUrl(): void {\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n }\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {FormioCustomComponent, FormIoStateService} from '@valtimo/components';\nimport {ConfigService} from '@valtimo/shared';\nimport {PreviewSource} from '../../models';\nimport {EpistolaPluginService} from '../../services';\nimport {Subscription} from 'rxjs';\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-document-preview-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"epistola-preview-panel\">\n <div class=\"preview-header\">\n <span>{{ label || 'Document Preview' }}</span>\n <div class=\"preview-controls\">\n <select\n *ngIf=\"sources.length > 1\"\n class=\"preview-select\"\n [value]=\"selectedIndex\"\n (change)=\"onSourceChange($event)\"\n >\n <option *ngFor=\"let source of sources; let i = index\" [value]=\"i\">\n {{ source.templateName }} ({{ source.activityId }})\n </option>\n </select>\n <button type=\"button\" class=\"preview-refresh\" [disabled]=\"loading || discovering\" (click)=\"refresh()\">\n <i class=\"mdi mdi-refresh mr-1\"></i>\n {{ loading ? 'Generating...' : 'Refresh' }}\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <div *ngIf=\"discovering\" class=\"preview-loading\">\n Discovering documents...\n </div>\n <div *ngIf=\"loading && !discovering\" class=\"preview-loading\">\n Generating preview...\n </div>\n <div *ngIf=\"error && !loading && !discovering\" class=\"preview-unavailable\">\n <i class=\"mdi mdi-information-outline\"></i>\n Preview is niet beschikbaar — niet alle gegevens zijn al ingevuld.\n </div>\n <object\n *ngIf=\"previewUrl && !loading && !discovering\"\n [data]=\"previewUrl\"\n type=\"application/pdf\"\n class=\"preview-pdf\"\n >\n PDF preview is not supported in this browser.\n </object>\n <div *ngIf=\"!previewUrl && !loading && !discovering && !error && sources.length === 0\" class=\"preview-empty\">\n No previewable documents found\n </div>\n </div>\n </div>\n `,\n styles: [`\n .epistola-preview-panel {\n border: 1px solid #dee2e6;\n border-radius: 4px;\n background: #f8f9fa;\n display: flex;\n flex-direction: column;\n }\n .preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid #dee2e6;\n font-weight: bold;\n color: #495057;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .preview-controls {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n .preview-select {\n border: 1px solid #ced4da;\n border-radius: 4px;\n padding: 0.25rem 0.5rem;\n font-size: 0.8rem;\n background: white;\n max-width: 300px;\n }\n .preview-refresh {\n background: none;\n border: 1px solid #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.25rem 0.75rem;\n font-size: 0.8rem;\n cursor: pointer;\n display: flex;\n align-items: center;\n white-space: nowrap;\n }\n .preview-refresh:hover:not(:disabled) {\n background: #e9ecef;\n }\n .preview-refresh:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .preview-body {\n display: flex;\n flex-direction: column;\n min-height: 500px;\n }\n .preview-loading {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n .preview-unavailable {\n padding: 1.5rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n .preview-unavailable i {\n margin-right: 0.25rem;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n min-height: 500px;\n }\n .preview-empty {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n `]\n})\nexport class EpistolaDocumentPreviewComponent implements FormioCustomComponent<null>, OnChanges, OnDestroy {\n @Input() value!: null;\n @Output() valueChange = new EventEmitter<null>();\n\n @Input() disabled = false;\n @Input() label = 'Document Preview';\n\n sources: PreviewSource[] = [];\n selectedIndex = 0;\n discovering = false;\n loading = false;\n error: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n private initialized = false;\n private currentBlobUrl: string | null = null;\n private discoverSubscription?: Subscription;\n private previewSubscription?: Subscription;\n private readonly apiEndpoint: string;\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService,\n private readonly formIoStateService: FormIoStateService,\n private readonly cdr: ChangeDetectorRef\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.initialized) {\n this.initialized = true;\n this.discoverSources();\n }\n }\n\n ngOnDestroy(): void {\n this.discoverSubscription?.unsubscribe();\n this.previewSubscription?.unsubscribe();\n this.revokeBlobUrl();\n }\n\n onSourceChange(event: Event): void {\n this.selectedIndex = +(event.target as HTMLSelectElement).value;\n this.loadPreview();\n }\n\n refresh(): void {\n this.loadPreview();\n }\n\n private discoverSources(): void {\n const documentId = this.formIoStateService.documentId;\n if (!documentId) {\n this.error = 'Could not determine document ID from context.';\n this.cdr.markForCheck();\n return;\n }\n\n this.discovering = true;\n this.error = null;\n this.cdr.markForCheck();\n\n this.discoverSubscription = this.epistolaPluginService.getPreviewSources(documentId).subscribe({\n next: (sources) => {\n this.sources = sources;\n this.discovering = false;\n this.cdr.markForCheck();\n if (sources.length > 0) {\n this.selectedIndex = 0;\n this.loadPreview();\n }\n },\n error: (err) => {\n this.error = err.error?.error || 'Failed to discover preview sources';\n this.discovering = false;\n this.cdr.markForCheck();\n }\n });\n }\n\n private loadPreview(): void {\n const source = this.sources[this.selectedIndex];\n if (!source) return;\n\n const documentId = this.formIoStateService.documentId;\n if (!documentId) return;\n\n this.loading = true;\n this.error = null;\n this.cdr.markForCheck();\n this.revokeBlobUrl();\n\n this.previewSubscription?.unsubscribe();\n this.previewSubscription = this.http.post(`${this.apiEndpoint}/preview`, {\n documentId,\n processInstanceId: source.processInstanceId,\n sourceActivityId: source.activityId,\n overrides: null\n }, {\n responseType: 'blob',\n headers: new HttpHeaders().set('X-Skip-Interceptor', '422')\n }).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.error = null;\n this.loading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.previewUrl = null;\n if (err.error instanceof Blob) {\n err.error.text().then((text: string) => {\n try {\n const body = JSON.parse(text);\n this.error = body.details || body.error || 'Preview could not be generated';\n } catch {\n this.error = 'Preview could not be generated';\n }\n this.loading = false;\n this.cdr.markForCheck();\n });\n } else {\n this.error = err.error?.error || 'Preview could not be generated';\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n });\n }\n\n private revokeBlobUrl(): void {\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n this.previewUrl = null;\n }\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaDownloadComponent} from './epistola-download.component';\n\nexport const EPISTOLA_DOWNLOAD_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-download',\n selector: 'epistola-download-button',\n title: 'Epistola Download',\n group: 'basic',\n icon: 'download',\n emptyValue: null,\n fieldOptions: ['filename', 'label'],\n};\n\nexport function registerEpistolaDownloadComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_DOWNLOAD_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_DOWNLOAD_OPTIONS, EpistolaDownloadComponent, injector);\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaRetryFormComponent} from './epistola-retry-form.component';\n\nexport const EPISTOLA_RETRY_FORM_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-retry-form',\n selector: 'epistola-retry-form-element',\n title: 'Epistola Retry Form',\n group: 'basic',\n icon: 'refresh',\n emptyValue: null,\n fieldOptions: ['sourceActivityId', 'label'], // sourceActivityId is optional (set via BPMN input parameter)\n};\n\nexport function registerEpistolaRetryFormComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_RETRY_FORM_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_RETRY_FORM_OPTIONS, EpistolaRetryFormComponent, injector);\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaPreviewButtonComponent} from './epistola-preview-button.component';\n\nexport const EPISTOLA_PREVIEW_BUTTON_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-preview-button',\n selector: 'epistola-preview-button-element',\n title: 'Epistola Preview',\n group: 'basic',\n icon: 'eye',\n emptyValue: null,\n fieldOptions: ['label'],\n};\n\nexport function registerEpistolaPreviewButtonComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_PREVIEW_BUTTON_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_PREVIEW_BUTTON_OPTIONS, EpistolaPreviewButtonComponent, injector);\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaDocumentPreviewComponent} from './epistola-document-preview.component';\n\nexport const EPISTOLA_DOCUMENT_PREVIEW_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-document-preview',\n selector: 'epistola-document-preview-element',\n title: 'Epistola Document Preview',\n group: 'basic',\n icon: 'file-pdf-o',\n emptyValue: null,\n fieldOptions: ['label'],\n};\n\nexport function registerEpistolaDocumentPreviewComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_DOCUMENT_PREVIEW_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_DOCUMENT_PREVIEW_OPTIONS, EpistolaDocumentPreviewComponent, injector);\n }\n}\n","import {ENVIRONMENT_INITIALIZER, inject, Injector, ModuleWithProviders, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClientModule} from '@angular/common/http';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, InputModule, SelectModule} from '@valtimo/components';\nimport {EpistolaConfigurationComponent} from './components/epistola-configuration/epistola-configuration.component';\nimport {\n GenerateDocumentConfigurationComponent\n} from './components/generate-document-configuration/generate-document-configuration.component';\nimport {\n CheckJobStatusConfigurationComponent\n} from './components/check-job-status-configuration/check-job-status-configuration.component';\nimport {\n DownloadDocumentConfigurationComponent\n} from './components/download-document-configuration/download-document-configuration.component';\nimport {DataMappingTreeComponent} from './components/data-mapping-tree/data-mapping-tree.component';\nimport {FieldTreeComponent} from './components/field-tree/field-tree.component';\nimport {ValueInputComponent} from './components/value-input/value-input.component';\nimport {ScalarFieldComponent} from './components/scalar-field/scalar-field.component';\nimport {ArrayFieldComponent} from './components/array-field/array-field.component';\nimport {EpistolaDownloadComponent} from './components/epistola-download/epistola-download.component';\nimport {EpistolaRetryFormComponent} from './components/epistola-retry-form/epistola-retry-form.component';\nimport {EpistolaPreviewButtonComponent} from './components/epistola-preview-button/epistola-preview-button.component';\nimport {EpistolaDocumentPreviewComponent} from './components/epistola-document-preview/epistola-document-preview.component';\nimport {EpistolaPluginService} from './services';\nimport {registerEpistolaDownloadComponent} from './components/epistola-download/epistola-download.formio';\nimport {registerEpistolaRetryFormComponent} from './components/epistola-retry-form/epistola-retry-form.formio';\nimport {registerEpistolaPreviewButtonComponent} from './components/epistola-preview-button/epistola-preview-button.formio';\nimport {registerEpistolaDocumentPreviewComponent} from './components/epistola-document-preview/epistola-document-preview.formio';\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n PluginTranslatePipeModule,\n FormModule,\n InputModule,\n SelectModule,\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n DataMappingTreeComponent,\n ValueInputComponent,\n ScalarFieldComponent,\n ArrayFieldComponent,\n FieldTreeComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent,\n EpistolaDocumentPreviewComponent\n ],\n exports: [\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n DataMappingTreeComponent,\n ValueInputComponent,\n ScalarFieldComponent,\n ArrayFieldComponent,\n FieldTreeComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent,\n EpistolaDocumentPreviewComponent\n ],\n providers: [\n EpistolaPluginService\n ]\n})\nexport class EpistolaPluginModule {\n static forRoot(): ModuleWithProviders<EpistolaPluginModule> {\n return {\n ngModule: EpistolaPluginModule,\n providers: [\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n const injector = inject(Injector);\n registerEpistolaDownloadComponent(injector);\n registerEpistolaRetryFormComponent(injector);\n registerEpistolaPreviewButtonComponent(injector);\n registerEpistolaDocumentPreviewComponent(injector);\n }\n }\n ]\n };\n }\n}\n","// Placeholder logo - a simple document icon in SVG format, base64 encoded\n// TODO: Replace with actual Epistola logo\nexport const EPISTOLA_PLUGIN_LOGO_BASE64 =\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzMzNjZjYyI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTQgMThINlY0aDd2NWg1djExeiIvPjxwYXRoIGQ9Ik04IDEyaDh2Mkg4em0wIDRoOHYtMkg4em0wLThWNmg0djJ6Ii8+PC9zdmc+';\n","import {PluginSpecification} from '@valtimo/plugin';\nimport {EpistolaConfigurationComponent} from './components/epistola-configuration/epistola-configuration.component';\nimport {\n GenerateDocumentConfigurationComponent\n} from './components/generate-document-configuration/generate-document-configuration.component';\nimport {\n CheckJobStatusConfigurationComponent\n} from './components/check-job-status-configuration/check-job-status-configuration.component';\nimport {\n DownloadDocumentConfigurationComponent\n} from './components/download-document-configuration/download-document-configuration.component';\nimport {EPISTOLA_PLUGIN_LOGO_BASE64} from './assets';\n\nconst epistolaPluginSpecification: PluginSpecification = {\n // Must match backend @Plugin(key = \"epistola\")\n pluginId: 'epistola',\n\n // Component for plugin-level configuration (tenantId)\n pluginConfigurationComponent: EpistolaConfigurationComponent,\n\n // Plugin logo\n pluginLogoBase64: EPISTOLA_PLUGIN_LOGO_BASE64,\n\n // Map action keys to their configuration components\n functionConfigurationComponents: {\n 'generate-document': GenerateDocumentConfigurationComponent,\n 'check-job-status': CheckJobStatusConfigurationComponent,\n 'download-document': DownloadDocumentConfigurationComponent,\n },\n\n // Translations\n pluginTranslations: {\n nl: {\n title: 'Epistola Document Suite',\n description: 'Documentgeneratie met Epistola',\n configurationTitle: 'Configuratienaam',\n baseUrl: 'Base URL',\n baseUrlTooltip: 'De basis URL van de Epistola API (bijv. https://api.epistola.app)',\n apiKey: 'API Key',\n apiKeyTooltip: 'De API sleutel voor authenticatie met Epistola',\n tenantId: 'Tenant ID',\n tenantIdTooltip: 'De tenant slug in Epistola (3-63 tekens, alleen kleine letters, cijfers en koppeltekens, bijv. \"mijn-tenant\")',\n defaultEnvironmentId: 'Standaard Omgeving',\n defaultEnvironmentIdTooltip: 'De standaard omgeving voor documentgeneratie (3-30 tekens, alleen kleine letters, cijfers en koppeltekens, bijv. \"productie\")',\n templateSyncEnabled: 'Template synchronisatie',\n templateSyncEnabledTooltip: 'Synchroniseer template definities automatisch van het classpath naar Epistola bij het opstarten',\n 'generate-document': 'Genereer Document',\n templateId: 'Template',\n templateIdTooltip: 'Selecteer het template dat gebruikt wordt voor documentgeneratie',\n variantId: 'Variant',\n variantIdTooltip: 'Selecteer de template variant',\n variantSelectionMode: 'Variant selectie',\n variantSelectionModeTooltip: 'Kies hoe de variant geselecteerd wordt',\n selectByVariant: 'Selecteer variant',\n selectByAttributes: 'Selecteer op kenmerken',\n variantAttributes: 'Variant kenmerken',\n variantAttributesTooltip: 'Kenmerken voor automatische variant selectie. Waarden kunnen expressies zijn (doc:, pv:, case:).',\n attributeKey: 'Kenmerk',\n attributeKeyCustom: 'Aangepast...',\n attributeValue: 'Waarde',\n addAttribute: 'Kenmerk toevoegen',\n removeAttribute: 'Kenmerk verwijderen',\n attributeRequired: 'Verplicht',\n attributePreferred: 'Voorkeur',\n environmentId: 'Omgeving',\n environmentIdTooltip: 'Selecteer de doelomgeving (optioneel)',\n correlationId: 'Correlatie ID',\n correlationIdTooltip: 'Een optioneel correlatie ID voor het traceren van dit verzoek',\n dataMapping: 'Data Mapping',\n dataMappingTooltip: 'Koppeling van template velden naar data bronnen (doc:, pv:, case:)',\n outputFormat: 'Uitvoerformaat',\n outputFormatTooltip: 'Het gewenste formaat van het gegenereerde document',\n filename: 'Bestandsnaam',\n filenameTooltip: 'De bestandsnaam voor het gegenereerde document',\n resultProcessVariable: 'Resultaat Procesvariabele',\n resultProcessVariableTooltip: 'De naam van de procesvariabele waarin het request ID wordt opgeslagen',\n pdf: 'PDF',\n html: 'HTML',\n // Data mapping builder translations\n dataMappingTitle: 'Data Mapping',\n dataMappingDescription: 'Koppel template velden aan Valtimo data bronnen',\n templateField: 'Template veld',\n dataSource: 'Data bron',\n addMapping: 'Mapping toevoegen',\n noMappings: 'Nog geen mappings toegevoegd. Klik op \"Mapping toevoegen\" om te beginnen.',\n documentFields: 'Document velden',\n processVariables: 'Procesvariabelen',\n caseProperties: 'Zaak eigenschappen',\n sourceType: 'Brontype',\n sourceTypeDocument: 'Document veld',\n sourceTypeProcessVariable: 'Procesvariabele',\n sourceTypeManual: 'Handmatig',\n requiredFieldsMissing: 'Niet alle verplichte velden zijn gekoppeld',\n requiredFieldsComplete: 'Alle verplichte velden zijn gekoppeld',\n validationSummary: 'verplichte velden gekoppeld',\n fieldRequired: 'Verplicht',\n fieldOptional: 'Optioneel',\n mapCollectionTo: 'Koppel collectie aan',\n browseMode: 'Bladermodus',\n pvMode: 'Procesvariabele modus',\n pvPlaceholder: 'Naam procesvariabele',\n expressionMode: 'Expressiemodus',\n itemFieldMapping: 'Veldnamen per item koppelen',\n itemFieldMappingTitle: 'Veldkoppeling per item:',\n sourceFieldPlaceholder: 'Bronveldnaam',\n noTemplateFields: 'Geen template velden beschikbaar',\n // Check job status action\n 'check-job-status': 'Controleer Taakstatus',\n requestIdVariable: 'Request ID Variabele',\n requestIdVariableTooltip: 'Naam van de procesvariabele met het Epistola request ID',\n statusVariable: 'Status Variabele',\n statusVariableTooltip: 'Naam van de procesvariabele waarin de status wordt opgeslagen',\n documentIdVariable: 'Document ID Variabele',\n documentIdVariableTooltip: 'Naam van de procesvariabele waarin het document ID wordt opgeslagen (bij voltooiing)',\n errorMessageVariable: 'Foutmelding Variabele',\n errorMessageVariableTooltip: 'Naam van de procesvariabele waarin de foutmelding wordt opgeslagen (bij fout)',\n // Download document action\n 'download-document': 'Download Document',\n contentVariable: 'Inhoud Variabele',\n contentVariableTooltip: 'Naam van de procesvariabele waarin de documentinhoud (Base64) wordt opgeslagen'\n },\n en: {\n title: 'Epistola Document Suite',\n description: 'Document generation using Epistola',\n configurationTitle: 'Configuration name',\n baseUrl: 'Base URL',\n baseUrlTooltip: 'The base URL of the Epistola API (e.g. https://api.epistola.app)',\n apiKey: 'API Key',\n apiKeyTooltip: 'The API key for authentication with Epistola',\n tenantId: 'Tenant ID',\n tenantIdTooltip: 'The tenant slug in Epistola (3-63 chars, lowercase letters, digits and hyphens only, e.g. \"my-tenant\")',\n defaultEnvironmentId: 'Default Environment',\n defaultEnvironmentIdTooltip: 'The default environment for document generation (3-30 chars, lowercase letters, digits and hyphens only, e.g. \"production\")',\n templateSyncEnabled: 'Template sync',\n templateSyncEnabledTooltip: 'Automatically synchronize template definitions from classpath to Epistola on startup',\n 'generate-document': 'Generate Document',\n templateId: 'Template',\n templateIdTooltip: 'Select the template to use for document generation',\n variantId: 'Variant',\n variantIdTooltip: 'Select the template variant',\n variantSelectionMode: 'Variant selection',\n variantSelectionModeTooltip: 'Choose how the variant is selected',\n selectByVariant: 'Select variant',\n selectByAttributes: 'Select by attributes',\n variantAttributes: 'Variant attributes',\n variantAttributesTooltip: 'Attributes for automatic variant selection. Values can be expressions (doc:, pv:, case:).',\n attributeKey: 'Attribute',\n attributeKeyCustom: 'Custom...',\n attributeValue: 'Value',\n addAttribute: 'Add attribute',\n removeAttribute: 'Remove attribute',\n attributeRequired: 'Required',\n attributePreferred: 'Preferred',\n environmentId: 'Environment',\n environmentIdTooltip: 'Select the target environment (optional)',\n correlationId: 'Correlation ID',\n correlationIdTooltip: 'An optional correlation ID for tracking this request',\n dataMapping: 'Data Mapping',\n dataMappingTooltip: 'Mapping of template fields to data sources (doc:, pv:, case:)',\n outputFormat: 'Output Format',\n outputFormatTooltip: 'The desired format of the generated document',\n filename: 'Filename',\n filenameTooltip: 'The filename for the generated document',\n resultProcessVariable: 'Result Process Variable',\n resultProcessVariableTooltip: 'The name of the process variable to store the request ID in',\n pdf: 'PDF',\n html: 'HTML',\n // Data mapping builder translations\n dataMappingTitle: 'Data Mapping',\n dataMappingDescription: 'Map template fields to Valtimo data sources',\n templateField: 'Template field',\n dataSource: 'Data source',\n addMapping: 'Add mapping',\n noMappings: 'No mappings added yet. Click \"Add mapping\" to start.',\n documentFields: 'Document fields',\n processVariables: 'Process variables',\n caseProperties: 'Case properties',\n sourceType: 'Source type',\n sourceTypeDocument: 'Document field',\n sourceTypeProcessVariable: 'Process variable',\n sourceTypeManual: 'Manual value',\n requiredFieldsMissing: 'Not all required fields are mapped',\n requiredFieldsComplete: 'All required fields are mapped',\n validationSummary: 'required fields mapped',\n fieldRequired: 'Required',\n fieldOptional: 'Optional',\n mapCollectionTo: 'Map collection to',\n browseMode: 'Browse mode',\n pvMode: 'Process variable mode',\n pvPlaceholder: 'Process variable name',\n expressionMode: 'Expression mode',\n itemFieldMapping: 'Map field names per item',\n itemFieldMappingTitle: 'Item field mapping:',\n sourceFieldPlaceholder: 'Source field name',\n noTemplateFields: 'No template fields available',\n // Check job status action\n 'check-job-status': 'Check Job Status',\n requestIdVariable: 'Request ID Variable',\n requestIdVariableTooltip: 'Name of the process variable containing the Epistola request ID',\n statusVariable: 'Status Variable',\n statusVariableTooltip: 'Name of the process variable to store the status in',\n documentIdVariable: 'Document ID Variable',\n documentIdVariableTooltip: 'Name of the process variable to store the document ID in (when completed)',\n errorMessageVariable: 'Error Message Variable',\n errorMessageVariableTooltip: 'Name of the process variable to store the error message in (when failed)',\n // Download document action\n 'download-document': 'Download Document',\n contentVariable: 'Content Variable',\n contentVariableTooltip: 'Name of the process variable to store the document content (Base64) in'\n }\n }\n};\n\nexport {epistolaPluginSpecification};\n","/*\n * Public API Surface of epistola plugin\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/epistola.module';\nexport * from './lib/epistola.specification';\nexport * from './lib/components/epistola-configuration/epistola-configuration.component';\nexport * from './lib/components/generate-document-configuration/generate-document-configuration.component';\nexport * from './lib/components/check-job-status-configuration/check-job-status-configuration.component';\nexport * from './lib/components/download-document-configuration/download-document-configuration.component';\nexport * from './lib/components/value-input/value-input.component';\nexport * from './lib/components/scalar-field/scalar-field.component';\nexport * from './lib/components/array-field/array-field.component';\nexport * from './lib/components/field-tree/field-tree.component';\nexport * from './lib/components/data-mapping-tree/data-mapping-tree.component';\nexport * from './lib/components/epistola-download/epistola-download.component';\nexport * from './lib/components/epistola-download/epistola-download.formio';\nexport * from './lib/components/epistola-retry-form/epistola-retry-form.component';\nexport * from './lib/components/epistola-retry-form/epistola-retry-form.formio';\nexport * from './lib/components/epistola-preview-button/epistola-preview-button.component';\nexport * from './lib/components/epistola-preview-button/epistola-preview-button.formio';\nexport * from './lib/components/epistola-document-preview/epistola-document-preview.component';\nexport * from './lib/components/epistola-document-preview/epistola-document-preview.formio';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3","i4","take","i1.EpistolaPluginService","i5","i6"],"mappings":"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"}
1
+ {"version":3,"file":"epistola.app-valtimo-plugin.mjs","sources":["../../src/lib/models/async-resource.ts","../../src/lib/services/epistola-plugin.service.ts","../../src/lib/components/epistola-configuration/epistola-configuration.component.ts","../../src/lib/components/epistola-configuration/epistola-configuration.component.html","../../src/lib/utils/template-field-utils.ts","../../src/lib/components/value-input/value-input.component.ts","../../src/lib/components/value-input/value-input.component.html","../../src/lib/components/scalar-field/scalar-field.component.ts","../../src/lib/components/scalar-field/scalar-field.component.html","../../src/lib/components/array-field/array-field.component.ts","../../src/lib/components/array-field/array-field.component.html","../../src/lib/components/field-tree/field-tree.component.ts","../../src/lib/components/field-tree/field-tree.component.html","../../src/lib/components/data-mapping-tree/data-mapping-tree.component.ts","../../src/lib/components/data-mapping-tree/data-mapping-tree.component.html","../../src/lib/components/generate-document-configuration/generate-document-configuration.component.ts","../../src/lib/components/generate-document-configuration/generate-document-configuration.component.html","../../src/lib/components/check-job-status-configuration/check-job-status-configuration.component.ts","../../src/lib/components/check-job-status-configuration/check-job-status-configuration.component.html","../../src/lib/components/download-document-configuration/download-document-configuration.component.ts","../../src/lib/components/download-document-configuration/download-document-configuration.component.html","../../src/lib/components/epistola-download/epistola-download.component.ts","../../src/lib/components/epistola-retry-form/epistola-retry-form.component.ts","../../src/lib/components/epistola-preview-button/epistola-preview-button.component.ts","../../src/lib/components/epistola-document-preview/epistola-document-preview.component.ts","../../src/lib/components/epistola-download/epistola-download.formio.ts","../../src/lib/components/epistola-retry-form/epistola-retry-form.formio.ts","../../src/lib/components/epistola-preview-button/epistola-preview-button.formio.ts","../../src/lib/components/epistola-document-preview/epistola-document-preview.formio.ts","../../src/lib/epistola.module.ts","../../src/lib/assets/epistola-logo.ts","../../src/lib/epistola.specification.ts","../../src/public_api.ts","../../src/epistola.app-valtimo-plugin.ts"],"sourcesContent":["export interface AsyncResource<T> {\n data: T;\n loading: boolean;\n error: string | null;\n}\n\nexport function initialResource<T>(empty: T): AsyncResource<T> {\n return {data: empty, loading: false, error: null};\n}\n\nexport function loadingResource<T>(current: T): AsyncResource<T> {\n return {data: current, loading: true, error: null};\n}\n\nexport function successResource<T>(data: T): AsyncResource<T> {\n return {data, loading: false, error: null};\n}\n\nexport function errorResource<T>(current: T, error: string): AsyncResource<T> {\n return {data: current, loading: false, error};\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {ConfigService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {AttributeDefinition, CatalogInfo, EnvironmentInfo, PreviewSource, TemplateDetails, TemplateInfo, ValidationResult, VariantInfo} from '../models';\n\n/**\n * Service for interacting with Epistola plugin API endpoints.\n * Provides methods to fetch templates, environments, variants,\n * process variables, and validate mappings.\n */\n@Injectable()\nexport class EpistolaPluginService {\n private readonly apiEndpoint: string;\n\n constructor(\n private readonly http: HttpClient,\n private readonly configService: ConfigService\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n /**\n * Get all available catalogs for a plugin configuration.\n */\n getCatalogs(pluginConfigurationId: string): Observable<CatalogInfo[]> {\n return this.http.get<CatalogInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/catalogs`\n );\n }\n\n /**\n * Get all available templates for a plugin configuration and catalog.\n */\n getTemplates(pluginConfigurationId: string, catalogId?: string): Observable<TemplateInfo[]> {\n const params: Record<string, string> = {};\n if (catalogId) params['catalogId'] = catalogId;\n return this.http.get<TemplateInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates`,\n {params}\n );\n }\n\n /**\n * Get template details including its fields.\n */\n getTemplateDetails(pluginConfigurationId: string, templateId: string, catalogId: string): Observable<TemplateDetails> {\n return this.http.get<TemplateDetails>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}`,\n {params: {catalogId}}\n );\n }\n\n /**\n * Get all attribute definitions for a plugin configuration's tenant and catalog.\n */\n getAttributes(pluginConfigurationId: string, catalogId: string): Observable<AttributeDefinition[]> {\n const params: Record<string, string> = {};\n if (catalogId) params['catalogId'] = catalogId;\n return this.http.get<AttributeDefinition[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/attributes`,\n {params}\n );\n }\n\n /**\n * Get all available environments for a plugin configuration.\n */\n getEnvironments(pluginConfigurationId: string): Observable<EnvironmentInfo[]> {\n return this.http.get<EnvironmentInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/environments`\n );\n }\n\n /**\n * Get all variants for a specific template.\n */\n getVariants(pluginConfigurationId: string, templateId: string, catalogId: string): Observable<VariantInfo[]> {\n const params: Record<string, string> = {};\n if (catalogId) params['catalogId'] = catalogId;\n return this.http.get<VariantInfo[]>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}/variants`,\n {params}\n );\n }\n\n /**\n * Discover process variable names for a given process definition.\n */\n getProcessVariables(processDefinitionKey: string): Observable<string[]> {\n return this.http.get<string[]>(\n `${this.apiEndpoint}/process-variables`,\n {params: {processDefinitionKey}}\n );\n }\n\n /**\n * Validate that a data mapping covers all required template fields.\n */\n validateMapping(\n pluginConfigurationId: string,\n templateId: string,\n dataMapping: Record<string, any>\n ): Observable<ValidationResult> {\n return this.http.post<ValidationResult>(\n `${this.apiEndpoint}/configurations/${pluginConfigurationId}/templates/${templateId}/validate-mapping`,\n {dataMapping}\n );\n }\n\n /**\n * Get a dynamically generated Formio form for retrying a failed document generation.\n */\n getRetryForm(\n processInstanceId: string,\n documentId?: string,\n sourceActivityId?: string\n ): Observable<any> {\n const params: Record<string, string> = {processInstanceId};\n if (documentId) {\n params['documentId'] = documentId;\n }\n if (sourceActivityId) {\n params['sourceActivityId'] = sourceActivityId;\n }\n return this.http.get<any>(`${this.apiEndpoint}/retry-form`, {params});\n }\n\n /**\n * Discover all previewable document sources for a given Valtimo document.\n */\n getPreviewSources(documentId: string): Observable<PreviewSource[]> {\n return this.http.get<PreviewSource[]>(\n `${this.apiEndpoint}/preview-sources`,\n {params: {documentId}}\n );\n }\n\n /**\n * Preview a document by dry-running the generate-document process link.\n * Returns the resolved data as a mock preview (Phase 1).\n */\n previewDocument(\n documentId: string,\n processDefinitionKey: string,\n sourceActivityId: string,\n processInstanceId?: string,\n overrides?: Record<string, any>\n ): Observable<any> {\n return this.http.post<any>(`${this.apiEndpoint}/preview`, {\n documentId,\n processDefinitionKey,\n sourceActivityId,\n processInstanceId: processInstanceId || null,\n overrides: overrides || null\n });\n }\n}\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginConfigurationComponent, PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule} from '@valtimo/components';\nimport {BehaviorSubject, combineLatest, Observable, Subscription, take} from 'rxjs';\nimport {delay, startWith} from 'rxjs/operators';\nimport {EpistolaPluginConfig} from '../../models';\n\n@Component({\n selector: 'epistola-configuration',\n templateUrl: './epistola-configuration.component.html',\n styleUrls: ['./epistola-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule]\n})\nexport class EpistolaConfigurationComponent\n implements PluginConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<EpistolaPluginConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<EpistolaPluginConfig> = new EventEmitter<EpistolaPluginConfig>();\n\n /** Epistola slug pattern: lowercase alphanumeric with hyphens, no leading/trailing hyphens. */\n private static readonly SLUG_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<EpistolaPluginConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n // Wrap disabled$ with startWith and delay to prevent NG0100 ExpressionChangedAfterItHasBeenCheckedError\n // The disabled$ observable from Valtimo's plugin framework can emit value changes after Angular's\n // change detection cycle completes, causing the error.\n this.safeDisabled$ = this.disabled$.pipe(\n startWith(true),\n delay(0)\n );\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as EpistolaPluginConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: EpistolaPluginConfig): void {\n const valid = !!(\n formValue?.configurationTitle &&\n formValue?.baseUrl &&\n formValue?.apiKey &&\n formValue?.tenantId &&\n this.isValidSlug(formValue.tenantId, 3, 63) &&\n this.isValidOptionalSlug(formValue.defaultEnvironmentId, 3, 30)\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private isValidSlug(value: string, minLength: number, maxLength: number): boolean {\n return (\n value.length >= minLength &&\n value.length <= maxLength &&\n EpistolaConfigurationComponent.SLUG_PATTERN.test(value)\n );\n }\n\n private isValidOptionalSlug(value: string | undefined, minLength: number, maxLength: number): boolean {\n if (!value) {\n return true;\n }\n return this.isValidSlug(value, minLength, maxLength);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null\n } as obs\"\n>\n <v-input\n name=\"configurationTitle\"\n [title]=\"'configurationTitle' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.configurationTitle\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"baseUrl\"\n [title]=\"'baseUrl' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'baseUrlTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.baseUrl\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"apiKey\"\n [title]=\"'apiKey' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'apiKeyTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.apiKey\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n type=\"password\"\n >\n </v-input>\n\n <v-input\n name=\"tenantId\"\n [title]=\"'tenantId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'tenantIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.tenantId\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"defaultEnvironmentId\"\n [title]=\"'defaultEnvironmentId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'defaultEnvironmentIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.defaultEnvironmentId\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"templateSyncEnabled\"\n type=\"checkbox\"\n [title]=\"'templateSyncEnabled' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'templateSyncEnabledTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.templateSyncEnabled ? 'true' : ''\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n</v-form>\n","import {TemplateField} from '../models';\n\nexport interface RequiredFieldsStatus {\n mapped: number;\n total: number;\n}\n\nexport function countRequiredMapped(\n fields: TemplateField[],\n mapping: Record<string, any>\n): RequiredFieldsStatus {\n let mapped = 0;\n let total = 0;\n for (const field of fields) {\n if (field.fieldType === 'SCALAR' && field.required) {\n total++;\n const val = mapping[field.name];\n if (typeof val === 'string' && val.trim().length > 0) {\n mapped++;\n }\n } else if (field.fieldType === 'ARRAY' && field.required) {\n total++;\n const val = mapping[field.name];\n if (typeof val === 'string' && val.trim().length > 0) {\n mapped++;\n } else if (typeof val === 'object' && val !== null && '_source' in val) {\n if (typeof val['_source'] === 'string' && val['_source'].trim().length > 0) {\n mapped++;\n }\n }\n } else if (field.fieldType === 'OBJECT' && field.children) {\n const nested = (typeof mapping[field.name] === 'object' && mapping[field.name] !== null)\n ? mapping[field.name]\n : {};\n const childStats = countRequiredMapped(field.children, nested);\n mapped += childStats.mapped;\n total += childStats.total;\n }\n }\n return {mapped, total};\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {InputModule, ValuePathSelectorComponent, ValuePathSelectorPrefix} from '@valtimo/components';\n\nexport type InputMode = 'browse' | 'pv' | 'expression';\n\n/**\n * Reusable 3-mode input (browse / pv / expression) for value resolver expressions.\n * Used by both ScalarFieldComponent and ArrayFieldComponent for source mapping.\n */\n@Component({\n selector: 'epistola-value-input',\n templateUrl: './value-input.component.html',\n styleUrls: ['./value-input.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n PluginTranslatePipeModule,\n InputModule,\n ValuePathSelectorComponent\n ]\n})\nexport class ValueInputComponent implements OnChanges {\n @Input() name = '';\n @Input() value = '';\n @Input() pluginId = '';\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n @Input() placeholder = 'e.g. pv:variableName or doc:path.to.field';\n\n @Output() valueChange = new EventEmitter<string>();\n\n readonly ValuePathSelectorPrefix = ValuePathSelectorPrefix;\n\n inputMode: InputMode = 'browse';\n selectedPv = '';\n browseDefault = '';\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n this.inputMode = this.detectInputMode(this.value);\n this.browseDefault = normalizeToDots(this.value);\n this.selectedPv = extractPvName(this.value);\n }\n if (changes['processVariables']) {\n this.cdr.markForCheck();\n }\n }\n\n setInputMode(mode: InputMode): void {\n this.inputMode = mode;\n }\n\n onBrowseValueChange(newValue: string): void {\n this.valueChange.emit(normalizeToDots(newValue));\n }\n\n onPvChange(newValue: string): void {\n this.selectedPv = newValue;\n this.valueChange.emit(newValue ? 'pv:' + newValue : '');\n }\n\n onExpressionValueChange(newValue: string): void {\n this.valueChange.emit(newValue);\n }\n\n private detectInputMode(value: string): InputMode {\n if (!value) return 'browse';\n if (value.startsWith('doc:') || value.startsWith('case:')) return 'browse';\n if (value.startsWith('pv:')) return 'pv';\n if (value.length > 0) return 'expression';\n return 'browse';\n }\n}\n\n/** Convert slash-notation paths (e.g. doc:/a/b) to dot notation (doc:a.b). */\nexport function normalizeToDots(value: string): string {\n if (typeof value !== 'string') return value;\n const colonIndex = value.indexOf(':');\n if (colonIndex < 0) return value;\n const prefix = value.substring(0, colonIndex);\n const path = value.substring(colonIndex + 1);\n if (!path.includes('/')) return value;\n const normalized = path.split('/').filter(p => p.length > 0).join('.');\n return `${prefix}:${normalized}`;\n}\n\nfunction extractPvName(value: string): string {\n if (typeof value === 'string' && value.startsWith('pv:')) {\n return value.substring(3);\n }\n return '';\n}\n","<div class=\"value-input\">\n <div class=\"input-mode-group\">\n <button type=\"button\" class=\"mode-btn\" [class.mode-active]=\"inputMode === 'browse'\" [disabled]=\"disabled\" (click)=\"setInputMode('browse')\" [title]=\"'browseMode' | pluginTranslate: pluginId | async\">⊞</button>\n <button type=\"button\" class=\"mode-btn\" [class.mode-active]=\"inputMode === 'pv'\" [disabled]=\"disabled\" (click)=\"setInputMode('pv')\" [title]=\"'pvMode' | pluginTranslate: pluginId | async\">pv</button>\n <button type=\"button\" class=\"mode-btn\" [class.mode-active]=\"inputMode === 'expression'\" [disabled]=\"disabled\" (click)=\"setInputMode('expression')\" [title]=\"'expressionMode' | pluginTranslate: pluginId | async\">fx</button>\n </div>\n\n <!-- Browse mode: ValuePathSelector -->\n <div class=\"input-control\" *ngIf=\"inputMode === 'browse'\">\n <valtimo-value-path-selector\n [name]=\"name\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [notation]=\"'dots'\"\n [disabled]=\"disabled\"\n [defaultValue]=\"browseDefault\"\n [showCaseDefinitionSelector]=\"!caseDefinitionKey\"\n (valueChangeEvent)=\"onBrowseValueChange($event)\"\n ></valtimo-value-path-selector>\n </div>\n\n <!-- PV mode: dropdown (when available) or text fallback -->\n <div class=\"input-control\" *ngIf=\"inputMode === 'pv'\">\n <select\n *ngIf=\"processVariables.length > 0; else pvFallback\"\n class=\"pv-select\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"selectedPv\"\n (ngModelChange)=\"onPvChange($event)\"\n >\n <option value=\"\">{{ 'pvPlaceholder' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let pv of processVariables\" [value]=\"pv\">{{ pv }}</option>\n </select>\n <ng-template #pvFallback>\n <v-input\n [name]=\"'pvfb_' + name\"\n [defaultValue]=\"selectedPv\"\n [disabled]=\"disabled\"\n [placeholder]=\"'pvPlaceholder' | pluginTranslate: pluginId | async\"\n (valueChange)=\"onPvChange($event)\"\n ></v-input>\n </ng-template>\n </div>\n\n <!-- Expression mode: text input -->\n <div class=\"input-control\" *ngIf=\"inputMode === 'expression'\">\n <v-input\n [name]=\"'fx_' + name\"\n [defaultValue]=\"value\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n (valueChange)=\"onExpressionValueChange($event)\"\n ></v-input>\n </div>\n</div>\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {TemplateField} from '../../models';\nimport {ValueInputComponent} from '../value-input/value-input.component';\n\n@Component({\n selector: 'epistola-scalar-field',\n templateUrl: './scalar-field.component.html',\n styleUrls: ['./scalar-field.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, PluginTranslatePipeModule, ValueInputComponent]\n})\nexport class ScalarFieldComponent {\n @Input() field!: TemplateField;\n @Input() value: any = undefined;\n @Input() pluginId!: string;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n get stringValue(): string {\n return typeof this.value === 'string' ? this.value : '';\n }\n\n onValueChange(newValue: string): void {\n this.valueChange.emit(newValue || undefined);\n }\n}\n","<div class=\"field-row\" [class.field-required-unmapped]=\"field.required && !stringValue\">\n <div class=\"field-label\">\n <span class=\"field-name\">{{ field.name }}</span>\n <span class=\"field-meta\">({{ field.type }}{{ field.required ? ', required' : '' }})</span>\n </div>\n <epistola-value-input\n [name]=\"'field_' + field.path\"\n [value]=\"stringValue\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onValueChange($event)\"\n ></epistola-value-input>\n</div>\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {InputModule} from '@valtimo/components';\nimport {TemplateField} from '../../models';\nimport {ValueInputComponent, normalizeToDots} from '../value-input/value-input.component';\n\n@Component({\n selector: 'epistola-array-field',\n templateUrl: './array-field.component.html',\n styleUrls: ['./array-field.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, PluginTranslatePipeModule, InputModule, ValueInputComponent]\n})\nexport class ArrayFieldComponent implements OnChanges {\n @Input() field!: TemplateField;\n @Input() value: any = undefined;\n @Input() pluginId!: string;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n expanded = false;\n arrayPerFieldMode = false;\n mappedCount = 0;\n totalRequired = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] || changes['field']) {\n this.updateCompleteness();\n if (!this.expanded && this.totalRequired > 0 && this.mappedCount < this.totalRequired) {\n this.expanded = true;\n }\n // Detect per-field mode from value shape\n if (changes['value'] && typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n this.arrayPerFieldMode = true;\n }\n }\n }\n\n toggleExpanded(): void {\n this.expanded = !this.expanded;\n }\n\n getSourceValue(): string {\n if (typeof this.value === 'string') {\n return normalizeToDots(this.value);\n }\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n return normalizeToDots(this.value['_source'] || '');\n }\n return '';\n }\n\n onSourceValueChange(newValue: string): void {\n if (this.arrayPerFieldMode) {\n const current = (typeof this.value === 'object' && this.value !== null) ? {...this.value} : {};\n current['_source'] = newValue || '';\n this.valueChange.emit(current);\n } else {\n this.valueChange.emit(newValue || undefined);\n }\n }\n\n toggleArrayPerFieldMode(): void {\n this.arrayPerFieldMode = !this.arrayPerFieldMode;\n\n if (this.arrayPerFieldMode) {\n const currentSource = this.getSourceValue();\n this.valueChange.emit({_source: currentSource});\n } else {\n const source = this.getSourceValue();\n this.valueChange.emit(source || undefined);\n }\n }\n\n onItemFieldChange(childName: string, sourceFieldName: string): void {\n const current = (typeof this.value === 'object' && this.value !== null) ? {...this.value} : {_source: ''};\n if (sourceFieldName && sourceFieldName.trim().length > 0) {\n current[childName] = sourceFieldName;\n } else {\n delete current[childName];\n }\n this.valueChange.emit(current);\n }\n\n getItemFieldValue(childName: string): string {\n if (typeof this.value === 'object' && this.value !== null) {\n return this.value[childName] || '';\n }\n return '';\n }\n\n hasArrayChildren(): boolean {\n return !!(this.field?.children && this.field.children.length > 0);\n }\n\n private updateCompleteness(): void {\n if (!this.field?.children || this.field.children.length === 0) {\n this.totalRequired = this.field?.required ? 1 : 0;\n this.mappedCount = this.getSourceValue() ? (this.field?.required ? 1 : 0) : 0;\n return;\n }\n\n if (typeof this.value === 'object' && this.value !== null && '_source' in this.value) {\n let total = 0;\n let mapped = 0;\n\n if (this.field?.required) {\n total++;\n if (this.value['_source'] && this.value['_source'].trim().length > 0) {\n mapped++;\n }\n }\n\n for (const child of this.field.children) {\n if (child.required) {\n total++;\n const val = this.value[child.name];\n if (typeof val === 'string' && val.trim().length > 0) {\n mapped++;\n }\n }\n }\n\n this.mappedCount = mapped;\n this.totalRequired = total;\n } else {\n this.totalRequired = this.field?.required ? 1 : 0;\n this.mappedCount = this.getSourceValue() ? (this.field?.required ? 1 : 0) : 0;\n }\n }\n}\n","<div class=\"field-array\">\n <div class=\"field-array-header\" (click)=\"toggleExpanded()\" [class.field-required-unmapped]=\"field.required && !getSourceValue()\">\n <span class=\"expand-icon\">{{ expanded ? '▼' : '▶' }}</span>\n <span class=\"field-name\">{{ field.name }}</span>\n <span class=\"field-meta\">(array{{ field.required ? ', required' : '' }})</span>\n <span class=\"completeness-badge\" *ngIf=\"totalRequired > 0 && !expanded\">\n {{ mappedCount }}/{{ totalRequired }}\n </span>\n <span class=\"mapped-indicator\" *ngIf=\"totalRequired === 0 && getSourceValue() && !expanded\">✓</span>\n </div>\n <div class=\"field-array-content\" *ngIf=\"expanded\">\n <!-- Source collection input -->\n <div class=\"field-row\">\n <div class=\"field-label\">\n <span class=\"field-name\">{{ 'mapCollectionTo' | pluginTranslate: pluginId | async }}</span>\n </div>\n <epistola-value-input\n [name]=\"'field_' + field.path\"\n [value]=\"getSourceValue()\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onSourceValueChange($event)\"\n ></epistola-value-input>\n </div>\n\n <!-- Per-item field mapping toggle -->\n <div class=\"array-per-field-toggle\" *ngIf=\"hasArrayChildren()\">\n <label class=\"toggle-label\">\n <input\n type=\"checkbox\"\n [checked]=\"arrayPerFieldMode\"\n [disabled]=\"disabled\"\n (change)=\"toggleArrayPerFieldMode()\"\n />\n <span>{{ 'itemFieldMapping' | pluginTranslate: pluginId | async }}</span>\n </label>\n </div>\n\n <!-- Per-item field mappings -->\n <div class=\"array-item-fields\" *ngIf=\"arrayPerFieldMode && hasArrayChildren()\">\n <div class=\"item-fields-header\">\n <span class=\"item-fields-title\">{{ 'itemFieldMappingTitle' | pluginTranslate: pluginId | async }}</span>\n </div>\n <div class=\"item-field-row\" *ngFor=\"let child of field.children\">\n <div class=\"item-field-label\">\n <span class=\"field-name\">{{ child.name }}</span>\n <span class=\"field-meta\">({{ child.type }}{{ child.required ? ', required' : '' }})</span>\n </div>\n <div class=\"item-field-input\">\n <v-input\n [name]=\"'itemField_' + child.path\"\n [defaultValue]=\"getItemFieldValue(child.name)\"\n [disabled]=\"disabled\"\n [placeholder]=\"'sourceFieldPlaceholder' | pluginTranslate: pluginId | async\"\n (valueChange)=\"onItemFieldChange(child.name, $event)\"\n ></v-input>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import {ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {TemplateField} from '../../models';\nimport {countRequiredMapped} from '../../utils/template-field-utils';\nimport {ScalarFieldComponent} from '../scalar-field/scalar-field.component';\nimport {ArrayFieldComponent} from '../array-field/array-field.component';\n\n/**\n * Recursive field tree component.\n * Dispatches SCALAR and ARRAY to dedicated sub-components.\n * Handles OBJECT inline to avoid circular import issues (OBJECT children recurse back to this component).\n * Uses forwardRef(() => FieldTreeComponent) in imports to allow self-referencing in the template.\n */\n@Component({\n selector: 'epistola-field-tree',\n templateUrl: './field-tree.component.html',\n styleUrls: ['./field-tree.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, PluginTranslatePipeModule, ScalarFieldComponent, ArrayFieldComponent, forwardRef(() => FieldTreeComponent)]\n})\nexport class FieldTreeComponent implements OnChanges {\n @Input() field!: TemplateField;\n @Input() value: any = undefined;\n @Input() pluginId!: string;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n @Input() disabled = false;\n\n @Output() valueChange = new EventEmitter<any>();\n\n // OBJECT-specific state\n expanded = false;\n mappedCount = 0;\n totalRequired = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.field?.fieldType === 'OBJECT' && (changes['value'] || changes['field'])) {\n if (this.field.children) {\n const stats = countRequiredMapped(this.field.children, this.value || {});\n this.mappedCount = stats.mapped;\n this.totalRequired = stats.total;\n }\n if (!this.expanded && this.totalRequired > 0 && this.mappedCount < this.totalRequired) {\n this.expanded = true;\n }\n }\n }\n\n toggleExpanded(): void {\n this.expanded = !this.expanded;\n }\n\n onChildChange(childName: string, childValue: any): void {\n const current = (typeof this.value === 'object' && this.value !== null) ? {...this.value} : {};\n if (childValue === undefined || childValue === null || childValue === '') {\n delete current[childName];\n } else {\n current[childName] = childValue;\n }\n this.valueChange.emit(Object.keys(current).length > 0 ? current : undefined);\n }\n\n getChildValue(childName: string): any {\n if (typeof this.value === 'object' && this.value !== null) {\n return this.value[childName];\n }\n return undefined;\n }\n}\n","@switch (field.fieldType) {\n @case ('SCALAR') {\n <epistola-scalar-field\n [field]=\"field\"\n [value]=\"value\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"valueChange.emit($event)\"\n ></epistola-scalar-field>\n }\n @case ('OBJECT') {\n <div class=\"field-object\">\n <div class=\"field-object-header\" (click)=\"toggleExpanded()\" [class.field-required-unmapped]=\"totalRequired > 0 && mappedCount < totalRequired\">\n <span class=\"expand-icon\">{{ expanded ? '▼' : '▶' }}</span>\n <span class=\"field-name\">{{ field.name }}</span>\n <span class=\"field-meta\">(object{{ field.required ? ', required' : '' }})</span>\n <span class=\"completeness-badge\" *ngIf=\"totalRequired > 0 && !expanded\">\n {{ mappedCount }}/{{ totalRequired }}\n </span>\n </div>\n <div class=\"field-object-children\" *ngIf=\"expanded\">\n <epistola-field-tree\n *ngFor=\"let child of field.children\"\n [field]=\"child\"\n [value]=\"getChildValue(child.name)\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onChildChange(child.name, $event)\"\n ></epistola-field-tree>\n </div>\n </div>\n }\n @case ('ARRAY') {\n <epistola-array-field\n [field]=\"field\"\n [value]=\"value\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"valueChange.emit($event)\"\n ></epistola-array-field>\n }\n}\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {TemplateField} from '../../models';\nimport {countRequiredMapped} from '../../utils/template-field-utils';\nimport {FieldTreeComponent} from '../field-tree/field-tree.component';\n\n/**\n * Top-level wrapper that hosts FieldTreeComponent instances for each top-level template field.\n * Manages the full nested mapping object, completeness tracking, and emits mapping changes.\n */\n@Component({\n selector: 'epistola-data-mapping-tree',\n templateUrl: './data-mapping-tree.component.html',\n styleUrls: ['./data-mapping-tree.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n PluginTranslatePipeModule,\n FieldTreeComponent\n ]\n})\nexport class DataMappingTreeComponent implements OnChanges {\n @Input() pluginId!: string;\n @Input() templateFields: TemplateField[] = [];\n @Input() prefillMapping: Record<string, any> = {};\n @Input() disabled = false;\n @Input() caseDefinitionKey: string | null = null;\n @Input() processVariables: string[] = [];\n\n @Output() mappingChange = new EventEmitter<Record<string, any>>();\n @Output() requiredFieldsStatus = new EventEmitter<{mapped: number; total: number}>();\n\n mapping: Record<string, any> = {};\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['prefillMapping']) {\n const mapping = this.prefillMapping;\n if (mapping && Object.keys(mapping).length > 0) {\n this.mapping = {...mapping};\n }\n }\n if (changes['templateFields'] || changes['prefillMapping']) {\n this.emitRequiredFieldsStatus();\n }\n }\n\n onFieldValueChange(fieldName: string, value: any): void {\n if (value === undefined || value === null || value === '') {\n const {[fieldName]: _, ...rest} = this.mapping;\n this.mapping = rest;\n } else {\n this.mapping = {...this.mapping, [fieldName]: value};\n }\n this.mappingChange.emit(this.mapping);\n this.emitRequiredFieldsStatus();\n }\n\n getFieldValue(fieldName: string): any {\n return this.mapping[fieldName];\n }\n\n private emitRequiredFieldsStatus(): void {\n const stats = countRequiredMapped(this.templateFields, this.mapping);\n this.requiredFieldsStatus.emit(stats);\n }\n}\n","<div class=\"data-mapping-tree\">\n <div class=\"mapping-header\">\n <h5>{{ 'dataMappingTitle' | pluginTranslate: pluginId | async }}</h5>\n <p class=\"helper-text\">{{ 'dataMappingDescription' | pluginTranslate: pluginId | async }}</p>\n </div>\n\n <div class=\"field-tree-root\" *ngIf=\"templateFields.length > 0\">\n <epistola-field-tree\n *ngFor=\"let field of templateFields\"\n [field]=\"field\"\n [value]=\"getFieldValue(field.name)\"\n [pluginId]=\"pluginId\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n [disabled]=\"disabled\"\n (valueChange)=\"onFieldValueChange(field.name, $event)\"\n ></epistola-field-tree>\n </div>\n\n <div class=\"no-fields\" *ngIf=\"templateFields.length === 0\">\n <p>{{ 'noTemplateFields' | pluginTranslate: pluginId | async }}</p>\n </div>\n</div>\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {\n FunctionConfigurationComponent,\n PluginConfigurationData,\n PluginTranslatePipeModule\n} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule, SelectItem, SelectModule} from '@valtimo/components';\nimport {CaseManagementParams, ManagementContext} from '@valtimo/shared';\nimport {ProcessLinkStateService} from '@valtimo/process-link';\nimport {BehaviorSubject, combineLatest, merge, Observable, of, Subject, Subscription} from 'rxjs';\nimport {catchError, distinctUntilChanged, filter, map, shareReplay, switchMap, take, takeUntil, tap} from 'rxjs/operators';\nimport {AsyncResource, errorResource, GenerateDocumentConfig, initialResource, loadingResource, successResource, TemplateField} from '../../models';\nimport {EpistolaPluginService} from '../../services';\nimport {DataMappingTreeComponent} from '../data-mapping-tree/data-mapping-tree.component';\n\nexport type VariantSelectionMode = 'explicit' | 'attributes';\n\n@Component({\n selector: 'epistola-generate-document-configuration',\n templateUrl: './generate-document-configuration.component.html',\n styleUrls: ['./generate-document-configuration.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n PluginTranslatePipeModule,\n FormModule,\n InputModule,\n SelectModule,\n DataMappingTreeComponent\n ]\n})\nexport class GenerateDocumentConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<GenerateDocumentConfig>;\n @Input() selectedPluginConfigurationData$?: Observable<PluginConfigurationData>;\n @Input() context$?: Observable<[ManagementContext, CaseManagementParams]>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<GenerateDocumentConfig> = new EventEmitter<GenerateDocumentConfig>();\n\n catalogs$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n templates$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n variants$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n environments$ = new BehaviorSubject<AsyncResource<SelectItem[]>>(initialResource([]));\n templateFields$ = new BehaviorSubject<AsyncResource<TemplateField[]>>(initialResource([]));\n\n dataMapping$ = new BehaviorSubject<Record<string, any>>({});\n\n outputFormatOptions: SelectItem[] = [\n {id: 'PDF', text: 'PDF'},\n {id: 'HTML', text: 'HTML'}\n ];\n\n readonly selectedCatalogId$ = new BehaviorSubject<string>('');\n /** Composite ID: \"catalogId/templateId\" */\n readonly selectedTemplateId$ = new BehaviorSubject<string>('');\n readonly selectedVariantId$ = new BehaviorSubject<string>('');\n\n variantSelectionMode: VariantSelectionMode = 'explicit';\n variantAttributeEntries: {key: string; value: string; required: boolean; _customKey?: boolean}[] = [];\n availableAttributeKeys: string[] = [];\n caseDefinitionKey: string | null = null;\n processVariables: string[] = [];\n requiredFieldsStatus: {mapped: number; total: number} = {mapped: 0, total: 0};\n prefillDataMapping: Record<string, any> = {};\n\n private readonly destroy$ = new Subject<void>();\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<Partial<GenerateDocumentConfig> | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n private pluginConfigurationId$ = new BehaviorSubject<string>('');\n\n /** Resolves once with the prefill config (or empty config if none). */\n private prefill$!: Observable<GenerateDocumentConfig | null>;\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly processLinkStateService: ProcessLinkStateService,\n private readonly cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.prefill$ = this.resolvePrefill$();\n\n this.initContext();\n this.initPluginConfiguration();\n this.initCascade();\n this.openSaveSubscription();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as Partial<GenerateDocumentConfig & { catalogId: string; templateId: string }>;\n this.formValue$.next(formValue);\n\n // When catalog changes, reset template and variant selection\n if (formValue.catalogId && formValue.catalogId !== this.selectedCatalogId$.getValue()) {\n this.selectedCatalogId$.next(formValue.catalogId);\n this.selectedTemplateId$.next('');\n this.selectedVariantId$.next('');\n }\n\n // templateId from v-select is the template ID within the selected catalog\n if (formValue.templateId && formValue.templateId !== this.selectedTemplateId$.getValue()) {\n this.selectedTemplateId$.next(formValue.templateId);\n this.selectedVariantId$.next('');\n }\n\n if (formValue.variantId && formValue.variantId !== this.selectedVariantId$.getValue()) {\n this.selectedVariantId$.next(formValue.variantId);\n }\n\n this.handleValid(formValue);\n }\n\n onDataMappingChange(mapping: Record<string, any>): void {\n this.dataMapping$.next(mapping);\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n onRequiredFieldsStatusChange(status: {mapped: number; total: number}): void {\n this.requiredFieldsStatus = status;\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n onVariantSelectionModeChange(mode: VariantSelectionMode): void {\n this.variantSelectionMode = mode;\n if (mode === 'attributes' && this.variantAttributeEntries.length === 0) {\n this.variantAttributeEntries = [{key: '', value: '', required: true}];\n }\n this.revalidate();\n }\n\n addAttributeEntry(): void {\n this.variantAttributeEntries = [...this.variantAttributeEntries, {key: '', value: '', required: true}];\n this.revalidate();\n }\n\n removeAttributeEntry(index: number): void {\n this.variantAttributeEntries = this.variantAttributeEntries.filter((_, i) => i !== index);\n this.revalidate();\n }\n\n onAttributeEntryChange(): void {\n this.revalidate();\n }\n\n onKeySelected(entry: {key: string; value: string; required: boolean; _customKey?: boolean}, value: string): void {\n if (value === '__custom__') {\n entry._customKey = true;\n entry.key = '';\n } else {\n entry.key = value;\n }\n this.onAttributeEntryChange();\n }\n\n cancelCustomKey(entry: {key: string; value: string; required: boolean; _customKey?: boolean}): void {\n entry._customKey = false;\n entry.key = '';\n this.onAttributeEntryChange();\n }\n\n private revalidate(): void {\n const currentFormValue = this.formValue$.getValue();\n if (currentFormValue) {\n this.handleValid(currentFormValue);\n }\n }\n\n private formatAttributes(attributes: Record<string, string>): string {\n const entries = Object.entries(attributes || {});\n if (entries.length === 0) return '';\n return ` (${entries.map(([k, v]) => `${k}=${v}`).join(', ')})`;\n }\n\n /**\n * Creates a shared observable that resolves once with the prefill config\n * (or null if no prefill is provided). This is used to seed the cascade\n * with initial selection values before any loading starts.\n */\n private resolvePrefill$(): Observable<GenerateDocumentConfig | null> {\n if (!this.prefillConfiguration$) {\n return of(null).pipe(shareReplay(1));\n }\n return this.prefillConfiguration$.pipe(\n take(1),\n shareReplay(1)\n );\n }\n\n private initContext(): void {\n if (this.context$) {\n this.context$.pipe(\n takeUntil(this.destroy$),\n filter(([context]) => context === 'case')\n ).subscribe(([, params]) => {\n this.caseDefinitionKey = params.caseDefinitionKey;\n this.cdr.markForCheck();\n });\n }\n }\n\n private initPluginConfiguration(): void {\n const sources: Observable<string>[] = [];\n\n if (this.selectedPluginConfigurationData$) {\n sources.push(\n this.selectedPluginConfigurationData$.pipe(\n filter(config => !!config?.configurationId),\n map(config => config.configurationId)\n )\n );\n }\n\n sources.push(\n this.processLinkStateService.selectedProcessLink$.pipe(\n filter(processLink => !!processLink?.pluginConfigurationId),\n map(processLink => processLink.pluginConfigurationId!)\n )\n );\n\n merge(...sources).pipe(\n takeUntil(this.destroy$)\n ).subscribe(configurationId => {\n this.pluginConfigurationId$.next(configurationId);\n });\n }\n\n /**\n * Sets up the entire reactive cascade:\n *\n * pluginConfigurationId$ → catalogs (+ environments independently)\n * prefill + catalogs loaded → seed selectedCatalogId$\n * selectedCatalogId$ → templates (+ attributes)\n * prefill + templates loaded → seed selectedTemplateId$\n * selectedTemplateId$ → variants + templateFields\n * prefill + templateFields loaded → seed dataMapping\n */\n private initCascade(): void {\n const configId$ = this.pluginConfigurationId$.pipe(\n filter(id => !!id),\n distinctUntilChanged()\n );\n\n // ── Catalogs: load when pluginConfigurationId changes ──\n configId$.pipe(\n takeUntil(this.destroy$),\n tap(() => this.catalogs$.next(loadingResource(this.catalogs$.getValue().data))),\n switchMap(configurationId =>\n this.epistolaPluginService.getCatalogs(configurationId).pipe(\n map(catalogs => successResource(catalogs.map(c => ({id: c.id, text: c.name})))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load catalogs')))\n )\n )\n ).subscribe(resource => this.catalogs$.next(resource));\n\n // ── Environments: load when pluginConfigurationId changes (independent) ──\n configId$.pipe(\n takeUntil(this.destroy$),\n tap(() => this.environments$.next(loadingResource(this.environments$.getValue().data))),\n switchMap(configurationId =>\n this.epistolaPluginService.getEnvironments(configurationId).pipe(\n map(envs => successResource(envs.map(e => ({id: e.id, text: e.name})))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load environments')))\n )\n )\n ).subscribe(resource => this.environments$.next(resource));\n\n // ── Seed selectedCatalogId$ from prefill once catalogs are loaded ──\n combineLatest([\n this.prefill$.pipe(filter(config => !!config?.catalogId)),\n this.catalogs$.pipe(filter(c => !c.loading && c.data.length > 0))\n ]).pipe(\n takeUntil(this.destroy$),\n take(1)\n ).subscribe(([config]) => {\n this.selectedCatalogId$.next(config!.catalogId);\n });\n\n // ── Templates: load when catalogId changes ──\n const catalogId$ = this.selectedCatalogId$.pipe(\n filter(id => !!id),\n distinctUntilChanged()\n );\n\n combineLatest([configId$, catalogId$]).pipe(\n takeUntil(this.destroy$),\n tap(() => this.templates$.next(loadingResource(this.templates$.getValue().data))),\n switchMap(([configurationId, catalogId]) =>\n this.epistolaPluginService.getTemplates(configurationId, catalogId).pipe(\n map(templates => successResource(templates.map(t => ({id: t.id, text: t.name})))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load templates')))\n )\n )\n ).subscribe(resource => this.templates$.next(resource));\n\n // ── Attributes: load when catalogId changes ──\n combineLatest([configId$, catalogId$]).pipe(\n takeUntil(this.destroy$),\n switchMap(([configurationId, catalogId]) =>\n this.epistolaPluginService.getAttributes(configurationId, catalogId).pipe(\n catchError(() => of([]))\n )\n )\n ).subscribe(attributes => {\n this.availableAttributeKeys = attributes.map(a => a.key).sort();\n this.cdr.markForCheck();\n });\n\n // ── Seed selectedTemplateId$ from prefill once templates are loaded ──\n combineLatest([\n this.prefill$.pipe(filter(config => !!config?.templateId)),\n this.templates$.pipe(filter(t => !t.loading && t.data.length > 0))\n ]).pipe(\n takeUntil(this.destroy$),\n take(1)\n ).subscribe(([config]) => {\n this.selectedTemplateId$.next(config!.templateId);\n });\n\n // ── Variants: load when templateId changes ──\n const templateId$ = this.selectedTemplateId$.pipe(\n filter(id => !!id),\n distinctUntilChanged()\n );\n\n combineLatest([configId$, catalogId$, templateId$]).pipe(\n takeUntil(this.destroy$),\n tap(() => this.variants$.next(loadingResource(this.variants$.getValue().data))),\n switchMap(([configurationId, catalogId, templateId]) =>\n this.epistolaPluginService.getVariants(configurationId, templateId, catalogId).pipe(\n map(variants => successResource(variants.map(v => ({id: v.id, text: v.name + this.formatAttributes(v.attributes)})))),\n catchError(() => of(errorResource<SelectItem[]>([], 'Failed to load variants')))\n )\n )\n ).subscribe(resource => this.variants$.next(resource));\n\n // ── Template fields: load when templateId changes ──\n combineLatest([configId$, catalogId$, templateId$]).pipe(\n takeUntil(this.destroy$),\n tap(() => {\n this.templateFields$.next(loadingResource(this.templateFields$.getValue().data));\n this.loadProcessVariables();\n }),\n switchMap(([configurationId, catalogId, templateId]) =>\n this.epistolaPluginService.getTemplateDetails(configurationId, templateId, catalogId).pipe(\n map(details => successResource(details.fields || [])),\n catchError(() => of(errorResource<TemplateField[]>([], 'Failed to load template fields')))\n )\n )\n ).subscribe(resource => this.templateFields$.next(resource));\n\n // ── Seed variant + dataMapping from prefill once templateFields are loaded ──\n combineLatest([\n this.prefill$.pipe(filter(config => !!config?.templateId)),\n this.templateFields$.pipe(filter(tf => !tf.loading && tf.data.length > 0))\n ]).pipe(\n takeUntil(this.destroy$),\n take(1)\n ).subscribe(([config]) => {\n if (!config) return;\n\n // Apply variant prefill\n if (config.variantAttributes && (Array.isArray(config.variantAttributes) ? config.variantAttributes.length > 0 : Object.keys(config.variantAttributes).length > 0)) {\n this.variantSelectionMode = 'attributes';\n if (Array.isArray(config.variantAttributes)) {\n this.variantAttributeEntries = config.variantAttributes\n .map(e => ({key: e.key, value: e.value, required: e.required !== false}));\n } else {\n this.variantAttributeEntries = Object.entries(config.variantAttributes as any)\n .map(([key, value]) => ({key, value: String(value), required: true}));\n }\n } else if (config.variantId) {\n this.variantSelectionMode = 'explicit';\n this.selectedVariantId$.next(config.variantId);\n }\n\n // Apply dataMapping prefill — templateFields are guaranteed loaded at this point.\n // Use setTimeout to ensure the tree component exists in the DOM (after *ngIf resolves)\n // before setting the prefill, so ngOnChanges fires correctly on the child.\n if (config.dataMapping) {\n this.dataMapping$.next(config.dataMapping);\n setTimeout(() => {\n this.prefillDataMapping = {...config.dataMapping};\n this.cdr.detectChanges();\n });\n } else {\n this.cdr.detectChanges();\n }\n });\n }\n\n private loadProcessVariables(): void {\n if (this.caseDefinitionKey) {\n this.epistolaPluginService.getProcessVariables(this.caseDefinitionKey).pipe(\n takeUntil(this.destroy$),\n catchError(() => of([]))\n ).subscribe(variables => {\n this.processVariables = variables;\n this.cdr.markForCheck();\n });\n }\n }\n\n private handleValid(formValue: Partial<GenerateDocumentConfig & { catalogId: string }>): void {\n const baseComplete = !!(\n this.selectedCatalogId$.getValue() &&\n formValue?.templateId &&\n formValue?.outputFormat &&\n formValue?.filename &&\n formValue?.resultProcessVariable\n );\n\n let variantValid = true;\n if (this.variantSelectionMode === 'attributes' && this.variantAttributeEntries.length > 0) {\n variantValid = this.variantAttributeEntries.every(e => !!e.key && !!e.value);\n }\n\n const requiredFieldsMapped = this.requiredFieldsStatus.total === 0 ||\n this.requiredFieldsStatus.mapped === this.requiredFieldsStatus.total;\n\n const valid = baseComplete && variantValid && requiredFieldsMapped;\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$, this.dataMapping$])\n .pipe(take(1))\n .subscribe(([formValue, valid, dataMapping]) => {\n if (valid && formValue) {\n const catalogId = this.selectedCatalogId$.getValue();\n const templateId = formValue.templateId!;\n\n const config: GenerateDocumentConfig = {\n catalogId,\n templateId,\n environmentId: formValue.environmentId || undefined,\n dataMapping: dataMapping,\n outputFormat: formValue.outputFormat as 'PDF' | 'HTML',\n filename: formValue.filename!,\n correlationId: formValue.correlationId || undefined,\n resultProcessVariable: formValue.resultProcessVariable!\n };\n\n if (this.variantSelectionMode === 'explicit') {\n config.variantId = formValue.variantId!;\n } else {\n config.variantAttributes = this.variantAttributeEntries\n .filter(e => e.key && e.value)\n .map(e => ({key: e.key, value: e.value, required: e.required}));\n }\n\n this.configuration.emit(config);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: disabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null,\n catalogs: catalogs$ | async,\n templates: templates$ | async,\n variants: variants$ | async,\n environments: environments$ | async,\n templateFields: templateFields$ | async,\n selectedCatalogId: selectedCatalogId$ | async,\n selectedTemplateId: selectedTemplateId$ | async\n } as obs\"\n>\n <v-select\n name=\"catalogId\"\n [title]=\"'catalogId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'catalogIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.catalogs.data\"\n [defaultSelectionId]=\"obs.prefill?.catalogId\"\n [disabled]=\"obs.disabled || obs.catalogs.loading\"\n [required]=\"true\"\n [loading]=\"obs.catalogs.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.catalogs.error\" class=\"loading-error\">{{ obs.catalogs.error }}</div>\n\n <v-select\n name=\"templateId\"\n [title]=\"'templateId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'templateIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.templates.data\"\n [defaultSelectionId]=\"obs.prefill?.templateId\"\n [disabled]=\"obs.disabled || obs.templates.loading || !obs.selectedCatalogId\"\n [required]=\"true\"\n [loading]=\"obs.templates.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.templates.error\" class=\"loading-error\">{{ obs.templates.error }}</div>\n\n <!-- Variant selection mode toggle -->\n <div class=\"variant-mode-toggle\" *ngIf=\"obs.selectedTemplateId\">\n <label class=\"variant-mode-label\">{{ 'variantSelectionMode' | pluginTranslate: pluginId | async }}</label>\n <div class=\"variant-mode-buttons\">\n <button\n type=\"button\"\n class=\"variant-mode-btn\"\n [class.active]=\"variantSelectionMode === 'explicit'\"\n (click)=\"onVariantSelectionModeChange('explicit')\"\n [disabled]=\"obs.disabled\"\n >{{ 'selectByVariant' | pluginTranslate: pluginId | async }}</button>\n <button\n type=\"button\"\n class=\"variant-mode-btn\"\n [class.active]=\"variantSelectionMode === 'attributes'\"\n (click)=\"onVariantSelectionModeChange('attributes')\"\n [disabled]=\"obs.disabled\"\n >{{ 'selectByAttributes' | pluginTranslate: pluginId | async }}</button>\n </div>\n </div>\n\n <!-- Explicit variant selection (dropdown) -->\n <v-select\n *ngIf=\"variantSelectionMode === 'explicit'\"\n name=\"variantId\"\n [title]=\"'variantId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'variantIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.variants.data\"\n [defaultSelectionId]=\"obs.prefill?.variantId\"\n [disabled]=\"obs.disabled || obs.variants.loading || !obs.selectedTemplateId\"\n [required]=\"false\"\n [loading]=\"obs.variants.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.variants.error\" class=\"loading-error\">{{ obs.variants.error }}</div>\n\n <!-- Attribute-based variant selection -->\n <div *ngIf=\"variantSelectionMode === 'attributes' && obs.selectedTemplateId\" class=\"variant-attributes-section\">\n <label class=\"variant-attributes-label\">{{ 'variantAttributes' | pluginTranslate: pluginId | async }}</label>\n <div class=\"variant-attributes-list\">\n <div *ngFor=\"let entry of variantAttributeEntries; let i = index\" class=\"variant-attribute-row\">\n <select\n *ngIf=\"!entry._customKey\"\n class=\"variant-attribute-input\"\n [ngModel]=\"entry.key\"\n (ngModelChange)=\"onKeySelected(entry, $event)\"\n [disabled]=\"obs.disabled\"\n >\n <option value=\"\" disabled>{{ 'attributeKey' | pluginTranslate: pluginId | async }}</option>\n <option *ngFor=\"let key of availableAttributeKeys\" [value]=\"key\">{{ key }}</option>\n <option value=\"__custom__\">{{ 'attributeKeyCustom' | pluginTranslate: pluginId | async }}</option>\n </select>\n <div *ngIf=\"entry._customKey\" class=\"custom-key-input\">\n <input\n type=\"text\"\n class=\"variant-attribute-input\"\n [placeholder]=\"'attributeKey' | pluginTranslate: pluginId | async\"\n [(ngModel)]=\"entry.key\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <button type=\"button\" class=\"custom-key-cancel\" (click)=\"cancelCustomKey(entry)\" [disabled]=\"obs.disabled\">&times;</button>\n </div>\n <input\n type=\"text\"\n class=\"variant-attribute-input\"\n [placeholder]=\"'attributeValue' | pluginTranslate: pluginId | async\"\n [(ngModel)]=\"entry.value\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <label class=\"variant-attribute-required-toggle\">\n <input\n type=\"checkbox\"\n [(ngModel)]=\"entry.required\"\n (ngModelChange)=\"onAttributeEntryChange()\"\n [disabled]=\"obs.disabled\"\n />\n <span class=\"required-label\">{{ (entry.required ? 'attributeRequired' : 'attributePreferred') | pluginTranslate: pluginId | async }}</span>\n </label>\n <button\n type=\"button\"\n class=\"variant-attribute-remove-btn\"\n (click)=\"removeAttributeEntry(i)\"\n [disabled]=\"obs.disabled\"\n title=\"{{ 'removeAttribute' | pluginTranslate: pluginId | async }}\"\n >&times;</button>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"variant-attribute-add-btn\"\n (click)=\"addAttributeEntry()\"\n [disabled]=\"obs.disabled\"\n >+ {{ 'addAttribute' | pluginTranslate: pluginId | async }}</button>\n </div>\n\n <v-select\n name=\"environmentId\"\n [title]=\"'environmentId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'environmentIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"obs.environments.data\"\n [defaultSelectionId]=\"obs.prefill?.environmentId\"\n [disabled]=\"obs.disabled || obs.environments.loading\"\n [required]=\"false\"\n [loading]=\"obs.environments.loading\"\n >\n </v-select>\n <div *ngIf=\"obs.environments.error\" class=\"loading-error\">{{ obs.environments.error }}</div>\n\n <v-select\n name=\"outputFormat\"\n [title]=\"'outputFormat' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'outputFormatTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [items]=\"outputFormatOptions\"\n [defaultSelectionId]=\"obs.prefill?.outputFormat || 'PDF'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-select>\n\n <v-input\n name=\"filename\"\n [title]=\"'filename' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'filenameTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.filename\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"correlationId\"\n [title]=\"'correlationId' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'correlationIdTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.correlationId\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"resultProcessVariable\"\n [title]=\"'resultProcessVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'resultProcessVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.resultProcessVariable\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n</v-form>\n\n<div *ngIf=\"(templateFields$ | async)?.error as templateFieldsError\" class=\"loading-error\">{{ templateFieldsError }}</div>\n\n<epistola-data-mapping-tree\n *ngIf=\"(selectedTemplateId$ | async)\"\n [pluginId]=\"pluginId\"\n [templateFields]=\"(templateFields$ | async)?.data ?? []\"\n [disabled]=\"!!(disabled$ | async)\"\n [prefillMapping]=\"prefillDataMapping\"\n [caseDefinitionKey]=\"caseDefinitionKey\"\n [processVariables]=\"processVariables\"\n (mappingChange)=\"onDataMappingChange($event)\"\n (requiredFieldsStatus)=\"onRequiredFieldsStatusChange($event)\"\n></epistola-data-mapping-tree>\n\n<div class=\"validation-summary\" *ngIf=\"(selectedTemplateId$ | async) && requiredFieldsStatus.total > 0\">\n <span *ngIf=\"requiredFieldsStatus.mapped === requiredFieldsStatus.total\" class=\"validation-complete\">\n {{ 'requiredFieldsComplete' | pluginTranslate: pluginId | async }}\n </span>\n <span *ngIf=\"requiredFieldsStatus.mapped < requiredFieldsStatus.total\" class=\"validation-incomplete\">\n {{ requiredFieldsStatus.mapped }} / {{ requiredFieldsStatus.total }}\n {{ 'validationSummary' | pluginTranslate: pluginId | async }}\n </span>\n</div>\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FunctionConfigurationComponent, PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule} from '@valtimo/components';\nimport {BehaviorSubject, combineLatest, Observable, Subscription, take} from 'rxjs';\nimport {delay, startWith} from 'rxjs/operators';\nimport {CheckJobStatusConfig} from '../../models';\n\n@Component({\n selector: 'epistola-check-job-status-configuration',\n templateUrl: './check-job-status-configuration.component.html',\n styleUrls: ['./check-job-status-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule]\n})\nexport class CheckJobStatusConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<CheckJobStatusConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<CheckJobStatusConfig> = new EventEmitter<CheckJobStatusConfig>();\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<CheckJobStatusConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n this.safeDisabled$ = this.disabled$.pipe(\n startWith(true),\n delay(0)\n );\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as CheckJobStatusConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: CheckJobStatusConfig): void {\n const valid = !!(\n formValue?.requestIdVariable &&\n formValue?.statusVariable\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid && formValue) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null\n } as obs\"\n>\n <v-input\n name=\"requestIdVariable\"\n [title]=\"'requestIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'requestIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.requestIdVariable || 'epistolaRequestId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"statusVariable\"\n [title]=\"'statusVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'statusVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.statusVariable || 'epistolaStatus'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"documentIdVariable\"\n [title]=\"'documentIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'documentIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.documentIdVariable || 'epistolaDocumentId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n\n <v-input\n name=\"errorMessageVariable\"\n [title]=\"'errorMessageVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'errorMessageVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.errorMessageVariable || 'epistolaErrorMessage'\"\n [disabled]=\"obs.disabled\"\n [required]=\"false\"\n >\n </v-input>\n</v-form>\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FunctionConfigurationComponent, PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, FormOutput, InputModule} from '@valtimo/components';\nimport {BehaviorSubject, combineLatest, Observable, Subscription, take} from 'rxjs';\nimport {delay, startWith} from 'rxjs/operators';\nimport {DownloadDocumentConfig} from '../../models';\n\n@Component({\n selector: 'epistola-download-document-configuration',\n templateUrl: './download-document-configuration.component.html',\n styleUrls: ['./download-document-configuration.component.scss'],\n standalone: true,\n imports: [CommonModule, PluginTranslatePipeModule, FormModule, InputModule]\n})\nexport class DownloadDocumentConfigurationComponent\n implements FunctionConfigurationComponent, OnInit, OnDestroy\n{\n @Input() save$!: Observable<void>;\n @Input() disabled$!: Observable<boolean>;\n @Input() pluginId!: string;\n @Input() prefillConfiguration$!: Observable<DownloadDocumentConfig>;\n\n @Output() valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() configuration: EventEmitter<DownloadDocumentConfig> = new EventEmitter<DownloadDocumentConfig>();\n\n private saveSubscription!: Subscription;\n private readonly formValue$ = new BehaviorSubject<DownloadDocumentConfig | null>(null);\n private readonly valid$ = new BehaviorSubject<boolean>(false);\n\n safeDisabled$!: Observable<boolean>;\n\n ngOnInit(): void {\n this.safeDisabled$ = this.disabled$.pipe(\n startWith(true),\n delay(0)\n );\n this.openSaveSubscription();\n }\n\n ngOnDestroy() {\n this.saveSubscription?.unsubscribe();\n }\n\n formValueChange(formOutput: FormOutput): void {\n const formValue = formOutput as unknown as DownloadDocumentConfig;\n this.formValue$.next(formValue);\n this.handleValid(formValue);\n }\n\n private handleValid(formValue: DownloadDocumentConfig): void {\n const valid = !!(\n formValue?.documentIdVariable &&\n formValue?.contentVariable\n );\n this.valid$.next(valid);\n this.valid.emit(valid);\n }\n\n private openSaveSubscription(): void {\n this.saveSubscription = this.save$?.subscribe(() => {\n combineLatest([this.formValue$, this.valid$])\n .pipe(take(1))\n .subscribe(([formValue, valid]) => {\n if (valid && formValue) {\n this.configuration.emit(formValue);\n }\n });\n });\n }\n}\n","<v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"{\n disabled: safeDisabled$ | async,\n prefill: prefillConfiguration$ ? (prefillConfiguration$ | async) : null\n } as obs\"\n>\n <v-input\n name=\"documentIdVariable\"\n [title]=\"'documentIdVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'documentIdVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.documentIdVariable || 'epistolaDocumentId'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n\n <v-input\n name=\"contentVariable\"\n [title]=\"'contentVariable' | pluginTranslate: pluginId | async\"\n [tooltip]=\"'contentVariableTooltip' | pluginTranslate: pluginId | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.prefill?.contentVariable || 'documentContent'\"\n [disabled]=\"obs.disabled\"\n [required]=\"true\"\n >\n </v-input>\n</v-form>\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {FormioCustomComponent} from '@valtimo/components';\n\nexport interface DownloadData {\n documentId: string;\n tenantId: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-download-component',\n template: `\n <button\n type=\"button\"\n class=\"btn btn-outline-primary\"\n [disabled]=\"disabled || downloading || !hasRequiredData()\"\n (click)=\"download()\"\n >\n <i class=\"mdi mdi-download mr-1\"></i>\n {{ downloading ? 'Downloading...' : buttonLabel }}\n </button>\n <span *ngIf=\"error\" class=\"text-danger ml-2\">{{ error }}</span>\n `,\n})\nexport class EpistolaDownloadComponent implements FormioCustomComponent<DownloadData> {\n @Input() value: DownloadData;\n @Output() valueChange = new EventEmitter<DownloadData>();\n\n @Input() disabled = false;\n @Input() filename = 'document.pdf';\n @Input() label = 'Download PDF';\n\n downloading = false;\n error: string | null = null;\n\n get buttonLabel(): string {\n return this.label || 'Download PDF';\n }\n\n constructor(private readonly http: HttpClient) {}\n\n hasRequiredData(): boolean {\n return !!(this.value?.documentId && this.value?.tenantId);\n }\n\n download(): void {\n if (!this.hasRequiredData() || this.downloading) {\n return;\n }\n\n this.downloading = true;\n this.error = null;\n\n const {documentId, tenantId} = this.value;\n const url = `/api/v1/plugin/epistola/documents/${encodeURIComponent(documentId)}/download`\n + `?tenantId=${encodeURIComponent(tenantId)}`\n + `&filename=${encodeURIComponent(this.filename)}`;\n\n this.http.get(url, {responseType: 'blob'}).subscribe({\n next: (blob) => {\n const objectUrl = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = objectUrl;\n anchor.download = this.filename;\n anchor.click();\n URL.revokeObjectURL(objectUrl);\n this.downloading = false;\n },\n error: (err) => {\n console.error('Download failed', err);\n this.error = 'Download mislukt. Probeer opnieuw.';\n this.downloading = false;\n },\n });\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {FormioCustomComponent, FormIoStateService} from '@valtimo/components';\nimport {ConfigService} from '@valtimo/shared';\nimport {FormioModule} from '@formio/angular';\nimport {Subject, Subscription} from 'rxjs';\nimport {debounceTime, switchMap} from 'rxjs/operators';\nimport {EpistolaPluginService} from '../../services';\n\n@Component({\n standalone: true,\n imports: [CommonModule, FormioModule],\n selector: 'epistola-retry-form-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div *ngIf=\"loading\" class=\"epistola-retry-loading\">Loading form...</div>\n <div *ngIf=\"error\" class=\"epistola-retry-error\">{{ error }}</div>\n <div *ngIf=\"formDefinition && !loading\" class=\"epistola-retry-container\" [class.preview-expanded]=\"previewExpanded\">\n <div class=\"epistola-retry-form\" [hidden]=\"previewExpanded\">\n <formio\n [form]=\"formDefinition\"\n [submission]=\"submission\"\n (change)=\"onFormChange($event)\"\n [options]=\"formOptions\"\n ></formio>\n </div>\n <div class=\"epistola-retry-preview\">\n <div class=\"preview-header\">\n <span>Preview</span>\n <button type=\"button\" class=\"preview-toggle\" (click)=\"togglePreview()\">\n {{ previewExpanded ? 'Show form' : 'Expand' }}\n </button>\n </div>\n <div *ngIf=\"previewLoading\" class=\"preview-loading\">Generating preview...</div>\n <object *ngIf=\"previewUrl && !previewLoading\" [data]=\"previewUrl\" type=\"application/pdf\" class=\"preview-pdf\">\n PDF preview not supported in this browser.\n </object>\n <div *ngIf=\"previewError\" class=\"preview-error\">{{ previewError }}</div>\n <div *ngIf=\"!previewUrl && !previewLoading && !previewError\" class=\"preview-empty\">\n Edit fields to see a preview\n </div>\n </div>\n </div>\n `,\n styles: [`\n .epistola-retry-loading {\n padding: 1rem;\n color: #6c757d;\n }\n .epistola-retry-error {\n padding: 0.5rem;\n color: #dc3545;\n }\n .epistola-retry-container {\n display: flex;\n gap: 1rem;\n }\n .epistola-retry-form {\n flex: 2;\n min-width: 0;\n }\n .epistola-retry-preview {\n flex: 1;\n min-width: 0;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 1rem;\n background: #f8f9fa;\n display: flex;\n flex-direction: column;\n }\n .preview-expanded .epistola-retry-preview {\n flex: 1;\n }\n .preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: bold;\n margin-bottom: 0.5rem;\n color: #495057;\n }\n .preview-toggle {\n background: none;\n border: 1px solid #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.2rem 0.5rem;\n font-size: 0.75rem;\n cursor: pointer;\n }\n .preview-toggle:hover {\n background: #e9ecef;\n }\n .preview-loading {\n color: #6c757d;\n font-style: italic;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n min-height: 500px;\n }\n .preview-expanded .preview-pdf {\n min-height: 80vh;\n }\n .preview-error {\n color: #dc3545;\n }\n .preview-empty {\n color: #6c757d;\n font-style: italic;\n }\n `]\n})\nexport class EpistolaRetryFormComponent implements FormioCustomComponent<string>, OnChanges, OnDestroy {\n @Input() value!: string;\n @Output() valueChange = new EventEmitter<string>();\n\n @Input() disabled = false;\n @Input() label = 'Document Data';\n @Input() sourceActivityId?: string;\n\n formDefinition: any;\n submission: any;\n loading = true;\n error: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n previewLoading = false;\n previewError: string | null = null;\n previewExpanded = false;\n private loaded = false;\n private loadSubscription?: Subscription;\n private previewSubscription?: Subscription;\n private previewSubject = new Subject<any>();\n private currentBlobUrl: string | null = null;\n private resolvedSourceActivityId?: string;\n private processDefinitionKey?: string;\n private readonly apiEndpoint: string;\n\n formOptions: any = {\n noAlerts: true,\n buttonSettings: {showCancel: false, showSubmit: false, showPrevious: false, showNext: false}\n };\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly formIoStateService: FormIoStateService,\n private readonly cdr: ChangeDetectorRef,\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n // Debounce preview calls\n this.previewSubscription = this.previewSubject.pipe(debounceTime(1500)).subscribe(data => {\n this.loadPreview(data);\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.loaded) {\n this.loaded = true;\n this.loadForm();\n }\n }\n\n ngOnDestroy(): void {\n this.loadSubscription?.unsubscribe();\n this.previewSubscription?.unsubscribe();\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n }\n }\n\n togglePreview(): void {\n this.previewExpanded = !this.previewExpanded;\n this.cdr.markForCheck();\n }\n\n onFormChange(event: any): void {\n if (event?.data) {\n const json = JSON.stringify(event.data);\n this.value = json; // Formio reads element.value on change event\n this.valueChange.emit(json);\n // Trigger debounced preview\n this.previewSubject.next(event.data);\n }\n }\n\n private loadPreview(formData: any): void {\n const documentId = this.formIoStateService.documentId;\n const processInstanceId = this.formIoStateService.processInstanceId;\n if (!documentId || !processInstanceId) return;\n\n this.previewLoading = true;\n this.previewError = null;\n this.cdr.markForCheck();\n\n // Revoke previous blob URL to prevent memory leaks\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n }\n\n this.http.post(`${this.apiEndpoint}/preview`, {\n documentId,\n processInstanceId,\n sourceActivityId: this.sourceActivityId || null,\n overrides: formData\n }, {responseType: 'blob', headers: new HttpHeaders().set('X-Skip-Interceptor', '422')}).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.previewError = null;\n this.previewLoading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.previewUrl = null;\n // Try to extract error message from JSON response body\n if (err.error instanceof Blob) {\n err.error.text().then((text: string) => {\n try {\n const body = JSON.parse(text);\n this.previewError = body.details || body.error || 'Preview could not be generated';\n } catch {\n this.previewError = 'Preview could not be generated';\n }\n this.previewLoading = false;\n this.cdr.markForCheck();\n });\n } else {\n this.previewError = err.error?.error || 'Preview could not be generated';\n this.previewLoading = false;\n this.cdr.markForCheck();\n }\n }\n });\n }\n\n private loadForm(): void {\n const processInstanceId = this.formIoStateService.processInstanceId;\n const documentId = this.formIoStateService.documentId;\n if (!processInstanceId) {\n this.error = 'Could not determine process instance ID.';\n this.loading = false;\n this.cdr.markForCheck();\n return;\n }\n\n this.loadSubscription = this.epistolaPluginService.getRetryForm(\n processInstanceId, documentId ?? undefined, this.sourceActivityId\n ).subscribe({\n next: (form) => {\n this.formDefinition = form;\n if (this.value) {\n try {\n this.submission = {data: JSON.parse(this.value)};\n } catch {\n // value is not valid JSON, start fresh\n }\n }\n this.loading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n console.error('Failed to load retry form', err);\n this.error = 'Failed to load the retry form. Please try again.';\n this.loading = false;\n this.cdr.markForCheck();\n }\n });\n }\n}\n","import {Component, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {FormioCustomComponent} from '@valtimo/components';\nimport {ConfigService} from '@valtimo/shared';\n\nexport interface PreviewButtonData {\n documentId: string;\n tenantId: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-preview-button-component',\n template: `\n <button\n type=\"button\"\n class=\"btn btn-outline-secondary\"\n [disabled]=\"disabled || loading || !hasRequiredData()\"\n (click)=\"openPreview()\"\n >\n <i class=\"mdi mdi-eye mr-1\"></i>\n {{ loading ? 'Loading...' : buttonLabel }}\n </button>\n\n <div *ngIf=\"modalOpen\" class=\"preview-modal-overlay\" (click)=\"closePreview()\">\n <div class=\"preview-modal-content\" (click)=\"$event.stopPropagation()\">\n <div class=\"preview-modal-header\">\n <span>Document Preview</span>\n <button type=\"button\" class=\"preview-modal-close\" (click)=\"closePreview()\">&times;</button>\n </div>\n <div class=\"preview-modal-body\">\n <div *ngIf=\"previewLoading\" class=\"preview-loading\">Generating preview...</div>\n <div *ngIf=\"previewError\" class=\"preview-error\">{{ previewError }}</div>\n <object\n *ngIf=\"previewUrl && !previewLoading\"\n [data]=\"previewUrl\"\n type=\"application/pdf\"\n class=\"preview-pdf\"\n >\n PDF preview is not supported in this browser.\n </object>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .preview-modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n }\n .preview-modal-content {\n background: white;\n border-radius: 8px;\n width: 90vw;\n height: 90vh;\n max-width: 1200px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\n }\n .preview-modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n font-weight: bold;\n font-size: 1rem;\n }\n .preview-modal-close {\n background: none;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n color: #6c757d;\n line-height: 1;\n padding: 0 0.25rem;\n }\n .preview-modal-close:hover {\n color: #333;\n }\n .preview-modal-body {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .preview-loading, .preview-error {\n padding: 2rem;\n text-align: center;\n }\n .preview-error {\n color: #dc3545;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n }\n `]\n})\nexport class EpistolaPreviewButtonComponent implements FormioCustomComponent<PreviewButtonData>, OnDestroy {\n @Input() value!: PreviewButtonData;\n @Output() valueChange = new EventEmitter<PreviewButtonData>();\n\n @Input() disabled = false;\n @Input() label = 'Preview PDF';\n\n modalOpen = false;\n loading = false;\n previewLoading = false;\n previewError: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n private currentBlobUrl: string | null = null;\n\n private readonly apiEndpoint: string;\n\n get buttonLabel(): string {\n return this.label || 'Preview PDF';\n }\n\n constructor(\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n ngOnDestroy(): void {\n this.revokeBlobUrl();\n }\n\n hasRequiredData(): boolean {\n return !!(this.value?.documentId && this.value?.tenantId);\n }\n\n openPreview(): void {\n if (!this.hasRequiredData() || this.loading) return;\n\n this.modalOpen = true;\n this.previewLoading = true;\n this.previewError = null;\n this.revokeBlobUrl();\n\n const {documentId, tenantId} = this.value;\n const url = `${this.apiEndpoint}/documents/${encodeURIComponent(documentId)}/download`\n + `?tenantId=${encodeURIComponent(tenantId)}`\n + `&filename=preview.pdf`;\n\n this.http.get(url, {responseType: 'blob'}).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.previewLoading = false;\n },\n error: () => {\n this.previewError = 'Could not load the document.';\n this.previewLoading = false;\n }\n });\n }\n\n closePreview(): void {\n this.modalOpen = false;\n this.revokeBlobUrl();\n this.previewUrl = null;\n this.previewError = null;\n }\n\n private revokeBlobUrl(): void {\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n }\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {DomSanitizer, SafeResourceUrl} from '@angular/platform-browser';\nimport {FormioCustomComponent, FormIoStateService} from '@valtimo/components';\nimport {ConfigService} from '@valtimo/shared';\nimport {PreviewSource} from '../../models';\nimport {EpistolaPluginService} from '../../services';\nimport {Subscription} from 'rxjs';\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'epistola-document-preview-component',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"epistola-preview-panel\">\n <div class=\"preview-header\">\n <span>{{ label || 'Document Preview' }}</span>\n <div class=\"preview-controls\">\n <select\n *ngIf=\"sources.length > 1\"\n class=\"preview-select\"\n [value]=\"selectedIndex\"\n (change)=\"onSourceChange($event)\"\n >\n <option *ngFor=\"let source of sources; let i = index\" [value]=\"i\">\n {{ source.templateName }} ({{ source.activityId }})\n </option>\n </select>\n <button type=\"button\" class=\"preview-refresh\" [disabled]=\"loading || discovering\" (click)=\"refresh()\">\n <i class=\"mdi mdi-refresh mr-1\"></i>\n {{ loading ? 'Generating...' : 'Refresh' }}\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <div *ngIf=\"discovering\" class=\"preview-loading\">\n Discovering documents...\n </div>\n <div *ngIf=\"loading && !discovering\" class=\"preview-loading\">\n Generating preview...\n </div>\n <div *ngIf=\"error && !loading && !discovering\" class=\"preview-unavailable\">\n <i class=\"mdi mdi-information-outline\"></i>\n Preview is niet beschikbaar — niet alle gegevens zijn al ingevuld.\n </div>\n <object\n *ngIf=\"previewUrl && !loading && !discovering\"\n [data]=\"previewUrl\"\n type=\"application/pdf\"\n class=\"preview-pdf\"\n >\n PDF preview is not supported in this browser.\n </object>\n <div *ngIf=\"!previewUrl && !loading && !discovering && !error && sources.length === 0\" class=\"preview-empty\">\n No previewable documents found\n </div>\n </div>\n </div>\n `,\n styles: [`\n .epistola-preview-panel {\n border: 1px solid #dee2e6;\n border-radius: 4px;\n background: #f8f9fa;\n display: flex;\n flex-direction: column;\n }\n .preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.5rem 1rem;\n border-bottom: 1px solid #dee2e6;\n font-weight: bold;\n color: #495057;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .preview-controls {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n .preview-select {\n border: 1px solid #ced4da;\n border-radius: 4px;\n padding: 0.25rem 0.5rem;\n font-size: 0.8rem;\n background: white;\n max-width: 300px;\n }\n .preview-refresh {\n background: none;\n border: 1px solid #6c757d;\n border-radius: 4px;\n color: #6c757d;\n padding: 0.25rem 0.75rem;\n font-size: 0.8rem;\n cursor: pointer;\n display: flex;\n align-items: center;\n white-space: nowrap;\n }\n .preview-refresh:hover:not(:disabled) {\n background: #e9ecef;\n }\n .preview-refresh:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .preview-body {\n display: flex;\n flex-direction: column;\n min-height: 500px;\n }\n .preview-loading {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n .preview-unavailable {\n padding: 1.5rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n .preview-unavailable i {\n margin-right: 0.25rem;\n }\n .preview-pdf {\n width: 100%;\n flex: 1;\n min-height: 500px;\n }\n .preview-empty {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n `]\n})\nexport class EpistolaDocumentPreviewComponent implements FormioCustomComponent<null>, OnChanges, OnDestroy {\n @Input() value!: null;\n @Output() valueChange = new EventEmitter<null>();\n\n @Input() disabled = false;\n @Input() label = 'Document Preview';\n\n sources: PreviewSource[] = [];\n selectedIndex = 0;\n discovering = false;\n loading = false;\n error: string | null = null;\n previewUrl: SafeResourceUrl | null = null;\n private initialized = false;\n private currentBlobUrl: string | null = null;\n private discoverSubscription?: Subscription;\n private previewSubscription?: Subscription;\n private readonly apiEndpoint: string;\n\n constructor(\n private readonly epistolaPluginService: EpistolaPluginService,\n private readonly http: HttpClient,\n private readonly sanitizer: DomSanitizer,\n private readonly configService: ConfigService,\n private readonly formIoStateService: FormIoStateService,\n private readonly cdr: ChangeDetectorRef\n ) {\n this.apiEndpoint = `${this.configService.config.valtimoApi.endpointUri}v1/plugin/epistola`;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.initialized) {\n this.initialized = true;\n this.discoverSources();\n }\n }\n\n ngOnDestroy(): void {\n this.discoverSubscription?.unsubscribe();\n this.previewSubscription?.unsubscribe();\n this.revokeBlobUrl();\n }\n\n onSourceChange(event: Event): void {\n this.selectedIndex = +(event.target as HTMLSelectElement).value;\n this.loadPreview();\n }\n\n refresh(): void {\n this.loadPreview();\n }\n\n private discoverSources(): void {\n const documentId = this.formIoStateService.documentId;\n if (!documentId) {\n this.error = 'Could not determine document ID from context.';\n this.cdr.markForCheck();\n return;\n }\n\n this.discovering = true;\n this.error = null;\n this.cdr.markForCheck();\n\n this.discoverSubscription = this.epistolaPluginService.getPreviewSources(documentId).subscribe({\n next: (sources) => {\n this.sources = sources;\n this.discovering = false;\n this.cdr.markForCheck();\n if (sources.length > 0) {\n this.selectedIndex = 0;\n this.loadPreview();\n }\n },\n error: (err) => {\n this.error = err.error?.error || 'Failed to discover preview sources';\n this.discovering = false;\n this.cdr.markForCheck();\n }\n });\n }\n\n private loadPreview(): void {\n const source = this.sources[this.selectedIndex];\n if (!source) return;\n\n const documentId = this.formIoStateService.documentId;\n if (!documentId) return;\n\n this.loading = true;\n this.error = null;\n this.cdr.markForCheck();\n this.revokeBlobUrl();\n\n this.previewSubscription?.unsubscribe();\n this.previewSubscription = this.http.post(`${this.apiEndpoint}/preview`, {\n documentId,\n processInstanceId: source.processInstanceId,\n sourceActivityId: source.activityId,\n overrides: null\n }, {\n responseType: 'blob',\n headers: new HttpHeaders().set('X-Skip-Interceptor', '422')\n }).subscribe({\n next: (blob) => {\n this.currentBlobUrl = URL.createObjectURL(blob);\n this.previewUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.currentBlobUrl);\n this.error = null;\n this.loading = false;\n this.cdr.markForCheck();\n },\n error: (err) => {\n this.previewUrl = null;\n if (err.error instanceof Blob) {\n err.error.text().then((text: string) => {\n try {\n const body = JSON.parse(text);\n this.error = body.details || body.error || 'Preview could not be generated';\n } catch {\n this.error = 'Preview could not be generated';\n }\n this.loading = false;\n this.cdr.markForCheck();\n });\n } else {\n this.error = err.error?.error || 'Preview could not be generated';\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n });\n }\n\n private revokeBlobUrl(): void {\n if (this.currentBlobUrl) {\n URL.revokeObjectURL(this.currentBlobUrl);\n this.currentBlobUrl = null;\n this.previewUrl = null;\n }\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaDownloadComponent} from './epistola-download.component';\n\nexport const EPISTOLA_DOWNLOAD_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-download',\n selector: 'epistola-download-button',\n title: 'Epistola Download',\n group: 'basic',\n icon: 'download',\n emptyValue: null,\n fieldOptions: ['filename', 'label'],\n};\n\nexport function registerEpistolaDownloadComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_DOWNLOAD_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_DOWNLOAD_OPTIONS, EpistolaDownloadComponent, injector);\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaRetryFormComponent} from './epistola-retry-form.component';\n\nexport const EPISTOLA_RETRY_FORM_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-retry-form',\n selector: 'epistola-retry-form-element',\n title: 'Epistola Retry Form',\n group: 'basic',\n icon: 'refresh',\n emptyValue: null,\n fieldOptions: ['sourceActivityId', 'label'], // sourceActivityId is optional (set via BPMN input parameter)\n};\n\nexport function registerEpistolaRetryFormComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_RETRY_FORM_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_RETRY_FORM_OPTIONS, EpistolaRetryFormComponent, injector);\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaPreviewButtonComponent} from './epistola-preview-button.component';\n\nexport const EPISTOLA_PREVIEW_BUTTON_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-preview-button',\n selector: 'epistola-preview-button-element',\n title: 'Epistola Preview',\n group: 'basic',\n icon: 'eye',\n emptyValue: null,\n fieldOptions: ['label'],\n};\n\nexport function registerEpistolaPreviewButtonComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_PREVIEW_BUTTON_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_PREVIEW_BUTTON_OPTIONS, EpistolaPreviewButtonComponent, injector);\n }\n}\n","import {Injector} from '@angular/core';\nimport {FormioCustomComponentInfo, registerCustomFormioComponent} from '@valtimo/components';\nimport {EpistolaDocumentPreviewComponent} from './epistola-document-preview.component';\n\nexport const EPISTOLA_DOCUMENT_PREVIEW_OPTIONS: FormioCustomComponentInfo = {\n type: 'epistola-document-preview',\n selector: 'epistola-document-preview-element',\n title: 'Epistola Document Preview',\n group: 'basic',\n icon: 'file-pdf-o',\n emptyValue: null,\n fieldOptions: ['label'],\n};\n\nexport function registerEpistolaDocumentPreviewComponent(injector: Injector): void {\n if (!customElements.get(EPISTOLA_DOCUMENT_PREVIEW_OPTIONS.selector)) {\n registerCustomFormioComponent(EPISTOLA_DOCUMENT_PREVIEW_OPTIONS, EpistolaDocumentPreviewComponent, injector);\n }\n}\n","import {ENVIRONMENT_INITIALIZER, inject, Injector, ModuleWithProviders, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HttpClientModule} from '@angular/common/http';\nimport {PluginTranslatePipeModule} from '@valtimo/plugin';\nimport {FormModule, InputModule, SelectModule} from '@valtimo/components';\nimport {EpistolaConfigurationComponent} from './components/epistola-configuration/epistola-configuration.component';\nimport {\n GenerateDocumentConfigurationComponent\n} from './components/generate-document-configuration/generate-document-configuration.component';\nimport {\n CheckJobStatusConfigurationComponent\n} from './components/check-job-status-configuration/check-job-status-configuration.component';\nimport {\n DownloadDocumentConfigurationComponent\n} from './components/download-document-configuration/download-document-configuration.component';\nimport {DataMappingTreeComponent} from './components/data-mapping-tree/data-mapping-tree.component';\nimport {FieldTreeComponent} from './components/field-tree/field-tree.component';\nimport {ValueInputComponent} from './components/value-input/value-input.component';\nimport {ScalarFieldComponent} from './components/scalar-field/scalar-field.component';\nimport {ArrayFieldComponent} from './components/array-field/array-field.component';\nimport {EpistolaDownloadComponent} from './components/epistola-download/epistola-download.component';\nimport {EpistolaRetryFormComponent} from './components/epistola-retry-form/epistola-retry-form.component';\nimport {EpistolaPreviewButtonComponent} from './components/epistola-preview-button/epistola-preview-button.component';\nimport {EpistolaDocumentPreviewComponent} from './components/epistola-document-preview/epistola-document-preview.component';\nimport {EpistolaPluginService} from './services';\nimport {registerEpistolaDownloadComponent} from './components/epistola-download/epistola-download.formio';\nimport {registerEpistolaRetryFormComponent} from './components/epistola-retry-form/epistola-retry-form.formio';\nimport {registerEpistolaPreviewButtonComponent} from './components/epistola-preview-button/epistola-preview-button.formio';\nimport {registerEpistolaDocumentPreviewComponent} from './components/epistola-document-preview/epistola-document-preview.formio';\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n PluginTranslatePipeModule,\n FormModule,\n InputModule,\n SelectModule,\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n DataMappingTreeComponent,\n ValueInputComponent,\n ScalarFieldComponent,\n ArrayFieldComponent,\n FieldTreeComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent,\n EpistolaDocumentPreviewComponent\n ],\n exports: [\n EpistolaConfigurationComponent,\n GenerateDocumentConfigurationComponent,\n CheckJobStatusConfigurationComponent,\n DownloadDocumentConfigurationComponent,\n DataMappingTreeComponent,\n ValueInputComponent,\n ScalarFieldComponent,\n ArrayFieldComponent,\n FieldTreeComponent,\n EpistolaDownloadComponent,\n EpistolaRetryFormComponent,\n EpistolaPreviewButtonComponent,\n EpistolaDocumentPreviewComponent\n ],\n providers: [\n EpistolaPluginService\n ]\n})\nexport class EpistolaPluginModule {\n static forRoot(): ModuleWithProviders<EpistolaPluginModule> {\n return {\n ngModule: EpistolaPluginModule,\n providers: [\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n const injector = inject(Injector);\n registerEpistolaDownloadComponent(injector);\n registerEpistolaRetryFormComponent(injector);\n registerEpistolaPreviewButtonComponent(injector);\n registerEpistolaDocumentPreviewComponent(injector);\n }\n }\n ]\n };\n }\n}\n","// Placeholder logo - a simple document icon in SVG format, base64 encoded\n// TODO: Replace with actual Epistola logo\nexport const EPISTOLA_PLUGIN_LOGO_BASE64 =\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iIzMzNjZjYyI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTQgMThINlY0aDd2NWg1djExeiIvPjxwYXRoIGQ9Ik04IDEyaDh2Mkg4em0wIDRoOHYtMkg4em0wLThWNmg0djJ6Ii8+PC9zdmc+';\n","import {PluginSpecification} from '@valtimo/plugin';\nimport {EpistolaConfigurationComponent} from './components/epistola-configuration/epistola-configuration.component';\nimport {\n GenerateDocumentConfigurationComponent\n} from './components/generate-document-configuration/generate-document-configuration.component';\nimport {\n CheckJobStatusConfigurationComponent\n} from './components/check-job-status-configuration/check-job-status-configuration.component';\nimport {\n DownloadDocumentConfigurationComponent\n} from './components/download-document-configuration/download-document-configuration.component';\nimport {EPISTOLA_PLUGIN_LOGO_BASE64} from './assets';\n\nconst epistolaPluginSpecification: PluginSpecification = {\n // Must match backend @Plugin(key = \"epistola\")\n pluginId: 'epistola',\n\n // Component for plugin-level configuration (tenantId)\n pluginConfigurationComponent: EpistolaConfigurationComponent,\n\n // Plugin logo\n pluginLogoBase64: EPISTOLA_PLUGIN_LOGO_BASE64,\n\n // Map action keys to their configuration components\n functionConfigurationComponents: {\n 'generate-document': GenerateDocumentConfigurationComponent,\n 'check-job-status': CheckJobStatusConfigurationComponent,\n 'download-document': DownloadDocumentConfigurationComponent,\n },\n\n // Translations\n pluginTranslations: {\n nl: {\n title: 'Epistola Document Suite',\n description: 'Documentgeneratie met Epistola',\n configurationTitle: 'Configuratienaam',\n baseUrl: 'Base URL',\n baseUrlTooltip: 'De basis URL van de Epistola API (bijv. https://api.epistola.app)',\n apiKey: 'API Key',\n apiKeyTooltip: 'De API sleutel voor authenticatie met Epistola',\n tenantId: 'Tenant ID',\n tenantIdTooltip: 'De tenant slug in Epistola (3-63 tekens, alleen kleine letters, cijfers en koppeltekens, bijv. \"mijn-tenant\")',\n defaultEnvironmentId: 'Standaard Omgeving',\n defaultEnvironmentIdTooltip: 'De standaard omgeving voor documentgeneratie (3-30 tekens, alleen kleine letters, cijfers en koppeltekens, bijv. \"productie\")',\n templateSyncEnabled: 'Template synchronisatie',\n templateSyncEnabledTooltip: 'Synchroniseer template definities automatisch van het classpath naar Epistola bij het opstarten',\n 'generate-document': 'Genereer Document',\n catalogId: 'Catalogus',\n catalogIdTooltip: 'Selecteer de catalogus waaruit een template gekozen wordt',\n templateId: 'Template',\n templateIdTooltip: 'Selecteer het template dat gebruikt wordt voor documentgeneratie',\n variantId: 'Variant',\n variantIdTooltip: 'Selecteer de template variant',\n variantSelectionMode: 'Variant selectie',\n variantSelectionModeTooltip: 'Kies hoe de variant geselecteerd wordt',\n selectByVariant: 'Selecteer variant',\n selectByAttributes: 'Selecteer op kenmerken',\n variantAttributes: 'Variant kenmerken',\n variantAttributesTooltip: 'Kenmerken voor automatische variant selectie. Waarden kunnen expressies zijn (doc:, pv:, case:).',\n attributeKey: 'Kenmerk',\n attributeKeyCustom: 'Aangepast...',\n attributeValue: 'Waarde',\n addAttribute: 'Kenmerk toevoegen',\n removeAttribute: 'Kenmerk verwijderen',\n attributeRequired: 'Verplicht',\n attributePreferred: 'Voorkeur',\n environmentId: 'Omgeving',\n environmentIdTooltip: 'Selecteer de doelomgeving (optioneel)',\n correlationId: 'Correlatie ID',\n correlationIdTooltip: 'Een optioneel correlatie ID voor het traceren van dit verzoek',\n dataMapping: 'Data Mapping',\n dataMappingTooltip: 'Koppeling van template velden naar data bronnen (doc:, pv:, case:)',\n outputFormat: 'Uitvoerformaat',\n outputFormatTooltip: 'Het gewenste formaat van het gegenereerde document',\n filename: 'Bestandsnaam',\n filenameTooltip: 'De bestandsnaam voor het gegenereerde document',\n resultProcessVariable: 'Resultaat Procesvariabele',\n resultProcessVariableTooltip: 'De naam van de procesvariabele waarin het request ID wordt opgeslagen',\n pdf: 'PDF',\n html: 'HTML',\n // Data mapping builder translations\n dataMappingTitle: 'Data Mapping',\n dataMappingDescription: 'Koppel template velden aan Valtimo data bronnen',\n templateField: 'Template veld',\n dataSource: 'Data bron',\n addMapping: 'Mapping toevoegen',\n noMappings: 'Nog geen mappings toegevoegd. Klik op \"Mapping toevoegen\" om te beginnen.',\n documentFields: 'Document velden',\n processVariables: 'Procesvariabelen',\n caseProperties: 'Zaak eigenschappen',\n sourceType: 'Brontype',\n sourceTypeDocument: 'Document veld',\n sourceTypeProcessVariable: 'Procesvariabele',\n sourceTypeManual: 'Handmatig',\n requiredFieldsMissing: 'Niet alle verplichte velden zijn gekoppeld',\n requiredFieldsComplete: 'Alle verplichte velden zijn gekoppeld',\n validationSummary: 'verplichte velden gekoppeld',\n fieldRequired: 'Verplicht',\n fieldOptional: 'Optioneel',\n mapCollectionTo: 'Koppel collectie aan',\n browseMode: 'Bladermodus',\n pvMode: 'Procesvariabele modus',\n pvPlaceholder: 'Naam procesvariabele',\n expressionMode: 'Expressiemodus',\n itemFieldMapping: 'Veldnamen per item koppelen',\n itemFieldMappingTitle: 'Veldkoppeling per item:',\n sourceFieldPlaceholder: 'Bronveldnaam',\n noTemplateFields: 'Geen template velden beschikbaar',\n // Check job status action\n 'check-job-status': 'Controleer Taakstatus',\n requestIdVariable: 'Request ID Variabele',\n requestIdVariableTooltip: 'Naam van de procesvariabele met het Epistola request ID',\n statusVariable: 'Status Variabele',\n statusVariableTooltip: 'Naam van de procesvariabele waarin de status wordt opgeslagen',\n documentIdVariable: 'Document ID Variabele',\n documentIdVariableTooltip: 'Naam van de procesvariabele waarin het document ID wordt opgeslagen (bij voltooiing)',\n errorMessageVariable: 'Foutmelding Variabele',\n errorMessageVariableTooltip: 'Naam van de procesvariabele waarin de foutmelding wordt opgeslagen (bij fout)',\n // Download document action\n 'download-document': 'Download Document',\n contentVariable: 'Inhoud Variabele',\n contentVariableTooltip: 'Naam van de procesvariabele waarin de documentinhoud (Base64) wordt opgeslagen'\n },\n en: {\n title: 'Epistola Document Suite',\n description: 'Document generation using Epistola',\n configurationTitle: 'Configuration name',\n baseUrl: 'Base URL',\n baseUrlTooltip: 'The base URL of the Epistola API (e.g. https://api.epistola.app)',\n apiKey: 'API Key',\n apiKeyTooltip: 'The API key for authentication with Epistola',\n tenantId: 'Tenant ID',\n tenantIdTooltip: 'The tenant slug in Epistola (3-63 chars, lowercase letters, digits and hyphens only, e.g. \"my-tenant\")',\n defaultEnvironmentId: 'Default Environment',\n defaultEnvironmentIdTooltip: 'The default environment for document generation (3-30 chars, lowercase letters, digits and hyphens only, e.g. \"production\")',\n templateSyncEnabled: 'Template sync',\n templateSyncEnabledTooltip: 'Automatically synchronize template definitions from classpath to Epistola on startup',\n 'generate-document': 'Generate Document',\n catalogId: 'Catalog',\n catalogIdTooltip: 'Select the catalog to choose a template from',\n templateId: 'Template',\n templateIdTooltip: 'Select the template to use for document generation',\n variantId: 'Variant',\n variantIdTooltip: 'Select the template variant',\n variantSelectionMode: 'Variant selection',\n variantSelectionModeTooltip: 'Choose how the variant is selected',\n selectByVariant: 'Select variant',\n selectByAttributes: 'Select by attributes',\n variantAttributes: 'Variant attributes',\n variantAttributesTooltip: 'Attributes for automatic variant selection. Values can be expressions (doc:, pv:, case:).',\n attributeKey: 'Attribute',\n attributeKeyCustom: 'Custom...',\n attributeValue: 'Value',\n addAttribute: 'Add attribute',\n removeAttribute: 'Remove attribute',\n attributeRequired: 'Required',\n attributePreferred: 'Preferred',\n environmentId: 'Environment',\n environmentIdTooltip: 'Select the target environment (optional)',\n correlationId: 'Correlation ID',\n correlationIdTooltip: 'An optional correlation ID for tracking this request',\n dataMapping: 'Data Mapping',\n dataMappingTooltip: 'Mapping of template fields to data sources (doc:, pv:, case:)',\n outputFormat: 'Output Format',\n outputFormatTooltip: 'The desired format of the generated document',\n filename: 'Filename',\n filenameTooltip: 'The filename for the generated document',\n resultProcessVariable: 'Result Process Variable',\n resultProcessVariableTooltip: 'The name of the process variable to store the request ID in',\n pdf: 'PDF',\n html: 'HTML',\n // Data mapping builder translations\n dataMappingTitle: 'Data Mapping',\n dataMappingDescription: 'Map template fields to Valtimo data sources',\n templateField: 'Template field',\n dataSource: 'Data source',\n addMapping: 'Add mapping',\n noMappings: 'No mappings added yet. Click \"Add mapping\" to start.',\n documentFields: 'Document fields',\n processVariables: 'Process variables',\n caseProperties: 'Case properties',\n sourceType: 'Source type',\n sourceTypeDocument: 'Document field',\n sourceTypeProcessVariable: 'Process variable',\n sourceTypeManual: 'Manual value',\n requiredFieldsMissing: 'Not all required fields are mapped',\n requiredFieldsComplete: 'All required fields are mapped',\n validationSummary: 'required fields mapped',\n fieldRequired: 'Required',\n fieldOptional: 'Optional',\n mapCollectionTo: 'Map collection to',\n browseMode: 'Browse mode',\n pvMode: 'Process variable mode',\n pvPlaceholder: 'Process variable name',\n expressionMode: 'Expression mode',\n itemFieldMapping: 'Map field names per item',\n itemFieldMappingTitle: 'Item field mapping:',\n sourceFieldPlaceholder: 'Source field name',\n noTemplateFields: 'No template fields available',\n // Check job status action\n 'check-job-status': 'Check Job Status',\n requestIdVariable: 'Request ID Variable',\n requestIdVariableTooltip: 'Name of the process variable containing the Epistola request ID',\n statusVariable: 'Status Variable',\n statusVariableTooltip: 'Name of the process variable to store the status in',\n documentIdVariable: 'Document ID Variable',\n documentIdVariableTooltip: 'Name of the process variable to store the document ID in (when completed)',\n errorMessageVariable: 'Error Message Variable',\n errorMessageVariableTooltip: 'Name of the process variable to store the error message in (when failed)',\n // Download document action\n 'download-document': 'Download Document',\n contentVariable: 'Content Variable',\n contentVariableTooltip: 'Name of the process variable to store the document content (Base64) in'\n }\n }\n};\n\nexport {epistolaPluginSpecification};\n","/*\n * Public API Surface of epistola plugin\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/epistola.module';\nexport * from './lib/epistola.specification';\nexport * from './lib/components/epistola-configuration/epistola-configuration.component';\nexport * from './lib/components/generate-document-configuration/generate-document-configuration.component';\nexport * from './lib/components/check-job-status-configuration/check-job-status-configuration.component';\nexport * from './lib/components/download-document-configuration/download-document-configuration.component';\nexport * from './lib/components/value-input/value-input.component';\nexport * from './lib/components/scalar-field/scalar-field.component';\nexport * from './lib/components/array-field/array-field.component';\nexport * from './lib/components/field-tree/field-tree.component';\nexport * from './lib/components/data-mapping-tree/data-mapping-tree.component';\nexport * from './lib/components/epistola-download/epistola-download.component';\nexport * from './lib/components/epistola-download/epistola-download.formio';\nexport * from './lib/components/epistola-retry-form/epistola-retry-form.component';\nexport * from './lib/components/epistola-retry-form/epistola-retry-form.formio';\nexport * from './lib/components/epistola-preview-button/epistola-preview-button.component';\nexport * from './lib/components/epistola-preview-button/epistola-preview-button.formio';\nexport * from './lib/components/epistola-document-preview/epistola-document-preview.component';\nexport * from './lib/components/epistola-document-preview/epistola-document-preview.formio';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3","i4","take","i1.EpistolaPluginService","i5","i6"],"mappings":"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"}