@codesys/mcp-toolkit 2.3.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +63 -7
  3. package/README.zh-CN.md +43 -5
  4. package/dist/actions.js +7 -2
  5. package/dist/actions.js.map +1 -1
  6. package/dist/codesys/alarm-tools.d.ts +28 -0
  7. package/dist/codesys/alarm-tools.js +126 -0
  8. package/dist/codesys/alarm-tools.js.map +1 -0
  9. package/dist/codesys/graphical-read.d.ts +63 -0
  10. package/dist/codesys/graphical-read.js +214 -0
  11. package/dist/codesys/graphical-read.js.map +1 -0
  12. package/dist/codesys/graphical.js +13 -1
  13. package/dist/codesys/graphical.js.map +1 -1
  14. package/dist/codesys/report.d.ts +51 -0
  15. package/dist/codesys/report.js +100 -0
  16. package/dist/codesys/report.js.map +1 -0
  17. package/dist/hmi/native.d.ts +2 -1
  18. package/dist/hmi/native.js +42 -4
  19. package/dist/hmi/native.js.map +1 -1
  20. package/dist/hmi/render.d.ts +5 -0
  21. package/dist/hmi/render.js +33 -7
  22. package/dist/hmi/render.js.map +1 -1
  23. package/dist/hmi/route.d.ts +7 -7
  24. package/dist/hmi/route.js +36 -12
  25. package/dist/hmi/route.js.map +1 -1
  26. package/dist/hmi/service.d.ts +26 -1
  27. package/dist/hmi/service.js +113 -21
  28. package/dist/hmi/service.js.map +1 -1
  29. package/dist/hmi/spec.d.ts +104 -1
  30. package/dist/hmi/spec.js +20 -2
  31. package/dist/hmi/spec.js.map +1 -1
  32. package/dist/hmi/symbols.d.ts +89 -0
  33. package/dist/hmi/symbols.js +210 -0
  34. package/dist/hmi/symbols.js.map +1 -0
  35. package/dist/hmi/tools.d.ts +2 -0
  36. package/dist/hmi/tools.js +87 -10
  37. package/dist/hmi/tools.js.map +1 -1
  38. package/dist/panel/hmi.js +121 -27
  39. package/dist/panel.js +2 -1
  40. package/dist/panel.js.map +1 -1
  41. package/dist/progress.d.ts +17 -0
  42. package/dist/progress.js +36 -0
  43. package/dist/progress.js.map +1 -0
  44. package/dist/server.d.ts +1 -1
  45. package/dist/server.js +4 -3
  46. package/dist/server.js.map +1 -1
  47. package/dist/tools.js +126 -5
  48. package/dist/tools.js.map +1 -1
  49. package/package.json +1 -1
  50. package/watcher/mcp_alarms.py +58 -0
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/hmi/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/hmi/spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Process-diagram symbols: the built-in library (motor, conveyor, heat
3
+ * exchanger, ...) and the project's own symbols, which Claude draws or imports
4
+ * from the user's SVG files (hmi_save_symbol). One description serves both
5
+ * renderers: inline SVG in the browser, and an SVG picture per state in the
6
+ * CODESYS image pool.
7
+ *
8
+ * A symbol is SVG markup in its own box (viewBox, 100x100 by default) that
9
+ * colours itself through a few variables, so one drawing shows every state:
10
+ * var(--state) off: grey, on: green, fault: red
11
+ * var(--body) main fill; var(--body2) darker fill
12
+ * var(--line) outlines and details; var(--accent) highlights
13
+ * Ports are points on the box where pipes connect, with the direction a pipe
14
+ * leaves in. An element with class="spin" turns while the symbol is on (browser).
15
+ *
16
+ * Custom SVG ends up in the HMI page, so it is checked against a short list of
17
+ * elements and attributes and refused otherwise; nothing is "cleaned" silently.
18
+ */
19
+ import * as z from "zod/v4";
20
+ export type Dir = "l" | "r" | "u" | "d";
21
+ type Pt = [number, number];
22
+ export declare const symbolSchema: z.ZodObject<{
23
+ svg: z.ZodString;
24
+ viewBox: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
25
+ ports: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
26
+ x: z.ZodNumber;
27
+ y: z.ZodNumber;
28
+ dir: z.ZodEnum<{
29
+ down: "down";
30
+ left: "left";
31
+ right: "right";
32
+ up: "up";
33
+ }>;
34
+ }, z.core.$strip>>>;
35
+ description: z.ZodOptional<z.ZodString>;
36
+ }, z.core.$strip>;
37
+ export type SymbolDef = z.infer<typeof symbolSchema>;
38
+ export type SymbolInput = z.input<typeof symbolSchema>;
39
+ export type SymbolLib = Record<string, SymbolDef>;
40
+ /** The standard symbols. Pumps, fans, valves and tanks have their own item types. */
41
+ export declare const BUILTIN_SYMBOLS: SymbolLib;
42
+ /** Problems with custom symbol markup (empty when it is fine). */
43
+ export declare function svgProblems(svg: string): string[];
44
+ /**
45
+ * An SVG file (for example from Inkscape or Illustrator) as symbol markup:
46
+ * the root's viewBox, its content without metadata, editor attributes and
47
+ * comments, and style="" turned into attributes. What's left is checked as usual.
48
+ */
49
+ export declare function importSvg(file: string): {
50
+ svg: string;
51
+ viewBox: [number, number];
52
+ };
53
+ /** Gradient and other ids made unique per symbol, so two symbols' ids can't clash. */
54
+ export declare function scopeIds(svg: string, prefix: string): string;
55
+ export interface SymbolPlacement {
56
+ x: number;
57
+ y: number;
58
+ size: number;
59
+ rotate?: 0 | 90 | 180 | 270;
60
+ }
61
+ /** Width in x units and height in x units (isotropic) of the drawn symbol, before rotation. */
62
+ export declare function symbolSize(d: SymbolDef, size: number): {
63
+ w: number;
64
+ h: number;
65
+ };
66
+ /** The symbol's ports on the diagram (aspect = height / width of the diagram on screen). */
67
+ export declare function symbolPorts(d: SymbolDef, p: SymbolPlacement, aspect: number): Record<string, {
68
+ at: Pt;
69
+ dir: Dir;
70
+ }>;
71
+ /** The symbol's bounding box on the diagram, after rotation. */
72
+ export declare function symbolBox(d: SymbolDef, p: SymbolPlacement, aspect: number): {
73
+ x0: number;
74
+ y0: number;
75
+ x1: number;
76
+ y1: number;
77
+ };
78
+ export interface SymbolColors {
79
+ state: string;
80
+ body: string;
81
+ body2: string;
82
+ line: string;
83
+ accent: string;
84
+ }
85
+ /** A standalone SVG of the symbol in fixed colours, rotated, at a pixel size (CODESYS draws images at their own size). */
86
+ export declare function symbolPicture(d: SymbolDef, name: string, colors: SymbolColors, rotate: number, wpx: number, hpx: number): string;
87
+ /** A library entry by name, case-insensitive. */
88
+ export declare function findSymbol(lib: SymbolLib, name: string): [string, SymbolDef] | undefined;
89
+ export {};
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Process-diagram symbols: the built-in library (motor, conveyor, heat
3
+ * exchanger, ...) and the project's own symbols, which Claude draws or imports
4
+ * from the user's SVG files (hmi_save_symbol). One description serves both
5
+ * renderers: inline SVG in the browser, and an SVG picture per state in the
6
+ * CODESYS image pool.
7
+ *
8
+ * A symbol is SVG markup in its own box (viewBox, 100x100 by default) that
9
+ * colours itself through a few variables, so one drawing shows every state:
10
+ * var(--state) off: grey, on: green, fault: red
11
+ * var(--body) main fill; var(--body2) darker fill
12
+ * var(--line) outlines and details; var(--accent) highlights
13
+ * Ports are points on the box where pipes connect, with the direction a pipe
14
+ * leaves in. An element with class="spin" turns while the symbol is on (browser).
15
+ *
16
+ * Custom SVG ends up in the HMI page, so it is checked against a short list of
17
+ * elements and attributes and refused otherwise; nothing is "cleaned" silently.
18
+ */
19
+ import * as z from "zod/v4";
20
+ const portSchema = z.object({ x: z.number(), y: z.number(), dir: z.enum(["left", "right", "up", "down"]).describe("The way a pipe leaves the port") });
21
+ export const symbolSchema = z.object({
22
+ svg: z.string().min(1).max(30_000).describe("SVG markup inside the symbol's box (no outer <svg>). Colours: var(--state), var(--body), var(--body2), var(--line), var(--accent), or fixed colours"),
23
+ viewBox: z.tuple([z.number().positive(), z.number().positive()]).default([100, 100]).describe("Width and height of the box the markup is drawn in"),
24
+ ports: z.record(z.string().regex(/^[a-z][a-z0-9-]*$/), portSchema).default({}).describe("Where pipes connect, in box coordinates, e.g. { in: { x: 0, y: 50, dir: 'left' } }"),
25
+ description: z.string().max(200).optional(),
26
+ });
27
+ const DIR = { left: "l", right: "r", up: "u", down: "d" };
28
+ const def = (svg, ports = {}, viewBox = [100, 100], description) => ({
29
+ svg: svg.replace(/\n\s*/g, ""),
30
+ viewBox,
31
+ ports: Object.fromEntries(Object.entries(ports).map(([k, [x, y, dir]]) => [k, { x, y, dir }])),
32
+ ...(description ? { description } : {}),
33
+ });
34
+ /** The standard symbols. Pumps, fans, valves and tanks have their own item types. */
35
+ export const BUILTIN_SYMBOLS = {
36
+ motor: def(`<rect x="6" y="34" width="9" height="32" rx="2" fill="var(--body2)" stroke="var(--line)" stroke-width="2"/>
37
+ <rect x="15" y="24" width="62" height="52" rx="9" fill="var(--body)" stroke="var(--state)" stroke-width="4"/>
38
+ <path d="M27 30v40M37 30v40M55 30v40M65 30v40" stroke="var(--body2)" stroke-width="3.5" stroke-linecap="round"/>
39
+ <rect x="33" y="10" width="26" height="14" rx="3" fill="var(--body2)" stroke="var(--line)" stroke-width="2"/>
40
+ <rect x="77" y="44" width="17" height="12" rx="2" fill="var(--line)"/>
41
+ <circle cx="46" cy="50" r="9" fill="var(--state)"/>`, { shaft: [94, 50, "right"] }, [100, 100], "Electric motor, shaft to the right"),
42
+ conveyor: def(`<rect x="5" y="16" width="190" height="28" rx="14" fill="var(--body2)" stroke="var(--state)" stroke-width="4"/>
43
+ <circle cx="19" cy="30" r="9" fill="var(--body)" stroke="var(--line)" stroke-width="2.5"/>
44
+ <circle cx="181" cy="30" r="9" fill="var(--body)" stroke="var(--line)" stroke-width="2.5"/>
45
+ <g class="spin"><path d="M19 23v14M12 30h14" stroke="var(--line)" stroke-width="2"/></g>
46
+ <circle cx="62" cy="30" r="4" fill="var(--line)"/><circle cx="100" cy="30" r="4" fill="var(--line)"/><circle cx="138" cy="30" r="4" fill="var(--line)"/>
47
+ <path d="M42 44l-6 14M158 44l6 14" stroke="var(--line)" stroke-width="3.5" stroke-linecap="round"/>`, { in: [5, 30, "left"], out: [195, 30, "right"] }, [200, 60], "Belt conveyor (twice as wide as high)"),
48
+ heat_exchanger: def(`<circle cx="50" cy="50" r="38" fill="var(--body)" stroke="var(--state)" stroke-width="4"/>
49
+ <path d="M12 50h14l10-18 14 36 14-36 10 18h14" fill="none" stroke="var(--line)" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/>`, { in: [12, 50, "left"], out: [88, 50, "right"], top: [50, 12, "up"], bottom: [50, 88, "down"] }, [100, 100], "Heat exchanger: tube side in/out, shell side top/bottom"),
50
+ mixer: def(`<rect x="32" y="4" width="36" height="24" rx="5" fill="var(--body)" stroke="var(--state)" stroke-width="3.5"/>
51
+ <rect x="46" y="28" width="8" height="54" rx="2" fill="var(--line)"/>
52
+ <path d="M50 80L22 72v18zM50 80l28-8v18z" fill="var(--state)" stroke="var(--line)" stroke-width="2" stroke-linejoin="round"/>`, {}, [100, 100], "Agitator: place it over a tank"),
53
+ filter: def(`<rect x="18" y="12" width="64" height="76" rx="9" fill="var(--body)" stroke="var(--state)" stroke-width="4"/>
54
+ <path d="M24 82L76 18" stroke="var(--line)" stroke-width="3.5" stroke-dasharray="7 5" stroke-linecap="round"/>`, { in: [18, 50, "left"], out: [82, 50, "right"], top: [50, 12, "up"], bottom: [50, 88, "down"] }, [100, 100], "Filter or strainer"),
55
+ compressor: def(`<circle cx="50" cy="50" r="40" fill="var(--body)" stroke="var(--state)" stroke-width="4"/>
56
+ <path d="M17 27l66 12M17 73l66-12" stroke="var(--line)" stroke-width="4" stroke-linecap="round"/>`, { in: [10, 50, "left"], out: [90, 50, "right"] }, [100, 100], "Compressor or blower, inlet left"),
57
+ cylinder: def(`<rect x="6" y="14" width="84" height="32" rx="5" fill="var(--body)" stroke="var(--state)" stroke-width="4"/>
58
+ <rect x="44" y="18" width="9" height="24" rx="1" fill="var(--line)"/>
59
+ <rect x="53" y="27" width="62" height="6" rx="2" fill="var(--line)"/>
60
+ <rect x="22" y="46" width="7" height="10" fill="var(--line)"/><rect x="71" y="46" width="7" height="10" fill="var(--line)"/>`, { a: [25, 56, "down"], b: [75, 56, "down"] }, [120, 60], "Pneumatic cylinder, rod to the right; ports a and b underneath"),
61
+ level_switch: def(`<rect x="34" y="4" width="32" height="14" rx="3" fill="var(--body2)" stroke="var(--line)" stroke-width="2"/>
62
+ <path d="M50 18v36" stroke="var(--line)" stroke-width="4" stroke-linecap="round"/>
63
+ <circle cx="50" cy="68" r="17" fill="var(--state)" stroke="var(--line)" stroke-width="3"/>
64
+ <path d="M16 93h68" stroke="var(--line)" stroke-width="3" stroke-dasharray="6 4"/>`, {}, [100, 100], "Float level switch: place it inside a tank"),
65
+ pressure_switch: def(`<circle cx="50" cy="40" r="33" fill="var(--body)" stroke="var(--state)" stroke-width="4"/>
66
+ <path d="M27 54a26 26 0 0 1 46 0" fill="none" stroke="var(--line)" stroke-width="2.5" stroke-dasharray="3 4"/>
67
+ <path d="M50 40l19-17" stroke="var(--state)" stroke-width="4.5" stroke-linecap="round"/>
68
+ <circle cx="50" cy="40" r="5" fill="var(--line)"/>
69
+ <rect x="45" y="73" width="10" height="23" fill="var(--line)"/>`, { bottom: [50, 96, "down"] }, [100, 100], "Pressure switch or gauge on a stem"),
70
+ check_valve: def(`<path d="M4 30v40l46-20zM96 30v40L50 50z" fill="var(--state)" stroke="var(--line)" stroke-width="2.5" stroke-linejoin="round"/>
71
+ <path d="M30 16h38M60 9l9 7-9 7" fill="none" stroke="var(--line)" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round"/>`, { in: [4, 50, "left"], out: [96, 50, "right"] }, [100, 100], "Check (non-return) valve, flow left to right"),
72
+ control_valve: def(`<path d="M50 50V22" stroke="var(--line)" stroke-width="4"/>
73
+ <path d="M22 22a28 20 0 0 1 56 0z" fill="var(--body)" stroke="var(--line)" stroke-width="3" stroke-linejoin="round"/>
74
+ <path d="M4 32v36l46-18zM96 32v36L50 50z" fill="var(--state)" stroke="var(--line)" stroke-width="2.5" stroke-linejoin="round"/>`, { in: [4, 50, "left"], out: [96, 50, "right"] }, [100, 100], "Control valve with diaphragm actuator"),
75
+ };
76
+ /* ---------- checking custom SVG ---------- */
77
+ const ELEMENTS = new Set(["g", "path", "rect", "circle", "ellipse", "line", "polyline", "polygon", "defs", "linearGradient", "radialGradient", "stop", "text"]);
78
+ const ATTRS = new Set([
79
+ "d", "x", "y", "x1", "y1", "x2", "y2", "cx", "cy", "r", "rx", "ry", "fx", "fy", "width", "height", "points", "transform", "id", "class",
80
+ "fill", "fill-opacity", "fill-rule", "stroke", "stroke-width", "stroke-linecap", "stroke-linejoin", "stroke-dasharray", "stroke-dashoffset", "stroke-opacity", "stroke-miterlimit", "opacity",
81
+ "offset", "stop-color", "stop-opacity", "gradientUnits", "gradientTransform", "spreadMethod", "font-size", "font-weight", "font-family", "text-anchor", "dominant-baseline",
82
+ ]);
83
+ /** Problems with custom symbol markup (empty when it is fine). */
84
+ export function svgProblems(svg) {
85
+ const out = [];
86
+ const stack = [];
87
+ const tag = /<(\/?)([A-Za-z][A-Za-z0-9]*)((?:\s+[A-Za-z][-A-Za-z0-9]*\s*=\s*"[^"]*")*)\s*(\/?)>/y;
88
+ const attr = /([A-Za-z][-A-Za-z0-9]*)\s*=\s*"([^"]*)"/g;
89
+ let i = 0;
90
+ while (i < svg.length && out.length < 8) {
91
+ if (svg[i] !== "<") {
92
+ const end = svg.indexOf("<", i);
93
+ const textRun = svg.slice(i, end < 0 ? svg.length : end);
94
+ if (/[>&]/.test(textRun))
95
+ out.push(`text '${textRun.trim().slice(0, 30)}' may not contain > or &.`);
96
+ else if (textRun.trim() && stack[stack.length - 1] !== "text")
97
+ out.push(`text '${textRun.trim().slice(0, 30)}' outside a <text> element.`);
98
+ i = end < 0 ? svg.length : end;
99
+ continue;
100
+ }
101
+ tag.lastIndex = i;
102
+ const m = tag.exec(svg);
103
+ if (!m) {
104
+ out.push(`can't read the markup at '${svg.slice(i, i + 40)}' (only elements with double-quoted attributes; no comments, CDATA or <!...>).`);
105
+ break;
106
+ }
107
+ const [whole, closing, name, attrs, selfClose] = m;
108
+ i += whole.length;
109
+ if (!ELEMENTS.has(name)) {
110
+ out.push(`<${name}> is not allowed (allowed: ${[...ELEMENTS].join(", ")}).`);
111
+ continue;
112
+ }
113
+ if (closing) {
114
+ if (stack.pop() !== name)
115
+ out.push(`</${name}> doesn't close the element that is open.`);
116
+ continue;
117
+ }
118
+ for (const [, a, val] of attrs.matchAll(attr)) {
119
+ if (!ATTRS.has(a))
120
+ out.push(`attribute ${a} on <${name}> is not allowed.`);
121
+ else if (a === "class" && val !== "spin")
122
+ out.push(`class may only be "spin" (turns while the symbol is on).`);
123
+ else if (/[<>&:\\]|javascript|expression\s*\(/i.test(val))
124
+ out.push(`${a}="${val.slice(0, 30)}" has a character or word that isn't allowed.`);
125
+ else if (/url\(/i.test(val) && !/^url\(#[A-Za-z][\w-]*\)$/.test(val.trim()))
126
+ out.push(`${a}="${val.slice(0, 30)}": only url(#id) of a gradient in this symbol.`);
127
+ else if (/var\(/.test(val) && !/^var\(--(state|body|body2|line|accent)\)$/.test(val.trim()))
128
+ out.push(`${a}="${val}": the colour variables are var(--state), var(--body), var(--body2), var(--line), var(--accent).`);
129
+ }
130
+ if (!selfClose)
131
+ stack.push(name);
132
+ }
133
+ if (!out.length && stack.length)
134
+ out.push(`<${stack[stack.length - 1]}> is never closed.`);
135
+ return out;
136
+ }
137
+ /**
138
+ * An SVG file (for example from Inkscape or Illustrator) as symbol markup:
139
+ * the root's viewBox, its content without metadata, editor attributes and
140
+ * comments, and style="" turned into attributes. What's left is checked as usual.
141
+ */
142
+ export function importSvg(file) {
143
+ const src = file.replace(/<\?xml[\s\S]*?\?>/g, "").replace(/<!DOCTYPE[\s\S]*?>/gi, "").replace(/<!--[\s\S]*?-->/g, "");
144
+ const root = /<svg\b([^>]*)>([\s\S]*)<\/svg>\s*$/i.exec(src.trim());
145
+ if (!root)
146
+ throw new Error("That file has no <svg> element.");
147
+ const rootAttrs = root[1];
148
+ const vb = /viewBox\s*=\s*["']\s*([-\d.]+)[\s,]+([-\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)/i.exec(rootAttrs);
149
+ const size = (k) => Number.parseFloat(new RegExp(`\\s${k}\\s*=\\s*["']([\\d.]+)`, "i").exec(rootAttrs)?.[1] ?? "100");
150
+ const [ox, oy, w, h] = vb ? [Number(vb[1]), Number(vb[2]), Number(vb[3]), Number(vb[4])] : [0, 0, size("width"), size("height")];
151
+ const drop = "metadata|title|desc|sodipodi:[a-z-]+|inkscape:[a-z-]+";
152
+ let body = root[2].replace(new RegExp(`<(${drop})\\b[^>]*/>`, "gi"), "").replace(new RegExp(`<(${drop})\\b[^>]*>[\\s\\S]*?</\\1>`, "gi"), "");
153
+ // style="a:b;c:d" -> a="b" c="d" for the properties we keep
154
+ body = body.replace(/\sstyle\s*=\s*"([^"]*)"/g, (_, s) => s
155
+ .split(";")
156
+ .map((kv) => kv.split(":").map((t) => t.trim()))
157
+ .filter(([k, v]) => k && v && ATTRS.has(k))
158
+ .map(([k, v]) => ` ${k}="${v.replace(/"/g, "'")}"`)
159
+ .join(""));
160
+ // editor and namespaced attributes, single quotes -> double quotes
161
+ body = body.replace(/\s[a-z]+:[A-Za-z-]+\s*=\s*"[^"]*"/g, "").replace(/\s([A-Za-z-]+)\s*=\s*'([^']*)'/g, ' $1="$2"');
162
+ body = body.replace(/\s(?:xml:space|data-[a-z-]+|version|xmlns(?::\w+)?)\s*=\s*"[^"]*"/g, "");
163
+ if (ox || oy)
164
+ body = `<g transform="translate(${-ox} ${-oy})">${body}</g>`;
165
+ return { svg: body.trim(), viewBox: [w, h] };
166
+ }
167
+ /** Gradient and other ids made unique per symbol, so two symbols' ids can't clash. */
168
+ export function scopeIds(svg, prefix) {
169
+ return svg.replace(/\bid="([^"]+)"/g, `id="${prefix}-$1"`).replace(/url\(#([^)]+)\)/g, `url(#${prefix}-$1)`);
170
+ }
171
+ /** Width in x units and height in x units (isotropic) of the drawn symbol, before rotation. */
172
+ export function symbolSize(d, size) {
173
+ return { w: size, h: (size * d.viewBox[1]) / d.viewBox[0] };
174
+ }
175
+ const ROT_DIR = ["r", "d", "l", "u"];
176
+ const rotDir = (dir, rot) => ROT_DIR[(ROT_DIR.indexOf(dir) + rot / 90) % 4];
177
+ /** A point of the box (box coordinates) on the diagram, with the symbol's rotation. */
178
+ function place(d, p, bx, by, aspect) {
179
+ const { w, h } = symbolSize(d, p.size);
180
+ let lx = (bx / d.viewBox[0] - 0.5) * w;
181
+ let ly = (by / d.viewBox[1] - 0.5) * h;
182
+ const rot = p.rotate ?? 0;
183
+ for (let k = 0; k < rot / 90; k++)
184
+ [lx, ly] = [-ly, lx];
185
+ return [p.x + lx, p.y + ly / aspect];
186
+ }
187
+ /** The symbol's ports on the diagram (aspect = height / width of the diagram on screen). */
188
+ export function symbolPorts(d, p, aspect) {
189
+ return Object.fromEntries(Object.entries(d.ports).map(([k, port]) => [k, { at: place(d, p, port.x, port.y, aspect), dir: rotDir(DIR[port.dir], p.rotate ?? 0) }]));
190
+ }
191
+ /** The symbol's bounding box on the diagram, after rotation. */
192
+ export function symbolBox(d, p, aspect) {
193
+ const { w, h } = symbolSize(d, p.size);
194
+ const [vw, vh] = (p.rotate ?? 0) % 180 ? [h, w] : [w, h];
195
+ return { x0: p.x - vw / 2, y0: p.y - vh / 2 / aspect, x1: p.x + vw / 2, y1: p.y + vh / 2 / aspect };
196
+ }
197
+ /** A standalone SVG of the symbol in fixed colours, rotated, at a pixel size (CODESYS draws images at their own size). */
198
+ export function symbolPicture(d, name, colors, rotate, wpx, hpx) {
199
+ const [vw, vh] = d.viewBox;
200
+ const body = scopeIds(d.svg, name).replace(/var\(--(state|body2|body|line|accent)\)/g, (_, k) => colors[k]);
201
+ const turn = rotate === 90 ? `translate(${vh} 0) rotate(90)` : rotate === 180 ? `rotate(180 ${vw / 2} ${vh / 2})` : rotate === 270 ? `translate(0 ${vw}) rotate(270)` : "";
202
+ const [bw, bh] = rotate % 180 ? [vh, vw] : [vw, vh];
203
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${wpx}" height="${hpx}" viewBox="0 0 ${bw} ${bh}">${turn ? `<g transform="${turn}">${body}</g>` : body}</svg>`;
204
+ }
205
+ /** A library entry by name, case-insensitive. */
206
+ export function findSymbol(lib, name) {
207
+ const k = Object.keys(lib).find((n) => n.toLowerCase() === name.toLowerCase());
208
+ return k ? [k, lib[k]] : undefined;
209
+ }
210
+ //# sourceMappingURL=symbols.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/hmi/symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAK5B,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;AAEvJ,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,qJAAqJ,CAAC;IAClM,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACnJ,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oFAAoF,CAAC;IAC7K,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAKH,MAAM,GAAG,GAAwB,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAE/E,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,KAAK,GAAuE,EAAE,EAAE,OAAO,GAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,WAAoB,EAAa,EAAE,CAAC,CAAC;IACrL,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9B,OAAO;IACP,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9F,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACxC,CAAC,CAAC;AAEH,qFAAqF;AACrF,MAAM,CAAC,MAAM,eAAe,GAAc;IACxC,KAAK,EAAE,GAAG,CACR;;;;;oDAKgD,EAChD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAC5B,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,oCAAoC,CACrC;IACD,QAAQ,EAAE,GAAG,CACX;;;;;oGAKgG,EAChG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAChD,CAAC,GAAG,EAAE,EAAE,CAAC,EACT,uCAAuC,CACxC;IACD,cAAc,EAAE,GAAG,CACjB;kJAC8I,EAC9I,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAC/F,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,yDAAyD,CAC1D;IACD,KAAK,EAAE,GAAG,CACR;;8HAE0H,EAC1H,EAAE,EACF,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,gCAAgC,CACjC;IACD,MAAM,EAAE,GAAG,CACT;+GAC2G,EAC3G,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAC/F,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,oBAAoB,CACrB;IACD,UAAU,EAAE,GAAG,CACb;kGAC8F,EAC9F,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAChD,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,kCAAkC,CACnC;IACD,QAAQ,EAAE,GAAG,CACX;;;6HAGyH,EACzH,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAC5C,CAAC,GAAG,EAAE,EAAE,CAAC,EACT,gEAAgE,CACjE;IACD,YAAY,EAAE,GAAG,CACf;;;mFAG+E,EAC/E,EAAE,EACF,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,4CAA4C,CAC7C;IACD,eAAe,EAAE,GAAG,CAClB;;;;gEAI4D,EAC5D,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAC5B,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,oCAAoC,CACrC;IACD,WAAW,EAAE,GAAG,CACd;sIACkI,EAClI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAC/C,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,8CAA8C,CAC/C;IACD,aAAa,EAAE,GAAG,CAChB;;gIAE4H,EAC5H,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAC/C,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,uCAAuC,CACxC;CACF,CAAC;AAEF,+CAA+C;AAE/C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAChK,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;IACpB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO;IACvI,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,SAAS;IAC7L,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB;CAC5K,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,qFAAqF,CAAC;IAClG,MAAM,IAAI,GAAG,0CAA0C,CAAC;IACxD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,2BAA2B,CAAC,CAAC;iBAC/F,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,CAAC;YAC3I,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,6BAA6B,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,gFAAgF,CAAC,CAAC;YAC5I,MAAM;QACR,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAwD,CAAC;QAC1G,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,8BAA8B,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,SAAS;QACX,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,2CAA2C,CAAC,CAAC;YACzF,SAAS;QACX,CAAC;QACD,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAuC,EAAE,CAAC;YACpF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,mBAAmB,CAAC,CAAC;iBACtE,IAAI,CAAC,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;iBAC1G,IAAI,sCAAsC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,+CAA+C,CAAC,CAAC;iBACzI,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,gDAAgD,CAAC,CAAC;iBAC5J,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,kGAAkG,CAAC,CAAC;QACxN,CAAC;QACD,IAAI,CAAC,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3F,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACvH,MAAM,IAAI,GAAG,qCAAqC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IAC3B,MAAM,EAAE,GAAG,4EAA4E,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;IAC1I,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjI,MAAM,IAAI,GAAG,uDAAuD,CAAC;IACrE,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,4BAA4B,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/I,4DAA4D;IAC5D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAC/D,CAAC;SACE,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAqB,CAAC;SACnE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;IACF,mEAAmE;IACnE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,iCAAiC,EAAE,UAAU,CAAC,CAAC;IACrH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oEAAoE,EAAE,EAAE,CAAC,CAAC;IAC9F,IAAI,EAAE,IAAI,EAAE;QAAE,IAAI,GAAG,2BAA2B,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,IAAI,MAAM,CAAC;IAC3E,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,MAAc;IAClD,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,MAAM,MAAM,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,QAAQ,MAAM,MAAM,CAAC,CAAC;AAC/G,CAAC;AAWD,+FAA+F;AAC/F,MAAM,UAAU,UAAU,CAAC,CAAY,EAAE,IAAY;IACnD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,OAAO,GAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5C,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAE,CAAC;AAE1F,uFAAuF;AACvF,SAAS,KAAK,CAAC,CAAY,EAAE,CAAkB,EAAE,EAAU,EAAE,EAAU,EAAE,MAAc;IACrF,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,CAAY,EAAE,CAAkB,EAAE,MAAc;IAC1E,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtK,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,SAAS,CAAC,CAAY,EAAE,CAAkB,EAAE,MAAc;IACxE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;AACtG,CAAC;AAYD,0HAA0H;AAC1H,MAAM,UAAU,aAAa,CAAC,CAAY,EAAE,IAAY,EAAE,MAAoB,EAAE,MAAc,EAAE,GAAW,EAAE,GAAW;IACtH,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,0CAA0C,EAAE,CAAC,CAAC,EAAE,CAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChI,MAAM,IAAI,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3K,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,kDAAkD,GAAG,aAAa,GAAG,kBAAkB,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,IAAI,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;AACxK,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,UAAU,CAAC,GAAc,EAAE,IAAY;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import type { ActionResult, RegisterAction } from "../actions.js";
2
2
  import type { AppContext } from "../tools.js";
3
3
  import { type HmiService } from "./service.js";
4
+ /** What to do when the library repository lacks FloatingPointUtils (seen on a CODESYS SP22 install). */
5
+ export declare const missingFpu: () => string;
4
6
  export declare function registerHmiActions(reg: RegisterAction, ctx: AppContext, hmi: HmiService, run: (fn: () => Promise<string>) => Promise<ActionResult>): void;
package/dist/hmi/tools.js CHANGED
@@ -3,18 +3,22 @@
3
3
  */
4
4
  import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
5
5
  import { tmpdir } from "node:os";
6
- import { join } from "node:path";
6
+ import { join, resolve } from "node:path";
7
7
  import * as z from "zod/v4";
8
+ import { reportProgress } from "../progress.js";
8
9
  import { currentCodesysSim } from "../codesys/simulation.js";
9
- import { findBrowser, hmiScript, previewValues, screenshot, staticPage } from "./service.js";
10
+ import { findBrowser, hmiScript, previewValues, screenshot, staticPage, symbolSheet } from "./service.js";
11
+ import { BUILTIN_SYMBOLS, importSvg, svgProblems, symbolSchema } from "./symbols.js";
10
12
  import { nativePlan } from "./native.js";
11
13
  import { canvasOf, tileBox } from "./render.js";
12
14
  import { overlapWarnings } from "./route.js";
13
15
  import { TEMPLATES } from "./templates.js";
14
16
  import { allAlarms, layoutProblems, screenSchema, screenVariables } from "./spec.js";
15
17
  const text = (t, isError = false) => ({ content: [{ type: "text", text: t }], ...(isError ? { isError } : {}) });
18
+ /** What to do when the library repository lacks FloatingPointUtils (seen on a CODESYS SP22 install). */
19
+ export const missingFpu = () => "This CODESYS's library repository has no FloatingPointUtils, which CODESYS's visualization libraries need, so a visualization can't compile here. Install it into this CODESYS (with the CODESYS Installer, or in Tools > Library Repository > Install), then run hmi_export_codesys again. The browser HMI (open_hmi) works without it.";
16
20
  const GUIDE = `A screen is a ${"12x8"} grid of tiles (change with grid). Each widget has at: [column, row, width, height], 1-based, no overlaps.
17
- Widgets: value (big number, optional sparkline), gauge, bar, status (LED list), buttons (tap/toggle/set/reset), switch, setpoint (+/- and slider), trend (up to 6 series), alarms, text, and process: a mimic diagram whose items sit in a 0..100 x 0..100 box (x across, y down): tank, pump, fan, valve, junction, pipe, sensor, lamp, label.
21
+ Widgets: value (big number, optional sparkline), gauge, bar, status (LED list), buttons (tap/toggle/set/reset), switch, setpoint (+/- and slider), trend (up to 6 series), alarms, text, and process: a mimic diagram whose items sit in a 0..100 x 0..100 box (x across, y down): tank, pump, fan, valve, junction, pipe, sensor, lamp, label, and symbol: {type: 'symbol', symbol: 'heat_exchanger', x, y, size, label: 'E-201', on: 'PLC_PRG.xHeating', fault: '...', rotate: 90} for the standard symbols (motor, conveyor, heat_exchanger, mixer, filter, compressor, cylinder, level_switch, pressure_switch, check_valve, control_valve) and the project's own (hmi_save_symbol). hmi_symbols shows them all with their ports.
18
22
  Connect pipes to ports, never by guessing points: {type: 'pipe', from: 'T-101.right', to: 'P-101.in', flow: 'PLC_PRG.xRun'}. The toolkit routes it with right angles and it meets the symbols exactly. A symbol's name is its id, or its label. Ports: tank top, bottom, left, right, left-high, right-high; pump and fan in (left), out (right), top, bottom; valve in, out (left/right, or bottom/top when vertical: true); junction c (for tees). A pipe end can also be a point [x, y] at the diagram's edge. via: [[x, y]] makes it pass points. For straight runs give connected symbols the same y (or x); a valve on a vertical pipe is vertical: true.
19
23
  Variables are full instance paths: 'PLC_PRG.fbPump.xRunning', 'GVL.rLevel'. bands colour a value by range: [{from: 0, tone: 'accent'}, {from: 90, tone: 'alarm'}]. Tones: accent, ok, warn, alarm, neutral.
20
24
  Good screens: the process diagram large on the left (about 8x5), key numbers and status on the right, controls and trends along the bottom; titles short; tag names on symbols (P-101, T-101).`;
@@ -25,7 +29,8 @@ export function registerHmiActions(reg, ctx, hmi, run) {
25
29
  }, async ({ screen }) => {
26
30
  if (!ctx.project)
27
31
  return text("No project is open: open or create one first; screens are stored next to it.", true);
28
- const problems = layoutProblems(screen);
32
+ const lib = hmi.library();
33
+ const problems = layoutProblems(screen, lib);
29
34
  if (problems.length)
30
35
  return text(`Not saved: fix the layout first.\n- ${problems.join("\n- ")}`, true);
31
36
  const vars = screenVariables(screen);
@@ -36,7 +41,7 @@ export function registerHmiActions(reg, ctx, hmi, run) {
36
41
  if (w.type !== "process")
37
42
  return [];
38
43
  const b = tileBox(screen, w.at);
39
- return overlapWarnings(w.items, (b.h - 46) / (b.w - 32));
44
+ return overlapWarnings(w.items, (b.h - 46) / (b.w - 32), lib);
40
45
  });
41
46
  const warn0 = looks.length ? `
42
47
  Layout: ${looks.join(" ")}` : "";
@@ -79,6 +84,70 @@ Layout: ${looks.join(" ")}` : "";
79
84
  return text(`Screenshot failed: ${e.message}`, true);
80
85
  }
81
86
  });
87
+ const sheet = async (entries, note) => {
88
+ if (!findBrowser())
89
+ return text(`${note}\n(No picture: screenshots need Microsoft Edge or Google Chrome.)`);
90
+ try {
91
+ const { html, size } = symbolSheet(entries);
92
+ const png = await screenshot(html, undefined, size);
93
+ return { content: [{ type: "image", data: png.toString("base64"), mimeType: "image/png" }, { type: "text", text: note }] };
94
+ }
95
+ catch (e) {
96
+ return text(`${note}\n(No picture: ${e.message})`);
97
+ }
98
+ };
99
+ reg("hmi_save_symbol", {
100
+ description: `Add your own process-diagram symbol to the project (or replace one), drawn as SVG or imported from an SVG file, and get back a picture of it in its off, on and fault colours with the ports marked: look at it and fix what's off. Then place it on a process diagram as {type: 'symbol', symbol: '<name>', ...}; it works in the browser HMI and in the CODESYS export.
101
+ Draw in the symbol's box (viewBox, default 100x100) with g, path, rect, circle, ellipse, line, polyline, polygon, text and gradients. Colour with var(--state) (grey off, green on, red fault), var(--body), var(--body2), var(--line) and var(--accent), so one drawing serves every state and theme; fixed colours work too. class="spin" on a group makes it turn while on (browser). Ports are where pipes connect: { in: { x: 0, y: 50, dir: 'left' } } in box coordinates; put them on the outline. Scripts, styles, links and external images are refused.`,
102
+ inputSchema: z.object({
103
+ name: z.string().regex(/^[a-z][a-z0-9_]*$/).describe("Lower case, e.g. 'centrifuge'"),
104
+ svg: z.string().optional().describe("The markup inside the box (no outer <svg>)"),
105
+ file: z.string().optional().describe("Or an .svg file to import (its viewBox and content; style attributes become plain attributes)"),
106
+ viewBox: z.tuple([z.number().positive(), z.number().positive()]).optional().describe("Box width and height (default 100x100, or the file's)"),
107
+ ports: z.record(z.string().regex(/^[a-z][a-z0-9-]*$/), z.object({ x: z.number(), y: z.number(), dir: z.enum(["left", "right", "up", "down"]) })).optional(),
108
+ description: z.string().max(200).optional(),
109
+ }),
110
+ }, async ({ name, svg, file, viewBox, ports, description }) => {
111
+ if (!ctx.project)
112
+ return text("No project is open: open or create one first; symbols are stored next to it.", true);
113
+ if (!svg === !file)
114
+ return text("Give either svg (the markup) or file (an .svg file to import).", true);
115
+ if (name in BUILTIN_SYMBOLS)
116
+ return text(`'${name}' is a standard symbol; pick another name.`, true);
117
+ let markup = svg ?? "";
118
+ let box = viewBox;
119
+ if (file) {
120
+ try {
121
+ const imported = importSvg(readFileSync(resolve(ctx.workspace, file), "utf8"));
122
+ markup = imported.svg;
123
+ box ??= imported.viewBox;
124
+ }
125
+ catch (e) {
126
+ return text(`Couldn't import ${file}: ${e.message}`, true);
127
+ }
128
+ }
129
+ const problems = svgProblems(markup);
130
+ if (problems.length)
131
+ return text(`Not saved: the symbol's SVG needs changes.\n- ${problems.join("\n- ")}`, true);
132
+ const def = symbolSchema.parse({ svg: markup, ...(box ? { viewBox: box } : {}), ...(ports ? { ports } : {}), ...(description ? { description } : {}) });
133
+ const [vw, vh] = def.viewBox;
134
+ const off = Object.entries(def.ports).filter(([, p]) => p.x < 0 || p.y < 0 || p.x > vw || p.y > vh).map(([k]) => k);
135
+ const r = hmi.saveSymbol(name, def);
136
+ return sheet([[name, def]], `${r.replaced ? "Replaced" : "Saved"} symbol '${name}' (${vw}x${vh}, ports: ${Object.keys(def.ports).join(", ") || "none"}) in ${r.file}.${off.length ? ` Ports outside the box: ${off.join(", ")}.` : ""} Use it as {type: 'symbol', symbol: '${name}', x, y, size}.`);
137
+ });
138
+ reg("hmi_symbols", {
139
+ description: "The process-diagram symbols you can place ({type: 'symbol', symbol: '<name>'}): the standard ones and the project's own, as a picture in their off, on and fault colours with their ports, and as a list.",
140
+ inputSchema: z.object({ names: z.array(z.string()).optional().describe("Only these (default: all)") }),
141
+ }, async ({ names }) => {
142
+ const lib = hmi.library();
143
+ const custom = hmi.symbols();
144
+ const entries = Object.entries(lib).filter(([n]) => !names || names.some((x) => x.toLowerCase() === n.toLowerCase()));
145
+ if (!entries.length)
146
+ return text(`No such symbols. Symbols: ${Object.keys(lib).join(", ")}.`, true);
147
+ const list = entries.map(([n, d]) => `${n}${n in custom ? " (project)" : ""}: ${d.description ?? ""} [${d.viewBox.join("x")}; ports: ${Object.entries(d.ports).map(([k, p]) => `${k} ${p.dir}`).join(", ") || "none"}]`);
148
+ return sheet(entries, list.join("\n"));
149
+ });
150
+ reg("hmi_delete_symbol", { description: "Delete one of the project's own symbols (screens that use it then refuse to save until it's replaced).", inputSchema: z.object({ name: z.string() }) }, async ({ name }) => (hmi.removeSymbol(name) ? text(`Deleted symbol '${name}'.`) : text(`The project has no symbol '${name}'. Its symbols: ${Object.keys(hmi.symbols()).join(", ") || "none"}.`, true)));
82
151
  reg("hmi_export_codesys", {
83
152
  description: "Build the HMI as native CODESYS visualizations in the project, one per page (Visu_<screen>), so it ships with the application: the header links the pages, the first page is the start page of TargetVisu and WebVisu at the panel size, pumps and fans turn while running (8-frame animation), and a symbol with a faceplate opens it as a dialog (Dlg_<screen>_<tag>). Cards with gradients, SVG symbols in an embedded image pool, live values, bars and tank levels, colour states, buttons, switches, setpoints and alarm rows. A generated program PRG_HMI_<screen> per page scales values and turns the impellers; it runs in VISU_TASK. Returns a picture of the first page. Trends are shown as values. Rebuilds what exists.",
84
153
  inputSchema: z.object({ screen: z.string().optional().describe("One page only (default: every page)") }),
@@ -91,6 +160,11 @@ Layout: ${looks.join(" ")}` : "";
91
160
  if (!(await b.waitReady(ctx.startWaitMs)))
92
161
  return text("CODESYS is still starting; try again shortly.", true);
93
162
  const pages = all.map((x) => ({ name: x.name, title: x.title }));
163
+ // Visualizations don't compile without FloatingPointUtils: say so before minutes of building.
164
+ reportProgress("checking the library repository");
165
+ const fpu = await b.call("library.find", { name: "FloatingPointUtils" }).catch(() => undefined);
166
+ if (fpu && fpu.matches.length === 0)
167
+ return text(missingFpu(), true);
94
168
  const dir = mkdtempSync(join(tmpdir(), "cmcp-visu-"));
95
169
  try {
96
170
  const notes = [];
@@ -98,8 +172,9 @@ Layout: ${looks.join(" ")}` : "";
98
172
  const builtNames = [];
99
173
  let first;
100
174
  // The first page is built last, so a CODESYS window ends up showing the start page.
101
- for (const s of [...targets].reverse()) {
102
- const plan = nativePlan(s, pages);
175
+ for (const [k, s] of [...targets].reverse().entries()) {
176
+ reportProgress(`page ${k + 1}/${targets.length}: Visu_${s.name}`);
177
+ const plan = nativePlan(s, pages, hmi.symbols());
103
178
  const images = plan.images.map((img) => {
104
179
  const path = join(dir, `${img.id}.svg`);
105
180
  writeFileSync(path, img.svg, "utf8");
@@ -134,6 +209,7 @@ Layout: ${looks.join(" ")}` : "";
134
209
  // The pages' alarms as CODESYS alarms (timestamps, acknowledge and history in the PLC).
135
210
  const alarms = allAlarms(all);
136
211
  if (alarms.length) {
212
+ reportProgress(`alarms: ${alarms.length} into CODESYS alarm management`);
137
213
  try {
138
214
  const cls = (sev) => (sev === "info" ? "Info" : sev === "warning" ? "Warning" : "Error");
139
215
  const r = await b.call("alarms.configure", { group: "AG_HMI", alarms: alarms.map((a, i) => ({ id: i + 1, kind: "digital", expression: a.active, comparison: "Equal", compare_to: "TRUE", text: a.text, cls: cls(a.severity) })), save: false }, { timeoutMs: 120_000 });
@@ -162,12 +238,13 @@ Layout: ${looks.join(" ")}` : "";
162
238
  catch (e) {
163
239
  warnings.push(`visualization manager: ${e.message}`);
164
240
  }
241
+ reportProgress("compiling");
165
242
  const build = await b.call("build", {}, { timeoutMs: 900_000 });
166
243
  const errors = build.messages.filter((m) => /error/i.test(m.severity));
167
244
  if (errors.length) {
168
- const fpu = errors.some((m) => /\bFPU\b|FloatingPointUtils/.test(m.text));
169
- notes.push(fpu
170
- ? `The build has ${errors.length} errors because this CODESYS's library repository lacks FloatingPointUtils, which the visualization libraries need. Install it with the CODESYS Installer (or Tools > Library Repository), then compile again.`
245
+ const noFpu = errors.some((m) => /\bFPU\b|FloatingPointUtils/.test(m.text));
246
+ notes.push(noFpu
247
+ ? `The build has ${errors.length} errors. ${missingFpu()}`
171
248
  : `The build has ${errors.length} errors, for example: ${errors.slice(0, 3).map((m) => `${m.object ?? ""} ${m.text}`.trim()).join("; ")}`);
172
249
  }
173
250
  else