@stocksharp/diagram 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +42 -0
  2. package/dist/esm/canvas-renderer.js +91 -16
  3. package/dist/esm/canvas-renderer.js.map +1 -1
  4. package/dist/esm/diagram/context-menu.js +272 -0
  5. package/dist/esm/diagram/context-menu.js.map +1 -0
  6. package/dist/esm/diagram/stocksharp-diagram.js +83 -5
  7. package/dist/esm/diagram/stocksharp-diagram.js.map +1 -1
  8. package/dist/esm/draw-surface.js +2 -0
  9. package/dist/esm/draw-surface.js.map +1 -0
  10. package/dist/esm/i18n.js.map +1 -1
  11. package/dist/esm/index.js.map +1 -1
  12. package/dist/esm/svg-surface.js +341 -0
  13. package/dist/esm/svg-surface.js.map +1 -0
  14. package/dist/ssdiagram.js +879 -164
  15. package/dist/ssdiagram.js.map +4 -4
  16. package/dist/types/canvas-renderer.d.ts +12 -0
  17. package/dist/types/canvas-renderer.d.ts.map +1 -1
  18. package/dist/types/diagram/api.d.ts +36 -2
  19. package/dist/types/diagram/api.d.ts.map +1 -1
  20. package/dist/types/diagram/context-menu.d.ts +31 -0
  21. package/dist/types/diagram/context-menu.d.ts.map +1 -0
  22. package/dist/types/diagram/stocksharp-diagram.d.ts +11 -5
  23. package/dist/types/diagram/stocksharp-diagram.d.ts.map +1 -1
  24. package/dist/types/draw-surface.d.ts +52 -0
  25. package/dist/types/draw-surface.d.ts.map +1 -0
  26. package/dist/types/i18n.d.ts +4 -0
  27. package/dist/types/i18n.d.ts.map +1 -1
  28. package/dist/types/index.d.ts +2 -2
  29. package/dist/types/index.d.ts.map +1 -1
  30. package/dist/types/svg-surface.d.ts +74 -0
  31. package/dist/types/svg-surface.d.ts.map +1 -0
  32. package/package.json +1 -1
  33. package/src/canvas-renderer.ts +103 -16
  34. package/src/diagram/api.ts +46 -2
  35. package/src/diagram/context-menu.ts +298 -0
  36. package/src/diagram/stocksharp-diagram.ts +93 -6
  37. package/src/draw-surface.ts +61 -0
  38. package/src/i18n.ts +7 -0
  39. package/src/index.ts +8 -0
  40. package/src/svg-surface.ts +430 -0
