{"version":3,"file":"valtimo-decision.mjs","sources":["../../../../projects/valtimo/decision/src/lib/models/decision.model.ts","../../../../projects/valtimo/decision/src/lib/models/decision-management.model.ts","../../../../projects/valtimo/decision/src/lib/models/index.ts","../../../../projects/valtimo/decision/src/lib/services/decision-state.service.ts","../../../../projects/valtimo/decision/src/lib/services/decision.service.ts","../../../../projects/valtimo/decision/src/lib/services/index.ts","../../../../projects/valtimo/decision/src/lib/constants/decision.test-ids.ts","../../../../projects/valtimo/decision/src/lib/constants/index.ts","../../../../projects/valtimo/decision/src/lib/utils/dmn-template.ts","../../../../projects/valtimo/decision/src/lib/decision-form-modal/decision-form-modal.component.ts","../../../../projects/valtimo/decision/src/lib/decision-form-modal/decision-form-modal.component.html","../../../../projects/valtimo/decision/src/lib/decision-modeler/empty-decision.ts","../../../../projects/valtimo/decision/src/lib/decision-modeler/decision-modeler.component.ts","../../../../projects/valtimo/decision/src/lib/decision-modeler/decision-modeler.component.html","../../../../projects/valtimo/decision/src/lib/decision-display/decision-display.component.ts","../../../../projects/valtimo/decision/src/lib/decision-display/decision-display.component.html","../../../../projects/valtimo/decision/src/lib/utils/decision.utils.ts","../../../../projects/valtimo/decision/src/lib/decision-deploy/decision-deploy.component.ts","../../../../projects/valtimo/decision/src/lib/decision-deploy/decision-deploy.component.html","../../../../projects/valtimo/decision/src/lib/decision-list/decision-list.component.ts","../../../../projects/valtimo/decision/src/lib/decision-list/decision-list.component.html","../../../../projects/valtimo/decision/src/lib/decision-routing.module.ts","../../../../projects/valtimo/decision/src/lib/decision.module.ts","../../../../projects/valtimo/decision/src/public-api.ts","../../../../projects/valtimo/decision/src/valtimo-decision.ts"],"sourcesContent":["/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface Decision {\n  category: string;\n  decisionRequirementsDefinitionId: string;\n  decisionRequirementsDefinitionKey: string;\n  deploymentId: string;\n  historyTimeToLive: number;\n  id: string;\n  key: string;\n  name: string;\n  resource: string;\n  tenantId: string;\n  version: number;\n  versionTag: string;\n}\n\nexport interface DecisionXml {\n  id: string;\n  dmnXml: string;\n}\n\nexport interface DecisionInputVariable {\n  /** Human-readable column header shown in the decision table. */\n  label: string;\n  /** The process variable / FEEL expression the input column evaluates. */\n  expression: string;\n}\n\nexport interface DecisionFormValue {\n  name: string;\n  inputVariables: DecisionInputVariable[];\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ManagementContext} from '@valtimo/shared';\n\ninterface DecisionManagementRouteData {\n  context: ManagementContext;\n}\nexport {DecisionManagementRouteData};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './decision.model';\nexport * from './decision-management.model';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Injectable} from '@angular/core';\nimport {Observable, startWith, Subject} from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DecisionStateService {\n  private readonly _refreshDecisions$ = new Subject<null>();\n\n  get refreshDecisions$(): Observable<null> {\n    return this._refreshDecisions$.asObservable().pipe(startWith(null));\n  }\n\n  refreshDecisions(): void {\n    this._refreshDecisions$.next(null);\n  }\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {BaseApiService, ConfigService, InterceptorSkip} from '@valtimo/shared';\nimport {Decision, DecisionXml} from '../models';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DecisionService extends BaseApiService {\n  constructor(\n    protected readonly httpClient: HttpClient,\n    protected readonly configService: ConfigService\n  ) {\n    super(httpClient, configService);\n  }\n\n  public deployDmn(dmn: File): Observable<{identifier: string}> {\n    const formData: FormData = new FormData();\n    formData.append('file', dmn);\n    formData.append('deployment-name', 'dmnTableDeploy');\n    formData.append('deployment-source', 'process application');\n\n    return this.httpClient.post<{identifier: string}>(\n      this.getApiUrl('/v1/process/definition/deployment'),\n      formData\n    );\n  }\n\n  public getDecisions(): Observable<Decision[]> {\n    return this.httpClient.get<Decision[]>(\n      this.getApiUrl('/operaton-rest/engine/default/decision-definition')\n    );\n  }\n\n  public getUnlinkedDecisions(): Observable<Decision[]> {\n    // Only the \"global\" decision tables: those not linked to a case or building block definition.\n    return this.httpClient.get<Decision[]>(this.getApiUrl('/management/v1/decision-definition'));\n  }\n\n  public getDecisionById(decisionId: string): Observable<Decision> {\n    return this.httpClient.get<Decision>(\n      this.getApiUrl(`/operaton-rest/engine/default/decision-definition/${decisionId}`)\n    );\n  }\n\n  public getLatestDecisionByKey(decisionKey: string): Observable<Decision> {\n    return this.httpClient.get<Decision>(\n      this.getApiUrl(`/operaton-rest/engine/default/decision-definition/key/${decisionKey}`)\n    );\n  }\n\n  public getDecisionXml(decisionId: string): Observable<DecisionXml> {\n    return this.httpClient.get<DecisionXml>(\n      this.getApiUrl(`/operaton-rest/engine/default/decision-definition/${decisionId}/xml`)\n    );\n  }\n\n  public listCaseDecisionDefinitions(\n    caseDefinitionKey: string,\n    versionTag: string\n  ): Observable<Decision[]> {\n    return this.httpClient.get<Decision[]>(\n      this.getApiUrl(\n        `/management/v1/case-definition/${caseDefinitionKey}/version/${versionTag}/decision-definition`\n      )\n    );\n  }\n\n  public deployCaseDecisionDefinition(\n    caseDefinitionKey: string,\n    versionTag: string,\n    dmn: File\n  ): Observable<{identifier: string}> {\n    const formData = new FormData();\n    formData.append('file', dmn);\n\n    return this.httpClient.post<{identifier: string}>(\n      this.getApiUrl(\n        `/management/v1/case-definition/${caseDefinitionKey}/version/${versionTag}/decision-definition`\n      ),\n      formData,\n      {\n        headers: new HttpHeaders().set(InterceptorSkip, '204'),\n      }\n    );\n  }\n\n  public deleteCaseDecisionDefinition(\n    caseDefinitionKey: string,\n    versionTag: string,\n    decisionDefinitionKey: string\n  ): Observable<any> {\n    return this.httpClient.delete<any>(\n      this.getApiUrl(\n        `/management/v1/case-definition/${caseDefinitionKey}/version/${versionTag}/decision-definition/${decisionDefinitionKey}`\n      )\n    );\n  }\n\n  public listBuildingBlockDecisionDefinitions(\n    key: string,\n    versionTag: string\n  ): Observable<Decision[]> {\n    return this.httpClient.get<Decision[]>(\n      this.getApiUrl(\n        `/management/v1/building-block/${key}/version/${versionTag}/decision-definition`\n      )\n    );\n  }\n\n  public deployBuildingBlockDecisionDefinition(\n    key: string,\n    versionTag: string,\n    dmn: File\n  ): Observable<{identifier: string}> {\n    const formData = new FormData();\n    formData.append('file', dmn);\n\n    return this.httpClient.post<{identifier: string}>(\n      this.getApiUrl(\n        `/management/v1/building-block/${key}/version/${versionTag}/decision-definition`\n      ),\n      formData,\n      {\n        headers: new HttpHeaders().set(InterceptorSkip, '204'),\n      }\n    );\n  }\n\n  public deleteBuildingBlockDecisionDefinition(\n    key: string,\n    versionTag: string,\n    decisionDefinitionKey: string\n  ): Observable<any> {\n    return this.httpClient.delete<any>(\n      this.getApiUrl(\n        `/management/v1/building-block/${key}/version/${versionTag}/decision-definition/${decisionDefinitionKey}`\n      )\n    );\n  }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './decision-state.service';\nexport * from './decision.service';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DECISION_LIST_TEST_IDS = {\n  uploadButton: 'decisionListUploadButton',\n  createButton: 'decisionListCreateButton',\n} as const;\n\nexport const DECISION_UPLOAD_TEST_IDS = {\n  submitButton: 'decisionUploadModalSubmitButton',\n} as const;\n\nexport const DECISION_FORM_TEST_IDS = {\n  nameInput: 'decisionFormModalNameInput',\n  inputVariables: 'decisionFormModalInputVariables',\n  submitButton: 'decisionFormModalSubmitButton',\n} as const;\n\nexport const DECISION_MODELER_TEST_IDS = {\n  deployButton: 'decisionModelerDeployButton',\n  backButton: 'decisionModelerBackButton',\n  readOnlyTag: 'decisionModelerReadOnlyTag',\n} as const;\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './decision.test-ids';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DecisionFormValue, DecisionInputVariable, DecisionXml} from '../models';\n\nconst DEFAULT_DECISION_KEY = 'decision';\n\nfunction escapeXmlAttribute(value: string): string {\n  return value\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&apos;');\n}\n\nfunction escapeXmlText(value: string): string {\n  return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\n/**\n * Derives a valid DMN decision key (an XML NCName) from a human-readable name.\n * The decision key doubles as the identifier referenced from a process'\n * business rule task, so it must be a stable, valid identifier.\n */\nfunction toDecisionKey(name: string): string {\n  const cleaned = (name ?? '')\n    .trim()\n    .replace(/[^A-Za-z0-9_-]+/g, '_')\n    .replace(/^[_-]+|[_-]+$/g, '');\n\n  if (!cleaned) return DEFAULT_DECISION_KEY;\n\n  return /^[A-Za-z_]/.test(cleaned) ? cleaned : `${DEFAULT_DECISION_KEY}_${cleaned}`;\n}\n\n/**\n * Derives the name of the `.dmn` file that is deployed for a created decision.\n */\nfunction toDecisionFileName(name: string): string {\n  return `${toDecisionKey(name)}.dmn`;\n}\n\n/**\n * Normalizes input columns: trims label/expression, drops rows without a process\n * variable (the expression is required), defaults the label to the process\n * variable name when it is left blank, and guarantees at least one (empty) input\n * column so the decision table always has an input to work with.\n */\nfunction normalizeInputVariables(\n  inputVariables: DecisionInputVariable[] | undefined\n): DecisionInputVariable[] {\n  const cleaned = (inputVariables ?? [])\n    .map(({label, expression}) => ({\n      label: (label ?? '').trim(),\n      expression: (expression ?? '').trim(),\n    }))\n    .filter(({expression}) => expression.length > 0)\n    .map(({label, expression}) => ({label: label || expression, expression}));\n\n  return cleaned.length ? cleaned : [{label: '', expression: ''}];\n}\n\n/**\n * Builds a deployable DMN 1.3 decision table seeded with one input column per\n * provided input variable and a single output. Each input column gets its\n * process variable as the input expression and, optionally, a human-readable\n * label as the column header. Seeding this up front means the created table is\n * functional immediately - the user only has to add rules before deploying.\n */\nfunction createDmnXml({name, inputVariables}: DecisionFormValue): DecisionXml {\n  const key = toDecisionKey(name);\n  const safeName = escapeXmlAttribute((name ?? '').trim() || key);\n  const inputs = normalizeInputVariables(inputVariables);\n\n  const inputsXml = inputs\n    .map(({label, expression}, index) => {\n      const labelAttr = label ? ` label=\"${escapeXmlAttribute(label)}\"` : '';\n      return `      <input id=\"Input_${index + 1}\"${labelAttr}>\n        <inputExpression id=\"InputExpression_${index + 1}\" typeRef=\"string\">\n          <text>${escapeXmlText(expression)}</text>\n        </inputExpression>\n      </input>`;\n    })\n    .join('\\n');\n\n  const inputEntriesXml = inputs\n    .map(\n      (_, index) => `        <inputEntry id=\"UnaryTests_${index + 1}\">\n          <text></text>\n        </inputEntry>`\n    )\n    .join('\\n');\n\n  const dmnXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<definitions xmlns=\"https://www.omg.org/spec/DMN/20191111/MODEL/\" xmlns:dmndi=\"https://www.omg.org/spec/DMN/20191111/DMNDI/\" xmlns:dc=\"http://www.omg.org/spec/DMN/20180521/DC/\" id=\"Definitions_${key}\" name=\"${safeName}\" namespace=\"http://camunda.org/schema/1.0/dmn\">\n  <decision id=\"${key}\" name=\"${safeName}\">\n    <decisionTable id=\"DecisionTable_${key}\">\n${inputsXml}\n      <output id=\"Output_1\" label=\"Output\" name=\"result\" typeRef=\"string\" />\n      <rule id=\"DecisionRule_1\">\n${inputEntriesXml}\n        <outputEntry id=\"LiteralExpression_1\">\n          <text></text>\n        </outputEntry>\n      </rule>\n    </decisionTable>\n  </decision>\n  <dmndi:DMNDI>\n    <dmndi:DMNDiagram>\n      <dmndi:DMNShape dmnElementRef=\"${key}\">\n        <dc:Bounds height=\"80\" width=\"180\" x=\"160\" y=\"100\" />\n      </dmndi:DMNShape>\n    </dmndi:DMNDiagram>\n  </dmndi:DMNDI>\n</definitions>\n`;\n\n  return {id: '', dmnXml};\n}\n\nfunction childrenByLocalName(parent: Element, localName: string): Element[] {\n  return Array.from(parent.children).filter(child => child.localName === localName);\n}\n\nfunction firstChildByLocalName(parent: Element, localName: string): Element | null {\n  return childrenByLocalName(parent, localName)[0] ?? null;\n}\n\nfunction uniqueId(doc: Document, prefix: string): string {\n  let id: string;\n  do {\n    id = `${prefix}_${Math.random().toString(36).slice(2, 10)}`;\n  } while (doc.querySelector(`[id=\"${id}\"]`));\n  return id;\n}\n\n/**\n * Reads the editable form values (decision name and input columns) from an\n * existing DMN XML document.\n */\nfunction parseDecisionForm(xml: string): DecisionFormValue {\n  const doc = new DOMParser().parseFromString(xml, 'application/xml');\n\n  const decision = doc.getElementsByTagNameNS('*', 'decision')[0];\n  const name = decision?.getAttribute('name') || decision?.getAttribute('id') || '';\n\n  const inputVariables = Array.from(doc.getElementsByTagNameNS('*', 'input')).map(input => {\n    const inputExpression = input.getElementsByTagNameNS('*', 'inputExpression')[0];\n    const text = inputExpression?.getElementsByTagNameNS('*', 'text')[0];\n    const expression = (text?.textContent ?? '').trim();\n    const label = (input.getAttribute('label') ?? '').trim();\n    // A label equal to the expression means it was defaulted, so present it as blank.\n    return {label: label === expression ? '' : label, expression};\n  });\n\n  return {name, inputVariables};\n}\n\nfunction setInputColumn(\n  input: Element,\n  {label, expression}: DecisionInputVariable,\n  doc: Document,\n  ns: string | null\n): void {\n  if (label) {\n    input.setAttribute('label', label);\n  } else {\n    input.removeAttribute('label');\n  }\n\n  let inputExpression = firstChildByLocalName(input, 'inputExpression');\n  if (!inputExpression) {\n    inputExpression = doc.createElementNS(ns, 'inputExpression');\n    inputExpression.setAttribute('id', uniqueId(doc, 'InputExpression'));\n    inputExpression.setAttribute('typeRef', 'string');\n    input.appendChild(inputExpression);\n  }\n\n  let text = firstChildByLocalName(inputExpression, 'text');\n  if (!text) {\n    text = doc.createElementNS(ns, 'text');\n    inputExpression.appendChild(text);\n  }\n  text.textContent = expression;\n}\n\nfunction createInputElement(\n  inputVariable: DecisionInputVariable,\n  doc: Document,\n  ns: string | null\n): Element {\n  const input = doc.createElementNS(ns, 'input');\n  input.setAttribute('id', uniqueId(doc, 'Input'));\n  setInputColumn(input, inputVariable, doc, ns);\n  return input;\n}\n\nfunction createEmptyInputEntry(doc: Document, ns: string | null): Element {\n  const entry = doc.createElementNS(ns, 'inputEntry');\n  entry.setAttribute('id', uniqueId(doc, 'UnaryTests'));\n  const text = doc.createElementNS(ns, 'text');\n  text.textContent = '';\n  entry.appendChild(text);\n  return entry;\n}\n\n/**\n * Patches an existing DMN XML document with a new decision name and set of input\n * columns, while preserving the decision key, outputs, rules and diagram. Input\n * columns are reconciled positionally: existing columns are updated (label +\n * expression), extra columns add an input (and a blank entry to every rule), and\n * removed columns drop the input (and their rule entries).\n */\nfunction updateDmnXml(xml: string, {name, inputVariables}: DecisionFormValue): string {\n  const doc = new DOMParser().parseFromString(xml, 'application/xml');\n\n  if (doc.getElementsByTagName('parsererror').length > 0) {\n    return xml;\n  }\n\n  const trimmedName = (name ?? '').trim();\n\n  const decision = doc.getElementsByTagNameNS('*', 'decision')[0];\n  if (decision && trimmedName) {\n    decision.setAttribute('name', trimmedName);\n  }\n\n  const decisionTable = doc.getElementsByTagNameNS('*', 'decisionTable')[0];\n  if (!decisionTable) {\n    return new XMLSerializer().serializeToString(doc);\n  }\n\n  const ns = decisionTable.namespaceURI;\n  const targets = normalizeInputVariables(inputVariables);\n\n  const existingInputs = childrenByLocalName(decisionTable, 'input');\n  const rules = childrenByLocalName(decisionTable, 'rule');\n\n  // Build the final ordered list of input columns, reusing existing nodes where possible.\n  const finalInputs = targets.map((inputVariable, index) => {\n    const existing = existingInputs[index];\n    if (existing) {\n      setInputColumn(existing, inputVariable, doc, ns);\n      return existing;\n    }\n    return createInputElement(inputVariable, doc, ns);\n  });\n\n  // Remove all existing inputs, then re-insert the final ones in order before the outputs/rules.\n  existingInputs.forEach(input => input.remove());\n  const anchor =\n    firstChildByLocalName(decisionTable, 'output') ??\n    firstChildByLocalName(decisionTable, 'rule') ??\n    null;\n  finalInputs.forEach(input => decisionTable.insertBefore(input, anchor));\n\n  // Reconcile each rule's input entries to match the number of input columns.\n  rules.forEach(rule => {\n    const entries = childrenByLocalName(rule, 'inputEntry');\n\n    for (let index = entries.length; index < finalInputs.length; index++) {\n      const firstOutputEntry = firstChildByLocalName(rule, 'outputEntry');\n      rule.insertBefore(createEmptyInputEntry(doc, ns), firstOutputEntry);\n    }\n\n    for (let index = entries.length - 1; index >= finalInputs.length; index--) {\n      entries[index].remove();\n    }\n  });\n\n  return new XMLSerializer().serializeToString(doc);\n}\n\nexport {createDmnXml, toDecisionKey, toDecisionFileName, parseDecisionForm, updateDmnXml};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {CommonModule} from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  signal,\n} from '@angular/core';\nimport {FormBuilder, FormControl, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n  CarbonMultiInputModule,\n  MultiInputOutput,\n  MultiInputValues,\n  runAfterCarbonModalClosed,\n  ValtimoCdsModalDirective,\n} from '@valtimo/components';\nimport {ButtonModule, InputModule, LayerModule, ModalModule} from 'carbon-components-angular';\nimport {BehaviorSubject} from 'rxjs';\nimport {DECISION_FORM_TEST_IDS} from '../constants';\nimport {DecisionFormValue, DecisionInputVariable} from '../models';\n\n@Component({\n  selector: 'valtimo-decision-form-modal',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './decision-form-modal.component.html',\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    TranslateModule,\n    ModalModule,\n    ButtonModule,\n    InputModule,\n    LayerModule,\n    ValtimoCdsModalDirective,\n    CarbonMultiInputModule,\n  ],\n  styleUrl: './decision-form-modal.component.scss',\n})\nexport class DecisionFormModalComponent {\n  @Input() public titleKey = 'decisions.createModal.title';\n  @Input() public submitKey = 'interface.create';\n\n  @Output() submitEvent = new EventEmitter<DecisionFormValue>();\n\n  public readonly MAX_INPUT_VARIABLES = 100;\n\n  public readonly modalOpen$ = new BehaviorSubject<boolean>(false);\n  public readonly defaultInputVariables$ = new BehaviorSubject<MultiInputValues>([\n    {key: '', value: ''},\n  ]);\n\n  /** True when a row has a label but no process variable (the process variable is required). */\n  public readonly $inputVariablesInvalid = signal<boolean>(false);\n\n  protected readonly testIds = DECISION_FORM_TEST_IDS;\n\n  public readonly form = this.formBuilder.group({\n    name: this.formBuilder.control('', [Validators.required]),\n  });\n\n  private _inputVariables: DecisionInputVariable[] = [];\n\n  public get name(): FormControl<string> {\n    return this.form.get('name') as FormControl<string>;\n  }\n\n  constructor(private readonly formBuilder: FormBuilder) {}\n\n  public open(initial?: DecisionFormValue): void {\n    const inputVariables = initial?.inputVariables ?? [];\n    this._inputVariables = inputVariables.map(({label, expression}) => ({label, expression}));\n    // The multi-input renders key (left) then value (right); the process variable is\n    // the first column, so it maps to key and the label maps to value.\n    this.defaultInputVariables$.next(\n      inputVariables.length\n        ? inputVariables.map(({label, expression}) => ({key: expression, value: label}))\n        : [{key: '', value: ''}]\n    );\n    this.updateInputVariablesValidity();\n    this.form.reset({name: initial?.name ?? ''});\n    this.modalOpen$.next(true);\n  }\n\n  /** Convenience used by the \"create\" trigger, which opens an empty form. */\n  public openModal(): void {\n    this.open();\n  }\n\n  public closeModal(): void {\n    this.modalOpen$.next(false);\n    runAfterCarbonModalClosed(() => {\n      this.form.reset({name: ''});\n      this._inputVariables = [];\n      this.$inputVariablesInvalid.set(false);\n      this.defaultInputVariables$.next([{key: '', value: ''}]);\n    });\n  }\n\n  public onInputVariablesChange(values: MultiInputOutput): void {\n    this._inputVariables = ((values as MultiInputValues) ?? []).map(row => ({\n      label: row.value ?? '',\n      expression: row.key ?? '',\n    }));\n    this.updateInputVariablesValidity();\n  }\n\n  public submit(): void {\n    if (this.form.invalid || this.$inputVariablesInvalid()) {\n      this.form.markAllAsTouched();\n      return;\n    }\n\n    const name = (this.form.getRawValue().name ?? '').trim();\n    const inputVariables = this._inputVariables\n      .map(({label, expression}) => ({label: label.trim(), expression: expression.trim()}))\n      .filter(({expression}) => expression.length > 0);\n\n    this.submitEvent.emit({name, inputVariables});\n    this.closeModal();\n  }\n\n  private updateInputVariablesValidity(): void {\n    this.$inputVariablesInvalid.set(\n      this._inputVariables.some(\n        ({label, expression}) => label.trim().length > 0 && expression.trim().length === 0\n      )\n    );\n  }\n}\n","<!--\n  ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n  ~\n  ~ Licensed under EUPL, Version 1.2 (the \"License\");\n  ~ you may not use this file except in compliance with the License.\n  ~ You may obtain a copy of the License at\n  ~\n  ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n  ~\n  ~ Unless required by applicable law or agreed to in writing, software\n  ~ distributed under the License is distributed on an \"AS IS\" basis,\n  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  ~ See the License for the specific language governing permissions and\n  ~ limitations under the License.\n  -->\n\n<cds-modal showFooter=\"true\" valtimoCdsModal [open]=\"modalOpen$ | async\" (close)=\"closeModal()\">\n  <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeModal()\">\n    <h3 cdsModalHeaderHeading>{{ titleKey | translate }}</h3>\n  </cds-modal-header>\n\n  <form cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"form\">\n    <div class=\"cds--text-input__field-wrapper\">\n      <cds-label [invalid]=\"name.touched && name.invalid\">\n        <span>{{ 'decisions.createModal.name' | translate }}</span>\n\n        <input\n          cdsText\n          formControlName=\"name\"\n          [attr.data-test-id]=\"testIds.nameInput\"\n          [invalid]=\"name.touched && name.invalid\"\n          placeholder=\"{{ 'decisions.createModal.namePlaceholder' | translate }}\"\n        />\n      </cds-label>\n\n      <div *ngIf=\"name.touched && name.invalid\" class=\"cds--form-requirement\">\n        {{ 'decisions.createModal.nameRequired' | translate }}\n      </div>\n    </div>\n\n    <valtimo-carbon-multi-input\n      *ngIf=\"modalOpen$ | async\"\n      type=\"keyValue\"\n      [attr.data-test-id]=\"testIds.inputVariables\"\n      [titleTranslationKey]=\"'decisions.createModal.inputVariables'\"\n      [tooltip]=\"'decisions.createModal.inputVariablesHelper' | translate\"\n      [keyColumnTitle]=\"'decisions.createModal.inputExpression' | translate\"\n      [valueColumnTitle]=\"'decisions.createModal.inputLabel' | translate\"\n      [addRowTranslationKey]=\"'decisions.createModal.addInputVariable'\"\n      [defaultValues]=\"defaultInputVariables$ | async\"\n      [initialAmountOfRows]=\"1\"\n      [minimumAmountOfRows]=\"1\"\n      [maxRows]=\"MAX_INPUT_VARIABLES\"\n      [margin]=\"true\"\n      [fullWidth]=\"true\"\n      (valueChange)=\"onInputVariablesChange($event)\"\n    ></valtimo-carbon-multi-input>\n\n    <div *ngIf=\"$inputVariablesInvalid()\" class=\"cds--form-requirement\">\n      {{ 'decisions.createModal.inputExpressionRequired' | translate }}\n    </div>\n  </form>\n\n  <cds-modal-footer>\n    <button cdsButton=\"secondary\" (click)=\"closeModal()\">\n      {{ 'interface.cancel' | translate }}\n    </button>\n\n    <button\n      cdsButton=\"primary\"\n      [disabled]=\"form.invalid || $inputVariablesInvalid()\"\n      (click)=\"submit()\"\n      [attr.data-test-id]=\"testIds.submitButton\"\n    >\n      {{ submitKey | translate }}\n    </button>\n  </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DecisionXml} from '../models';\n\nconst EMPTY_DECISION: DecisionXml = {\n  id: '',\n  dmnXml: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<definitions xmlns=\"https://www.omg.org/spec/DMN/20191111/MODEL/\" xmlns:dmndi=\"https://www.omg.org/spec/DMN/20191111/DMNDI/\" xmlns:dc=\"http://www.omg.org/spec/DMN/20180521/DC/\" id=\"Definitions_1h198v9\" name=\"DRD\" namespace=\"http://camunda.org/schema/1.0/dmn\" xmlns:modeler=\"http://camunda.org/schema/modeler/1.0\" exporter=\"Camunda Modeler\" exporterVersion=\"5.2.0\" modeler:executionPlatform=\"Camunda Cloud\" modeler:executionPlatformVersion=\"8.0.0\">\n  <decision id=\"Decision_1e18q76\" name=\"Decision 1\">\n    <decisionTable id=\"DecisionTable_1apu23m\">\n      <input id=\"Input_1\">\n        <inputExpression id=\"InputExpression_1\" typeRef=\"string\">\n          <text></text>\n        </inputExpression>\n      </input>\n      <output id=\"Output_1\" typeRef=\"string\" />\n    </decisionTable>\n  </decision>\n  <dmndi:DMNDI>\n    <dmndi:DMNDiagram>\n      <dmndi:DMNShape dmnElementRef=\"Decision_1e18q76\">\n        <dc:Bounds height=\"80\" width=\"180\" x=\"160\" y=\"100\" />\n      </dmndi:DMNShape>\n    </dmndi:DMNDiagram>\n  </dmndi:DMNDI>\n</definitions>\n`,\n};\n\nexport {EMPTY_DECISION};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {DECISION_MODELER_TEST_IDS} from '../constants';\nimport {DecisionService} from '../services/decision.service';\nimport {AfterViewInit, Component, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport DmnJS from 'dmn-js/dist/dmn-modeler.development.js';\nimport DmnViewer from 'dmn-js/dist/dmn-viewer.development.js';\nimport {ActivatedRoute, Router, RouterModule} from '@angular/router';\nimport {DecisionFormValue, DecisionXml} from '../models';\nimport {\n  createDmnXml,\n  parseDecisionForm,\n  toDecisionFileName,\n  updateDmnXml,\n} from '../utils/dmn-template';\nimport {DecisionFormModalComponent} from '../decision-form-modal/decision-form-modal.component';\nimport {migrateDiagram} from '@bpmn-io/dmn-migrate';\nimport {\n  BehaviorSubject,\n  catchError,\n  combineLatest,\n  filter,\n  from,\n  map,\n  Observable,\n  of,\n  shareReplay,\n  switchMap,\n  take,\n  tap,\n} from 'rxjs';\nimport {\n  BreadcrumbService,\n  ConfirmationModalModule,\n  FitPageDirective,\n  OverflowMenuComponent,\n  OverflowMenuOptionComponent,\n  OverflowMenuTriggerComponent,\n  PageHeaderService,\n  PageTitleService,\n  PendingChangesComponent,\n  RenderInPageHeaderDirective,\n  SelectedValue,\n  SelectModule as ValtimoSelectModule,\n  WidgetModule,\n} from '@valtimo/components';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {EMPTY_DECISION} from './empty-decision';\nimport {CommonModule} from '@angular/common';\nimport {\n  ButtonModule,\n  IconModule,\n  IconService,\n  ModalModule,\n  SelectModule,\n  TagModule,\n} from 'carbon-components-angular';\nimport {\n  BuildingBlockManagementParams,\n  CaseManagementParams,\n  DraftVersionService,\n  EditPermissionsService,\n  getBuildingBlockManagementRouteParams,\n  getCaseManagementRouteParams,\n  getContextObservable,\n  GlobalNotificationService,\n  ManagementContext,\n} from '@valtimo/shared';\nimport {ArrowLeft16, Deploy16, Download16} from '@carbon/icons';\n\ndeclare const $: any;\n\n@Component({\n  selector: 'valtimo-decision-modeler',\n  standalone: true,\n  templateUrl: './decision-modeler.component.html',\n  styleUrls: ['./decision-modeler.component.scss'],\n  imports: [\n    CommonModule,\n    RouterModule,\n    ModalModule,\n    SelectModule,\n    WidgetModule,\n    ValtimoSelectModule,\n    TranslateModule,\n    RenderInPageHeaderDirective,\n    ButtonModule,\n    IconModule,\n    TagModule,\n    FitPageDirective,\n    OverflowMenuComponent,\n    OverflowMenuOptionComponent,\n    OverflowMenuTriggerComponent,\n    DecisionFormModalComponent,\n    ConfirmationModalModule,\n  ],\n})\nexport class DecisionModelerComponent\n  extends PendingChangesComponent\n  implements OnInit, OnDestroy, AfterViewInit\n{\n  @ViewChild('decisionEdit') edit: DecisionFormModalComponent;\n\n  private CLASS_NAMES = {\n    drd: 'dmn-icon-lasso-tool',\n    decisionTable: 'dmn-icon-decision-table',\n    literalExpression: 'dmn-icon-literal-expression',\n  };\n\n  protected readonly testIds = DECISION_MODELER_TEST_IDS;\n\n  private $container!: any;\n  private $tabs!: any;\n  private dmnEditor!: DmnJS | DmnViewer;\n\n  public readonly versionSelectionDisabled$ = new BehaviorSubject<boolean>(true);\n  public readonly isCreating$ = new BehaviorSubject<boolean>(false);\n  public readonly selectionId$ = new BehaviorSubject<string>('');\n  public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n\n  // Emits once the dmn-js editor instance has been created, so XML import can wait for it.\n  private readonly _editorReady$ = new BehaviorSubject<boolean>(false);\n\n  private _fileName!: string;\n  private _createSeed: DecisionFormValue | null = null;\n  private _decisionKey: string | null = null;\n\n  public readonly caseManagementRouteParams$: Observable<CaseManagementParams | undefined> =\n    getCaseManagementRouteParams(this.route);\n\n  public readonly buildingBlockManagementRouteParams$: Observable<\n    BuildingBlockManagementParams | undefined\n  > = getBuildingBlockManagementRouteParams(this.route);\n\n  public readonly context$: Observable<ManagementContext | null> = getContextObservable(this.route);\n  public readonly isIndependent$ = this.context$.pipe(map(context => context === 'independent'));\n\n  public readonly compactMode$ = this.pageHeaderService.compactMode$;\n\n  public readonly hasEditPermissions$: Observable<boolean> = combineLatest([\n    this.caseManagementRouteParams$,\n    this.buildingBlockManagementRouteParams$,\n    this.context$,\n  ]).pipe(\n    switchMap(([caseParams, buildingBlockParams, context]) => {\n      // Building block decision tables can only be edited on a draft (non-final) version.\n      if (context === 'buildingBlock') {\n        return this.draftVersionService.isDraftVersionBuildingBlock(\n          buildingBlockParams?.buildingBlockDefinitionKey ?? '',\n          buildingBlockParams?.buildingBlockDefinitionVersionTag ?? ''\n        );\n      }\n      return this.editPermissionsService.hasPermissionsToEditBasedOnContext(\n        caseParams,\n        context ?? ''\n      );\n    }),\n    shareReplay({bufferSize: 1, refCount: false})\n  );\n\n  // The editor is shown as a read-only viewer when the user cannot edit (e.g. a final case or\n  // building block definition) and is not creating a new decision table.\n  public readonly readOnly$: Observable<boolean> = combineLatest([\n    this.isCreating$,\n    this.hasEditPermissions$,\n  ]).pipe(map(([isCreating, hasEditPermissions]) => !isCreating && !hasEditPermissions));\n\n  private readonly decisionId$ = this.route.params.pipe(\n    map(params => params?.id),\n    tap(id => {\n      this.isCreating$.next(id === 'create');\n      this.versionSelectionDisabled$.next(true);\n    }),\n    filter(id => !!id && id !== 'create')\n  );\n\n  public readonly decision$ = this.decisionId$.pipe(\n    switchMap(id => this.decisionService.getDecisionById(id)),\n    tap(decision => {\n      this._fileName = decision.resource;\n      this._decisionKey = decision?.key ?? null;\n      if (decision) this.selectionId$.next(decision.id);\n    })\n  );\n\n  public readonly decisionTitle$ = this.decision$.pipe(\n    map(d => d?.name || d?.key || '-'),\n    tap(title => this.pageTitleService.setCustomPageTitle(title))\n  );\n\n  private readonly _refreshDecisionSelectItems$ = new BehaviorSubject<null>(null);\n  public readonly decisionVersionSelectItems$ = this._refreshDecisionSelectItems$.pipe(\n    switchMap(() => combineLatest([this.decision$, this.decisionService.getUnlinkedDecisions()])),\n    map(([current, list]) => {\n      const filtered = list.filter(d => d.key === current.key);\n      return [...filtered.map(d => ({id: d.id, text: d.version.toString()}))].sort(\n        (a, b) => +(b.text ?? '') - +(a.text ?? '')\n      );\n    }),\n    tap(() => this.versionSelectionDisabled$.next(false))\n  );\n\n  public readonly decisionXml$ = this.decisionId$.pipe(\n    switchMap(id => this.decisionService.getDecisionXml(id)),\n    // Wait until the editor (modeler or read-only viewer) has been created before importing.\n    switchMap(xml =>\n      this._editorReady$.pipe(\n        filter(Boolean),\n        take(1),\n        map(() => xml)\n      )\n    ),\n    tap(xml => xml && this.loadDecisionXml(xml))\n  );\n\n  constructor(\n    private readonly decisionService: DecisionService,\n    private readonly route: ActivatedRoute,\n    private readonly router: Router,\n    private readonly translateService: TranslateService,\n    private readonly pageTitleService: PageTitleService,\n    private readonly breadcrumbService: BreadcrumbService,\n    private readonly iconService: IconService,\n    private readonly pageHeaderService: PageHeaderService,\n    private readonly notificationService: GlobalNotificationService,\n    private readonly editPermissionsService: EditPermissionsService,\n    private readonly draftVersionService: DraftVersionService\n  ) {\n    super();\n    this.iconService.registerAll([Deploy16, Download16, ArrowLeft16]);\n    this._createSeed = this.extractCreateSeed();\n  }\n\n  private extractCreateSeed(): DecisionFormValue | null {\n    const navigationState =\n      this.router.getCurrentNavigation()?.extras?.state ??\n      (typeof history !== 'undefined' ? history.state : undefined);\n\n    const name = navigationState?.['decisionName'];\n    const inputVariables = navigationState?.['inputVariables'];\n\n    if (typeof name === 'string' && name) {\n      return {\n        name,\n        inputVariables: Array.isArray(inputVariables)\n          ? inputVariables\n              .filter((variable: unknown): variable is Record<string, unknown> => !!variable)\n              .map(variable => ({\n                label: String(variable['label'] ?? ''),\n                expression: String(variable['expression'] ?? ''),\n              }))\n          : [],\n      };\n    }\n\n    return null;\n  }\n\n  public ngOnInit(): void {\n    this.pageTitleService.disableReset();\n  }\n\n  public ngOnDestroy(): void {\n    // Reset the shared page state first: a failing teardown of the editor or the page header\n    // would otherwise leave this page's breadcrumbs and title behind on the next screen.\n    this.breadcrumbService.clearThirdBreadcrumb();\n    this.breadcrumbService.clearFourthBreadcrumb();\n    this.pageTitleService.enableReset();\n\n    try {\n      this.dmnEditor?.destroy();\n    } catch (err) {\n      console.error('dmn editor destroy error', err);\n    }\n  }\n\n  public ngAfterViewInit(): void {\n    this.initEditor();\n\n    this.context$.pipe(take(1)).subscribe(context => {\n      if (!context) return;\n\n      if (context === 'buildingBlock') {\n        this.buildingBlockManagementRouteParams$.pipe(take(1)).subscribe(params => {\n          if (params) this.initBuildingBlockBreadcrumbs(params);\n        });\n      } else {\n        this.caseManagementRouteParams$.pipe(take(1)).subscribe(params => {\n          if (params) this.initBreadcrumbs(params, context);\n        });\n      }\n    });\n  }\n\n  public switchVersion(decisionId: string | SelectedValue): void {\n    if (!decisionId) return;\n\n    this.router.navigate(['../', decisionId], {relativeTo: this.route});\n    this._refreshDecisionSelectItems$.next(null);\n  }\n\n  public deploy(): void {\n    from(this.dmnEditor.saveXML({format: true}))\n      .pipe(\n        map(result => new File([(result as any).xml], this._fileName, {type: 'text/xml'})),\n        switchMap(file => combineLatest([of(file), this.context$])),\n        switchMap(([file, context]) => {\n          if (context === 'independent') {\n            return this.decisionService.deployDmn(file);\n          }\n          if (context === 'buildingBlock') {\n            return this.buildingBlockManagementRouteParams$.pipe(\n              switchMap(params =>\n                this.decisionService.deployBuildingBlockDecisionDefinition(\n                  params?.buildingBlockDefinitionKey ?? '',\n                  params?.buildingBlockDefinitionVersionTag ?? '',\n                  file\n                )\n              )\n            );\n          }\n          return this.caseManagementRouteParams$.pipe(\n            switchMap(params =>\n              this.decisionService.deployCaseDecisionDefinition(\n                params?.caseDefinitionKey ?? '',\n                params?.caseDefinitionVersionTag ?? '',\n                file\n              )\n            )\n          );\n        }),\n        tap((res: {identifier: string}) => {\n          this.switchVersion(res.identifier);\n          this.showNotification('success', 'decisions.deploySuccess');\n        }),\n        catchError(() => {\n          this.showNotification('error', 'decisions.deployFailure');\n\n          return of(null);\n        })\n      )\n      .subscribe();\n  }\n\n  public download(): void {\n    from(this.dmnEditor.saveXML({format: true}))\n      .pipe(\n        map(result => new File([(result as any).xml], 'decision.dmn', {type: 'text/xml'})),\n        tap(file => {\n          const link = document.createElement('a');\n          link.download = 'diagram.dmn';\n          link.href = window.URL.createObjectURL(file);\n          link.click();\n          window.URL.revokeObjectURL(link.href);\n          link.remove();\n        })\n      )\n      .subscribe();\n  }\n\n  public openEditModal(): void {\n    from(this.dmnEditor.saveXML({format: true}))\n      .pipe(take(1))\n      .subscribe(result => this.edit.open(parseDecisionForm((result as any).xml)));\n  }\n\n  public onEditDecision(value: DecisionFormValue): void {\n    from(this.dmnEditor.saveXML({format: true}))\n      .pipe(\n        map(result => updateDmnXml((result as any).xml, value)),\n        switchMap(xml => this.dmnEditor.importXML(xml)),\n        tap(() => {\n          this.setEditor();\n          if (value.name) this.pageTitleService.setCustomPageTitle(value.name);\n        }),\n        catchError(() => {\n          this.showNotification('error', 'decisions.loadFailure');\n          return of(null);\n        })\n      )\n      .subscribe();\n  }\n\n  public onDeleteClick(): void {\n    this.showDeleteModal$.next(true);\n  }\n\n  public onDeleteConfirm(): void {\n    const decisionKey = this._decisionKey;\n    if (!decisionKey) return;\n\n    this.context$\n      .pipe(\n        take(1),\n        switchMap(context => {\n          if (context === 'buildingBlock') {\n            return this.buildingBlockManagementRouteParams$.pipe(\n              take(1),\n              switchMap(params =>\n                this.decisionService.deleteBuildingBlockDecisionDefinition(\n                  params?.buildingBlockDefinitionKey ?? '',\n                  params?.buildingBlockDefinitionVersionTag ?? '',\n                  decisionKey\n                )\n              )\n            );\n          }\n          return this.caseManagementRouteParams$.pipe(\n            take(1),\n            switchMap(params =>\n              this.decisionService.deleteCaseDecisionDefinition(\n                params?.caseDefinitionKey ?? '',\n                params?.caseDefinitionVersionTag ?? '',\n                decisionKey\n              )\n            )\n          );\n        })\n      )\n      .subscribe({\n        next: () => {\n          this.navigateBack();\n          this.showNotification('success', 'decisions.deleteSuccess');\n        },\n        error: () => this.showNotification('error', 'decisions.deleteFailure'),\n      });\n  }\n\n  public navigateBack(): void {\n    this.context$.pipe(take(1)).subscribe(context => {\n      if (context === 'independent') {\n        this.router.navigate(['/decision-tables']);\n      } else {\n        this.router.navigate(['../'], {relativeTo: this.route});\n      }\n    });\n  }\n\n  private showNotification(notification: null | 'success' | 'error', message: string): void {\n    if (!notification) return;\n\n    this.notificationService.showToast({\n      caption: this.translateService.instant(message),\n      type: notification,\n      title: this.translateService.instant(`interface.${notification}`),\n    });\n  }\n\n  private initEditor(): void {\n    // A new decision table is always created in the editable modeler. For existing tables the\n    // edit permissions decide whether to render the editable modeler or a read-only viewer.\n    if (this.route.snapshot.params?.['id'] === 'create') {\n      this.createEditor(false);\n      this.loadEmptyDecisionTable();\n      return;\n    }\n\n    this.hasEditPermissions$\n      .pipe(take(1))\n      .subscribe(hasEditPermissions => this.createEditor(!hasEditPermissions));\n  }\n\n  private createEditor(readOnly: boolean): void {\n    this.$container = $('.editor-container');\n    this.$tabs = $('.editor-tabs');\n    this.dmnEditor = readOnly\n      ? new DmnViewer({\n          container: this.$container,\n          height: 500,\n          width: '100%',\n        })\n      : new DmnJS({\n          container: this.$container,\n          height: 500,\n          width: '100%',\n          keyboard: {bindTo: window},\n        });\n    this.setTabEvents();\n    this.setModelerEvents();\n    this._editorReady$.next(true);\n  }\n\n  private loadEmptyDecisionTable(): void {\n    if (this._createSeed) {\n      this._fileName = toDecisionFileName(this._createSeed.name);\n      this.pageTitleService.setCustomPageTitle(this._createSeed.name);\n      this.loadDecisionXml(createDmnXml(this._createSeed));\n      return;\n    }\n\n    this._fileName = 'decision.dmn';\n    this.loadDecisionXml(EMPTY_DECISION);\n  }\n\n  private setTabEvents(): void {\n    this.$tabs.delegate('.tab', 'click', async (event: any) => {\n      const index = +event.currentTarget.getAttribute('data-id');\n      const view = this.dmnEditor.getViews()[index];\n      try {\n        await this.dmnEditor.open(view);\n      } catch (err) {\n        console.error('tab open error', err);\n      }\n    });\n  }\n\n  private setModelerEvents(): void {\n    this.dmnEditor.on('views.changed', event => {\n      const {views, activeView} = event;\n      this.$tabs.empty();\n      views.forEach((v, i) => {\n        const className = this.CLASS_NAMES[v.type];\n        const tab = $(\n          `<div class=\"tab ${v === activeView ? 'active' : ''}\" data-id=\"${i}\"><span class=\"${className}\"></span>${v.element.name || v.element.id}</div>`\n        );\n        this.$tabs.append(tab);\n      });\n    });\n  }\n\n  private loadDecisionXml(decision: DecisionXml): void {\n    from(this.dmnEditor.importXML(decision.dmnXml))\n      .pipe(\n        tap(() => this.setEditor()),\n        catchError(() => {\n          this.migrateAndLoadDecisionXml(decision);\n          return of(null);\n        })\n      )\n      .subscribe();\n  }\n\n  private migrateAndLoadDecisionXml(decision: DecisionXml): void {\n    from(migrateDiagram(decision.dmnXml))\n      .pipe(\n        switchMap(xml => this.dmnEditor.importXML(xml)),\n        tap(() => this.setEditor()),\n        catchError(() => {\n          this.showNotification('error', 'decisions.loadFailure');\n          return of(null);\n        })\n      )\n      .subscribe();\n  }\n\n  private setEditor(): void {\n    const view = this.dmnEditor.getActiveView();\n    if (view?.type === 'drd') {\n      const canvas = this.dmnEditor.getActiveViewer().get('canvas');\n      canvas.zoom('fit-viewport');\n    }\n  }\n\n  private initBreadcrumbs(params: CaseManagementParams, context: ManagementContext): void {\n    if (context === 'independent') return;\n\n    const route = `/case-management/case/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}`;\n\n    this.breadcrumbService.setThirdBreadcrumb({\n      route: [route],\n      content: `${params.caseDefinitionKey} (${params.caseDefinitionVersionTag})`,\n      href: route,\n    });\n\n    const routeWithDecisions = `${route}/decisions`;\n\n    this.breadcrumbService.setFourthBreadcrumb({\n      route: [routeWithDecisions],\n      content: this.translateService.instant('caseManagement.tabs.decision'),\n      href: routeWithDecisions,\n    });\n  }\n\n  private initBuildingBlockBreadcrumbs(params: BuildingBlockManagementParams): void {\n    const route = `/building-block-management/building-block/${params.buildingBlockDefinitionKey}/version/${params.buildingBlockDefinitionVersionTag}`;\n    const generalRoute = `${route}/general`;\n\n    this.breadcrumbService.setThirdBreadcrumb({\n      route: [generalRoute],\n      content: `${params.buildingBlockDefinitionKey} (${params.buildingBlockDefinitionVersionTag})`,\n      href: generalRoute,\n    });\n\n    const routeWithDecisions = `${route}/decisions`;\n\n    this.breadcrumbService.setFourthBreadcrumb({\n      route: [routeWithDecisions],\n      content: this.translateService.instant('buildingBlockManagement.tabs.decisions'),\n      href: routeWithDecisions,\n    });\n  }\n}\n","<!--\n  ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n  ~\n  ~ Licensed under EUPL, Version 1.2 (the \"License\");\n  ~ you may not use this file except in compliance with the License.\n  ~ You may obtain a copy of the License at\n  ~\n  ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n  ~\n  ~ Unless required by applicable law or agreed to in writing, software\n  ~ distributed under the License is distributed on an \"AS IS\" basis,\n  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  ~ See the License for the specific language governing permissions and\n  ~ limitations under the License.\n  -->\n\n<div\n  *ngIf=\"{\n    decisionXml: decisionXml$ | async,\n    decisionTitle: decisionTitle$ | async,\n  } as obs\"\n  fitPage\n  [disableOverflow]=\"true\"\n  class=\"dmn-editor\"\n>\n  <ng-container *ngTemplateOutlet=\"diagram\"></ng-container>\n</div>\n\n<ng-template #diagram>\n  <div class=\"editor-parent\">\n    <div class=\"editor-container\"></div>\n    <div class=\"editor-tabs\"></div>\n  </div>\n</ng-template>\n\n<ng-container renderInPageHeader>\n  <ng-template>\n    <div\n      *ngIf=\"{\n        selectionId: selectionId$ | async,\n        isCreating: isCreating$ | async,\n        context: context$ | async,\n        compactMode: compactMode$ | async,\n        hasEditPermissions: hasEditPermissions$ | async,\n        readOnly: readOnly$ | async,\n      } as obs\"\n      class=\"decision-modeler-actions\"\n    >\n      <cds-tag *ngIf=\"obs.readOnly\" type=\"blue\" [attr.data-test-id]=\"testIds.readOnlyTag\">{{\n        'decisions.readOnly' | translate\n      }}</cds-tag>\n\n      <ng-container *ngTemplateOutlet=\"versionSelection\"></ng-container>\n\n      <button\n        *ngIf=\"obs.context === 'case' || obs.isCreating\"\n        cdsButton=\"secondary\"\n        [size]=\"obs.compactMode ? 'sm' : 'md'\"\n        (click)=\"navigateBack()\"\n        [attr.data-test-id]=\"testIds.backButton\"\n      >\n        <svg class=\"cds--btn__icon\" cdsIcon=\"arrow--left\" size=\"16\"></svg>\n\n        <span>{{ 'interface.back' | translate }}</span>\n      </button>\n\n      @if (obs.selectionId && !obs.isCreating) {\n        <button\n          cdsButton=\"primary\"\n          [disabled]=\"!obs.hasEditPermissions\"\n          (click)=\"deploy()\"\n          [size]=\"obs.compactMode ? 'sm' : 'md'\"\n          [attr.data-test-id]=\"testIds.deployButton\"\n        >\n          {{ 'decisions.deploy' | translate }}\n\n          <svg class=\"cds--btn__icon\" cdsIcon=\"deploy\" size=\"16\"></svg>\n        </button>\n\n        <v-overflow-menu class=\"overflow-button\" placement=\"bottom-end\">\n          <v-overflow-menu-trigger overflowTrigger></v-overflow-menu-trigger>\n          <v-overflow-menu-option [disabled]=\"!obs.hasEditPermissions\" (selected)=\"openEditModal()\"\n            >{{ 'interface.edit' | translate }}\n          </v-overflow-menu-option>\n          <v-overflow-menu-option (selected)=\"download()\"\n            >{{ 'interface.export' | translate }}\n          </v-overflow-menu-option>\n          <v-overflow-menu-option\n            [disabled]=\"!obs.hasEditPermissions || obs.context === 'independent'\"\n            type=\"danger\"\n            (selected)=\"onDeleteClick()\"\n            >{{ 'interface.delete' | translate }}\n          </v-overflow-menu-option>\n        </v-overflow-menu>\n      } @else {\n        <button\n          cdsButton=\"primary\"\n          [disabled]=\"!obs.hasEditPermissions\"\n          (click)=\"deploy()\"\n          [size]=\"obs.compactMode ? 'sm' : 'md'\"\n          [attr.data-test-id]=\"testIds.deployButton\"\n        >\n          {{ 'decisions.deploy' | translate }}\n\n          <svg class=\"cds--btn__icon\" cdsIcon=\"deploy\" size=\"16\"></svg>\n        </button>\n      }\n    </div>\n  </ng-template>\n</ng-container>\n\n<ng-template #versionSelection>\n  <ng-container\n    *ngIf=\"{\n      selectItems: (decisionVersionSelectItems$ | async) || [],\n      isIndependent: isIndependent$ | async,\n      versionSelectionDisabled: versionSelectionDisabled$ | async,\n      selectionId: selectionId$ | async,\n    } as obs\"\n  >\n    <v-select\n      *ngIf=\"obs.isIndependent\"\n      name=\"version\"\n      [title]=\"'decisions.version' | translate\"\n      [disabled]=\"obs.versionSelectionDisabled\"\n      [clearable]=\"false\"\n      [loading]=\"obs.selectItems.length === 0\"\n      [items]=\"obs.selectItems\"\n      [defaultSelectionId]=\"obs.selectionId\"\n      [widthInPx]=\"120\"\n      (selectedChange)=\"switchVersion($event)\"\n    ></v-select>\n  </ng-container>\n</ng-template>\n\n<valtimo-decision-form-modal\n  #decisionEdit\n  titleKey=\"decisions.editModal.title\"\n  submitKey=\"interface.save\"\n  (submitEvent)=\"onEditDecision($event)\"\n></valtimo-decision-form-modal>\n\n<valtimo-confirmation-modal\n  confirmButtonTextTranslationKey=\"interface.delete\"\n  confirmButtonType=\"danger\"\n  contentTranslationKey=\"decisions.deleteModal.content\"\n  [showModalSubject$]=\"showDeleteModal$\"\n  titleTranslationKey=\"decisions.deleteModal.title\"\n  (confirmEvent)=\"onDeleteConfirm()\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Component, OnInit, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ActivatedRoute, RouterModule} from '@angular/router';\nimport {DecisionService} from '../services/decision.service';\nimport {DecisionXml} from '../models';\nimport DmnViewer from 'dmn-js';\nimport {migrateDiagram} from '@bpmn-io/dmn-migrate';\nimport {TranslateModule} from '@ngx-translate/core';\n\n@Component({\n  selector: 'valtimo-decision-display',\n  standalone: true,\n  templateUrl: './decision-display.component.html',\n  styleUrls: ['./decision-display.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule, TranslateModule],\n})\nexport class DecisionDisplayComponent implements OnInit {\n  public viewer: DmnViewer;\n  private decisionId: string;\n  public decisionXml: string;\n\n  constructor(\n    private readonly decisionService: DecisionService,\n    private readonly route: ActivatedRoute\n  ) {}\n\n  ngOnInit(): void {\n    this.viewer = new DmnViewer({\n      container: '#canvas',\n    });\n    this.decisionId = this.route.snapshot.paramMap.get('id')!;\n    this.loadDecisionXml();\n  }\n\n  loadDecisionXml(): void {\n    this.decisionService.getDecisionXml(this.decisionId).subscribe((decision: DecisionXml) => {\n      this.viewer.importXML(decision.dmnXml, error => {\n        if (error) {\n          this.migrateAndLoadDecisionXml(decision);\n        }\n      });\n      this.decisionXml = decision.dmnXml;\n    });\n  }\n\n  async migrateAndLoadDecisionXml(decision: DecisionXml): Promise<void> {\n    const decisionXml = await migrateDiagram(decision.dmnXml);\n\n    if (decisionXml) {\n      this.viewer.importXML(decisionXml, error => {\n        if (error) {\n          console.error('Error importing migrated XML', error);\n        }\n      });\n      this.decisionXml = decisionXml;\n    }\n  }\n\n  download(): void {\n    const file = new Blob([this.decisionXml], {type: 'text/xml'});\n    const link = document.createElement('a');\n    link.download = `decision_table_${this.decisionId}.dmn`;\n    link.href = window.URL.createObjectURL(file);\n    link.click();\n    window.URL.revokeObjectURL(link.href);\n    link.remove();\n  }\n}\n","<!--\n  ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n  ~\n  ~ Licensed under EUPL, Version 1.2 (the \"License\");\n  ~ you may not use this file except in compliance with the License.\n  ~ You may obtain a copy of the License at\n  ~\n  ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n  ~\n  ~ Unless required by applicable law or agreed to in writing, software\n  ~ distributed under the License is distributed on an \"AS IS\" basis,\n  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  ~ See the License for the specific language governing permissions and\n  ~ limitations under the License.\n  -->\n\n<div class=\"main-content pt-0\">\n  <div class=\"container-fluid\">\n    <div class=\"text-right\">\n      <div class=\"btn-group mt-m3px mb-3\">\n        <button (click)=\"download()\" class=\"btn btn-primary btn-space mr-0\">\n          <i class=\"fa fa-save\"></i> &nbsp;\n          <span>{{ 'Download' | translate }}</span>\n        </button>\n      </div>\n    </div>\n    <div id=\"canvas\" class=\"canvas-dmn\"></div>\n  </div>\n</div>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {Decision} from '../models';\n\nexport function filterLatestDecisionVersions(decisions: Decision[]): Decision[] {\n  return decisions.reduce((acc: Decision[], curr: Decision) => {\n    const existing = acc.find(d => d.key === curr.key);\n    if (existing && existing.version >= curr.version) return acc;\n    if (existing && existing.version < curr.version)\n      return [...acc.filter(d => d.key !== curr.key), curr];\n    return [...acc, curr];\n  }, []);\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {CommonModule} from '@angular/common';\nimport {Component, EventEmitter, Output} from '@angular/core';\nimport {FormBuilder, FormsModule, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {ActivatedRoute} from '@angular/router';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n  ButtonModule,\n  FileUploaderModule,\n  LayerModule,\n  ModalModule,\n} from 'carbon-components-angular';\nimport {BehaviorSubject, combineLatest, switchMap, take} from 'rxjs';\nimport {DECISION_UPLOAD_TEST_IDS} from '../constants';\nimport {ValtimoCdsModalDirective} from '@valtimo/components';\nimport {\n  getBuildingBlockManagementRouteParams,\n  getCaseManagementRouteParams,\n  getContextObservable,\n} from '@valtimo/shared';\nimport {DecisionService, DecisionStateService} from '../services';\n\n@Component({\n  selector: 'valtimo-decision-deploy',\n  standalone: true,\n  templateUrl: './decision-deploy.component.html',\n  styleUrls: ['./decision-deploy.component.scss'],\n  imports: [\n    CommonModule,\n    FormsModule,\n    TranslateModule,\n    ModalModule,\n    ButtonModule,\n    LayerModule,\n    FileUploaderModule,\n    ReactiveFormsModule,\n    ValtimoCdsModalDirective,\n  ],\n})\nexport class DecisionDeployComponent {\n  @Output() deploySuccessful = new EventEmitter();\n\n  public dmn: File | null = null;\n\n  public readonly modalOpen$ = new BehaviorSubject<boolean>(false);\n\n  protected readonly testIds = DECISION_UPLOAD_TEST_IDS;\n\n  public readonly caseManagementRouteParams$ = getCaseManagementRouteParams(this.route);\n  public readonly buildingBlockManagementRouteParams$ =\n    getBuildingBlockManagementRouteParams(this.route);\n  public readonly context$ = getContextObservable(this.route);\n\n  public readonly ACCEPTED_FILES: string[] = ['dmn'];\n\n  public readonly form = this.formBuilder.group({\n    file: this.formBuilder.control(new Set<any>(), [Validators.required]),\n  });\n\n  constructor(\n    private readonly decisionService: DecisionService,\n    private readonly stateService: DecisionStateService,\n    private readonly route: ActivatedRoute,\n    private readonly formBuilder: FormBuilder\n  ) {}\n\n  public get selectedDmnFile(): File | null {\n    const fileSet = this.form.value?.file;\n    return fileSet?.size ? fileSet.values().next().value?.file || null : null;\n  }\n\n  public onChange(files: FileList): void {\n    this.dmn = files.item(0);\n  }\n\n  public deployDmn(): void {\n    const dmnFile = this.selectedDmnFile;\n    if (!dmnFile) return;\n\n    this.context$\n      .pipe(\n        take(1),\n        switchMap(context => {\n          if (context === 'case') {\n            return this.caseManagementRouteParams$.pipe(\n              take(1),\n              switchMap(params =>\n                this.decisionService.deployCaseDecisionDefinition(\n                  params.caseDefinitionKey,\n                  params.caseDefinitionVersionTag,\n                  dmnFile\n                )\n              )\n            );\n          }\n          if (context === 'buildingBlock') {\n            return this.buildingBlockManagementRouteParams$.pipe(\n              take(1),\n              switchMap(params =>\n                this.decisionService.deployBuildingBlockDecisionDefinition(\n                  params.buildingBlockDefinitionKey,\n                  params.buildingBlockDefinitionVersionTag,\n                  dmnFile\n                )\n              )\n            );\n          }\n          return this.decisionService.deployDmn(dmnFile);\n        })\n      )\n      .subscribe(() => {\n        this.closeModal();\n        this.deploySuccessful.emit();\n        this.stateService.refreshDecisions();\n      });\n  }\n\n  public openModal() {\n    this.modalOpen$.next(true);\n  }\n\n  public closeModal(): void {\n    this.modalOpen$.next(false);\n  }\n}\n","<!--\n  ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n  ~\n  ~ Licensed under EUPL, Version 1.2 (the \"License\");\n  ~ you may not use this file except in compliance with the License.\n  ~ You may obtain a copy of the License at\n  ~\n  ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n  ~\n  ~ Unless required by applicable law or agreed to in writing, software\n  ~ distributed under the License is distributed on an \"AS IS\" basis,\n  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  ~ See the License for the specific language governing permissions and\n  ~ limitations under the License.\n  -->\n\n<cds-modal showFooter=\"true\" valtimoCdsModal [open]=\"modalOpen$ | async\" (close)=\"closeModal()\">\n  <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"closeModal()\">\n    <h3 cdsModalHeaderHeading>{{ 'decisions.upload.title' | translate }}</h3>\n  </cds-modal-header>\n\n  <section cdsModalContent [cdsLayer]=\"1\" [formGroup]=\"form\">\n    <cds-file-uploader\n      [accept]=\"ACCEPTED_FILES\"\n      [multiple]=\"false\"\n      buttonType=\"primary\"\n      [title]=\"'decisions.upload.fileUploaderTitle' | translate\"\n      [description]=\"'decisions.upload.fileUploaderDescription' | translate\"\n      [buttonText]=\"'decisions.upload.fileUploaderButton' | translate\"\n      formControlName=\"file\"\n    >\n    </cds-file-uploader>\n  </section>\n\n  <cds-modal-footer>\n    <button cdsButton=\"secondary\" (click)=\"closeModal()\">\n      {{ 'interface.cancel' | translate }}\n    </button>\n\n    <button\n      cdsButton=\"primary\"\n      [disabled]=\"!selectedDmnFile\"\n      (click)=\"deployDmn()\"\n      [attr.data-test-id]=\"testIds.submitButton\"\n    >\n      {{ 'interface.upload' | translate }}\n    </button>\n  </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {ChangeDetectorRef, Component, ViewChild} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ActivatedRoute, Router, RouterModule} from '@angular/router';\nimport {BehaviorSubject, combineLatest, map, Observable, switchMap, take, tap} from 'rxjs';\nimport {DecisionFormValue, Decision} from '../models';\nimport {filterLatestDecisionVersions} from '../utils/decision.utils';\nimport {parseDecisionForm, toDecisionFileName, updateDmnXml} from '../utils/dmn-template';\nimport {DecisionService} from '../services/decision.service';\nimport {\n  EditPermissionsService,\n  getBuildingBlockManagementRouteParams,\n  getCaseManagementRouteParams,\n  getContextObservable,\n  GlobalNotificationService,\n  ManagementContext,\n} from '@valtimo/shared';\nimport {DecisionStateService} from '../services';\nimport {DecisionDeployComponent} from '../decision-deploy/decision-deploy.component';\nimport {DecisionFormModalComponent} from '../decision-form-modal/decision-form-modal.component';\nimport {DECISION_LIST_TEST_IDS} from '../constants';\nimport {\n  ActionItem,\n  CarbonListModule,\n  ConfirmationModalModule,\n  WidgetModule,\n} from '@valtimo/components';\nimport {ButtonModule, IconModule, IconService} from 'carbon-components-angular';\nimport {Add16, Upload16} from '@carbon/icons';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\n\n@Component({\n  selector: 'valtimo-decision-list',\n  standalone: true,\n  templateUrl: './decision-list.component.html',\n  styleUrls: ['./decision-list.component.scss'],\n  imports: [\n    CommonModule,\n    RouterModule,\n    CarbonListModule,\n    IconModule,\n    WidgetModule,\n    DecisionDeployComponent,\n    DecisionFormModalComponent,\n    ConfirmationModalModule,\n    TranslateModule,\n    ButtonModule,\n  ],\n})\nexport class DecisionListComponent {\n  @ViewChild('decisionDeploy') deploy: DecisionDeployComponent;\n  @ViewChild('decisionCreate') create: DecisionFormModalComponent;\n  @ViewChild('decisionEdit') edit: DecisionFormModalComponent;\n\n  public fields = [\n    {key: 'key', label: 'Key'},\n    {key: 'name', label: 'Name'},\n    {key: 'version', label: 'Version'},\n  ];\n\n  public readonly ACTION_ITEMS: ActionItem[] = [\n    {\n      label: 'interface.edit',\n      callback: this.openEditModal.bind(this),\n      type: 'normal',\n      disabled$: () => this.hasEditPermissions$.pipe(map(canEdit => !canEdit)),\n    },\n    {\n      label: 'interface.delete',\n      callback: this.onDeleteClick.bind(this),\n      type: 'danger',\n      disabled$: () =>\n        this.hasEditPermissions$.pipe(map(canEdit => !canEdit || this._context !== 'case')),\n    },\n  ];\n\n  public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n\n  readonly loading$ = new BehaviorSubject<boolean>(true);\n\n  protected readonly testIds = DECISION_LIST_TEST_IDS;\n\n  public readonly caseManagementRouteParams$ = getCaseManagementRouteParams(this.route);\n  public readonly buildingBlockManagementRouteParams$ =\n    getBuildingBlockManagementRouteParams(this.route);\n  public readonly context$ = getContextObservable(this.route);\n\n  readonly decisionsLatestVersions$ = this.stateService.refreshDecisions$.pipe(\n    switchMap(() => this.context$),\n    switchMap(context => {\n      if (context === 'case') {\n        return this.caseManagementRouteParams$.pipe(\n          switchMap(params =>\n            this.decisionService.listCaseDecisionDefinitions(\n              params.caseDefinitionKey,\n              params.caseDefinitionVersionTag\n            )\n          )\n        );\n      }\n      if (context === 'buildingBlock') {\n        return this.buildingBlockManagementRouteParams$.pipe(\n          switchMap(params =>\n            this.decisionService.listBuildingBlockDecisionDefinitions(\n              params.buildingBlockDefinitionKey,\n              params.buildingBlockDefinitionVersionTag\n            )\n          )\n        );\n      }\n      return this.decisionService.getUnlinkedDecisions();\n    }),\n    map(filterLatestDecisionVersions),\n    tap(() => {\n      this.loading$.next(false);\n      this.cdr.detectChanges();\n    })\n  );\n\n  public readonly hasEditPermissions$: Observable<boolean> = combineLatest([\n    this.caseManagementRouteParams$,\n    this.context$,\n  ]).pipe(\n    switchMap(([params, context]) => {\n      return this.editPermissionsService.hasPermissionsToEditBasedOnContext(params, context);\n    })\n  );\n\n  private _editDecision: Decision | null = null;\n  private _editXml: string | null = null;\n  private _decisionToDelete: Decision | null = null;\n  private _context: ManagementContext | null = null;\n\n  constructor(\n    private readonly decisionService: DecisionService,\n    private readonly iconService: IconService,\n    private readonly router: Router,\n    private readonly stateService: DecisionStateService,\n    private readonly route: ActivatedRoute,\n    private readonly cdr: ChangeDetectorRef,\n    private readonly editPermissionsService: EditPermissionsService,\n    private readonly notificationService: GlobalNotificationService,\n    private readonly translateService: TranslateService\n  ) {\n    this.iconService.registerAll([Upload16, Add16]);\n    this.context$.pipe(take(1)).subscribe(context => (this._context = context));\n  }\n\n  public viewDecisionTable(decision: Decision): void {\n    this.context$.pipe(take(1)).subscribe(context => {\n      if (context === 'buildingBlock') {\n        this.buildingBlockManagementRouteParams$.pipe(take(1)).subscribe(params => {\n          this.router.navigateByUrl(\n            `building-block-management/building-block/${params.buildingBlockDefinitionKey}/version/${params.buildingBlockDefinitionVersionTag}/decisions/${decision.id}`\n          );\n        });\n      } else if (context === 'case') {\n        this.caseManagementRouteParams$.pipe(take(1)).subscribe(params => {\n          this.router.navigateByUrl(\n            `case-management/case/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}/decisions/${decision.id}`\n          );\n        });\n      } else {\n        this.router.navigate(['/decision-tables/edit/' + decision.id]);\n      }\n    });\n  }\n\n  public onCreateDecision(value: DecisionFormValue): void {\n    const state = {decisionName: value.name, inputVariables: value.inputVariables};\n\n    this.context$.pipe(take(1)).subscribe(context => {\n      if (context === 'buildingBlock') {\n        this.buildingBlockManagementRouteParams$.pipe(take(1)).subscribe(params => {\n          this.router.navigateByUrl(\n            `building-block-management/building-block/${params.buildingBlockDefinitionKey}/version/${params.buildingBlockDefinitionVersionTag}/decisions/create`,\n            {state}\n          );\n        });\n      } else if (context === 'case') {\n        this.caseManagementRouteParams$.pipe(take(1)).subscribe(params => {\n          this.router.navigateByUrl(\n            `case-management/case/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}/decisions/create`,\n            {state}\n          );\n        });\n      } else {\n        this.router.navigate(['/decision-tables/edit/create'], {state});\n      }\n    });\n  }\n\n  public openEditModal(decision: Decision): void {\n    this.decisionService\n      .getDecisionXml(decision.id)\n      .pipe(take(1))\n      .subscribe(xml => {\n        this._editDecision = decision;\n        this._editXml = xml.dmnXml;\n        this.edit.open(parseDecisionForm(xml.dmnXml));\n      });\n  }\n\n  public onEditDecision(value: DecisionFormValue): void {\n    if (!this._editXml || !this._editDecision) return;\n\n    const patchedXml = updateDmnXml(this._editXml, value);\n    const fileName = this._editDecision.resource || toDecisionFileName(this._editDecision.key);\n    const file = new File([patchedXml], fileName, {type: 'text/xml'});\n\n    this.deployFileForContext(file).subscribe({\n      next: () => {\n        this.showNotification('success', 'decisions.deploySuccess');\n        this.stateService.refreshDecisions();\n      },\n      error: () => this.showNotification('error', 'decisions.deployFailure'),\n    });\n  }\n\n  public onDeleteClick(decision: Decision): void {\n    this._decisionToDelete = decision;\n    this.showDeleteModal$.next(true);\n  }\n\n  public onDeleteConfirm(): void {\n    if (!this._decisionToDelete) return;\n\n    const decisionKey = this._decisionToDelete.key;\n\n    this.caseManagementRouteParams$\n      .pipe(\n        take(1),\n        switchMap(params =>\n          this.decisionService.deleteCaseDecisionDefinition(\n            params.caseDefinitionKey,\n            params.caseDefinitionVersionTag,\n            decisionKey\n          )\n        )\n      )\n      .subscribe({\n        next: () => {\n          this.showNotification('success', 'decisions.deleteSuccess');\n          this.stateService.refreshDecisions();\n        },\n        error: () => this.showNotification('error', 'decisions.deleteFailure'),\n      });\n  }\n\n  private deployFileForContext(file: File): Observable<{identifier: string}> {\n    return this.context$.pipe(\n      take(1),\n      switchMap(context => {\n        if (context === 'case') {\n          return this.caseManagementRouteParams$.pipe(\n            take(1),\n            switchMap(params =>\n              this.decisionService.deployCaseDecisionDefinition(\n                params.caseDefinitionKey,\n                params.caseDefinitionVersionTag,\n                file\n              )\n            )\n          );\n        }\n        if (context === 'buildingBlock') {\n          return this.buildingBlockManagementRouteParams$.pipe(\n            take(1),\n            switchMap(params =>\n              this.decisionService.deployBuildingBlockDecisionDefinition(\n                params.buildingBlockDefinitionKey,\n                params.buildingBlockDefinitionVersionTag,\n                file\n              )\n            )\n          );\n        }\n        return this.decisionService.deployDmn(file);\n      })\n    );\n  }\n\n  private showNotification(type: 'success' | 'error', message: string): void {\n    this.notificationService.showToast({\n      caption: this.translateService.instant(message),\n      type,\n      title: this.translateService.instant(`interface.${type}`),\n    });\n  }\n}\n","<!--\n  ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n  ~\n  ~ Licensed under EUPL, Version 1.2 (the \"License\");\n  ~ you may not use this file except in compliance with the License.\n  ~ You may obtain a copy of the License at\n  ~\n  ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n  ~\n  ~ Unless required by applicable law or agreed to in writing, software\n  ~ distributed under the License is distributed on an \"AS IS\" basis,\n  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  ~ See the License for the specific language governing permissions and\n  ~ limitations under the License.\n  -->\n\n<valtimo-carbon-list\n  [items]=\"(decisionsLatestVersions$ | async) || []\"\n  [loading]=\"loading$ | async\"\n  [fields]=\"fields\"\n  [actionItems]=\"ACTION_ITEMS\"\n  (rowClicked)=\"viewDecisionTable($event)\"\n  [header]=\"false\"\n  [isSearchable]=\"true\"\n>\n  <ng-container carbonToolbarContent>\n    <ng-container *ngIf=\"{canEdit: hasEditPermissions$ | async} as obs\">\n      <button\n        cdsButton=\"ghost\"\n        iconOnly=\"true\"\n        [disabled]=\"!obs.canEdit\"\n        (click)=\"this.deploy.openModal()\"\n        [attr.data-test-id]=\"testIds.uploadButton\"\n      >\n        <svg cdsIcon=\"upload\" size=\"16\"></svg>\n      </button>\n\n      <button\n        cdsButton=\"primary\"\n        [disabled]=\"!obs.canEdit\"\n        (click)=\"this.create.openModal()\"\n        [attr.data-test-id]=\"testIds.createButton\"\n      >\n        {{ 'decisions.create' | translate }}\n\n        <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n      </button>\n    </ng-container>\n  </ng-container>\n</valtimo-carbon-list>\n\n<valtimo-decision-deploy #decisionDeploy></valtimo-decision-deploy>\n\n<valtimo-decision-form-modal\n  #decisionCreate\n  (submitEvent)=\"onCreateDecision($event)\"\n></valtimo-decision-form-modal>\n\n<valtimo-decision-form-modal\n  #decisionEdit\n  titleKey=\"decisions.editModal.title\"\n  submitKey=\"interface.save\"\n  (submitEvent)=\"onEditDecision($event)\"\n></valtimo-decision-form-modal>\n\n<valtimo-confirmation-modal\n  confirmButtonTextTranslationKey=\"interface.delete\"\n  confirmButtonType=\"danger\"\n  contentTranslationKey=\"decisions.deleteModal.content\"\n  [showModalSubject$]=\"showDeleteModal$\"\n  titleTranslationKey=\"decisions.deleteModal.title\"\n  (confirmEvent)=\"onDeleteConfirm()\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {CommonModule} from '@angular/common';\nimport {AuthGuardService} from '@valtimo/security';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {DecisionModelerComponent} from './decision-modeler/decision-modeler.component';\nimport {DecisionDisplayComponent} from './decision-display/decision-display.component';\nimport {DecisionManagementRouteData} from './models/decision-management.model';\nimport {DecisionListComponent} from './decision-list/decision-list.component';\n\nconst routes: Routes = [\n  {\n    path: 'decision-tables',\n    component: DecisionListComponent,\n    canActivate: [AuthGuardService],\n    data: {\n      title: 'Decision tables',\n      roles: [ROLE_ADMIN],\n      context: 'independent',\n    } as DecisionManagementRouteData,\n  },\n  {\n    path: 'decision-tables/:id',\n    component: DecisionDisplayComponent,\n    canActivate: [AuthGuardService],\n    data: {\n      title: 'Decision tables',\n      roles: [ROLE_ADMIN],\n      context: 'independent',\n    } as DecisionManagementRouteData,\n  },\n  {\n    path: 'decision-tables/edit/:id',\n    component: DecisionModelerComponent,\n    canActivate: [AuthGuardService],\n    data: {\n      title: 'Edit decision table',\n      roles: [ROLE_ADMIN],\n      customPageTitle: true,\n      context: 'independent',\n    } as DecisionManagementRouteData,\n  },\n  {\n    path: 'decision-tables/edit/create',\n    component: DecisionModelerComponent,\n    canActivate: [AuthGuardService],\n    data: {\n      title: 'Create decision table',\n      roles: [ROLE_ADMIN],\n      context: 'independent',\n    } as DecisionManagementRouteData,\n  },\n];\n\n@NgModule({\n  declarations: [],\n  imports: [CommonModule, RouterModule.forChild(routes)],\n  exports: [RouterModule],\n})\nexport class DecisionRoutingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NgModule} from '@angular/core';\nimport {DecisionRoutingModule} from './decision-routing.module';\nimport {DecisionDeployComponent} from './decision-deploy/decision-deploy.component';\nimport {DecisionFormModalComponent} from './decision-form-modal/decision-form-modal.component';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {DecisionDisplayComponent} from './decision-display/decision-display.component';\nimport {DecisionListComponent} from './decision-list/decision-list.component';\nimport {\n  CarbonListModule,\n  ModalModule,\n  SelectModule,\n  SpinnerModule,\n  WidgetModule,\n} from '@valtimo/components';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {DecisionModelerComponent} from './decision-modeler/decision-modeler.component';\nimport {ButtonModule, IconModule} from 'carbon-components-angular';\n\n@NgModule({\n  imports: [\n    DecisionRoutingModule,\n    WidgetModule,\n    TranslateModule,\n    ModalModule,\n    CommonModule,\n    FormsModule,\n    SelectModule,\n    SpinnerModule,\n    CarbonListModule,\n    ButtonModule,\n    IconModule,\n    DecisionDeployComponent,\n    DecisionFormModalComponent,\n    DecisionModelerComponent,\n    DecisionListComponent,\n    DecisionDisplayComponent,\n  ],\n  exports: [DecisionModelerComponent],\n})\nexport class DecisionModule {}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of decision\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/decision.module';\nexport * from './lib/decision-modeler/decision-modeler.component';\nexport * from './lib/decision-display/decision-display.component';\nexport * from './lib/decision-list/decision-list.component';\nexport * from './lib/decision-deploy/decision-deploy.component';\nexport * from './lib/decision-form-modal/decision-form-modal.component';\nexport * from './lib/constants';\nexport * from './lib/utils/decision.utils';\nexport * from './lib/utils/dmn-template';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i5","i1.DecisionService","i4","ValtimoSelectModule","DmnViewer","i1.DecisionStateService","i3","i6","i4.DecisionStateService","i8","ModalModule","SelectModule"],"mappings":"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"}