pict-section-flow 0.0.19 → 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.
- package/docs/Theme_Integration.md +2 -2
- package/docs/_brand.json +18 -0
- package/docs/index.html +0 -2
- package/package.json +3 -3
- package/source/PictFlowCard.js +2 -2
- package/source/providers/PictProvider-Flow-CSS.js +38 -12
- package/source/providers/PictProvider-Flow-ConnectorShapes.js +8 -8
- package/source/providers/PictProvider-Flow-Icons.js +33 -33
- package/source/providers/PictProvider-Flow-NodeTypes.js +9 -9
- package/source/providers/PictProvider-Flow-Renderer.js +516 -0
- package/source/providers/PictProvider-Flow-StylePresets.js +259 -0
- package/source/providers/PictProvider-Flow-Theme.js +97 -669
- package/source/services/PictService-Flow-ConnectionRenderer.js +6 -6
- package/source/services/PictService-Flow-PortRenderer.js +6 -6
- package/source/views/PictView-Flow-Node.js +1 -1
- package/source/views/PictView-Flow-PropertiesPanel.js +1 -1
- package/source/views/PictView-Flow-Toolbar.js +24 -16
- package/source/views/PictView-Flow.js +172 -47
- package/test/Renderer_tests.js +133 -0
- package/test/StylePresets_tests.js +153 -0
- package/docs/css/docuserve.css +0 -327
|
@@ -14,8 +14,8 @@ When a host application registers `pict-provider-theme`:
|
|
|
14
14
|
```javascript
|
|
15
15
|
const libPictProviderTheme = require('pict-provider-theme');
|
|
16
16
|
pict.addProvider('Theme', libPictProviderTheme.default_configuration, libPictProviderTheme);
|
|
17
|
-
pict.providers.Theme.registerTheme(require('pict-provider-theme/source/themes/
|
|
18
|
-
pict.providers.Theme.applyTheme('
|
|
17
|
+
pict.providers.Theme.registerTheme(require('pict-provider-theme/source/themes/pict-default.json'));
|
|
18
|
+
pict.providers.Theme.applyTheme('pict-default', 'system');
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
…the flow editor automatically detects it during `onBeforeInitialize` (duck-typed via `applyTheme`/`onApply`/`listThemes`) and subscribes to its `onApply` hook. On every host theme change the editor:
|
package/docs/_brand.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Hash": "pict-section-flow",
|
|
3
|
+
"Name": "Pict Section Flow",
|
|
4
|
+
"Tagline": "Flow diagram section for visual workflow and process representations",
|
|
5
|
+
"Palette": "mix",
|
|
6
|
+
"Icon": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 96 96\" width=\"96\" height=\"96\">\n\t\t<defs>\n\t\t\t<clipPath id=\"frame-pict-section-flow-filled-light\">\n\t\t\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\"/>\n\t\t\t</clipPath>\n\t\t</defs>\n\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\" fill=\"#36d1d8\"/>\n\t\t<g clip-path=\"url(#frame-pict-section-flow-filled-light)\"><path d=\"M 16 26 L 48 66 L 80 26 Z\" fill=\"rgba(255,255,255,0.18)\"/>\n\t\t\t\t\t<path d=\"M 24 16 L 48 44 L 72 16 Z\" fill=\"#dc9958\" opacity=\"0.9\"/></g>\n\t\t<text x=\"48\" y=\"50\" text-anchor=\"middle\" dominant-baseline=\"central\"\n\t\t\tfont-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\"\n\t\t\tfont-size=\"28\" font-weight=\"600\"\n\t\t\tfill=\"#ffffff\" letter-spacing=\"-1\">PSF</text>\n\t</svg>",
|
|
7
|
+
"IconType": "svg",
|
|
8
|
+
"Favicon": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 96 96\" width=\"96\" height=\"96\">\n\t\t<defs>\n\t\t\t<clipPath id=\"fav-pict-section-flow-light\">\n\t\t\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\"/>\n\t\t\t</clipPath>\n\t\t</defs>\n\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\" fill=\"#36d1d8\"/>\n\t\t<g clip-path=\"url(#fav-pict-section-flow-light)\"><path d=\"M 16 26 L 48 66 L 80 26 Z\" fill=\"rgba(255,255,255,0.22)\"/></g>\n\t\t<text x=\"48\" y=\"50\" text-anchor=\"middle\" dominant-baseline=\"central\"\n\t\t\tfont-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\"\n\t\t\tfont-size=\"60\" font-weight=\"800\"\n\t\t\tfill=\"#ffffff\" letter-spacing=\"-1\">P</text>\n\t</svg>",
|
|
9
|
+
"FaviconDark": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 96 96\" width=\"96\" height=\"96\">\n\t\t<defs>\n\t\t\t<clipPath id=\"fav-pict-section-flow-dark\">\n\t\t\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\"/>\n\t\t\t</clipPath>\n\t\t</defs>\n\t\t<path d=\"M 2 48\n\t\t\tC 2 18.0222416, 18.0222416 2, 48 2\n\t\t\tC 77.9777584 2, 94 18.0222416, 94 48\n\t\t\tC 94 77.9777584, 77.9777584 94, 48 94\n\t\t\tC 18.0222416 94, 2 77.9777584, 2 48 Z\" fill=\"#87dfe2\"/>\n\t\t<g clip-path=\"url(#fav-pict-section-flow-dark)\"><path d=\"M 16 26 L 48 66 L 80 26 Z\" fill=\"rgba(255,255,255,0.22)\"/></g>\n\t\t<text x=\"48\" y=\"50\" text-anchor=\"middle\" dominant-baseline=\"central\"\n\t\t\tfont-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\"\n\t\t\tfont-size=\"60\" font-weight=\"800\"\n\t\t\tfill=\"#101418\" letter-spacing=\"-1\">P</text>\n\t</svg>",
|
|
10
|
+
"Colors": {
|
|
11
|
+
"Primary": "#36d1d8",
|
|
12
|
+
"Secondary": "#dc9958",
|
|
13
|
+
"PrimaryLight": "#36d1d8",
|
|
14
|
+
"PrimaryDark": "#87dfe2",
|
|
15
|
+
"SecondaryLight": "#dc9958",
|
|
16
|
+
"SecondaryDark": "#e9c7a7"
|
|
17
|
+
}
|
|
18
|
+
}
|
package/docs/index.html
CHANGED
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
|
|
9
9
|
<title>Pict-Section-Flow v0.0.17 Documentation</title>
|
|
10
10
|
|
|
11
|
-
<!-- Application Stylesheet -->
|
|
12
|
-
<link href="css/docuserve.css" rel="stylesheet">
|
|
13
11
|
<!-- KaTeX stylesheet for LaTeX equation rendering -->
|
|
14
12
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.css">
|
|
15
13
|
<!-- PICT Dynamic View CSS Container -->
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pict-section-flow",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Pict Section Flow Diagram",
|
|
5
5
|
"main": "source/Pict-Section-Flow.js",
|
|
6
6
|
"scripts": {
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"chai": "^6.2.2",
|
|
23
23
|
"mocha": "^11.7.5",
|
|
24
|
-
"pict": "^1.0.
|
|
25
|
-
"pict-docuserve": "^
|
|
24
|
+
"pict": "^1.0.369",
|
|
25
|
+
"pict-docuserve": "^1.3.2",
|
|
26
26
|
"pict-router": "^1.0.10",
|
|
27
27
|
"quackage": "^1.2.3"
|
|
28
28
|
}
|
package/source/PictFlowCard.js
CHANGED
|
@@ -79,7 +79,7 @@ class PictFlowCard extends libFableServiceProviderBase
|
|
|
79
79
|
this.cardEnabled = (typeof tmpOptions.Enabled === 'boolean') ? tmpOptions.Enabled : true;
|
|
80
80
|
|
|
81
81
|
// --- Card appearance ---
|
|
82
|
-
this.cardTitleBarColor = (tmpOptions.TitleBarColor) ? tmpOptions.TitleBarColor : '#2c3e50';
|
|
82
|
+
this.cardTitleBarColor = (tmpOptions.TitleBarColor) ? tmpOptions.TitleBarColor : 'var(--theme-color-text-primary, #2c3e50)';
|
|
83
83
|
this.cardBodyStyle = (tmpOptions.BodyStyle) ? tmpOptions.BodyStyle : {};
|
|
84
84
|
this.cardWidth = (typeof tmpOptions.Width === 'number') ? tmpOptions.Width : 180;
|
|
85
85
|
this.cardHeight = (typeof tmpOptions.Height === 'number') ? tmpOptions.Height : 80;
|
|
@@ -261,7 +261,7 @@ module.exports.default_configuration =
|
|
|
261
261
|
Inputs: [],
|
|
262
262
|
Outputs: [],
|
|
263
263
|
Enabled: true,
|
|
264
|
-
TitleBarColor: '#2c3e50',
|
|
264
|
+
TitleBarColor: 'var(--theme-color-text-primary, #2c3e50)',
|
|
265
265
|
BodyStyle: {},
|
|
266
266
|
Width: 180,
|
|
267
267
|
Height: 80,
|
|
@@ -70,13 +70,13 @@ class PictProviderFlowCSS extends libFableServiceProviderBase
|
|
|
70
70
|
--pf-node-selected-stroke: var(--theme-color-brand-primary, #3498db);
|
|
71
71
|
|
|
72
72
|
/* Node Variants */
|
|
73
|
-
--pf-node-start-fill: #eafaf1;
|
|
73
|
+
--pf-node-start-fill: var(--theme-color-background-hover, #eafaf1);
|
|
74
74
|
--pf-node-start-stroke: var(--theme-color-status-success, #27ae60);
|
|
75
|
-
--pf-node-end-fill: #e8f8f5;
|
|
76
|
-
--pf-node-end-stroke: #1abc9c;
|
|
77
|
-
--pf-node-halt-fill: #fdedec;
|
|
75
|
+
--pf-node-end-fill: var(--theme-color-background-hover, #e8f8f5);
|
|
76
|
+
--pf-node-end-stroke: var(--theme-color-brand-primary, #1abc9c);
|
|
77
|
+
--pf-node-halt-fill: var(--theme-color-background-hover, #fdedec);
|
|
78
78
|
--pf-node-halt-stroke: var(--theme-color-status-error, #e74c3c);
|
|
79
|
-
--pf-node-decision-fill: #fff9e6;
|
|
79
|
+
--pf-node-decision-fill: var(--theme-color-background-hover, #fff9e6);
|
|
80
80
|
--pf-node-decision-stroke: var(--theme-color-status-warning, #f39c12);
|
|
81
81
|
|
|
82
82
|
/* ── Color roles ───────────────────────────────────────
|
|
@@ -118,15 +118,15 @@ class PictProviderFlowCSS extends libFableServiceProviderBase
|
|
|
118
118
|
/* Port Type Colors */
|
|
119
119
|
--pf-port-event-in-fill: var(--theme-color-status-info, #3498db);
|
|
120
120
|
--pf-port-event-out-fill: var(--theme-color-status-success, #2ecc71);
|
|
121
|
-
--pf-port-setting-fill: #e67e22;
|
|
122
|
-
--pf-port-value-fill: #f1c40f;
|
|
121
|
+
--pf-port-setting-fill: var(--theme-color-status-warning, #e67e22);
|
|
122
|
+
--pf-port-value-fill: var(--theme-color-status-warning, #f1c40f);
|
|
123
123
|
--pf-port-error-fill: var(--theme-color-status-error, #e74c3c);
|
|
124
124
|
|
|
125
125
|
/* Connection Type Colors (match source port) */
|
|
126
126
|
--pf-connection-event-in-stroke: var(--theme-color-status-info, #3498db);
|
|
127
127
|
--pf-connection-event-out-stroke: var(--theme-color-status-success, #2ecc71);
|
|
128
|
-
--pf-connection-setting-stroke: #e67e22;
|
|
129
|
-
--pf-connection-value-stroke: #f1c40f;
|
|
128
|
+
--pf-connection-setting-stroke: var(--theme-color-status-warning, #e67e22);
|
|
129
|
+
--pf-connection-value-stroke: var(--theme-color-status-warning, #f1c40f);
|
|
130
130
|
--pf-connection-error-stroke: var(--theme-color-status-error, #e74c3c);
|
|
131
131
|
|
|
132
132
|
/* Connections */
|
|
@@ -161,14 +161,14 @@ class PictProviderFlowCSS extends libFableServiceProviderBase
|
|
|
161
161
|
--pf-button-hover-bg: var(--theme-color-background-hover, #ecf0f1);
|
|
162
162
|
--pf-button-active-bg: var(--theme-color-background-selected, #d5dbdb);
|
|
163
163
|
--pf-button-danger-text: var(--theme-color-status-error, #e74c3c);
|
|
164
|
-
--pf-button-danger-hover-bg: #fdedec;
|
|
164
|
+
--pf-button-danger-hover-bg: var(--theme-color-background-hover, #fdedec);
|
|
165
165
|
--pf-button-close-color: var(--theme-color-text-muted, #b0b8c0);
|
|
166
166
|
|
|
167
167
|
/* Badges */
|
|
168
168
|
--pf-badge-category-bg: var(--theme-color-background-tertiary, #f0f2f4);
|
|
169
169
|
--pf-badge-category-text: var(--theme-color-text-secondary, #6b7b8d);
|
|
170
|
-
--pf-badge-code-bg: #eaf2f8;
|
|
171
|
-
--pf-badge-code-text: #2980b9;
|
|
170
|
+
--pf-badge-code-bg: var(--theme-color-background-hover, #eaf2f8);
|
|
171
|
+
--pf-badge-code-text: var(--theme-color-status-info, #2980b9);
|
|
172
172
|
|
|
173
173
|
/* Info Panel */
|
|
174
174
|
--pf-port-item-bg: var(--theme-color-background-secondary, #f8f9fa);
|
|
@@ -1978,6 +1978,32 @@ class PictProviderFlowCSS extends libFableServiceProviderBase
|
|
|
1978
1978
|
this.log.warn('PictProviderFlowCSS: CSSMap not available; CSS not registered.');
|
|
1979
1979
|
}
|
|
1980
1980
|
}
|
|
1981
|
+
|
|
1982
|
+
/**
|
|
1983
|
+
* Register the active renderer's CSS overrides (GeometryCSS + AdditionalCSS).
|
|
1984
|
+
*
|
|
1985
|
+
* The renderer's CSS is registered at priority 501 — one higher than the
|
|
1986
|
+
* base container CSS — so its `.pict-flow-container { --pf-*: ... }`
|
|
1987
|
+
* declarations win the cascade against the equally-specific defaults in
|
|
1988
|
+
* `generateCSS()`. Called by PictView-Flow.setRenderer() after the
|
|
1989
|
+
* Flow-Renderer provider switches its active renderer.
|
|
1990
|
+
*
|
|
1991
|
+
* @param {Object} pRenderer - the active renderer definition (from PictProviderFlowRenderer)
|
|
1992
|
+
*/
|
|
1993
|
+
registerRendererCSS(pRenderer)
|
|
1994
|
+
{
|
|
1995
|
+
if (!this.fable || !this.fable.CSSMap) { return; }
|
|
1996
|
+
this.fable.CSSMap.removeCSS('PictSectionFlow-Renderer-CSS');
|
|
1997
|
+
if (!pRenderer) { this.fable.CSSMap.injectCSS(); return; }
|
|
1998
|
+
|
|
1999
|
+
let tmpCSS = '';
|
|
2000
|
+
if (pRenderer.GeometryCSS) { tmpCSS += pRenderer.GeometryCSS; }
|
|
2001
|
+
if (pRenderer.AdditionalCSS) { tmpCSS += '\n' + pRenderer.AdditionalCSS; }
|
|
2002
|
+
if (tmpCSS.trim().length === 0) { this.fable.CSSMap.injectCSS(); return; }
|
|
2003
|
+
|
|
2004
|
+
this.fable.CSSMap.addCSS('PictSectionFlow-Renderer-CSS', tmpCSS, 501, 'PictProviderFlowCSS');
|
|
2005
|
+
this.fable.CSSMap.injectCSS();
|
|
2006
|
+
}
|
|
1981
2007
|
}
|
|
1982
2008
|
|
|
1983
2009
|
module.exports = PictProviderFlowCSS;
|
|
@@ -87,7 +87,7 @@ class PictProviderFlowConnectorShapes extends libFableServiceProviderBase
|
|
|
87
87
|
RefX: '7.5',
|
|
88
88
|
RefY: '3.5',
|
|
89
89
|
Points: '0 0, 5 3.5, 0 7',
|
|
90
|
-
Fill: '#95a5a6'
|
|
90
|
+
Fill: 'var(--theme-color-border-default, #95a5a6)'
|
|
91
91
|
},
|
|
92
92
|
'arrowhead-connection-selected':
|
|
93
93
|
{
|
|
@@ -96,7 +96,7 @@ class PictProviderFlowConnectorShapes extends libFableServiceProviderBase
|
|
|
96
96
|
RefX: '7.5',
|
|
97
97
|
RefY: '3.5',
|
|
98
98
|
Points: '0 0, 5 3.5, 0 7',
|
|
99
|
-
Fill: '#3498db'
|
|
99
|
+
Fill: 'var(--theme-color-status-info, #3498db)'
|
|
100
100
|
},
|
|
101
101
|
'arrowhead-tether':
|
|
102
102
|
{
|
|
@@ -105,7 +105,7 @@ class PictProviderFlowConnectorShapes extends libFableServiceProviderBase
|
|
|
105
105
|
RefX: '6',
|
|
106
106
|
RefY: '3',
|
|
107
107
|
Points: '0 0, 4 3, 0 6',
|
|
108
|
-
Fill: '#95a5a6'
|
|
108
|
+
Fill: 'var(--theme-color-border-default, #95a5a6)'
|
|
109
109
|
}
|
|
110
110
|
};
|
|
111
111
|
|
|
@@ -426,11 +426,11 @@ class PictProviderFlowConnectorShapes extends libFableServiceProviderBase
|
|
|
426
426
|
// Per-port-type connection arrowheads
|
|
427
427
|
let tmpPortTypeColors =
|
|
428
428
|
{
|
|
429
|
-
'event-in': '#3498db',
|
|
430
|
-
'event-out': '#2ecc71',
|
|
431
|
-
'setting': '#e67e22',
|
|
432
|
-
'value': '#f1c40f',
|
|
433
|
-
'error': '#e74c3c'
|
|
429
|
+
'event-in': 'var(--theme-color-status-info, #3498db)',
|
|
430
|
+
'event-out': 'var(--theme-color-status-success, #2ecc71)',
|
|
431
|
+
'setting': 'var(--theme-color-status-warning, #e67e22)',
|
|
432
|
+
'value': 'var(--theme-color-status-warning, #f1c40f)',
|
|
433
|
+
'error': 'var(--theme-color-status-error, #e74c3c)'
|
|
434
434
|
};
|
|
435
435
|
|
|
436
436
|
for (let tmpType in tmpPortTypeColors)
|
|
@@ -4,8 +4,8 @@ const libFableServiceProviderBase = require('fable-serviceproviderbase');
|
|
|
4
4
|
* PictProvider-Flow-Icons
|
|
5
5
|
*
|
|
6
6
|
* Centralized SVG icon provider for the flow diagram.
|
|
7
|
-
* All icons use a duotone style: 2px outline (#2c3e50) with
|
|
8
|
-
* subtle filled accent shapes (#d5e8f7).
|
|
7
|
+
* All icons use a duotone style: 2px outline (var(--theme-color-text-primary, #2c3e50)) with
|
|
8
|
+
* subtle filled accent shapes (var(--theme-color-background-secondary, #d5e8f7)).
|
|
9
9
|
*
|
|
10
10
|
* Each icon is registered as a pict template with hash `Flow-Icon-{key}`,
|
|
11
11
|
* making them individually overridable by consumers.
|
|
@@ -18,7 +18,7 @@ const _ProviderConfiguration =
|
|
|
18
18
|
|
|
19
19
|
// ── Default Icon SVG Markup ────────────────────────────────────────────────
|
|
20
20
|
// All icons: viewBox="0 0 24 24", duotone style
|
|
21
|
-
// Accent fill: #d5e8f7, Stroke: #2c3e50, Stroke-width: 2
|
|
21
|
+
// Accent fill: var(--theme-color-background-secondary, #d5e8f7), Stroke: var(--theme-color-text-primary, #2c3e50), Stroke-width: 2
|
|
22
22
|
//
|
|
23
23
|
// The {FlowIconSize} placeholder is replaced at render time with the
|
|
24
24
|
// requested pixel size. Each template is a self-contained <svg> element.
|
|
@@ -27,71 +27,71 @@ const _DefaultIcons =
|
|
|
27
27
|
{
|
|
28
28
|
// ── FlowCard Icons ─────────────────────────────────────────────────────
|
|
29
29
|
|
|
30
|
-
'ITE': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="6" r="3" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><circle cx="6" cy="18" r="2.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><circle cx="18" cy="18" r="2.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M12 9v2M9.5 12.5L6 15.5M14.5 12.5L18 15.5" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
30
|
+
'ITE': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="6" r="3" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><circle cx="6" cy="18" r="2.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><circle cx="18" cy="18" r="2.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M12 9v2M9.5 12.5L6 15.5M14.5 12.5L18 15.5" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
31
31
|
|
|
32
|
-
'SW': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M3 12h5M16 12h5M14.8 9.2l3.7-5.2M14.8 14.8l3.7 5.2" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
32
|
+
'SW': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="4" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M3 12h5M16 12h5M14.8 9.2l3.7-5.2M14.8 14.8l3.7 5.2" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
33
33
|
|
|
34
|
-
'EACH': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><rect x="14" y="3" width="7" height="7" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><rect x="3" y="14" width="7" height="7" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><rect x="14" y="14" width="7" height="7" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
34
|
+
'EACH': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="14" y="3" width="7" height="7" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="3" y="14" width="7" height="7" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="14" y="14" width="7" height="7" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
35
35
|
|
|
36
|
-
'FREAD': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9l-7-7z" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M13 2v7h7" stroke="#2c3e50" stroke-width="2"/><path d="M9 13h6M9 17h4" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
36
|
+
'FREAD': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9l-7-7z" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M13 2v7h7" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M9 13h6M9 17h4" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
37
37
|
|
|
38
|
-
'FWRITE': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9l-7-7z" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M13 2v7h7" stroke="#2c3e50" stroke-width="2"/><path d="M12 13v5M9.5 15.5L12 13l2.5 2.5" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
38
|
+
'FWRITE': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9l-7-7z" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M13 2v7h7" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M12 13v5M9.5 15.5L12 13l2.5 2.5" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
39
39
|
|
|
40
|
-
'LOG': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="3" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><circle cx="7.5" cy="8" r="1" fill="#2c3e50"/><circle cx="7.5" cy="12" r="1" fill="#2c3e50"/><circle cx="7.5" cy="16" r="1" fill="#2c3e50"/><path d="M11 8h5.5M11 12h5.5M11 16h3.5" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
40
|
+
'LOG': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="3" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><circle cx="7.5" cy="8" r="1" fill="var(--theme-color-text-primary, #2c3e50)"/><circle cx="7.5" cy="12" r="1" fill="var(--theme-color-text-primary, #2c3e50)"/><circle cx="7.5" cy="16" r="1" fill="var(--theme-color-text-primary, #2c3e50)"/><path d="M11 8h5.5M11 12h5.5M11 16h3.5" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
41
41
|
|
|
42
|
-
'GET': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M21 21l-5.15-5.15" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
42
|
+
'GET': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="10.5" cy="10.5" r="6.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M21 21l-5.15-5.15" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
43
43
|
|
|
44
|
-
'SET': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4.5 1.5L4 16Z" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M14 6l3 3" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
44
|
+
'SET': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4.5 1.5L4 16Z" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M14 6l3 3" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
45
45
|
|
|
46
46
|
// ── UI Icons ───────────────────────────────────────────────────────────
|
|
47
47
|
|
|
48
|
-
'fullscreen': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="#2c3e50" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6"/><path d="M9 21H3v-6"/><path d="M21 3l-7 7"/><path d="M3 21l7-7"/></svg>',
|
|
48
|
+
'fullscreen': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6"/><path d="M9 21H3v-6"/><path d="M21 3l-7 7"/><path d="M3 21l7-7"/></svg>',
|
|
49
49
|
|
|
50
|
-
'exit-fullscreen': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="#2c3e50" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 14h6v6"/><path d="M20 10h-6V4"/><path d="M14 10l7-7"/><path d="M3 21l7-7"/></svg>',
|
|
50
|
+
'exit-fullscreen': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 14h6v6"/><path d="M20 10h-6V4"/><path d="M14 10l7-7"/><path d="M3 21l7-7"/></svg>',
|
|
51
51
|
|
|
52
|
-
'close': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="#2c3e50" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',
|
|
52
|
+
'close': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',
|
|
53
53
|
|
|
54
|
-
'chevron-down': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="#2c3e50" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>',
|
|
54
|
+
'chevron-down': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>',
|
|
55
55
|
|
|
56
56
|
// ── Toolbar & Popup Icons ─────────────────────────────────────────────
|
|
57
57
|
|
|
58
|
-
'search': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M21 21l-4.35-4.35" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
58
|
+
'search': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M21 21l-4.35-4.35" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
59
59
|
|
|
60
|
-
'cards': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="7" width="16" height="12" rx="2" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M6 7V5a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-2" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
60
|
+
'cards': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="7" width="16" height="12" rx="2" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M6 7V5a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-2" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
61
61
|
|
|
62
|
-
'layout': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="8" height="10" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><rect x="13" y="3" width="8" height="6" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><rect x="3" y="15" width="8" height="6" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><rect x="13" y="11" width="8" height="10" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
62
|
+
'layout': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="8" height="10" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="13" y="3" width="8" height="6" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="3" y="15" width="8" height="6" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="13" y="11" width="8" height="10" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
63
63
|
|
|
64
|
-
'collapse': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="3" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M8 12h8" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
64
|
+
'collapse': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="3" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M8 12h8" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
65
65
|
|
|
66
|
-
'expand': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="3" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M12 8v8M8 12h8" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
66
|
+
'expand': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="3" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M12 8v8M8 12h8" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
67
67
|
|
|
68
|
-
'grip': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="#2c3e50"><circle cx="9" cy="5" r="1.5"/><circle cx="15" cy="5" r="1.5"/><circle cx="9" cy="12" r="1.5"/><circle cx="15" cy="12" r="1.5"/><circle cx="9" cy="19" r="1.5"/><circle cx="15" cy="19" r="1.5"/></svg>',
|
|
68
|
+
'grip': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="var(--theme-color-text-primary, #2c3e50)"><circle cx="9" cy="5" r="1.5"/><circle cx="15" cy="5" r="1.5"/><circle cx="9" cy="12" r="1.5"/><circle cx="15" cy="12" r="1.5"/><circle cx="9" cy="19" r="1.5"/><circle cx="15" cy="19" r="1.5"/></svg>',
|
|
69
69
|
|
|
70
|
-
'settings': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="#2c3e50" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3" fill="#d5e8f7"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>',
|
|
70
|
+
'settings': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3" fill="var(--theme-color-background-secondary, #d5e8f7)"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>',
|
|
71
71
|
|
|
72
|
-
'plus': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M12 8v8M8 12h8" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
72
|
+
'plus': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M12 8v8M8 12h8" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
73
73
|
|
|
74
|
-
'trash': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18" stroke="#2c3e50" stroke-width="2"/><path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" stroke="#2c3e50" stroke-width="2"/><rect x="5" y="6" width="14" height="14" rx="2" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M10 11v6M14 11v6" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
74
|
+
'trash': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="5" y="6" width="14" height="14" rx="2" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M10 11v6M14 11v6" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
75
75
|
|
|
76
|
-
'save': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M17 21v-8H7v8" stroke="#2c3e50" stroke-width="2"/><path d="M7 3v5h8" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
76
|
+
'save': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M17 21v-8H7v8" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M7 3v5h8" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
77
77
|
|
|
78
|
-
'auto-layout': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="8" y="2" width="8" height="6" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><rect x="2" y="16" width="8" height="6" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><rect x="14" y="16" width="8" height="6" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M12 8v4M6 16v-4h12v4" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
78
|
+
'auto-layout': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="8" y="2" width="8" height="6" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="2" y="16" width="8" height="6" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="14" y="16" width="8" height="6" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M12 8v4M6 16v-4h12v4" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
79
79
|
|
|
80
|
-
'zoom-in': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M21 21l-4.35-4.35" stroke="#2c3e50" stroke-width="2"/><path d="M11 8v6M8 11h6" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
80
|
+
'zoom-in': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M21 21l-4.35-4.35" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M11 8v6M8 11h6" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
81
81
|
|
|
82
|
-
'zoom-out': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M21 21l-4.35-4.35" stroke="#2c3e50" stroke-width="2"/><path d="M8 11h6" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
82
|
+
'zoom-out': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M21 21l-4.35-4.35" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M8 11h6" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
83
83
|
|
|
84
|
-
'zoom-fit': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="#2c3e50" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7V3h4"/><path d="M17 3h4v4"/><path d="M21 17v4h-4"/><path d="M7 21H3v-4"/><rect x="7" y="7" width="10" height="10" rx="1.5" fill="#d5e8f7"/></svg>',
|
|
84
|
+
'zoom-fit': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7V3h4"/><path d="M17 3h4v4"/><path d="M21 17v4h-4"/><path d="M7 21H3v-4"/><rect x="7" y="7" width="10" height="10" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)"/></svg>',
|
|
85
85
|
|
|
86
|
-
'dock': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="4" rx="1.5" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M12 20V11M8 14l4-4 4 4" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
86
|
+
'dock': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="4" rx="1.5" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M12 20V11M8 14l4-4 4 4" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
87
87
|
|
|
88
|
-
'restore': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="#2c3e50" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12a9 9 0 1 0 3-6.7L3 8"/><path d="M3 3v5h5"/></svg>',
|
|
88
|
+
'restore': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 12a9 9 0 1 0 3-6.7L3 8"/><path d="M3 3v5h5"/></svg>',
|
|
89
89
|
|
|
90
|
-
'delete-node': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18" stroke="#2c3e50" stroke-width="2"/><path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" stroke="#2c3e50" stroke-width="2"/><rect x="5" y="6" width="14" height="14" rx="2" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><path d="M10 11v6M14 11v6" stroke="#2c3e50" stroke-width="2"/></svg>',
|
|
90
|
+
'delete-node': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><rect x="5" y="6" width="14" height="14" rx="2" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><path d="M10 11v6M14 11v6" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/></svg>',
|
|
91
91
|
|
|
92
92
|
// ── Fallback ───────────────────────────────────────────────────────────
|
|
93
93
|
|
|
94
|
-
'default': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="4" fill="#d5e8f7" stroke="#2c3e50" stroke-width="2"/><circle cx="12" cy="12" r="2.5" fill="#2c3e50"/></svg>'
|
|
94
|
+
'default': '<svg xmlns="http://www.w3.org/2000/svg" width="{FlowIconSize}" height="{FlowIconSize}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="4" fill="var(--theme-color-background-secondary, #d5e8f7)" stroke="var(--theme-color-text-primary, #2c3e50)" stroke-width="2"/><circle cx="12" cy="12" r="2.5" fill="var(--theme-color-text-primary, #2c3e50)"/></svg>'
|
|
95
95
|
};
|
|
96
96
|
|
|
97
97
|
class PictProviderFlowIcons extends libFableServiceProviderBase
|
|
@@ -19,7 +19,7 @@ const _DefaultNodeTypes =
|
|
|
19
19
|
{ Hash: null, Direction: 'output', Side: 'right', Label: 'Out' }
|
|
20
20
|
],
|
|
21
21
|
ColorRole: 'neutral',
|
|
22
|
-
TitleBarColor: '#2c3e50',
|
|
22
|
+
TitleBarColor: 'var(--theme-color-text-primary, #2c3e50)',
|
|
23
23
|
BodyStyle: {}
|
|
24
24
|
},
|
|
25
25
|
'start':
|
|
@@ -33,11 +33,11 @@ const _DefaultNodeTypes =
|
|
|
33
33
|
{ Hash: null, Direction: 'output', Side: 'right', Label: 'Out' }
|
|
34
34
|
],
|
|
35
35
|
ColorRole: 'success',
|
|
36
|
-
TitleBarColor: '#27ae60',
|
|
36
|
+
TitleBarColor: 'var(--theme-color-status-success, #27ae60)',
|
|
37
37
|
BodyStyle:
|
|
38
38
|
{
|
|
39
|
-
'fill': '#eafaf1',
|
|
40
|
-
'stroke': '#27ae60'
|
|
39
|
+
'fill': 'var(--theme-color-background-hover, #eafaf1)',
|
|
40
|
+
'stroke': 'var(--theme-color-status-success, #27ae60)'
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
'end':
|
|
@@ -51,11 +51,11 @@ const _DefaultNodeTypes =
|
|
|
51
51
|
{ Hash: null, Direction: 'input', Side: 'left', Label: 'In' }
|
|
52
52
|
],
|
|
53
53
|
ColorRole: 'accent',
|
|
54
|
-
TitleBarColor: '#1abc9c',
|
|
54
|
+
TitleBarColor: 'var(--theme-color-brand-primary, #1abc9c)',
|
|
55
55
|
BodyStyle:
|
|
56
56
|
{
|
|
57
57
|
'fill': '#e8f8f5',
|
|
58
|
-
'stroke': '#1abc9c'
|
|
58
|
+
'stroke': 'var(--theme-color-brand-primary, #1abc9c)'
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
'halt':
|
|
@@ -69,11 +69,11 @@ const _DefaultNodeTypes =
|
|
|
69
69
|
{ Hash: null, Direction: 'input', Side: 'left', Label: 'In' }
|
|
70
70
|
],
|
|
71
71
|
ColorRole: 'error',
|
|
72
|
-
TitleBarColor: '#e74c3c',
|
|
72
|
+
TitleBarColor: 'var(--theme-color-status-error, #e74c3c)',
|
|
73
73
|
BodyStyle:
|
|
74
74
|
{
|
|
75
|
-
'fill': '#fdedec',
|
|
76
|
-
'stroke': '#e74c3c'
|
|
75
|
+
'fill': 'var(--theme-color-background-hover, #fdedec)',
|
|
76
|
+
'stroke': 'var(--theme-color-status-error, #e74c3c)'
|
|
77
77
|
}
|
|
78
78
|
},
|
|
79
79
|
'decision':
|