@floegence/floe-webapp-core 0.86.75 → 0.86.76
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/diagrams/Diagram.js +129 -120
- package/dist/diagrams.css +5 -3
- package/dist/floe-webapp-core.css +1 -1
- package/package.json +1 -1
package/dist/diagrams/Diagram.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { insert as
|
|
2
|
-
import { createSignal as m, onCleanup as Z, Show as O, createMemo as
|
|
3
|
-
import { Dialog as
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { insert as c, createComponent as v, memo as V, mergeProps as H, effect as N, setAttribute as D, className as K, template as S, use as J, setStyleProperty as U, delegateEvents as Q } from "solid-js/web";
|
|
2
|
+
import { createSignal as m, onCleanup as Z, Show as O, createMemo as X, createEffect as j, onMount as Y, on as p } from "solid-js";
|
|
3
|
+
import { Dialog as ee } from "../components/ui/Dialog.js";
|
|
4
|
+
import { StableText as B } from "../components/ui/StableText.js";
|
|
5
|
+
import { renderDiagram as te, sanitizeDiagramSvg as ne } from "./render.js";
|
|
6
|
+
var oe = /* @__PURE__ */ S("<div class=floe-diagram-status role=status>"), re = /* @__PURE__ */ S("<div class=floe-diagram-error role=alert><strong></strong><pre></pre><pre><code>"), ie = /* @__PURE__ */ S("<div class=floe-diagram-viewport data-floe-workbench-text-selection-surface=true><div class=floe-diagram-svg>"), ae = /* @__PURE__ */ S("<button type=button>"), le = /* @__PURE__ */ S("<pre class=floe-diagram-source data-floe-workbench-text-selection-surface=true><code>"), se = /* @__PURE__ */ S("<div class=floe-diagram><div class=floe-diagram-toolbar><button type=button>−</button><button type=button></button><button type=button>+"), ce = /* @__PURE__ */ S("<section><div class=floe-diagram-toolbar><button type=button></button><button type=button></button><span class=floe-diagram-feedback role=status></span><button type=button>⤢</button></div><div>");
|
|
7
|
+
const ve = {
|
|
7
8
|
diagram: "Diagram",
|
|
8
9
|
loading: "Rendering diagram…",
|
|
9
10
|
unavailable: "Diagram unavailable",
|
|
@@ -18,159 +19,167 @@ const me = {
|
|
|
18
19
|
zoomIn: "Zoom in",
|
|
19
20
|
zoomOut: "Zoom out",
|
|
20
21
|
fit: "Fit"
|
|
21
|
-
},
|
|
22
|
+
}, G = (e) => {
|
|
22
23
|
let s;
|
|
23
|
-
const [A, R] = m(!1), [T, I] = m(0), [
|
|
24
|
-
j(() => e.onStatus?.(x())),
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
24
|
+
const [A, R] = m(!1), [T, I] = m(0), [b, P] = m(0), [x, $] = m("loading"), [W, w] = m(""), L = X(() => e.source);
|
|
25
|
+
j(() => e.onStatus?.(x())), Y(() => {
|
|
26
|
+
const l = new ResizeObserver((o) => {
|
|
27
|
+
const a = Math.round(o[0]?.contentRect.width ?? s.clientWidth);
|
|
28
|
+
a > 0 && I(a);
|
|
28
29
|
});
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
30
|
+
l.observe(s);
|
|
31
|
+
const i = new IntersectionObserver((o) => {
|
|
32
|
+
o.some((a) => a.isIntersecting) && (R(!0), i.disconnect());
|
|
32
33
|
}, {
|
|
33
34
|
rootMargin: "200px"
|
|
34
35
|
});
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
i.observe(s);
|
|
37
|
+
const g = s.ownerDocument.fonts, t = () => P((o) => o + 1);
|
|
38
|
+
g?.addEventListener("loadingdone", t), Z(() => {
|
|
39
|
+
l.disconnect(), i.disconnect(), g?.removeEventListener("loadingdone", t);
|
|
39
40
|
});
|
|
40
|
-
}), j(
|
|
41
|
-
if (!
|
|
42
|
-
const
|
|
41
|
+
}), j(p([L, T, A, b, () => e.revision], ([l, i, g]) => {
|
|
42
|
+
if (!g || !i) return;
|
|
43
|
+
const t = new AbortController(), o = s.ownerDocument, a = getComputedStyle(s);
|
|
43
44
|
$("loading"), w("");
|
|
44
|
-
const
|
|
45
|
-
if (
|
|
46
|
-
const
|
|
47
|
-
for (let C = 0;
|
|
48
|
-
if (
|
|
49
|
-
const
|
|
50
|
-
|
|
45
|
+
const u = (d) => {
|
|
46
|
+
if (t.signal.aborted || !s.isConnected) return;
|
|
47
|
+
const h = o.getSelection();
|
|
48
|
+
for (let C = 0; h && C < h.rangeCount; C++)
|
|
49
|
+
if (h.getRangeAt(C).intersectsNode(s)) {
|
|
50
|
+
const n = () => {
|
|
51
|
+
o.removeEventListener("selectionchange", n), u(d);
|
|
51
52
|
};
|
|
52
|
-
|
|
53
|
+
o.addEventListener("selectionchange", n, {
|
|
53
54
|
once: !0,
|
|
54
|
-
signal:
|
|
55
|
+
signal: t.signal
|
|
55
56
|
});
|
|
56
57
|
return;
|
|
57
58
|
}
|
|
58
|
-
const f =
|
|
59
|
-
f.innerHTML =
|
|
59
|
+
const f = o.createElement("template");
|
|
60
|
+
f.innerHTML = ne(d.svg, o);
|
|
60
61
|
const M = f.content.querySelector("svg");
|
|
61
62
|
M && e.expanded && (M.style.maxWidth = "none"), s.replaceChildren(f.content), $("ready");
|
|
62
63
|
};
|
|
63
|
-
(e.render ??
|
|
64
|
-
signal:
|
|
65
|
-
maxWidth:
|
|
66
|
-
document:
|
|
67
|
-
fontFamily:
|
|
68
|
-
fontFamilyMono:
|
|
69
|
-
fontSize: parseFloat(
|
|
64
|
+
(e.render ?? te)(l, {
|
|
65
|
+
signal: t.signal,
|
|
66
|
+
maxWidth: i,
|
|
67
|
+
document: o,
|
|
68
|
+
fontFamily: a.fontFamily,
|
|
69
|
+
fontFamilyMono: a.getPropertyValue("--font-mono").trim() || "monospace",
|
|
70
|
+
fontSize: parseFloat(a.fontSize) || 16,
|
|
70
71
|
links: !!e.onOpenLink
|
|
71
|
-
}).then(
|
|
72
|
-
|
|
73
|
-
}), Z(() =>
|
|
72
|
+
}).then(u).catch((d) => {
|
|
73
|
+
t.signal.aborted || (s.replaceChildren(), w(d instanceof Error ? d.message : String(d)), $("error"));
|
|
74
|
+
}), Z(() => t.abort());
|
|
74
75
|
}));
|
|
75
|
-
const z = (
|
|
76
|
-
const
|
|
77
|
-
if (!
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
!
|
|
76
|
+
const z = (l) => {
|
|
77
|
+
const i = l.target instanceof Element ? l.target.closest("a") : null;
|
|
78
|
+
if (!i) return;
|
|
79
|
+
l.preventDefault();
|
|
80
|
+
const g = i.getAttribute("href");
|
|
81
|
+
!g || !/^(?:https?:\/\/|mailto:)/i.test(g) || !e.onOpenLink || Promise.resolve(e.onOpenLink(g)).catch(() => {
|
|
81
82
|
w(e.labels.unavailable), $("error");
|
|
82
83
|
});
|
|
83
84
|
};
|
|
84
|
-
return
|
|
85
|
-
var
|
|
86
|
-
|
|
87
|
-
var
|
|
88
|
-
return typeof
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
return (() => {
|
|
86
|
+
var l = ie(), i = l.firstChild;
|
|
87
|
+
i.$$click = z;
|
|
88
|
+
var g = s;
|
|
89
|
+
return typeof g == "function" ? J(g, i) : s = i, c(l, v(O, {
|
|
90
|
+
get when() {
|
|
91
|
+
return x() === "loading";
|
|
92
|
+
},
|
|
93
|
+
get children() {
|
|
94
|
+
var t = oe();
|
|
95
|
+
return c(t, () => e.labels.loading), t;
|
|
96
|
+
}
|
|
97
|
+
}), null), c(l, v(O, {
|
|
98
|
+
get when() {
|
|
99
|
+
return x() === "error";
|
|
100
|
+
},
|
|
101
|
+
get children() {
|
|
102
|
+
var t = re(), o = t.firstChild, a = o.nextSibling, u = a.nextSibling, d = u.firstChild;
|
|
103
|
+
return c(o, () => e.labels.unavailable), c(a, W), c(d, () => e.source), t;
|
|
104
|
+
}
|
|
105
|
+
}), null), N((t) => {
|
|
106
|
+
var o = e.expanded ? "true" : void 0, a = e.expanded ? "auto" : "hidden", u = !!e.expanded, d = x() === "loading", h = e.scale ?? 1;
|
|
107
|
+
return o !== t.e && D(l, "data-floe-local-interaction-surface", t.e = o), a !== t.t && U(l, "overflow", t.t = a), u !== t.a && i.classList.toggle("floe-diagram-zoomed", t.a = u), d !== t.o && D(i, "aria-busy", t.o = d), h !== t.i && U(i, "--floe-diagram-scale", t.i = h), t;
|
|
91
108
|
}, {
|
|
92
109
|
e: void 0,
|
|
93
110
|
t: void 0,
|
|
94
111
|
a: void 0,
|
|
95
112
|
o: void 0,
|
|
96
113
|
i: void 0
|
|
97
|
-
}),
|
|
98
|
-
})()
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
get children() {
|
|
103
|
-
var o = oe();
|
|
104
|
-
return d(o, () => e.labels.loading), o;
|
|
105
|
-
}
|
|
106
|
-
}), y(O, {
|
|
107
|
-
get when() {
|
|
108
|
-
return x() === "error";
|
|
109
|
-
},
|
|
110
|
-
get children() {
|
|
111
|
-
var o = re(), r = o.firstChild, c = r.nextSibling, i = c.nextSibling, n = i.firstChild;
|
|
112
|
-
return d(r, () => e.labels.unavailable), d(c, W), d(n, () => e.source), o;
|
|
113
|
-
}
|
|
114
|
-
})];
|
|
115
|
-
}, fe = (e) => {
|
|
116
|
-
const [s, A] = m(!1), [R, T] = m(!1), [I, v] = m(1), [P, x] = m(0), [$, W] = m("loading"), [w, L] = m("idle");
|
|
117
|
-
let z, o = !1, r;
|
|
114
|
+
}), l;
|
|
115
|
+
})();
|
|
116
|
+
}, be = (e) => {
|
|
117
|
+
const [s, A] = m(!1), [R, T] = m(!1), [I, b] = m(1), [P, x] = m(0), [$, W] = m("loading"), [w, L] = m("idle");
|
|
118
|
+
let z, l = !1, i;
|
|
118
119
|
Z(() => {
|
|
119
|
-
|
|
120
|
+
l = !0, clearTimeout(z);
|
|
120
121
|
});
|
|
121
|
-
const
|
|
122
|
+
const g = async () => {
|
|
122
123
|
try {
|
|
123
|
-
await (e.onCopy ? e.onCopy(e.source) : navigator.clipboard.writeText(e.source)),
|
|
124
|
+
await (e.onCopy ? e.onCopy(e.source) : navigator.clipboard.writeText(e.source)), l || L("copied");
|
|
124
125
|
} catch {
|
|
125
|
-
|
|
126
|
+
l || L("error");
|
|
126
127
|
}
|
|
127
|
-
|
|
128
|
-
},
|
|
129
|
-
const
|
|
130
|
-
T(
|
|
128
|
+
l || (clearTimeout(z), z = setTimeout(() => L("idle"), 1600));
|
|
129
|
+
}, t = (o) => {
|
|
130
|
+
const a = typeof document < "u" ? document.activeElement : null, u = a instanceof Element && !!a.closest('[role="dialog"]');
|
|
131
|
+
T(o), !o && u && i?.isConnected && i.focus({
|
|
131
132
|
preventScroll: !0
|
|
132
133
|
});
|
|
133
134
|
};
|
|
134
135
|
return (() => {
|
|
135
|
-
var
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
136
|
+
var o = ce(), a = o.firstChild, u = a.firstChild, d = u.nextSibling, h = d.nextSibling, f = h.nextSibling, M = a.nextSibling;
|
|
137
|
+
u.$$click = () => A((n) => !n), c(u, v(B, {
|
|
138
|
+
get reserve() {
|
|
139
|
+
return [e.labels.source, e.labels.preview];
|
|
140
|
+
},
|
|
141
|
+
get children() {
|
|
142
|
+
return V(() => !!s())() ? e.labels.preview : e.labels.source;
|
|
143
|
+
}
|
|
144
|
+
})), d.$$click = () => {
|
|
145
|
+
g();
|
|
146
|
+
}, c(d, () => e.labels.copy), c(h, v(B, {
|
|
147
|
+
get reserve() {
|
|
148
|
+
return [e.labels.copied, e.labels.copyFailed];
|
|
149
|
+
},
|
|
150
|
+
get children() {
|
|
151
|
+
return V(() => w() === "copied")() ? e.labels.copied : V(() => w() === "error")() ? e.labels.copyFailed : "";
|
|
152
|
+
}
|
|
153
|
+
})), c(a, v(O, {
|
|
145
154
|
get when() {
|
|
146
155
|
return $() === "error";
|
|
147
156
|
},
|
|
148
157
|
get children() {
|
|
149
|
-
var
|
|
150
|
-
return
|
|
158
|
+
var n = ae();
|
|
159
|
+
return n.$$click = () => x((y) => y + 1), c(n, () => e.labels.retry), n;
|
|
151
160
|
}
|
|
152
161
|
}), f), f.$$click = () => {
|
|
153
|
-
|
|
162
|
+
b(1), T(!0);
|
|
154
163
|
};
|
|
155
|
-
var C =
|
|
156
|
-
return typeof C == "function" ?
|
|
164
|
+
var C = i;
|
|
165
|
+
return typeof C == "function" ? J(C, f) : i = f, c(M, v(G, H(e, {
|
|
157
166
|
get revision() {
|
|
158
167
|
return P();
|
|
159
168
|
},
|
|
160
169
|
onStatus: W
|
|
161
|
-
}))),
|
|
170
|
+
}))), c(o, v(O, {
|
|
162
171
|
get when() {
|
|
163
172
|
return s();
|
|
164
173
|
},
|
|
165
174
|
get children() {
|
|
166
|
-
var
|
|
167
|
-
return
|
|
175
|
+
var n = le(), y = n.firstChild;
|
|
176
|
+
return c(y, () => e.source), n;
|
|
168
177
|
}
|
|
169
|
-
}), null),
|
|
178
|
+
}), null), c(o, v(ee, {
|
|
170
179
|
get open() {
|
|
171
180
|
return R();
|
|
172
181
|
},
|
|
173
|
-
onOpenChange:
|
|
182
|
+
onOpenChange: t,
|
|
174
183
|
get title() {
|
|
175
184
|
return e.labels.diagram;
|
|
176
185
|
},
|
|
@@ -179,15 +188,15 @@ const me = {
|
|
|
179
188
|
},
|
|
180
189
|
class: "floe-diagram-dialog",
|
|
181
190
|
get children() {
|
|
182
|
-
var
|
|
183
|
-
return
|
|
184
|
-
|
|
185
|
-
}, k.$$click = () =>
|
|
191
|
+
var n = se(), y = n.firstChild, k = y.firstChild, _ = k.nextSibling, F = _.nextSibling;
|
|
192
|
+
return n.$$keydown = (r) => {
|
|
193
|
+
r.target instanceof Element && r.target.closest("button,input,textarea") || ((r.key === "+" || r.key === "=") && (r.preventDefault(), b((E) => Math.min(4, E + 0.25))), r.key === "-" && (r.preventDefault(), b((E) => Math.max(0.5, E - 0.25))), r.key === "0" && (r.preventDefault(), b(1)));
|
|
194
|
+
}, k.$$click = () => b((r) => Math.max(0.5, r - 0.25)), _.$$click = () => b(1), c(_, () => e.labels.fit), F.$$click = () => b((r) => Math.min(4, r + 0.25)), c(n, v(O, {
|
|
186
195
|
get when() {
|
|
187
196
|
return R();
|
|
188
197
|
},
|
|
189
198
|
get children() {
|
|
190
|
-
return
|
|
199
|
+
return v(G, H(e, {
|
|
191
200
|
expanded: !0,
|
|
192
201
|
get scale() {
|
|
193
202
|
return I();
|
|
@@ -197,28 +206,28 @@ const me = {
|
|
|
197
206
|
}
|
|
198
207
|
}));
|
|
199
208
|
}
|
|
200
|
-
}), null), N((
|
|
209
|
+
}), null), N((r) => {
|
|
201
210
|
var E = e.labels.zoomOut, q = e.labels.zoomIn;
|
|
202
|
-
return E !==
|
|
211
|
+
return E !== r.e && D(k, "aria-label", r.e = E), q !== r.t && D(F, "aria-label", r.t = q), r;
|
|
203
212
|
}, {
|
|
204
213
|
e: void 0,
|
|
205
214
|
t: void 0
|
|
206
|
-
}),
|
|
215
|
+
}), n;
|
|
207
216
|
}
|
|
208
|
-
}), null), N((
|
|
209
|
-
var
|
|
210
|
-
return
|
|
217
|
+
}), null), N((n) => {
|
|
218
|
+
var y = "floe-diagram " + (e.class ?? ""), k = s(), _ = $() !== "ready", F = e.labels.expand, r = s();
|
|
219
|
+
return y !== n.e && K(o, n.e = y), k !== n.t && D(u, "aria-pressed", n.t = k), _ !== n.a && (f.disabled = n.a = _), F !== n.o && D(f, "aria-label", n.o = F), r !== n.i && (M.hidden = n.i = r), n;
|
|
211
220
|
}, {
|
|
212
221
|
e: void 0,
|
|
213
222
|
t: void 0,
|
|
214
223
|
a: void 0,
|
|
215
224
|
o: void 0,
|
|
216
225
|
i: void 0
|
|
217
|
-
}),
|
|
226
|
+
}), o;
|
|
218
227
|
})();
|
|
219
228
|
};
|
|
220
|
-
|
|
229
|
+
Q(["click", "keydown"]);
|
|
221
230
|
export {
|
|
222
|
-
|
|
223
|
-
|
|
231
|
+
be as Diagram,
|
|
232
|
+
ve as diagramLabelsEnUS
|
|
224
233
|
};
|
package/dist/diagrams.css
CHANGED
|
@@ -14,11 +14,13 @@
|
|
|
14
14
|
.floe-diagram-toolbar button:hover,.floe-diagram-toolbar button[aria-pressed=true] { background:var(--accent); }
|
|
15
15
|
.floe-diagram-toolbar button:focus-visible { outline:2px solid var(--ring); outline-offset:-2px; }
|
|
16
16
|
.floe-diagram-feedback { flex:1; min-width:0; font-size:.85em; }
|
|
17
|
-
.floe-diagram-viewport { padding:.75rem; min-width:0; max-height:65vh; }
|
|
17
|
+
.floe-diagram-viewport { position:relative; box-sizing:border-box; padding:.75rem; min-width:0; height:clamp(12rem,36vw,24rem); max-height:65vh; }
|
|
18
18
|
.floe-diagram-svg { min-height:2rem; width:100%; }
|
|
19
19
|
.floe-diagram-svg > svg { display:block; max-width:100%; height:auto; margin:auto; }
|
|
20
|
+
.floe-diagram-source { box-sizing:border-box; height:clamp(12rem,36vw,24rem); max-height:65vh; overflow:auto; }
|
|
20
21
|
.floe-diagram-source,.floe-diagram-error pre { white-space:pre-wrap; overflow-wrap:anywhere; margin:0; padding:.75rem; font:12px/1.6 var(--pele-font-mono); }
|
|
21
|
-
.floe-diagram-status,.floe-diagram-error { padding:.75rem; }
|
|
22
|
+
.floe-diagram-status,.floe-diagram-error { position:absolute; inset:0; box-sizing:border-box; padding:.75rem; overflow:auto; background:var(--background); }
|
|
23
|
+
.floe-diagram-status { display:grid; place-items:center; }
|
|
22
24
|
.floe-diagram-error { color:var(--error,var(--foreground)); }
|
|
23
25
|
.floe-diagram-dialog { width:min(94vw,1100px); max-width:94vw; }
|
|
24
26
|
@media (forced-colors:active) { .floe-diagram { --pele-fg:CanvasText; --pele-line:CanvasText; --pele-bg:Canvas; --pele-surface:Canvas; --pele-surface-alt:Canvas; --pele-border:CanvasText; --pele-accent:Highlight; } }
|
|
@@ -26,4 +28,4 @@
|
|
|
26
28
|
.floe-diagram-zoomed > svg { width:calc(100% * var(--floe-diagram-scale,1)); max-width:none; }
|
|
27
29
|
.floe-diagram-toolbar button:disabled { opacity:.5; cursor:default; }
|
|
28
30
|
|
|
29
|
-
.floe-diagram-svg:not(.floe-diagram-zoomed) > svg { max-height:60vh; }
|
|
31
|
+
.floe-diagram-svg:not(.floe-diagram-zoomed) > svg { max-height:min(60vh,calc(clamp(12rem,36vw,24rem) - 1.5rem)); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.floe-diagram{--pele-bg: var(--background);--pele-fg: var(--foreground);--pele-muted: var(--muted-foreground);--pele-line: var(--muted-foreground);--pele-surface: var(--card);--pele-surface-alt: var(--muted);--pele-border: var(--border);--pele-accent: var(--primary);--pele-font: var(--font-sans, Inter, system-ui, sans-serif);--pele-font-mono: var(--font-mono, monospace);--pele-fg-on-light: #171717;--pele-fg-on-dark: #fafafa;min-width:0;background:var(--background);color:var(--foreground);font:14px/1.5 var(--pele-font);border:1px solid var(--border);border-radius:.5rem;overflow:hidden}.floe-diagram-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem;padding:.375rem;border-bottom:1px solid var(--border)}.floe-diagram-toolbar button{font:inherit;white-space:nowrap;border:0;border-radius:.25rem;padding:.25rem .5rem;background:transparent;color:inherit;cursor:pointer}.floe-diagram-toolbar button:hover,.floe-diagram-toolbar button[aria-pressed=true]{background:var(--accent)}.floe-diagram-toolbar button:focus-visible{outline:2px solid var(--ring);outline-offset:-2px}.floe-diagram-feedback{flex:1;min-width:0;font-size:.85em}.floe-diagram-viewport{padding:.75rem;min-width:0;max-height:65vh}.floe-diagram-svg{min-height:2rem;width:100%}.floe-diagram-svg>svg{display:block;max-width:100%;height:auto;margin:auto}.floe-diagram-source,.floe-diagram-error pre{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:.75rem;font:12px/1.6 var(--pele-font-mono)}.floe-diagram-status,.floe-diagram-error{padding:.75rem}.floe-diagram-error{color:var(--error,var(--foreground))}.floe-diagram-dialog{width:min(94vw,1100px);max-width:94vw}@media(forced-colors:active){.floe-diagram{--pele-fg:CanvasText;--pele-line:CanvasText;--pele-bg:Canvas;--pele-surface:Canvas;--pele-surface-alt:Canvas;--pele-border:CanvasText;--pele-accent:Highlight}}.floe-diagram-zoomed>svg{width:calc(100% * var(--floe-diagram-scale,1));max-width:none}.floe-diagram-toolbar button:disabled{opacity:.5;cursor:default}.floe-diagram-svg:not(.floe-diagram-zoomed)>svg{max-height:60vh}
|
|
1
|
+
.floe-diagram{--pele-bg: var(--background);--pele-fg: var(--foreground);--pele-muted: var(--muted-foreground);--pele-line: var(--muted-foreground);--pele-surface: var(--card);--pele-surface-alt: var(--muted);--pele-border: var(--border);--pele-accent: var(--primary);--pele-font: var(--font-sans, Inter, system-ui, sans-serif);--pele-font-mono: var(--font-mono, monospace);--pele-fg-on-light: #171717;--pele-fg-on-dark: #fafafa;min-width:0;background:var(--background);color:var(--foreground);font:14px/1.5 var(--pele-font);border:1px solid var(--border);border-radius:.5rem;overflow:hidden}.floe-diagram-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem;padding:.375rem;border-bottom:1px solid var(--border)}.floe-diagram-toolbar button{font:inherit;white-space:nowrap;border:0;border-radius:.25rem;padding:.25rem .5rem;background:transparent;color:inherit;cursor:pointer}.floe-diagram-toolbar button:hover,.floe-diagram-toolbar button[aria-pressed=true]{background:var(--accent)}.floe-diagram-toolbar button:focus-visible{outline:2px solid var(--ring);outline-offset:-2px}.floe-diagram-feedback{flex:1;min-width:0;font-size:.85em}.floe-diagram-viewport{position:relative;box-sizing:border-box;padding:.75rem;min-width:0;height:clamp(12rem,36vw,24rem);max-height:65vh}.floe-diagram-svg{min-height:2rem;width:100%}.floe-diagram-svg>svg{display:block;max-width:100%;height:auto;margin:auto}.floe-diagram-source{box-sizing:border-box;height:clamp(12rem,36vw,24rem);max-height:65vh;overflow:auto}.floe-diagram-source,.floe-diagram-error pre{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:.75rem;font:12px/1.6 var(--pele-font-mono)}.floe-diagram-status,.floe-diagram-error{position:absolute;inset:0;box-sizing:border-box;padding:.75rem;overflow:auto;background:var(--background)}.floe-diagram-status{display:grid;place-items:center}.floe-diagram-error{color:var(--error,var(--foreground))}.floe-diagram-dialog{width:min(94vw,1100px);max-width:94vw}@media(forced-colors:active){.floe-diagram{--pele-fg:CanvasText;--pele-line:CanvasText;--pele-bg:Canvas;--pele-surface:Canvas;--pele-surface-alt:Canvas;--pele-border:CanvasText;--pele-accent:Highlight}}.floe-diagram-zoomed>svg{width:calc(100% * var(--floe-diagram-scale,1));max-width:none}.floe-diagram-toolbar button:disabled{opacity:.5;cursor:default}.floe-diagram-svg:not(.floe-diagram-zoomed)>svg{max-height:min(60vh,calc(clamp(12rem,36vw,24rem) - 1.5rem))}
|