@conuti-das/prince-ui-dmn 1.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/diagram-theme.ts","../src/model/dmn-model.ts","../src/model/feel-linter.ts","../src/table/DmnTableEditor.tsx","../src/expert/DmnExpertEditor.tsx","../src/DmnEditor.tsx"],"names":["decision","table","xml","useRef","useState","useEffect","useCallback","jsxs","cls","jsx","Button"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Theme-Bridge für dmn-js (DRD-SVG-Ansicht) — kolokierte Kopie des bpmn-Pakets\n * (bewusst kein geteiltes 4. Paket). Liest prince-ui-Tokens (`--prn-*`) und\n * hört auf `data-theme`.\n */\n\nimport type { DiagramColorScheme } from \"../types\";\n\nexport interface DiagramColors {\n defaultFillColor: string;\n defaultStrokeColor: string;\n defaultLabelColor: string;\n canvasBackground: string;\n accent: string;\n}\n\nexport function readToken(name: string, fallback: string): string {\n if (typeof window === \"undefined\" || !document?.documentElement) return fallback;\n const value = getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim();\n return value || fallback;\n}\n\nexport function isDarkMode(scheme: DiagramColorScheme = \"auto\"): boolean {\n if (scheme === \"dark\") return true;\n if (scheme === \"light\") return false;\n if (typeof document !== \"undefined\") {\n const attr = document.documentElement.getAttribute(\"data-theme\");\n // CU ist ein dunkler Surface (--prn-bg ~ #222a31) → wie dark behandeln,\n // damit Diagramm-Shapes nicht hell-auf-dunkel rendern.\n if (attr === \"dark\" || attr === \"cu\") return true;\n if (attr === \"light\") return false;\n }\n if (typeof window !== \"undefined\" && window.matchMedia) {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n }\n return false;\n}\n\nexport function getDiagramColors(scheme: DiagramColorScheme = \"auto\"): DiagramColors {\n const dark = isDarkMode(scheme);\n return {\n defaultFillColor: readToken(\"--prn-bg-elevated\", dark ? \"#1c1c1e\" : \"#ffffff\"),\n defaultStrokeColor: readToken(\"--prn-label\", dark ? \"#e4e4e6\" : \"#1d1d1f\"),\n defaultLabelColor: readToken(\"--prn-label\", dark ? \"#e4e4e6\" : \"#1d1d1f\"),\n canvasBackground: readToken(\"--prn-bg\", dark ? \"#000000\" : \"#f5f5f7\"),\n accent: readToken(\"--prn-accent\", \"#a0d22b\"),\n };\n}\n\nexport function onThemeChange(onChange: () => void): () => void {\n if (typeof window === \"undefined\" || !window.MutationObserver) return () => {};\n const observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (m.type === \"attributes\" && m.attributeName === \"data-theme\") {\n onChange();\n return;\n }\n }\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"data-theme\"],\n });\n\n let media: MediaQueryList | undefined;\n if (window.matchMedia) {\n media = window.matchMedia(\"(prefers-color-scheme: dark)\");\n media.addEventListener?.(\"change\", onChange);\n }\n\n return () => {\n observer.disconnect();\n media?.removeEventListener?.(\"change\", onChange);\n };\n}\n","/**\n * Verlustfreies Mapping zwischen DMN-XML und dem geteilten `DmnTableModel`\n * (Spec §7) — über **dmn-moddle**, NICHT über den lossy XML-String-Patch des\n * maco-process-studio-Prototyps.\n *\n * - `parseDmnModel(xml)` liest die (per Index/ID wählbare) Decision-Table.\n * - `serializeDmnModel(model, originalXml?)` schreibt das Modell zurück und\n * bewahrt dabei alle nicht angefassten Teile des Originaldokuments\n * (weitere Decisions, DRD/DI, Imports, Annotationen anderer Tabellen).\n *\n * dmn-moddle bringt keine eigenen Typdeklarationen mit — die Moddle-Elemente\n * werden hier über schlanke lokale Interfaces typisiert (siehe `Moddle*`).\n */\n\nimport DmnModdleFactory from \"dmn-moddle\";\nimport type {\n Aggregation,\n DmnColumn,\n DmnRow,\n DmnTableModel,\n HitPolicy,\n} from \"../types\";\n\n/* ------------------------------------------------------------------ *\n * Minimal-Typisierung der dmn-moddle-Elemente (kein offizielles d.ts) *\n * ------------------------------------------------------------------ */\n\ninterface ModdleElement {\n $type: string;\n id?: string;\n [key: string]: unknown;\n}\n\ninterface ModdleFactory {\n create(type: string, attrs?: Record<string, unknown>): ModdleElement;\n}\n\ninterface ParseResult {\n rootElement: ModdleElement;\n references: unknown[];\n warnings: Error[];\n elementsById: Record<string, ModdleElement>;\n}\n\ninterface DmnModdleInstance {\n fromXML(xml: string, typeName?: string): Promise<ParseResult>;\n toXML(\n element: ModdleElement,\n options?: { format?: boolean },\n ): Promise<{ xml: string }>;\n create(type: string, attrs?: Record<string, unknown>): ModdleElement;\n}\n\ntype DmnModdleCtor = (\n packages?: unknown,\n options?: unknown,\n) => DmnModdleInstance;\n\nconst createModdle = DmnModdleFactory as unknown as DmnModdleCtor;\n\n/* ------------------------------------------------------------------ *\n * ID-Generierung (deterministisch, prefix-basiert — testfreundlich) *\n * ------------------------------------------------------------------ */\n\nlet idCounter = 0;\n\n/** Erzeugt eine stabile, gut lesbare ID. Nur für neu angelegte Elemente. */\nexport function makeId(prefix: string): string {\n idCounter += 1;\n return `${prefix}_${Date.now().toString(36)}_${idCounter.toString(36)}`;\n}\n\n/* ------------------------------------------------------------------ *\n * Hilfen *\n * ------------------------------------------------------------------ */\n\nconst VALID_HIT_POLICIES: HitPolicy[] = [\n \"UNIQUE\",\n \"FIRST\",\n \"PRIORITY\",\n \"ANY\",\n \"COLLECT\",\n \"RULE ORDER\",\n \"OUTPUT ORDER\",\n];\n\nconst VALID_AGGREGATIONS: Aggregation[] = [\"SUM\", \"MIN\", \"MAX\", \"COUNT\"];\n\nfunction normalizeHitPolicy(value: unknown): HitPolicy {\n const v = typeof value === \"string\" ? value.toUpperCase() : \"\";\n return (VALID_HIT_POLICIES as string[]).includes(v) ? (v as HitPolicy) : \"UNIQUE\";\n}\n\nfunction normalizeAggregation(value: unknown): Aggregation | undefined {\n const v = typeof value === \"string\" ? value.toUpperCase() : \"\";\n return (VALID_AGGREGATIONS as string[]).includes(v) ? (v as Aggregation) : undefined;\n}\n\nfunction asArray<T>(value: T[] | undefined | null): T[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction getText(el: ModdleElement | undefined | null): string {\n if (!el) return \"\";\n const t = el.text;\n return typeof t === \"string\" ? t.trim() : \"\";\n}\n\n/** Findet alle `dmn:Decision`-Elemente im Definitions-Root. */\nfunction findDecisions(definitions: ModdleElement): ModdleElement[] {\n return asArray(definitions.drgElement as ModdleElement[]).filter(\n (e) => e.$type === \"dmn:Decision\",\n );\n}\n\nfunction getDecisionTable(decision: ModdleElement): ModdleElement | undefined {\n const logic = decision.decisionLogic as ModdleElement | undefined;\n return logic && logic.$type === \"dmn:DecisionTable\" ? logic : undefined;\n}\n\nexport interface DmnDecisionRef {\n id: string;\n name: string;\n}\n\nexport interface ParseOptions {\n /** Wähle die Decision per ID; Default: erste Decision mit Table. */\n decisionId?: string;\n /** Alternativ per Index (0-basiert). */\n decisionIndex?: number;\n}\n\n/* ------------------------------------------------------------------ *\n * Parse: XML -> DmnTableModel *\n * ------------------------------------------------------------------ */\n\nfunction tableToModel(decision: ModdleElement, table: ModdleElement): DmnTableModel {\n const inputs = asArray(table.input as ModdleElement[]);\n const outputs = asArray(table.output as ModdleElement[]);\n const annotations = asArray(table.annotation as ModdleElement[]); // RuleAnnotationClause[]\n const rules = asArray(table.rule as ModdleElement[]);\n\n const inputCols: DmnColumn[] = inputs.map((input): DmnColumn => {\n const expr = input.inputExpression as ModdleElement | undefined;\n const valuesEl = input.inputValues as ModdleElement | undefined;\n const inputValues = parseUnaryTestValues(getText(valuesEl));\n return {\n id: input.id ?? makeId(\"input\"),\n label: (input.label as string) ?? \"\",\n expression: getText(expr),\n kind: \"input\",\n typeRef: (expr?.typeRef as string) ?? \"string\",\n ...(inputValues.length > 0 ? { inputValues } : {}),\n };\n });\n\n const outputCols: DmnColumn[] = outputs.map((output): DmnColumn => {\n const valuesEl = output.outputValues as ModdleElement | undefined;\n const outputValues = parseUnaryTestValues(getText(valuesEl));\n return {\n id: output.id ?? makeId(\"output\"),\n label: (output.name as string) ?? (output.label as string) ?? \"\",\n expression: (output.name as string) ?? \"\",\n kind: \"output\",\n typeRef: (output.typeRef as string) ?? \"string\",\n ...(outputValues.length > 0 ? { inputValues: outputValues } : {}),\n };\n });\n\n const columns = [...inputCols, ...outputCols];\n\n const rows: DmnRow[] = rules.map((rule): DmnRow => {\n const inputEntries = asArray(rule.inputEntry as ModdleElement[]);\n const outputEntries = asArray(rule.outputEntry as ModdleElement[]);\n const annotationEntries = asArray(rule.annotationEntry as ModdleElement[]);\n\n const cells: Record<string, string> = {};\n inputEntries.forEach((entry, i) => {\n const col = inputCols[i];\n if (col) cells[col.id] = getText(entry);\n });\n outputEntries.forEach((entry, i) => {\n const col = outputCols[i];\n if (col) cells[col.id] = getText(entry);\n });\n\n // Annotation: bevorzugt erster annotationEntry, Fallback auf description.\n const annotation =\n getText(annotationEntries[0]) ||\n (typeof rule.description === \"string\" ? rule.description.trim() : \"\");\n\n return {\n id: rule.id ?? makeId(\"rule\"),\n cells,\n ...(annotation ? { annotation } : {}),\n };\n });\n\n // Annotationsspalten-Namen (RuleAnnotationClause) für verlustfreies Schreiben\n // wären hier ablesbar; das Modell hält pro Zeile genau eine Annotation.\n void annotations;\n\n return {\n id: decision.id ?? table.id ?? makeId(\"decision\"),\n name: (decision.name as string) ?? \"\",\n hitPolicy: normalizeHitPolicy(table.hitPolicy),\n ...(normalizeAggregation(table.aggregation)\n ? { aggregation: normalizeAggregation(table.aggregation)! }\n : {}),\n columns,\n rows,\n };\n}\n\n/** UnaryTests-Text (`\"A\",\"B\"`) in einzelne Werte zerlegen. */\nfunction parseUnaryTestValues(text: string): string[] {\n if (!text) return [];\n return Array.from(text.matchAll(/\"([^\"]*)\"/g), (m) => m[1] ?? \"\");\n}\n\n/** Liste der editierbaren Decisions im Dokument (für Auswahl-UI). */\nexport async function listDecisions(xml: string): Promise<DmnDecisionRef[]> {\n const { rootElement } = await createModdle().fromXML(xml);\n return findDecisions(rootElement)\n .filter((d) => getDecisionTable(d))\n .map((d) => ({ id: d.id ?? \"\", name: (d.name as string) ?? \"\" }));\n}\n\n/**\n * Parst DMN-XML zu einem `DmnTableModel`. Wirft, wenn keine Decision-Table\n * gefunden wird oder das XML ungültig ist.\n */\nexport async function parseDmnModel(\n xml: string,\n options: ParseOptions = {},\n): Promise<DmnTableModel> {\n let result: ParseResult;\n try {\n result = await createModdle().fromXML(xml);\n } catch (e) {\n throw new Error(`DMN-Parsing fehlgeschlagen: ${(e as Error).message}`);\n }\n\n const decisions = findDecisions(result.rootElement);\n if (decisions.length === 0) {\n throw new Error(\"Keine dmn:Decision im Dokument gefunden\");\n }\n\n let decision: ModdleElement | undefined;\n if (options.decisionId) {\n decision = decisions.find((d) => d.id === options.decisionId);\n } else if (typeof options.decisionIndex === \"number\") {\n decision = decisions[options.decisionIndex];\n }\n if (!decision) {\n decision = decisions.find((d) => getDecisionTable(d)) ?? decisions[0];\n }\n if (!decision) {\n throw new Error(\"Decision nicht gefunden\");\n }\n\n const table = getDecisionTable(decision);\n if (!table) {\n throw new Error(\n `Decision \"${decision.id ?? \"\"}\" enthält keine dmn:DecisionTable`,\n );\n }\n\n return tableToModel(decision, table);\n}\n\n/* ------------------------------------------------------------------ *\n * Serialize: DmnTableModel -> XML *\n * ------------------------------------------------------------------ */\n\nfunction buildUnaryTests(\n moddle: DmnModdleInstance,\n text: string,\n): ModdleElement {\n return moddle.create(\"dmn:UnaryTests\", { text });\n}\n\nfunction buildLiteralExpression(\n moddle: DmnModdleInstance,\n text: string,\n id: string,\n): ModdleElement {\n return moddle.create(\"dmn:LiteralExpression\", { id, text });\n}\n\n/** Erzeugt die Input/Output-Clauses und Rules am Table-Element neu. */\nfunction applyModelToTable(\n moddle: DmnModdleInstance,\n decision: ModdleElement,\n table: ModdleElement,\n model: DmnTableModel,\n): void {\n const inputCols = model.columns.filter((c) => c.kind === \"input\");\n const outputCols = model.columns.filter((c) => c.kind === \"output\");\n\n decision.name = model.name;\n table.hitPolicy = model.hitPolicy;\n if (model.hitPolicy === \"COLLECT\" && model.aggregation) {\n table.aggregation = model.aggregation;\n } else {\n delete table.aggregation;\n }\n\n // Input-Clauses\n table.input = inputCols.map((col) => {\n const inputExpression = buildLiteralExpression(\n moddle,\n col.expression,\n `${col.id}_expr`,\n );\n inputExpression.typeRef = col.typeRef;\n const input = moddle.create(\"dmn:InputClause\", {\n id: col.id,\n label: col.label,\n inputExpression,\n });\n if (col.inputValues && col.inputValues.length > 0) {\n input.inputValues = buildUnaryTests(\n moddle,\n col.inputValues.map((v) => `\"${v}\"`).join(\",\"),\n );\n }\n return input;\n });\n\n // Output-Clauses\n table.output = outputCols.map((col) => {\n const output = moddle.create(\"dmn:OutputClause\", {\n id: col.id,\n name: col.expression || col.label,\n typeRef: col.typeRef,\n });\n if (col.label && col.label !== col.expression) {\n output.label = col.label;\n }\n if (col.inputValues && col.inputValues.length > 0) {\n output.outputValues = buildUnaryTests(\n moddle,\n col.inputValues.map((v) => `\"${v}\"`).join(\",\"),\n );\n }\n return output;\n });\n\n // Annotation-Clause: genau eine, wenn irgendeine Zeile eine Annotation hat.\n const hasAnnotations = model.rows.some((r) => (r.annotation ?? \"\").length > 0);\n table.annotation = hasAnnotations\n ? [moddle.create(\"dmn:RuleAnnotationClause\", { name: \"Annotation\" })]\n : [];\n\n // Rules\n table.rule = model.rows.map((row) => {\n const inputEntry = inputCols.map((col) =>\n buildUnaryTests(moddle, row.cells[col.id] ?? \"\"),\n );\n const outputEntry = outputCols.map((col, i) =>\n buildLiteralExpression(\n moddle,\n row.cells[col.id] ?? \"\",\n `${row.id}_out_${i}`,\n ),\n );\n const rule = moddle.create(\"dmn:DecisionRule\", {\n id: row.id,\n inputEntry,\n outputEntry,\n });\n if (hasAnnotations) {\n rule.annotationEntry = [\n moddle.create(\"dmn:RuleAnnotation\", { text: row.annotation ?? \"\" }),\n ];\n }\n return rule;\n });\n}\n\n/**\n * Serialisiert ein `DmnTableModel` zurück nach DMN-XML.\n *\n * Wird `originalXml` übergeben, wird dessen Moddle-Baum wiederverwendet — so\n * bleiben weitere Decisions, DRD/DI, Imports etc. verlustfrei erhalten und nur\n * die Ziel-Table (per `model.id`) wird ersetzt. Ohne `originalXml` wird ein\n * minimales, valides Definitions-Dokument neu erzeugt.\n */\nexport async function serializeDmnModel(\n model: DmnTableModel,\n originalXml?: string,\n): Promise<string> {\n const moddle = createModdle();\n\n if (originalXml) {\n const { rootElement } = await moddle.fromXML(originalXml);\n const decisions = findDecisions(rootElement);\n const decision =\n decisions.find((d) => d.id === model.id) ??\n decisions.find((d) => getDecisionTable(d)) ??\n decisions[0];\n if (!decision) {\n throw new Error(\"Keine Decision zum Schreiben gefunden\");\n }\n let table = getDecisionTable(decision);\n if (!table) {\n table = moddle.create(\"dmn:DecisionTable\", { id: `${decision.id}_table` });\n decision.decisionLogic = table;\n }\n applyModelToTable(moddle, decision, table, model);\n const { xml } = await moddle.toXML(rootElement, { format: true });\n return xml;\n }\n\n // Neuaufbau eines minimalen Dokuments.\n const table = moddle.create(\"dmn:DecisionTable\", {\n id: `${model.id}_table`,\n });\n const decision = moddle.create(\"dmn:Decision\", {\n id: model.id,\n name: model.name,\n decisionLogic: table,\n });\n applyModelToTable(moddle, decision, table, model);\n\n const definitions = moddle.create(\"dmn:Definitions\", {\n id: `Definitions_${model.id}`,\n name: model.name,\n namespace: \"http://camunda.org/schema/1.0/dmn\",\n drgElement: [decision],\n });\n\n const { xml } = await moddle.toXML(definitions, { format: true });\n return xml;\n}\n\n/* ------------------------------------------------------------------ *\n * Reine Modell-Mutationen (framework-frei, gut testbar) *\n * ------------------------------------------------------------------ */\n\n/** Leere Zelle für eine neue Zeile. */\nexport function emptyRow(model: DmnTableModel): DmnRow {\n const cells: Record<string, string> = {};\n for (const col of model.columns) cells[col.id] = \"\";\n return { id: makeId(\"rule\"), cells };\n}\n\nexport function addRow(model: DmnTableModel, at?: number): DmnTableModel {\n const row = emptyRow(model);\n const rows = [...model.rows];\n rows.splice(at ?? rows.length, 0, row);\n return { ...model, rows };\n}\n\nexport function deleteRow(model: DmnTableModel, rowId: string): DmnTableModel {\n return { ...model, rows: model.rows.filter((r) => r.id !== rowId) };\n}\n\nexport function moveRow(\n model: DmnTableModel,\n rowId: string,\n direction: -1 | 1,\n): DmnTableModel {\n const idx = model.rows.findIndex((r) => r.id === rowId);\n if (idx < 0) return model;\n const target = idx + direction;\n if (target < 0 || target >= model.rows.length) return model;\n const rows = [...model.rows];\n const [moved] = rows.splice(idx, 1);\n rows.splice(target, 0, moved!);\n return { ...model, rows };\n}\n\nexport function updateCell(\n model: DmnTableModel,\n rowId: string,\n colId: string,\n value: string,\n): DmnTableModel {\n return {\n ...model,\n rows: model.rows.map((r) =>\n r.id === rowId ? { ...r, cells: { ...r.cells, [colId]: value } } : r,\n ),\n };\n}\n\nexport function updateAnnotation(\n model: DmnTableModel,\n rowId: string,\n annotation: string,\n): DmnTableModel {\n return {\n ...model,\n rows: model.rows.map((r) =>\n r.id === rowId ? { ...r, annotation } : r,\n ),\n };\n}\n\nexport function setHitPolicy(\n model: DmnTableModel,\n hitPolicy: HitPolicy,\n aggregation?: Aggregation,\n): DmnTableModel {\n return {\n ...model,\n hitPolicy,\n ...(hitPolicy === \"COLLECT\" && aggregation\n ? { aggregation }\n : { aggregation: undefined }),\n };\n}\n\n/** Neue Spalte (Input oder Output) am Ende ihrer Gruppe einfügen. */\nexport function addColumn(\n model: DmnTableModel,\n kind: DmnColumn[\"kind\"],\n partial?: Partial<Omit<DmnColumn, \"id\" | \"kind\">>,\n): DmnTableModel {\n const id = makeId(kind);\n const col: DmnColumn = {\n id,\n label: partial?.label ?? (kind === \"input\" ? \"Neuer Input\" : \"Neuer Output\"),\n expression: partial?.expression ?? \"\",\n kind,\n typeRef: partial?.typeRef ?? \"string\",\n ...(partial?.inputValues ? { inputValues: partial.inputValues } : {}),\n };\n // Inputs vor Outputs einsortieren.\n const columns = [...model.columns];\n if (kind === \"input\") {\n const lastInput = columns.map((c) => c.kind).lastIndexOf(\"input\");\n columns.splice(lastInput + 1, 0, col);\n } else {\n columns.push(col);\n }\n const rows = model.rows.map((r) => ({\n ...r,\n cells: { ...r.cells, [id]: \"\" },\n }));\n return { ...model, columns, rows };\n}\n\nexport function updateColumn(\n model: DmnTableModel,\n colId: string,\n patch: Partial<Omit<DmnColumn, \"id\" | \"kind\">>,\n): DmnTableModel {\n return {\n ...model,\n columns: model.columns.map((c) =>\n c.id === colId ? { ...c, ...patch } : c,\n ),\n };\n}\n\nexport function deleteColumn(model: DmnTableModel, colId: string): DmnTableModel {\n const columns = model.columns.filter((c) => c.id !== colId);\n const rows = model.rows.map((r) => {\n const { [colId]: _removed, ...cells } = r.cells;\n return { ...r, cells };\n });\n return { ...model, columns, rows };\n}\n","/**\n * Heuristischer FEEL-Linter (regex-basiert) — als **nicht-blockierender Hinweis**\n * gedacht (Spec §7): valide FEEL außerhalb der Whitelist wird abgelehnt. Ein echter\n * FEEL-Parser (`feelin`) ist eine spätere Option. Portiert aus\n * maco-process-studio `useFeelLinter.ts`, aber framework-frei und gegen den\n * geteilten `DmnColumn`-Vertrag.\n */\n\nimport type { DmnColumn, FeelLintResult } from \"../types\";\n\n/** Erkannter FEEL-Werttyp (für Token-Färbung im Editor). */\nexport type FeelValueType =\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"string list\"\n | \"number range\"\n | \"expression\"\n | \"any\";\n\n/** Lint-Ergebnis mit erkanntem Typ (erweitert `FeelLintResult`). */\nexport interface FeelLintTypedResult extends FeelLintResult {\n type?: FeelValueType;\n}\n\nconst EMPTY_RE = /^(-|)$/;\nconst STRING_RE = /^\"[^\"]*\"$/;\nconst STRING_LIST_RE = /^\"[^\"]*\"(\\s*,\\s*\"[^\"]*\")+$/;\nconst NUMBER_RE = /^-?\\d+(\\.\\d+)?$/;\nconst NUMBER_RANGE_RE = /^[([]\\s*-?\\d+(\\.\\d+)?\\s*\\.\\.\\s*-?\\d+(\\.\\d+)?\\s*[)\\]]$/;\nconst COMPARISON_RE = /^(>=|<=|>|<)\\s*-?\\d+(\\.\\d+)?$/;\nconst BOOLEAN_RE = /^(true|false)$/i;\nconst NOT_RE = /^not\\s*\\(.+\\)$/;\nconst CONTAINS_RE = /^contains\\s*\\(.+\\)$/;\nconst FUNCTION_RE = /^[a-zA-Z_][a-zA-Z0-9_]*\\s*\\(.*\\)$/;\n\n/** Erlaubte Werte aus einem `inputValues`-String der Form `\"A\",\"B\"` parsen. */\nexport function parseInputValues(inputValues: string): string[] {\n const matches = inputValues.matchAll(/\"([^\"]*)\"/g);\n return Array.from(matches, (m) => m[1] ?? \"\");\n}\n\n/**\n * Prüft einen FEEL-Zellausdruck heuristisch. `column` liefert (optional) die\n * erlaubten `inputValues` für eine Whitelist-Validierung.\n */\nexport function lintFeel(\n expr: string,\n column?: Pick<DmnColumn, \"inputValues\">,\n): FeelLintTypedResult {\n const trimmed = expr.trim();\n const allowed =\n column?.inputValues && column.inputValues.length > 0\n ? column.inputValues.flatMap(parseInputValues)\n : [];\n\n if (EMPTY_RE.test(trimmed)) {\n return { valid: true, type: \"any\" };\n }\n\n if (STRING_LIST_RE.test(trimmed)) {\n if (allowed.length > 0) {\n const vals = trimmed.split(\",\").map((v) => v.trim().replace(/^\"|\"$/g, \"\"));\n const invalid = vals.filter((v) => !allowed.includes(v));\n if (invalid.length > 0) {\n return {\n valid: false,\n message: `Nicht erlaubt: ${invalid.join(\", \")}`,\n type: \"string list\",\n };\n }\n }\n return { valid: true, type: \"string list\" };\n }\n\n if (STRING_RE.test(trimmed)) {\n if (allowed.length > 0) {\n const val = trimmed.replace(/^\"|\"$/g, \"\");\n if (!allowed.includes(val)) {\n return {\n valid: false,\n message: `\"${val}\" ist nicht in den erlaubten Werten`,\n type: \"string\",\n };\n }\n }\n return { valid: true, type: \"string\" };\n }\n\n if (NUMBER_RANGE_RE.test(trimmed)) {\n return { valid: true, type: \"number range\" };\n }\n\n if (COMPARISON_RE.test(trimmed)) {\n return { valid: true, type: \"number range\" };\n }\n\n if (NUMBER_RE.test(trimmed)) {\n return { valid: true, type: \"number\" };\n }\n\n if (BOOLEAN_RE.test(trimmed)) {\n return { valid: true, type: \"boolean\" };\n }\n\n if (NOT_RE.test(trimmed) || CONTAINS_RE.test(trimmed) || FUNCTION_RE.test(trimmed)) {\n return { valid: true, type: \"expression\" };\n }\n\n return { valid: false, message: `Unbekannter FEEL-Ausdruck: \"${trimmed}\"` };\n}\n","/**\n * ⑤ DmnTableEditor — einstiegsfreundliche Entscheidungstabelle auf prince-ui\n * `AnalyticalTable` mit Inline-Edit, Spaltenverwaltung, FEEL-Editor (Modal,\n * Live-Lint) und verlustfreier dmn-moddle-Serialisierung.\n *\n * Persistenz nur über Callbacks (`value`/`defaultValue` (XML) + `onChange` +\n * `onSave(xml)`). Domänen-Erweiterungen (z. B. Prüfi-Autocomplete) über den\n * optionalen `cellPlugins`-Slot — Default ohne MaCo-Abhängigkeit.\n */\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport {\n AnalyticalTable,\n type AnalyticalColumn,\n Button,\n Select,\n SelectItem,\n TextField,\n Modal,\n} from \"@conuti-das/prince-ui\";\nimport type {\n Aggregation,\n DmnCellPlugin,\n DmnColumn,\n DmnRow,\n DmnTableModel,\n HitPolicy,\n} from \"../types\";\nimport {\n parseDmnModel,\n serializeDmnModel,\n addColumn as addColumnOp,\n addRow as addRowOp,\n deleteColumn as deleteColumnOp,\n deleteRow as deleteRowOp,\n moveRow as moveRowOp,\n setHitPolicy as setHitPolicyOp,\n updateAnnotation as updateAnnotationOp,\n updateCell as updateCellOp,\n updateColumn as updateColumnOp,\n} from \"../model/dmn-model\";\nimport { lintFeel, type FeelLintTypedResult } from \"../model/feel-linter\";\nimport \"./DmnTableEditor.css\";\n\nconst HIT_POLICIES: HitPolicy[] = [\n \"UNIQUE\",\n \"FIRST\",\n \"PRIORITY\",\n \"ANY\",\n \"COLLECT\",\n \"RULE ORDER\",\n \"OUTPUT ORDER\",\n];\nconst AGGREGATIONS: Aggregation[] = [\"SUM\", \"MIN\", \"MAX\", \"COUNT\"];\nconst TYPE_REFS = [\"string\", \"number\", \"boolean\", \"date\"];\n\nconst FEEL_SNIPPETS = [\n 'not(\"X\")',\n \"[1..100]\",\n '>= 0',\n '\"Ja\",\"Nein\"',\n 'date(\"2026-01-01\")',\n];\n\nexport interface DmnTableEditorProps {\n /** Controlled DMN-XML. */\n value?: string;\n /** Uncontrolled Start-XML. */\n defaultValue?: string;\n /** Wird bei jeder Modelländerung mit serialisiertem XML aufgerufen. */\n onChange?: (xml: string) => void;\n /** ⌘S / Speichern-Button. */\n onSave?: (xml: string) => void | Promise<void>;\n /** Wählt die zu editierende Decision (Default: erste mit Table). */\n decisionId?: string;\n /** Anzeigename (z. B. Prüfprozess-Code). */\n title?: ReactNode;\n /** Untertitel/Metadaten. */\n subtitle?: ReactNode;\n /** Umschalten zum Experten-Modus (⑥). */\n onSwitchToExpert?: () => void;\n /** Optionale Zell-Plugins (z. B. Prüfi-Autocomplete). Default: leer. */\n cellPlugins?: DmnCellPlugin[];\n /** Zusätzliche Toolbar-Actions (z. B. KI-Fix). */\n actionsSlot?: ReactNode;\n /** Schreibschutz. */\n readOnly?: boolean;\n className?: string;\n}\n\ninterface EditingCell {\n rowId: string;\n colId: string;\n}\n\ninterface FeelState {\n rowId: string;\n colId: string;\n column: DmnColumn;\n value: string;\n}\n\ninterface RowView {\n row: DmnRow;\n index: number;\n}\n\n/* ------------------------------------------------------------------ */\n\nexport function DmnTableEditor({\n value,\n defaultValue,\n onChange,\n onSave,\n decisionId,\n title,\n subtitle,\n onSwitchToExpert,\n cellPlugins = [],\n actionsSlot,\n readOnly = false,\n className,\n}: DmnTableEditorProps) {\n const isControlled = value !== undefined;\n const sourceXml = isControlled ? value : defaultValue;\n\n const [model, setModel] = useState<DmnTableModel | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [saving, setSaving] = useState(false);\n const [selectedRowId, setSelectedRowId] = useState<string | null>(null);\n const [editing, setEditing] = useState<EditingCell | null>(null);\n const [feel, setFeel] = useState<FeelState | null>(null);\n const [columnDialog, setColumnDialog] = useState<string | null>(null);\n const [addColumnDialog, setAddColumnDialog] = useState<DmnColumn[\"kind\"] | null>(\n null,\n );\n\n // Original-XML für verlustfreie Serialisierung (bewahrt andere Decisions/DI).\n const originalXmlRef = useRef<string | undefined>(sourceXml);\n\n /* --- Parse Source -> Model --- */\n useEffect(() => {\n let cancelled = false;\n if (!sourceXml) {\n setModel(null);\n setError(null);\n return;\n }\n originalXmlRef.current = sourceXml;\n parseDmnModel(sourceXml, decisionId ? { decisionId } : {})\n .then((m) => {\n if (!cancelled) {\n setModel(m);\n setError(null);\n }\n })\n .catch((e: Error) => {\n if (!cancelled) {\n setError(e.message);\n setModel(null);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [sourceXml, decisionId]);\n\n /* --- Modelländerung -> onChange(xml) --- */\n const commitModel = useCallback(\n (next: DmnTableModel) => {\n setModel(next);\n if (onChange) {\n void serializeDmnModel(next, originalXmlRef.current).then((xml) => {\n // Folge-Schreiboperationen behalten dasselbe Originaldokument.\n originalXmlRef.current = xml;\n onChange(xml);\n });\n }\n },\n [onChange],\n );\n\n /* --- Lint --- */\n const lintMap = useMemo(() => {\n const map: Record<string, FeelLintTypedResult> = {};\n if (!model) return map;\n for (const row of model.rows) {\n for (const col of model.columns) {\n map[`${row.id}:${col.id}`] = lintFeel(row.cells[col.id] ?? \"\", col);\n }\n }\n return map;\n }, [model]);\n\n const errorCount = useMemo(\n () => Object.values(lintMap).filter((r) => !r.valid).length,\n [lintMap],\n );\n\n /* --- Save --- */\n const handleSave = useCallback(async () => {\n if (!model || !onSave || readOnly) return;\n setSaving(true);\n try {\n const xml = await serializeDmnModel(model, originalXmlRef.current);\n originalXmlRef.current = xml;\n await onSave(xml);\n } catch (e) {\n setError((e as Error).message);\n } finally {\n setSaving(false);\n }\n }, [model, onSave, readOnly]);\n\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"s\") {\n e.preventDefault();\n void handleSave();\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [handleSave]);\n\n /* --- Cell-Ops --- */\n const setCell = useCallback(\n (rowId: string, colId: string, val: string) => {\n if (!model) return;\n commitModel(updateCellOp(model, rowId, colId, val));\n },\n [model, commitModel],\n );\n\n const findPlugin = useCallback(\n (col: DmnColumn) => cellPlugins.find((p) => p.matches(col)),\n [cellPlugins],\n );\n\n /* --- Spalten als AnalyticalTable-Columns --- */\n const columns = useMemo<AnalyticalColumn<RowView>[]>(() => {\n if (!model) return [];\n const idxCol: AnalyticalColumn<RowView> = {\n id: \"__index\",\n header: \"#\",\n width: \"44px\",\n align: \"end\",\n sortable: false,\n cellRender: ({ index }) => <span className=\"prn-dmn-index\">{index + 1}</span>,\n };\n\n const dataCols: AnalyticalColumn<RowView>[] = model.columns.map((col) => ({\n id: col.id,\n sortable: false,\n header: (\n <ColumnHeader\n column={col}\n readOnly={readOnly}\n onEdit={() => setColumnDialog(col.id)}\n onRename={(label) => commitModel(updateColumnOp(model, col.id, { label }))}\n />\n ),\n cellRender: ({ row }) => {\n const cellVal = row.cells[col.id] ?? \"\";\n const lint = lintMap[`${row.id}:${col.id}`];\n const isEditing =\n editing?.rowId === row.id && editing?.colId === col.id;\n const plugin = findPlugin(col);\n\n if (isEditing && !readOnly) {\n if (plugin) {\n return plugin.renderEditor({\n value: cellVal,\n onChange: (next) => setCell(row.id, col.id, next),\n onCommit: () => setEditing(null),\n onCancel: () => setEditing(null),\n column: col,\n });\n }\n return (\n <InlineInput\n value={cellVal}\n onCommit={(v) => {\n setCell(row.id, col.id, v);\n setEditing(null);\n }}\n onCancel={() => setEditing(null)}\n />\n );\n }\n\n return (\n <div\n className=\"prn-dmn-cell\"\n data-invalid={lint && !lint.valid ? \"true\" : undefined}\n title={lint && !lint.valid ? lint.message : undefined}\n onClick={() => {\n if (!readOnly) setEditing({ rowId: row.id, colId: col.id });\n }}\n onDoubleClick={() => {\n if (!readOnly)\n setFeel({\n rowId: row.id,\n colId: col.id,\n column: col,\n value: cellVal,\n });\n }}\n >\n {cellVal ? (\n <span>{cellVal}</span>\n ) : (\n <span className=\"prn-dmn-cell__empty\">–</span>\n )}\n {lint && !lint.valid && <span className=\"prn-dmn-cell__warn\">⚠</span>}\n </div>\n );\n },\n }));\n\n const annotationCol: AnalyticalColumn<RowView> = {\n id: \"__annotation\",\n header: \"Annotation\",\n sortable: false,\n minWidth: 140,\n cellRender: ({ row }) => {\n const isEditing =\n editing?.rowId === row.id && editing?.colId === \"__annotation\";\n if (isEditing && !readOnly) {\n return (\n <InlineInput\n value={row.annotation ?? \"\"}\n onCommit={(v) => {\n if (model) commitModel(updateAnnotationOp(model, row.id, v));\n setEditing(null);\n }}\n onCancel={() => setEditing(null)}\n />\n );\n }\n return (\n <div\n className=\"prn-dmn-cell\"\n onClick={() => {\n if (!readOnly)\n setEditing({ rowId: row.id, colId: \"__annotation\" });\n }}\n >\n {row.annotation ? (\n <span>{row.annotation}</span>\n ) : (\n <span className=\"prn-dmn-cell__empty\">–</span>\n )}\n </div>\n );\n },\n };\n\n return [idxCol, ...dataCols, annotationCol];\n // setColumnDialog ist stabil (useState-Setter); model/lint/editing treiben.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [model, lintMap, editing, readOnly, findPlugin, setCell, commitModel]);\n\n const rowsView = useMemo<RowView[]>(\n () => (model ? model.rows.map((row, index) => ({ row, index })) : []),\n [model],\n );\n\n /* --- Render --- */\n if (error) {\n return (\n <div className={cls(\"prn-dmn-table\", className)}>\n <div className=\"prn-dmn-lint\" data-tone=\"negative\">\n Fehler: {error}\n </div>\n </div>\n );\n }\n\n if (!model) {\n return (\n <div className={cls(\"prn-dmn-table\", className)}>\n <div className=\"prn-dmn-lint\">Kein DMN-Dokument geladen.</div>\n </div>\n );\n }\n\n return (\n <div className={cls(\"prn-dmn-table\", className)} data-prn-dmn-table>\n {/* Toolbar */}\n <div className=\"prn-dmn-toolbar\">\n <div className=\"prn-dmn-title\">\n {title && <span className=\"prn-dmn-title__name\">{title}</span>}\n {subtitle && <span className=\"prn-dmn-title__meta\">{subtitle}</span>}\n {!title && (\n <InlineEditableText\n className=\"prn-dmn-title__name\"\n value={model.name || model.id}\n readOnly={readOnly}\n ariaLabel=\"Decision-Name bearbeiten\"\n onCommit={(v) => commitModel({ ...model, name: v })}\n />\n )}\n </div>\n\n <div className=\"prn-dmn-toolbar-group\">\n <Select\n aria-label=\"Hit-Policy\"\n selectedKey={model.hitPolicy}\n isDisabled={readOnly}\n onSelectionChange={(key) =>\n commitModel(\n setHitPolicyOp(model, key as HitPolicy, model.aggregation),\n )\n }\n >\n {HIT_POLICIES.map((p) => (\n <SelectItem key={p} id={p} textValue={p}>\n {p}\n </SelectItem>\n ))}\n </Select>\n {model.hitPolicy === \"COLLECT\" && (\n <Select\n aria-label=\"Aggregation\"\n selectedKey={model.aggregation ?? \"SUM\"}\n isDisabled={readOnly}\n onSelectionChange={(key) =>\n commitModel(\n setHitPolicyOp(model, \"COLLECT\", key as Aggregation),\n )\n }\n >\n {AGGREGATIONS.map((a) => (\n <SelectItem key={a} id={a} textValue={a}>\n {a}\n </SelectItem>\n ))}\n </Select>\n )}\n </div>\n\n <span className=\"prn-dmn-spacer\" />\n\n <div className=\"prn-dmn-toolbar-group\">\n {actionsSlot}\n {onSwitchToExpert && (\n <Button variant=\"plain\" onPress={onSwitchToExpert}>\n Experte\n </Button>\n )}\n {onSave && (\n <Button\n variant=\"filled\"\n isDisabled={saving || readOnly}\n onPress={() => void handleSave()}\n >\n {saving ? \"Speichern…\" : \"Speichern\"}\n </Button>\n )}\n </div>\n </div>\n\n {/* Lint-Banner */}\n <div\n className=\"prn-dmn-lint\"\n data-tone={errorCount === 0 ? \"positive\" : \"negative\"}\n role=\"status\"\n >\n {errorCount === 0\n ? `✓ Alle ${model.rows.length} Regeln valide`\n : `⚠ ${errorCount} ungültige Zelle(n)`}\n </div>\n\n {/* Sub-Toolbar: Spalten & Regeln */}\n {!readOnly && (\n <div className=\"prn-dmn-toolbar prn-dmn-toolbar--sub\">\n <span className=\"prn-dmn-title__meta\">\n Regeln ({model.rows.length})\n </span>\n <span className=\"prn-dmn-spacer\" />\n <div className=\"prn-dmn-toolbar-group\">\n <Button variant=\"plain\" onPress={() => setAddColumnDialog(\"input\")}>\n + Input\n </Button>\n <Button variant=\"plain\" onPress={() => setAddColumnDialog(\"output\")}>\n + Output\n </Button>\n <Button variant=\"tinted\" onPress={() => commitModel(addRowOp(model))}>\n + Zeile\n </Button>\n <Button\n variant=\"plain\"\n isDisabled={!selectedRowId}\n onPress={() => {\n if (selectedRowId) {\n commitModel(moveRowOp(model, selectedRowId, -1));\n }\n }}\n >\n ↑\n </Button>\n <Button\n variant=\"plain\"\n isDisabled={!selectedRowId}\n onPress={() => {\n if (selectedRowId) {\n commitModel(moveRowOp(model, selectedRowId, 1));\n }\n }}\n >\n ↓\n </Button>\n <Button\n variant=\"plain\"\n isDisabled={!selectedRowId}\n onPress={() => {\n if (selectedRowId) {\n commitModel(deleteRowOp(model, selectedRowId));\n setSelectedRowId(null);\n }\n }}\n >\n Zeile löschen\n </Button>\n </div>\n </div>\n )}\n\n {/* Tabelle */}\n <div className=\"prn-dmn-table__body\">\n <AnalyticalTable<RowView>\n data={rowsView}\n columns={columns}\n getRowId={(r) => r.row.id}\n selectionMode={readOnly ? \"none\" : \"single\"}\n selectionBehavior=\"rowSelector\"\n selectedKeys={new Set(selectedRowId ? [selectedRowId] : [])}\n onSelectionChange={(keys) => {\n const arr = Array.from(keys as Set<string>);\n setSelectedRowId(arr[0] ?? null);\n }}\n />\n </div>\n\n {/* FEEL-Editor-Modal */}\n {feel && (\n <Modal\n isOpen\n title={`FEEL — ${feel.column.label || feel.column.expression}`}\n onOpenChange={(open) => {\n if (!open) setFeel(null);\n }}\n >\n <FeelEditor\n initial={feel.value}\n column={feel.column}\n onCancel={() => setFeel(null)}\n onApply={(v) => {\n setCell(feel.rowId, feel.colId, v);\n setFeel(null);\n }}\n />\n </Modal>\n )}\n\n {/* Spalte-bearbeiten-Modal */}\n {columnDialog && (\n <ColumnDialog\n column={model.columns.find((c) => c.id === columnDialog)!}\n onClose={() => setColumnDialog(null)}\n onApply={(patch) => {\n commitModel(updateColumnOp(model, columnDialog, patch));\n setColumnDialog(null);\n }}\n onDelete={() => {\n commitModel(deleteColumnOp(model, columnDialog));\n setColumnDialog(null);\n }}\n />\n )}\n\n {/* Spalte-hinzufügen-Modal */}\n {addColumnDialog && (\n <ColumnDialog\n kind={addColumnDialog}\n onClose={() => setAddColumnDialog(null)}\n onApply={(patch) => {\n commitModel(addColumnOp(model, addColumnDialog, patch));\n setAddColumnDialog(null);\n }}\n />\n )}\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ *\n * Subkomponenten *\n * ------------------------------------------------------------------ */\n\nfunction ColumnHeader({\n column,\n readOnly,\n onEdit,\n onRename,\n}: {\n column: DmnColumn;\n readOnly: boolean;\n onEdit: () => void;\n onRename: (label: string) => void;\n}) {\n return (\n <div className=\"prn-dmn-colhead\" data-kind={column.kind}>\n <div className=\"prn-dmn-colhead__top\">\n <span className=\"prn-dmn-colhead__kind\">\n {column.kind === \"input\" ? \"Input\" : \"Output\"} · {column.typeRef}\n </span>\n {!readOnly && (\n <Button\n className=\"prn-dmn-colhead__edit\"\n variant=\"plain\"\n onPress={onEdit}\n aria-label=\"Spalte bearbeiten\"\n >\n ⚙\n </Button>\n )}\n </div>\n <InlineEditableText\n className=\"prn-dmn-colhead__label\"\n value={column.label || column.expression}\n readOnly={readOnly}\n ariaLabel=\"Spaltentitel bearbeiten\"\n onCommit={onRename}\n />\n {column.label && column.expression && column.label !== column.expression && (\n <span className=\"prn-dmn-colhead__expr\">{column.expression}</span>\n )}\n </div>\n );\n}\n\nfunction InlineInput({\n value,\n onCommit,\n onCancel,\n}: {\n value: string;\n onCommit: (v: string) => void;\n onCancel: () => void;\n}) {\n const [v, setV] = useState(value);\n const ref = useRef<HTMLInputElement>(null);\n const committed = useRef(false);\n useEffect(() => {\n ref.current?.focus();\n ref.current?.select();\n }, []);\n const commit = () => {\n if (committed.current) return;\n committed.current = true;\n onCommit(v);\n };\n return (\n <input\n ref={ref}\n className=\"prn-dmn-cell__input\"\n value={v}\n onChange={(e) => setV(e.target.value)}\n onBlur={commit}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \"Tab\") {\n e.preventDefault();\n commit();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n committed.current = true;\n onCancel();\n }\n }}\n />\n );\n}\n\nfunction FeelEditor({\n initial,\n column,\n onApply,\n onCancel,\n}: {\n initial: string;\n column: DmnColumn;\n onApply: (v: string) => void;\n onCancel: () => void;\n}) {\n const [text, setText] = useState(initial);\n const lint = lintFeel(text, column);\n return (\n <div className=\"prn-dmn-feel\">\n <textarea\n autoFocus\n className=\"prn-dmn-feel__editor\"\n data-valid={lint.valid ? \"true\" : \"false\"}\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey) && lint.valid) {\n onApply(text);\n }\n if (e.key === \"Escape\") onCancel();\n }}\n />\n <div className=\"prn-dmn-feel__status\" data-valid={lint.valid ? \"true\" : \"false\"}>\n <span>{lint.valid ? \"✓ Valide\" : \"✗ Ungültig\"}</span>\n {lint.message && <span>{lint.message}</span>}\n {lint.type && <span className=\"prn-dmn-feel__type\">{lint.type}</span>}\n </div>\n <div className=\"prn-dmn-feel__snippets\">\n {FEEL_SNIPPETS.map((s) => (\n <Button key={s} variant=\"plain\" onPress={() => setText(s)}>\n {s}\n </Button>\n ))}\n </div>\n {column.inputValues && column.inputValues.length > 0 && (\n <div className=\"prn-dmn-feel__hint\">\n Erlaubte Werte:{\" \"}\n <code>{column.inputValues.map((v) => `\"${v}\"`).join(\", \")}</code>\n </div>\n )}\n <div className=\"prn-dmn-feel__footer\">\n <Button variant=\"plain\" onPress={onCancel}>\n Abbrechen\n </Button>\n <Button variant=\"filled\" isDisabled={!lint.valid} onPress={() => onApply(text)}>\n Übernehmen\n </Button>\n </div>\n </div>\n );\n}\n\nfunction ColumnDialog({\n column,\n kind,\n onApply,\n onDelete,\n onClose,\n}: {\n column?: DmnColumn;\n kind?: DmnColumn[\"kind\"];\n onApply: (patch: Partial<Omit<DmnColumn, \"id\" | \"kind\">>) => void;\n onDelete?: () => void;\n onClose: () => void;\n}) {\n const [label, setLabel] = useState(column?.label ?? \"\");\n const [expression, setExpression] = useState(column?.expression ?? \"\");\n const [typeRef, setTypeRef] = useState(column?.typeRef ?? \"string\");\n const [inputValues, setInputValues] = useState(\n (column?.inputValues ?? []).join(\", \"),\n );\n const effectiveKind = column?.kind ?? kind ?? \"input\";\n\n return (\n <Modal\n isOpen\n title={column ? \"Spalte bearbeiten\" : `Neue ${effectiveKind === \"input\" ? \"Input\" : \"Output\"}-Spalte`}\n onOpenChange={(open) => {\n if (!open) onClose();\n }}\n >\n <div className=\"prn-dmn-feel prn-dmn-feel--dialog\">\n <TextField label=\"Label\" value={label} onChange={setLabel} />\n <TextField\n label={effectiveKind === \"input\" ? \"FEEL-Expression\" : \"Output-Name\"}\n value={expression}\n onChange={setExpression}\n />\n <Select\n label=\"Typ\"\n selectedKey={typeRef}\n onSelectionChange={(k) => setTypeRef(String(k))}\n >\n {TYPE_REFS.map((t) => (\n <SelectItem key={t} id={t} textValue={t}>\n {t}\n </SelectItem>\n ))}\n </Select>\n <TextField\n label=\"Erlaubte Werte (kommagetrennt)\"\n value={inputValues}\n onChange={setInputValues}\n description='z. B. Ja, Nein'\n />\n <div className=\"prn-dmn-feel__footer\">\n {onDelete && (\n <Button variant=\"plain\" onPress={onDelete}>\n Löschen\n </Button>\n )}\n <Button variant=\"plain\" onPress={onClose}>\n Abbrechen\n </Button>\n <Button\n variant=\"filled\"\n onPress={() =>\n onApply({\n label,\n expression,\n typeRef,\n inputValues: inputValues\n .split(\",\")\n .map((v) => v.trim())\n .filter(Boolean),\n })\n }\n >\n {column ? \"Speichern\" : \"Anlegen\"}\n </Button>\n </div>\n </div>\n </Modal>\n );\n}\n\n/** Inline editierbarer Text (Klick → Input), wie der dmn-js-Experten-Editor\n * seine Header/Namen editiert. Enter/Blur speichert, Escape verwirft. */\nfunction InlineEditableText({\n value,\n onCommit,\n readOnly,\n className,\n ariaLabel,\n}: {\n value: string;\n onCommit: (v: string) => void;\n readOnly?: boolean;\n className?: string;\n ariaLabel?: string;\n}) {\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(value);\n const ref = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (editing) {\n ref.current?.focus();\n ref.current?.select();\n }\n }, [editing]);\n if (readOnly) return <span className={className}>{value}</span>;\n if (editing) {\n return (\n <input\n ref={ref}\n className={cls(className, \"prn-dmn-inline-edit\")}\n value={draft}\n aria-label={ariaLabel}\n onChange={(e) => setDraft(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n onBlur={() => {\n setEditing(false);\n if (draft !== value) onCommit(draft);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n (e.target as HTMLInputElement).blur();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n setDraft(value);\n setEditing(false);\n }\n }}\n />\n );\n }\n return (\n <button\n type=\"button\"\n className={cls(className, \"prn-dmn-inline-trigger\")}\n title=\"Zum Bearbeiten klicken\"\n onClick={(e) => {\n e.stopPropagation();\n setDraft(value);\n setEditing(true);\n }}\n >\n {value}\n </button>\n );\n}\n\nfunction cls(...parts: (string | undefined | false)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n","/**\n * ⑥ DmnExpertEditor — voller dmn-js-Funktionsumfang (DRD + decision-table +\n * literal-expression) als Experten-/Backup-Modus.\n *\n * - dmn-js wird **lazy via dynamic import** geladen (optionaler Peer).\n * - Die DRD-SVG-Ansicht wird über `getDiagramColors()` (Token-Bridge) gethemt;\n * Theme-Wechsel über `onThemeChange` → Remount (`themeTick`).\n * - Ein dmn-js-Properties-Panel wird **optional** ergänzt (nur wenn die Pakete\n * `dmn-js-properties-panel` + `@bpmn-io/properties-panel` vorhanden sind;\n * sonst stiller Verzicht — sie sind kein harter Dep dieses Pakets).\n * - Save über `saveXML({ format: true })` → `onSave(xml)` / `onChange(xml)`.\n *\n * Teilt das dmn-moddle-Fundament mit ⑤ (gemeinsames XML), damit das Umschalten\n * verlustfrei bleibt.\n */\n\nimport { useCallback, useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { Button } from \"@conuti-das/prince-ui\";\nimport type { DiagramColorScheme } from \"../types\";\nimport { getDiagramColors, onThemeChange } from \"../theme/diagram-theme\";\nimport \"./DmnExpertEditor.css\";\n\ninterface DmnModelerInstance {\n importXML(xml: string): Promise<{ warnings: unknown[] }>;\n saveXML(opts?: { format?: boolean }): Promise<{ xml: string }>;\n getActiveViewer?: () => unknown;\n on(event: string, cb: (...args: unknown[]) => void): void;\n destroy(): void;\n}\n\nexport interface DmnExpertEditorProps {\n /** Controlled DMN-XML. */\n value?: string;\n /** Uncontrolled Start-XML. */\n defaultValue?: string;\n /** Bei Änderungen (commandStack.changed) mit serialisiertem XML. */\n onChange?: (xml: string) => void;\n /** Speichern-Callback. */\n onSave?: (xml: string) => void | Promise<void>;\n /** Light/Dark-Steuerung (Default auto via data-theme). */\n colorScheme?: DiagramColorScheme;\n /** Zusätzliche Toolbar-Actions. */\n actionsSlot?: ReactNode;\n /** Umschalten zur Tabellenansicht (⑤). */\n onSwitchToTable?: () => void;\n /** Properties-Panel anzeigen, falls die Pakete vorhanden sind (Default true). */\n propertiesPanel?: boolean;\n className?: string;\n}\n\nexport function DmnExpertEditor({\n value,\n defaultValue,\n onChange,\n onSave,\n colorScheme = \"auto\",\n actionsSlot,\n onSwitchToTable,\n propertiesPanel = true,\n className,\n}: DmnExpertEditorProps) {\n const canvasRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const modelerRef = useRef<DmnModelerInstance | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [saving, setSaving] = useState(false);\n const [hasPanel, setHasPanel] = useState(false);\n const [themeTick, setThemeTick] = useState(0);\n\n const xml = value ?? defaultValue ?? \"\";\n\n // Theme-Wechsel → Remount des Modelers.\n useEffect(() => onThemeChange(() => setThemeTick((t) => t + 1)), []);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n const boot = async () => {\n const container = canvasRef.current;\n if (!container) return;\n\n // Vorherige Instanz abbauen.\n if (modelerRef.current) {\n try {\n modelerRef.current.destroy();\n } catch {\n /* ignore */\n }\n modelerRef.current = null;\n }\n\n try {\n const mod = (await import(\"dmn-js/lib/Modeler\")) as {\n default: new (opts: Record<string, unknown>) => DmnModelerInstance;\n };\n if (cancelled || !canvasRef.current) return;\n\n const colors = getDiagramColors(colorScheme);\n const rendererColors = {\n defaultFillColor: colors.defaultFillColor,\n defaultStrokeColor: colors.defaultStrokeColor,\n defaultLabelColor: colors.defaultLabelColor,\n };\n const opts: Record<string, unknown> = {\n container,\n drd: {\n drawCustom: false,\n // dmn-js-DRD injiziert seine Renderer-Config aus `config.drdRenderer`\n // (DrdRenderer.$inject = ['config.drdRenderer', …]). Der frühere Key\n // `bpmnRenderer` wurde ignoriert → Shapes blieben hartcodiert weiß/\n // schwarz. Beide Keys setzen wir zur Sicherheit.\n drdRenderer: rendererColors,\n bpmnRenderer: rendererColors,\n },\n };\n\n // Properties-Panel optional ergänzen.\n let panelLoaded = false;\n if (propertiesPanel && panelRef.current) {\n const panelMods = await loadPropertiesPanel();\n if (panelMods && !cancelled) {\n opts.drd = {\n ...(opts.drd as object),\n propertiesPanel: { parent: panelRef.current },\n additionalModules: panelMods.modules,\n };\n opts.moddleExtensions = panelMods.moddleExtensions;\n panelLoaded = true;\n }\n }\n\n const Modeler = mod.default;\n const modeler = new Modeler(opts);\n modelerRef.current = modeler;\n if (!cancelled) setHasPanel(panelLoaded);\n\n if (xml.trim()) {\n await modeler.importXML(xml);\n }\n\n // Änderungen propagieren.\n if (onChange) {\n modeler.on(\"views.changed\", () => emitChange());\n modeler.on(\"commandStack.changed\", () => emitChange());\n }\n } catch (e) {\n if (!cancelled) setError((e as Error).message);\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n\n const emitChange = () => {\n const m = modelerRef.current;\n if (!m || !onChange) return;\n m.saveXML({ format: true })\n .then(({ xml: out }) => onChange(out))\n .catch(() => {\n /* ignore transient serialize errors */\n });\n };\n\n void boot();\n return () => {\n cancelled = true;\n };\n // xml absichtlich nicht in deps: Re-Import würde Edits verwerfen. Theme-Tick\n // erzwingt Remount. Initiales xml wird beim Mount geladen.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [colorScheme, propertiesPanel, themeTick]);\n\n // Cleanup beim Unmount.\n useEffect(() => {\n return () => {\n if (modelerRef.current) {\n try {\n modelerRef.current.destroy();\n } catch {\n /* ignore */\n }\n modelerRef.current = null;\n }\n };\n }, []);\n\n const handleSave = useCallback(async () => {\n const m = modelerRef.current;\n if (!m || !onSave) return;\n setSaving(true);\n try {\n const { xml: out } = await m.saveXML({ format: true });\n await onSave(out);\n } catch (e) {\n setError((e as Error).message);\n } finally {\n setSaving(false);\n }\n }, [onSave]);\n\n return (\n <div className={cls(\"prn-dmn-expert\", className)} data-prn-dmn-expert>\n <div className=\"prn-dmn-toolbar\">\n <span className=\"prn-dmn-title__name\">DMN — Experten-Modus</span>\n <span className=\"prn-dmn-spacer\" />\n <div className=\"prn-dmn-toolbar-group\">\n {actionsSlot}\n {onSwitchToTable && (\n <Button variant=\"plain\" onPress={onSwitchToTable}>\n Tabelle\n </Button>\n )}\n {onSave && (\n <Button\n variant=\"filled\"\n isDisabled={saving || loading}\n onPress={() => void handleSave()}\n >\n {saving ? \"Speichern…\" : \"Speichern\"}\n </Button>\n )}\n </div>\n </div>\n\n {error && (\n <div className=\"prn-dmn-lint\" data-tone=\"negative\" role=\"alert\">\n Fehler: {error}\n </div>\n )}\n\n <div className=\"prn-dmn-expert__stage\">\n <div ref={canvasRef} className=\"prn-dmn-expert__canvas\" />\n <div\n ref={panelRef}\n className=\"prn-dmn-expert__panel\"\n data-visible={hasPanel ? \"true\" : \"false\"}\n />\n {loading && (\n <div className=\"prn-dmn-expert__loading\" role=\"status\">\n dmn-js wird geladen…\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ *\n * Optionales Properties-Panel — nur laden, wenn die Pakete da sind. *\n * ------------------------------------------------------------------ */\n\ninterface PanelModules {\n modules: unknown[];\n moddleExtensions: Record<string, unknown>;\n}\n\n// Indirektion über eine Variable verhindert, dass der Bundler die optionalen\n// Pakete statisch aufzulösen versucht (sie sind kein Dep dieses Pakets).\nconst dynamicImport = (spec: string): Promise<unknown> =>\n import(/* @vite-ignore */ /* webpackIgnore: true */ spec);\n\nasync function loadPropertiesPanel(): Promise<PanelModules | null> {\n try {\n const [panel, provider, moddle] = await Promise.all([\n dynamicImport(\"@bpmn-io/properties-panel\"),\n dynamicImport(\"dmn-js-properties-panel\"),\n dynamicImport(\"camunda-dmn-moddle/resources/camunda.json\").catch(\n () => null,\n ),\n ]);\n const pnl = panel as Record<string, unknown>;\n const prov = provider as Record<string, unknown>;\n const modules = [\n pnl.PropertiesPanelModule ?? panel,\n prov.DmnPropertiesPanelModule ?? prov.default,\n prov.CamundaPropertiesProviderModule,\n ].filter(Boolean);\n return {\n modules,\n moddleExtensions: moddle\n ? { camunda: (moddle as { default?: unknown }).default ?? moddle }\n : {},\n };\n } catch {\n // Pakete nicht installiert — Editor läuft ohne Panel weiter.\n return null;\n }\n}\n\nfunction cls(...parts: (string | undefined | false)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n","/**\n * DmnEditor — Umschalter zwischen ⑤ Tabelle (einstiegsfreundlich) und ⑥\n * Experten-Modus (dmn-js). Default: 'table'.\n *\n * Beide Modi teilen dasselbe DMN-XML (controlled/uncontrolled) und das\n * dmn-moddle-Fundament, damit das Umschalten verlustfrei bleibt: der eine Modus\n * schreibt per `onChange` zurück, der andere liest es beim Mount.\n */\n\nimport { useState, type ReactNode } from \"react\";\nimport { SegmentedControl, Segment } from \"@conuti-das/prince-ui\";\nimport { DmnTableEditor, type DmnTableEditorProps } from \"./table/DmnTableEditor\";\nimport { DmnExpertEditor } from \"./expert/DmnExpertEditor\";\nimport type { DiagramColorScheme } from \"./types\";\nimport \"./DmnEditor.css\";\n\nexport type DmnEditorMode = \"table\" | \"expert\";\n\nexport interface DmnEditorProps {\n value?: string;\n defaultValue?: string;\n onChange?: (xml: string) => void;\n onSave?: (xml: string) => void | Promise<void>;\n /** Start-Modus (Default 'table'). */\n defaultMode?: DmnEditorMode;\n /** Controlled-Modus. */\n mode?: DmnEditorMode;\n onModeChange?: (mode: DmnEditorMode) => void;\n colorScheme?: DiagramColorScheme;\n title?: ReactNode;\n subtitle?: ReactNode;\n cellPlugins?: DmnTableEditorProps[\"cellPlugins\"];\n actionsSlot?: ReactNode;\n decisionId?: string;\n className?: string;\n}\n\nexport function DmnEditor({\n value,\n defaultValue,\n onChange,\n onSave,\n defaultMode = \"table\",\n mode: controlledMode,\n onModeChange,\n colorScheme,\n title,\n subtitle,\n cellPlugins,\n actionsSlot,\n decisionId,\n className,\n}: DmnEditorProps) {\n const [internalMode, setInternalMode] = useState<DmnEditorMode>(defaultMode);\n const mode = controlledMode ?? internalMode;\n\n // Uncontrolled: das XML in einen lokalen Buffer spiegeln, damit beide Modi\n // beim Umschalten denselben (zuletzt editierten) Stand sehen.\n const [bufferXml, setBufferXml] = useState<string | undefined>(\n value ?? defaultValue,\n );\n const isControlled = value !== undefined;\n const currentXml = isControlled ? value : bufferXml;\n\n const setMode = (next: DmnEditorMode) => {\n if (controlledMode === undefined) setInternalMode(next);\n onModeChange?.(next);\n };\n\n const handleChange = (xml: string) => {\n if (!isControlled) setBufferXml(xml);\n onChange?.(xml);\n };\n\n const switcher = (\n <SegmentedControl\n aria-label=\"Editor-Modus\"\n selectedKeys={new Set([mode])}\n onSelectionChange={(keys) => {\n const next = Array.from(keys as Set<string>)[0] as DmnEditorMode;\n if (next) setMode(next);\n }}\n >\n <Segment id=\"table\">Tabelle</Segment>\n <Segment id=\"expert\">Experte</Segment>\n </SegmentedControl>\n );\n\n return (\n <div className={cls(\"prn-dmn-editor\", className)} data-prn-dmn-editor>\n {mode === \"table\" ? (\n <DmnTableEditor\n value={currentXml}\n onChange={handleChange}\n onSave={onSave}\n decisionId={decisionId}\n title={title}\n subtitle={subtitle}\n cellPlugins={cellPlugins}\n actionsSlot={\n <>\n {switcher}\n {actionsSlot}\n </>\n }\n />\n ) : (\n <DmnExpertEditor\n value={currentXml}\n onChange={handleChange}\n onSave={onSave}\n colorScheme={colorScheme}\n actionsSlot={\n <>\n {switcher}\n {actionsSlot}\n </>\n }\n />\n )}\n </div>\n );\n}\n\nfunction cls(...parts: (string | undefined | false)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@conuti-das/prince-ui-dmn",
3
+ "version": "1.0.1",
4
+ "description": "DMN-Entscheidungstabellen-Editor (einstiegsfreundlich auf prince-ui AnalyticalTable) und dmn-js-Expertenmodus.",
5
+ "license": "MIT",
6
+ "private": false,
7
+ "type": "module",
8
+ "sideEffects": [
9
+ "*.css"
10
+ ],
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "main": "./dist/index.js",
15
+ "module": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ },
22
+ "./styles.css": "./dist/index.css",
23
+ "./package.json": "./package.json"
24
+ },
25
+ "dependencies": {
26
+ "dmn-moddle": "^11.0.0",
27
+ "@conuti-das/prince-ui-tokens": "0.4.1"
28
+ },
29
+ "peerDependencies": {
30
+ "react": ">=18 <20",
31
+ "react-dom": ">=18 <20",
32
+ "dmn-js": "^17.0.0",
33
+ "@conuti-das/prince-ui": "0.9.3"
34
+ },
35
+ "peerDependenciesMeta": {
36
+ "dmn-js": {
37
+ "optional": true
38
+ }
39
+ },
40
+ "devDependencies": {
41
+ "dmn-js": "^17.0.0",
42
+ "@testing-library/jest-dom": "^6.6.3",
43
+ "@testing-library/react": "^16.0.1",
44
+ "@testing-library/user-event": "^14.5.2",
45
+ "@types/react": "^18.3.12",
46
+ "@types/react-dom": "^18.3.1",
47
+ "@vitest/coverage-v8": "^2.1.5",
48
+ "jsdom": "^25.0.1",
49
+ "react": "^18.3.1",
50
+ "react-dom": "^18.3.1",
51
+ "tsup": "^8.3.0",
52
+ "typescript": "^5.6.3",
53
+ "vitest": "^2.1.5",
54
+ "@conuti-das/prince-ui": "0.9.3"
55
+ },
56
+ "publishConfig": {
57
+ "registry": "https://registry.npmjs.org"
58
+ },
59
+ "repository": {
60
+ "type": "git",
61
+ "url": "git+https://github.com/conuti-das/prince-ui.git",
62
+ "directory": "packages/dmn"
63
+ },
64
+ "scripts": {
65
+ "build": "tsup",
66
+ "dev": "tsup --watch",
67
+ "typecheck": "tsc --noEmit",
68
+ "test": "vitest run",
69
+ "test:watch": "vitest",
70
+ "test:coverage": "vitest run --coverage"
71
+ }
72
+ }