@stocksharp/diagram 1.3.0 → 1.4.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.
- package/dist/esm/canvas-renderer.js +13 -7
- package/dist/esm/canvas-renderer.js.map +1 -1
- package/dist/esm/color.js +68 -0
- package/dist/esm/color.js.map +1 -1
- package/dist/ssdiagram-headless.js +52 -5
- package/dist/ssdiagram-headless.js.map +2 -2
- package/dist/ssdiagram.js +52 -5
- package/dist/ssdiagram.js.map +2 -2
- package/dist/types/canvas-renderer.d.ts +1 -0
- package/dist/types/canvas-renderer.d.ts.map +1 -1
- package/dist/types/color.d.ts +2 -0
- package/dist/types/color.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/canvas-renderer.ts +14 -6
- package/src/color.ts +82 -0
package/dist/esm/color.js
CHANGED
|
@@ -129,4 +129,72 @@ export function readableOutlineOn(surface) {
|
|
|
129
129
|
? LIGHT_OUTLINE
|
|
130
130
|
: DARK_OUTLINE;
|
|
131
131
|
}
|
|
132
|
+
/// A colour's hue, saturation and lightness, or null when it cannot be read.
|
|
133
|
+
function toHsl(color) {
|
|
134
|
+
const hsl = color.trim().match(/^hsl\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%\s*\)$/i);
|
|
135
|
+
if (hsl !== null)
|
|
136
|
+
return [+hsl[1], +hsl[2] / 100, +hsl[3] / 100];
|
|
137
|
+
const rgb = parseRgb(color);
|
|
138
|
+
if (rgb === null)
|
|
139
|
+
return null;
|
|
140
|
+
const [r, g, b] = rgb.map((channel) => channel / 255);
|
|
141
|
+
const max = Math.max(r, g, b);
|
|
142
|
+
const min = Math.min(r, g, b);
|
|
143
|
+
const lightness = (max + min) / 2;
|
|
144
|
+
if (max === min)
|
|
145
|
+
return [0, 0, lightness];
|
|
146
|
+
const span = max - min;
|
|
147
|
+
const saturation = lightness > 0.5 ? span / (2 - max - min) : span / (max + min);
|
|
148
|
+
const hue = max === r
|
|
149
|
+
? ((g - b) / span + (g < b ? 6 : 0))
|
|
150
|
+
: max === g
|
|
151
|
+
? (b - r) / span + 2
|
|
152
|
+
: (r - g) / span + 4;
|
|
153
|
+
return [hue * 60, saturation, lightness];
|
|
154
|
+
}
|
|
155
|
+
/// Lightest a colour may be drawn on a light canvas, and darkest on a dark one. Wide enough
|
|
156
|
+
/// that a hue is still itself, narrow enough that neither end of the palette disappears.
|
|
157
|
+
const DARK_CANVAS_FLOOR = 0.42;
|
|
158
|
+
const LIGHT_CANVAS_CEILING = 0.45;
|
|
159
|
+
/// The same colour, moved into the band the canvas leaves room for.
|
|
160
|
+
///
|
|
161
|
+
/// A socket type's colour belongs to the host and spans the whole range -- StockSharp sends
|
|
162
|
+
/// #000000 for Any and near-white for Side. As a socket that is fine: it is a filled square
|
|
163
|
+
/// with an outline. As a wire it is a thin line with nothing behind it, so a colour at the
|
|
164
|
+
/// same end of the range as the canvas cannot be seen at all. Only the lightness moves; the
|
|
165
|
+
/// hue and saturation are the host's answer to which type this is, and are left alone.
|
|
166
|
+
///
|
|
167
|
+
/// A colour that already sits in the band is returned exactly as it came, and one that cannot
|
|
168
|
+
/// be read is passed through: guessing at it would be worse than drawing what was asked for.
|
|
169
|
+
export function legibleOn(color, background) {
|
|
170
|
+
const hsl = toHsl(color);
|
|
171
|
+
if (hsl === null)
|
|
172
|
+
return color;
|
|
173
|
+
const canvas = relativeLuminance(background);
|
|
174
|
+
const [hue, saturation, lightness] = hsl;
|
|
175
|
+
const moved = canvas < 0
|
|
176
|
+
? lightness
|
|
177
|
+
: canvas > 0.18
|
|
178
|
+
? Math.min(lightness, LIGHT_CANVAS_CEILING)
|
|
179
|
+
: Math.max(lightness, DARK_CANVAS_FLOOR);
|
|
180
|
+
if (moved === lightness && /^hsl/i.test(color.trim()))
|
|
181
|
+
return color;
|
|
182
|
+
return `hsl(${Math.round(hue * 10) / 10}, ${Math.round(saturation * 1000) / 10}%, ${Math.round(moved * 1000) / 10}%)`;
|
|
183
|
+
}
|
|
184
|
+
/// The same colour with its lightness capped at `maxLightness` (0..1), hue and saturation kept.
|
|
185
|
+
///
|
|
186
|
+
/// Any colour, not only one already written as hsl(): a host's palette arrives as hex, and a
|
|
187
|
+
/// ceiling that only understood one notation left exactly those colours uncapped -- so a light
|
|
188
|
+
/// theme darkened the hues the control invents and left the ones it was given.
|
|
189
|
+
///
|
|
190
|
+
/// A colour that cannot be read is returned untouched.
|
|
191
|
+
export function cappedLightness(color, maxLightness) {
|
|
192
|
+
const hsl = toHsl(color);
|
|
193
|
+
if (hsl === null)
|
|
194
|
+
return color;
|
|
195
|
+
const [hue, saturation, lightness] = hsl;
|
|
196
|
+
if (lightness <= maxLightness)
|
|
197
|
+
return color;
|
|
198
|
+
return `hsl(${Math.round(hue * 10) / 10}, ${Math.round(saturation * 1000) / 10}%, ${Math.round(maxLightness * 1000) / 10}%)`;
|
|
199
|
+
}
|
|
132
200
|
//# sourceMappingURL=color.js.map
|
package/dist/esm/color.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/color.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/color.ts"],"names":[],"mappings":"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"}
|
|
@@ -418,6 +418,46 @@ var SSDiagramHeadless = (() => {
|
|
|
418
418
|
return DARK_OUTLINE;
|
|
419
419
|
return contrast(background, relativeLuminance(LIGHT_OUTLINE)) > contrast(background, relativeLuminance(DARK_OUTLINE)) ? LIGHT_OUTLINE : DARK_OUTLINE;
|
|
420
420
|
}
|
|
421
|
+
function toHsl(color) {
|
|
422
|
+
const hsl = color.trim().match(/^hsl\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%\s*\)$/i);
|
|
423
|
+
if (hsl !== null)
|
|
424
|
+
return [+hsl[1], +hsl[2] / 100, +hsl[3] / 100];
|
|
425
|
+
const rgb = parseRgb(color);
|
|
426
|
+
if (rgb === null)
|
|
427
|
+
return null;
|
|
428
|
+
const [r, g, b] = rgb.map((channel) => channel / 255);
|
|
429
|
+
const max = Math.max(r, g, b);
|
|
430
|
+
const min = Math.min(r, g, b);
|
|
431
|
+
const lightness = (max + min) / 2;
|
|
432
|
+
if (max === min)
|
|
433
|
+
return [0, 0, lightness];
|
|
434
|
+
const span = max - min;
|
|
435
|
+
const saturation = lightness > 0.5 ? span / (2 - max - min) : span / (max + min);
|
|
436
|
+
const hue = max === r ? (g - b) / span + (g < b ? 6 : 0) : max === g ? (b - r) / span + 2 : (r - g) / span + 4;
|
|
437
|
+
return [hue * 60, saturation, lightness];
|
|
438
|
+
}
|
|
439
|
+
var DARK_CANVAS_FLOOR = 0.42;
|
|
440
|
+
var LIGHT_CANVAS_CEILING = 0.45;
|
|
441
|
+
function legibleOn(color, background) {
|
|
442
|
+
const hsl = toHsl(color);
|
|
443
|
+
if (hsl === null)
|
|
444
|
+
return color;
|
|
445
|
+
const canvas = relativeLuminance(background);
|
|
446
|
+
const [hue, saturation, lightness] = hsl;
|
|
447
|
+
const moved = canvas < 0 ? lightness : canvas > 0.18 ? Math.min(lightness, LIGHT_CANVAS_CEILING) : Math.max(lightness, DARK_CANVAS_FLOOR);
|
|
448
|
+
if (moved === lightness && /^hsl/i.test(color.trim()))
|
|
449
|
+
return color;
|
|
450
|
+
return `hsl(${Math.round(hue * 10) / 10}, ${Math.round(saturation * 1e3) / 10}%, ${Math.round(moved * 1e3) / 10}%)`;
|
|
451
|
+
}
|
|
452
|
+
function cappedLightness(color, maxLightness) {
|
|
453
|
+
const hsl = toHsl(color);
|
|
454
|
+
if (hsl === null)
|
|
455
|
+
return color;
|
|
456
|
+
const [hue, saturation, lightness] = hsl;
|
|
457
|
+
if (lightness <= maxLightness)
|
|
458
|
+
return color;
|
|
459
|
+
return `hsl(${Math.round(hue * 10) / 10}, ${Math.round(saturation * 1e3) / 10}%, ${Math.round(maxLightness * 1e3) / 10}%)`;
|
|
460
|
+
}
|
|
421
461
|
|
|
422
462
|
// src/core/json.ts
|
|
423
463
|
function setJsonKey(target, key, value) {
|
|
@@ -1195,9 +1235,7 @@ var SSDiagramHeadless = (() => {
|
|
|
1195
1235
|
return (h % 360 + 360) % 360;
|
|
1196
1236
|
}
|
|
1197
1237
|
function clampLightness(color, maxL) {
|
|
1198
|
-
|
|
1199
|
-
if (m === null) return color;
|
|
1200
|
-
return `hsl(${m[1]}, ${m[2]}%, ${Math.min(+m[3], maxL * 100)}%)`;
|
|
1238
|
+
return cappedLightness(color, maxL);
|
|
1201
1239
|
}
|
|
1202
1240
|
function colorLuminance(color) {
|
|
1203
1241
|
if (color === void 0) return 0;
|
|
@@ -2526,6 +2564,15 @@ var SSDiagramHeadless = (() => {
|
|
|
2526
2564
|
if (p.direction !== "in" || p.type === "" || !isWildcardPortType(p.type)) return p.type;
|
|
2527
2565
|
return this.portFeed.get(p) ?? p.type;
|
|
2528
2566
|
}
|
|
2567
|
+
/// A type's colour as a wire.
|
|
2568
|
+
///
|
|
2569
|
+
/// The same colour a socket of that type is filled with, moved into the band the canvas
|
|
2570
|
+
/// leaves room for. A socket can afford the host's exact colour because it is a filled
|
|
2571
|
+
/// square with an outline; a wire is a thin line with nothing behind it, and one drawn in
|
|
2572
|
+
/// #000000 on a dark canvas is not there at all.
|
|
2573
|
+
linkColor(type) {
|
|
2574
|
+
return legibleOn(this.portColor(type), this.opts.background ?? "#1b1b1f");
|
|
2575
|
+
}
|
|
2529
2576
|
portColor(type) {
|
|
2530
2577
|
const maxL = this.opts.linkMaxLightness;
|
|
2531
2578
|
const light = maxL !== void 0 && maxL < 0.5;
|
|
@@ -3397,7 +3444,7 @@ var SSDiagramHeadless = (() => {
|
|
|
3397
3444
|
const b = this.endpoint(l, "to");
|
|
3398
3445
|
if (a === null || b === null) continue;
|
|
3399
3446
|
const fp = this.nodes.find((n2) => n2.id === l.from)?.outPorts.find((p) => p.id === l.fromPort);
|
|
3400
|
-
const baseColor = (this.opts.typedLinkColors ?? false) && fp !== void 0 ? this.
|
|
3447
|
+
const baseColor = (this.opts.typedLinkColors ?? false) && fp !== void 0 ? this.linkColor(fp.type) : this.portColor("");
|
|
3401
3448
|
const state = options.selection && l === this.selectedLink ? "sel" : options.transient && (l === this.hoveredLink || hoveredNode !== null && (l.from === hoveredNode.id || l.to === hoveredNode.id)) ? "hov" : "norm";
|
|
3402
3449
|
const color = state === "sel" ? this.selectionColor() : state === "hov" ? this.linkHoverColor() : baseColor;
|
|
3403
3450
|
const width = state === "sel" ? 3 : state === "hov" ? 2.6 : 2;
|
|
@@ -3845,7 +3892,7 @@ ${runtime.error}`;
|
|
|
3845
3892
|
}
|
|
3846
3893
|
if (snapped !== null) excludedNodes.add(snapped.node.id);
|
|
3847
3894
|
const points = this.routeLink(a, b, excludedNodes);
|
|
3848
|
-
ctx.strokeStyle = this.
|
|
3895
|
+
ctx.strokeStyle = this.linkColor(colorType);
|
|
3849
3896
|
if (snapped !== null) {
|
|
3850
3897
|
ctx.setLineDash([]);
|
|
3851
3898
|
ctx.lineWidth = 2.6;
|