@@ -0,0 +1,341 @@
1
+ const IDENTITY = [1, 0, 0, 1, 0, 0];
2
+ function multiply(m, n) {
3
+ return [
4
+ m[0] * n[0] + m[2] * n[1],
5
+ m[1] * n[0] + m[3] * n[1],
6
+ m[0] * n[2] + m[2] * n[3],
7
+ m[1] * n[2] + m[3] * n[3],
8
+ m[0] * n[4] + m[2] * n[5] + m[4],
9
+ m[1] * n[4] + m[3] * n[5] + m[5],
10
+ ];
11
+ }
12
+ function isIdentity(m) {
13
+ return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;
14
+ }
15
+ /** Trims float noise: coordinates carry three decimals, which is finer than any renderer needs. */
16
+ function n(value) {
17
+ if (!Number.isFinite(value))
18
+ return '0';
19
+ return (Math.round(value * 1000) / 1000).toString();
20
+ }
21
+ function escapeXml(value) {
22
+ return value
23
+ .replace(/&/g, '&')
24
+ .replace(/</g, '&lt;')
25
+ .replace(/>/g, '&gt;')
26
+ .replace(/"/g, '&quot;');
27
+ }
28
+ const ANCHOR = {
29
+ left: 'start', start: 'start',
30
+ center: 'middle',
31
+ right: 'end', end: 'end',
32
+ };
33
+ // dominant-baseline rather than alignment-baseline: it is the one browsers and renderers agree on
34
+ // for <text>, and these four are the values the renderer actually sets.
35
+ const BASELINE = {
36
+ top: 'text-before-edge',
37
+ hanging: 'hanging',
38
+ middle: 'central',
39
+ alphabetic: 'alphabetic',
40
+ ideographic: 'ideographic',
41
+ bottom: 'text-after-edge',
42
+ };
43
+ export class SvgSurface {
44
+ constructor(options) {
45
+ this.body = [];
46
+ this.defs = [];
47
+ this.stack = [];
48
+ this.state = {
49
+ fillStyle: '#000000',
50
+ strokeStyle: '#000000',
51
+ lineWidth: 1,
52
+ lineJoin: 'miter',
53
+ lineCap: 'butt',
54
+ globalAlpha: 1,
55
+ font: '10px sans-serif',
56
+ textAlign: 'start',
57
+ textBaseline: 'alphabetic',
58
+ dash: [],
59
+ matrix: IDENTITY,
60
+ clipId: null,
61
+ };
62
+ /** Path being built by moveTo/lineTo/arc/arcTo, in the units the caller passes. */
63
+ this.path = [];
64
+ this.cursor = null;
65
+ this.subpathStart = null;
66
+ this.clipSeq = 0;
67
+ this.width = options.width;
68
+ this.height = options.height;
69
+ this.background = options.background;
70
+ this.metrics = options.metrics ?? null;
71
+ }
72
+ // ===== state =========================================================
73
+ get fillStyle() { return this.state.fillStyle; }
74
+ set fillStyle(value) {
75
+ // Gradients and patterns are canvas objects with no serialisable form here. The renderer
76
+ // uses plain colours; anything else is left as the previous colour rather than guessed at.
77
+ if (typeof value === 'string')
78
+ this.state.fillStyle = value;
79
+ }
80
+ get strokeStyle() { return this.state.strokeStyle; }
81
+ set strokeStyle(value) {
82
+ if (typeof value === 'string')
83
+ this.state.strokeStyle = value;
84
+ }
85
+ get lineWidth() { return this.state.lineWidth; }
86
+ set lineWidth(value) { this.state.lineWidth = value; }
87
+ get lineJoin() { return this.state.lineJoin; }
88
+ set lineJoin(value) { this.state.lineJoin = value; }
89
+ get lineCap() { return this.state.lineCap; }
90
+ set lineCap(value) { this.state.lineCap = value; }
91
+ get globalAlpha() { return this.state.globalAlpha; }
92
+ set globalAlpha(value) { this.state.globalAlpha = value; }
93
+ get font() { return this.state.font; }
94
+ set font(value) {
95
+ this.state.font = value;
96
+ if (this.metrics !== null)
97
+ this.metrics.font = value;
98
+ }
99
+ get textAlign() { return this.state.textAlign; }
100
+ set textAlign(value) { this.state.textAlign = value; }
101
+ get textBaseline() { return this.state.textBaseline; }
102
+ set textBaseline(value) { this.state.textBaseline = value; }
103
+ save() {
104
+ this.stack.push({ ...this.state, dash: [...this.state.dash], matrix: [...this.state.matrix] });
105
+ }
106
+ restore() {
107
+ const previous = this.stack.pop();
108
+ if (previous !== undefined)
109
+ this.state = previous;
110
+ }
111
+ setLineDash(segments) {
112
+ this.state.dash = [...segments];
113
+ }
114
+ // ===== transform =====================================================
115
+ setTransform(a, b, c, d, e, f) {
116
+ this.state.matrix = [a, b, c, d, e, f];
117
+ }
118
+ translate(x, y) {
119
+ this.state.matrix = multiply(this.state.matrix, [1, 0, 0, 1, x, y]);
120
+ }
121
+ rotate(angle) {
122
+ const cos = Math.cos(angle);
123
+ const sin = Math.sin(angle);
124
+ this.state.matrix = multiply(this.state.matrix, [cos, sin, -sin, cos, 0, 0]);
125
+ }
126
+ // ===== paths =========================================================
127
+ beginPath() {
128
+ this.path = [];
129
+ this.cursor = null;
130
+ this.subpathStart = null;
131
+ }
132
+ closePath() {
133
+ if (this.cursor === null)
134
+ return;
135
+ this.path.push('Z');
136
+ if (this.subpathStart !== null)
137
+ this.cursor = [...this.subpathStart];
138
+ }
139
+ moveTo(x, y) {
140
+ this.path.push(`M${n(x)} ${n(y)}`);
141
+ this.cursor = [x, y];
142
+ this.subpathStart = [x, y];
143
+ }
144
+ lineTo(x, y) {
145
+ if (this.cursor === null) {
146
+ this.moveTo(x, y);
147
+ return;
148
+ }
149
+ this.path.push(`L${n(x)} ${n(y)}`);
150
+ this.cursor = [x, y];
151
+ }
152
+ arc(cx, cy, r, start, end, ccw = false) {
153
+ const sx = cx + r * Math.cos(start);
154
+ const sy = cy + r * Math.sin(start);
155
+ // Canvas joins an open subpath to the arc's first point with a straight line.
156
+ if (this.cursor === null)
157
+ this.moveTo(sx, sy);
158
+ else
159
+ this.lineTo(sx, sy);
160
+ let delta = end - start;
161
+ if (ccw) {
162
+ while (delta > 0)
163
+ delta -= Math.PI * 2;
164
+ if (delta <= -Math.PI * 2)
165
+ delta = -Math.PI * 2;
166
+ }
167
+ else {
168
+ while (delta < 0)
169
+ delta += Math.PI * 2;
170
+ if (delta >= Math.PI * 2)
171
+ delta = Math.PI * 2;
172
+ }
173
+ const sweep = ccw ? 0 : 1;
174
+ // A single SVG arc cannot end where it began, so a full turn is drawn as two halves.
175
+ if (Math.abs(delta) >= Math.PI * 2 - 1e-9) {
176
+ const mid = start + delta / 2;
177
+ const mx = cx + r * Math.cos(mid);
178
+ const my = cy + r * Math.sin(mid);
179
+ this.path.push(`A${n(r)} ${n(r)} 0 0 ${sweep} ${n(mx)} ${n(my)}`);
180
+ this.path.push(`A${n(r)} ${n(r)} 0 0 ${sweep} ${n(sx)} ${n(sy)}`);
181
+ this.cursor = [sx, sy];
182
+ return;
183
+ }
184
+ const ex = cx + r * Math.cos(start + delta);
185
+ const ey = cy + r * Math.sin(start + delta);
186
+ const large = Math.abs(delta) > Math.PI ? 1 : 0;
187
+ this.path.push(`A${n(r)} ${n(r)} 0 ${large} ${sweep} ${n(ex)} ${n(ey)}`);
188
+ this.cursor = [ex, ey];
189
+ }
190
+ arcTo(x1, y1, x2, y2, r) {
191
+ if (this.cursor === null) {
192
+ this.moveTo(x1, y1);
193
+ return;
194
+ }
195
+ const [x0, y0] = this.cursor;
196
+ // Canvas degenerates to a straight line when there is no corner to round.
197
+ const a = [x0 - x1, y0 - y1];
198
+ const b = [x2 - x1, y2 - y1];
199
+ const la = Math.hypot(a[0], a[1]);
200
+ const lb = Math.hypot(b[0], b[1]);
201
+ if (la === 0 || lb === 0 || r === 0) {
202
+ this.lineTo(x1, y1);
203
+ return;
204
+ }
205
+ const ua = [a[0] / la, a[1] / la];
206
+ const ub = [b[0] / lb, b[1] / lb];
207
+ const cross = ua[0] * ub[1] - ua[1] * ub[0];
208
+ if (Math.abs(cross) < 1e-9) {
209
+ this.lineTo(x1, y1);
210
+ return;
211
+ } // collinear
212
+ const angle = Math.acos(Math.max(-1, Math.min(1, ua[0] * ub[0] + ua[1] * ub[1])));
213
+ const tangent = r / Math.tan(angle / 2);
214
+ // The corner cannot swallow more than the shorter arm.
215
+ const t = Math.min(tangent, la, lb);
216
+ const radius = t * Math.tan(angle / 2);
217
+ const t1 = [x1 + ua[0] * t, y1 + ua[1] * t];
218
+ const t2 = [x1 + ub[0] * t, y1 + ub[1] * t];
219
+ this.lineTo(t1[0], t1[1]);
220
+ // Turning left in screen coordinates (y down) is a counter-clockwise sweep.
221
+ const sweep = cross < 0 ? 1 : 0;
222
+ this.path.push(`A${n(radius)} ${n(radius)} 0 0 ${sweep} ${n(t2[0])} ${n(t2[1])}`);
223
+ this.cursor = [t2[0], t2[1]];
224
+ }
225
+ fill() {
226
+ if (this.path.length === 0)
227
+ return;
228
+ this.emit(`<path d="${this.path.join(' ')}" ${this.fillAttrs()}/>`);
229
+ }
230
+ stroke() {
231
+ if (this.path.length === 0)
232
+ return;
233
+ this.emit(`<path d="${this.path.join(' ')}" fill="none" ${this.strokeAttrs()}/>`);
234
+ }
235
+ clip() {
236
+ if (this.path.length === 0)
237
+ return;
238
+ const id = `clip${++this.clipSeq}`;
239
+ this.defs.push(`<clipPath id="${id}"><path d="${this.path.join(' ')}"/></clipPath>`);
240
+ this.state.clipId = id;
241
+ }
242
+ // ===== rectangles ====================================================
243
+ clearRect(x, y, w, h) {
244
+ // Nothing to clear in a document that is built up rather than painted over: SVG has no
245
+ // eraser, and the first thing written is the background anyway.
246
+ void x;
247
+ void y;
248
+ void w;
249
+ void h;
250
+ }
251
+ fillRect(x, y, w, h) {
252
+ this.emit(`<rect x="${n(x)}" y="${n(y)}" width="${n(w)}" height="${n(h)}" ${this.fillAttrs()}/>`);
253
+ }
254
+ strokeRect(x, y, w, h) {
255
+ this.emit(`<rect x="${n(x)}" y="${n(y)}" width="${n(w)}" height="${n(h)}" fill="none" ${this.strokeAttrs()}/>`);
256
+ }
257
+ // ===== text ==========================================================
258
+ fillText(text, x, y) {
259
+ if (text === '')
260
+ return;
261
+ const anchor = ANCHOR[this.state.textAlign] ?? 'start';
262
+ const baseline = BASELINE[this.state.textBaseline] ?? 'alphabetic';
263
+ // The canvas font string is CSS font shorthand, so it transfers verbatim -- no parsing, and
264
+ // no chance of losing the weight or the fallback list on the way.
265
+ this.emit(`<text x="${n(x)}" y="${n(y)}" style="font:${escapeXml(this.state.font)}" ` +
266
+ `text-anchor="${anchor}" dominant-baseline="${baseline}" ${this.fillAttrs()}>` +
267
+ `${escapeXml(text)}</text>`);
268
+ }
269
+ measureText(text) {
270
+ if (this.metrics !== null)
271
+ return { width: this.metrics.measureText(text).width };
272
+ // Without a context to ask, a rough advance keeps layout sane rather than collapsing to
273
+ // zero and stacking every label at one point.
274
+ const size = parseFloat(this.state.font) || 10;
275
+ return { width: text.length * size * 0.55 };
276
+ }
277
+ // ===== images ========================================================
278
+ drawImage(image, dx, dy, dw, dh) {
279
+ const href = this.imageHref(image);
280
+ if (href === null)
281
+ return;
282
+ this.emit(`<image x="${n(dx)}" y="${n(dy)}" width="${n(dw)}" height="${n(dh)}" href="${escapeXml(href)}"${this.commonAttrs()}/>`);
283
+ }
284
+ imageHref(image) {
285
+ try {
286
+ if (typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement)
287
+ return image.toDataURL();
288
+ if (typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement)
289
+ return image.src;
290
+ }
291
+ catch {
292
+ // A canvas tainted by a cross-origin draw refuses toDataURL. Dropping the image beats
293
+ // failing the whole export for one picture.
294
+ return null;
295
+ }
296
+ return null;
297
+ }
298
+ // ===== output ========================================================
299
+ /** The finished document. Safe to call more than once; it does not consume the recording. */
300
+ toSvg() {
301
+ const background = this.background === undefined
302
+ ? ''
303
+ : `<rect width="100%" height="100%" fill="${escapeXml(this.background)}"/>`;
304
+ const defs = this.defs.length === 0 ? '' : `<defs>${this.defs.join('')}</defs>`;
305
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${n(this.width)}" height="${n(this.height)}" ` +
306
+ `viewBox="0 0 ${n(this.width)} ${n(this.height)}">` +
307
+ `${defs}${background}${this.body.join('')}</svg>`;
308
+ }
309
+ // ===== internals =====================================================
310
+ emit(element) {
311
+ this.body.push(element);
312
+ }
313
+ commonAttrs() {
314
+ const parts = [];
315
+ if (!isIdentity(this.state.matrix)) {
316
+ parts.push(` transform="matrix(${this.state.matrix.map(n).join(' ')})"`);
317
+ }
318
+ if (this.state.globalAlpha !== 1)
319
+ parts.push(` opacity="${n(this.state.globalAlpha)}"`);
320
+ if (this.state.clipId !== null)
321
+ parts.push(` clip-path="url(#${this.state.clipId})"`);
322
+ return parts.join('');
323
+ }
324
+ fillAttrs() {
325
+ return `fill="${escapeXml(this.state.fillStyle)}"${this.commonAttrs()}`;
326
+ }
327
+ strokeAttrs() {
328
+ const parts = [
329
+ `stroke="${escapeXml(this.state.strokeStyle)}"`,
330
+ `stroke-width="${n(this.state.lineWidth)}"`,
331
+ ];
332
+ if (this.state.lineJoin !== 'miter')
333
+ parts.push(`stroke-linejoin="${this.state.lineJoin}"`);
334
+ if (this.state.lineCap !== 'butt')
335
+ parts.push(`stroke-linecap="${this.state.lineCap}"`);
336
+ if (this.state.dash.length > 0)
337
+ parts.push(`stroke-dasharray="${this.state.dash.map(n).join(' ')}"`);
338
+ return parts.join(' ') + this.commonAttrs();
339
+ }
340
+ }
341
+ //# sourceMappingURL=svg-surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-surface.js","sourceRoot":"","sources":["../../src/svg-surface.ts"],"names":[],"mappings":"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"}