@popcorn245/cornfield-components 0.48.0 → 0.49.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.
@@ -0,0 +1,4041 @@
1
+ // ../explorer/instance-state.js
2
+ function e() {
3
+ return {
4
+ canvas: null,
5
+ ctx: null,
6
+ labelCanvas: null,
7
+ width: 0,
8
+ height: 0,
9
+ coveredBottom: 0,
10
+ nodes: [],
11
+ edges: [],
12
+ view: "orbit",
13
+ flow: null,
14
+ rings: {
15
+ rings: [],
16
+ clusters: []
17
+ },
18
+ theme: "dark",
19
+ camera: {
20
+ x: 0,
21
+ y: 0,
22
+ zoom: 1
23
+ },
24
+ selectedNode: null,
25
+ throughChildren: !1,
26
+ selectedKind: null,
27
+ forge: null,
28
+ searchQuery: "",
29
+ searchCurrent: null,
30
+ hoverNodeId: null,
31
+ isFreeform: !1,
32
+ freeformPositions: {},
33
+ activeLayers: {
34
+ app: !0,
35
+ pkg: !0,
36
+ page: !0,
37
+ atom: !0,
38
+ molecule: !0,
39
+ token: !0,
40
+ tool: !0,
41
+ flow: !0,
42
+ table: !0,
43
+ rom: !0,
44
+ service: !0,
45
+ cloud: !0,
46
+ web: !0,
47
+ stack: !1,
48
+ machine: !1,
49
+ container: !1,
50
+ device: !1,
51
+ house: !1,
52
+ persona: !1
53
+ },
54
+ projectLayers: [],
55
+ layerOrder: [],
56
+ layerDefaults: {},
57
+ review: null,
58
+ mapNodes: [],
59
+ mapEdges: [],
60
+ live: null,
61
+ house: null,
62
+ baseNodes: [],
63
+ baseEdges: [],
64
+ proposal: null,
65
+ proposalView: "diff",
66
+ proposalSource: null,
67
+ proposalSha256: null,
68
+ proposalSlug: null,
69
+ proposalErrors: [],
70
+ mockupStates: {},
71
+ effectiveProposal: null,
72
+ whatIf: {
73
+ edits: [],
74
+ undone: []
75
+ },
76
+ whatIfOff: !1,
77
+ selectedEdge: null,
78
+ scenario: null,
79
+ forgeLit: null,
80
+ runsMap: null,
81
+ threadIndex: null,
82
+ sceneVersion: 0
83
+ };
84
+ }
85
+ // ../explorer/instance.js
86
+ var t = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
87
+ function n({ root: n = null, base: r = "", fetch: i, strings: a = {}, state: o } = {}) {
88
+ let s = n, c = s ? s.nodeType === 9 ? s : s.ownerDocument : null, l = c ? c.defaultView : null, u = /* @__PURE__ */ new Map(), d = [], f = /* @__PURE__ */ new Map(), p = !1, m = i, h = s, g = null, _ = (e, t) => {
89
+ let n = u.get(e);
90
+ return n || u.set(e, n = /* @__PURE__ */ new Set()), n.add(t), () => n.delete(t);
91
+ }, v = (e) => {
92
+ let n = String(e);
93
+ if (!r || t.test(n)) return n;
94
+ let i = new URL(r), a = i.pathname.replace(/\/+$/, "");
95
+ return new URL(a && n.startsWith("/") ? a + n : n, i).href;
96
+ }, y = () => s ? s.nodeType === 9 ? s.documentElement : s.nodeType === 11 ? s.host : s : null, b = o || e(), x = b.selectedNode || null, S = b.selectedEdge || null, C = {
97
+ node: x,
98
+ edge: S
99
+ }, w = [], T = !1, E = (e, t) => (e.node ? e.node.id : null) !== (t.node ? t.node.id : null) || e.edge !== t.edge, D = (e) => {
100
+ if (w.push(e), !T) {
101
+ T = !0;
102
+ try {
103
+ for (; w.length;) {
104
+ let e = w.shift(), t = {
105
+ node: x,
106
+ edge: S
107
+ };
108
+ if (p || !E(C, t)) continue;
109
+ let n = C;
110
+ C = t, O.emit("selection", {
111
+ ...t,
112
+ previous: n,
113
+ source: e
114
+ });
115
+ }
116
+ } finally {
117
+ T = !1;
118
+ }
119
+ }
120
+ }, ee = (e, t, n, r) => {
121
+ let i = {
122
+ node: x,
123
+ edge: S
124
+ };
125
+ x = e || null, S = t || null;
126
+ let a = E(i, {
127
+ node: x,
128
+ edge: S
129
+ }), o = !1, s = () => {
130
+ o || (o = !0, a && D(n));
131
+ };
132
+ return r || s(), {
133
+ changed: a,
134
+ previous: i,
135
+ announce: s
136
+ };
137
+ };
138
+ Object.defineProperty(b, "selectedNode", {
139
+ enumerable: !0,
140
+ configurable: !0,
141
+ get: () => x,
142
+ set: (e) => {
143
+ ee(e, S, "state", !1);
144
+ }
145
+ }), Object.defineProperty(b, "selectedEdge", {
146
+ enumerable: !0,
147
+ configurable: !0,
148
+ get: () => S,
149
+ set: (e) => {
150
+ ee(x, e, "state", !1);
151
+ }
152
+ });
153
+ let O = {
154
+ root: s,
155
+ doc: c,
156
+ win: l,
157
+ base: r,
158
+ strings: { ...a },
159
+ state: b,
160
+ url: v,
161
+ fetch(e, t) {
162
+ return (m || globalThis.fetch)(typeof e == "string" ? v(e) : e, t);
163
+ },
164
+ touchScene() {
165
+ O.state.sceneVersion++;
166
+ let e = u.get("scene");
167
+ e && e.forEach((e) => e());
168
+ },
169
+ onSceneTouch: (e) => _("scene", e),
170
+ on: _,
171
+ emit(e, t) {
172
+ let n = u.get(e);
173
+ n && [...n].forEach((e) => e(t));
174
+ },
175
+ ask(e, t) {
176
+ let n = u.get(e);
177
+ if (n) for (let e of [...n]) {
178
+ let n = e(t);
179
+ if (n !== void 0) return n;
180
+ }
181
+ },
182
+ setSelection: (e, t = null, { source: n = "api", quiet: r = !1 } = {}) => ee(e, t, n, r),
183
+ el: (e) => s ? s.querySelector(`[id="${String(e).replace(/["\\]/g, "\\$&")}"]`) : null,
184
+ attach(e) {
185
+ if (g) throw Error("This instance already has a map");
186
+ g = e, s = e, O.root = e;
187
+ let t = () => {
188
+ g === e && (g = null, s = h, O.root = h, O.release(t), p || O.emit("attach:released"));
189
+ };
190
+ return d.push(t), t;
191
+ },
192
+ active: () => !s || !c ? null : s.nodeType === 1 ? c.activeElement && s.contains(c.activeElement) ? c.activeElement : null : s.activeElement || null,
193
+ tokenReader() {
194
+ let e = y();
195
+ if (!e || !l || !l.getComputedStyle) return null;
196
+ let t = l.getComputedStyle(e);
197
+ return (e) => t.getPropertyValue(e);
198
+ },
199
+ tokenElement: y,
200
+ reducedMotion: !!(l && l.matchMedia && l.matchMedia("(prefers-reduced-motion: reduce)").matches),
201
+ dpr: () => l && l.devicePixelRatio || 1,
202
+ hidden: () => !(!c || !c.hidden && c.visibilityState !== "hidden"),
203
+ onShown(e) {
204
+ return c ? O.listen(c, "visibilitychange", () => {
205
+ O.hidden() || e();
206
+ }) : () => {};
207
+ },
208
+ offline: () => !!(l && l.navigator && l.navigator.onLine === !1),
209
+ onNetwork(e) {
210
+ if (!l) return () => {};
211
+ let t = [O.listen(l, "offline", () => e(!0)), O.listen(l, "online", () => e(!1))];
212
+ return () => t.forEach((e) => e());
213
+ },
214
+ onWindowFocus: (e) => l ? O.listen(l, "focus", () => e()) : () => {},
215
+ onPageHide: (e) => l ? O.listen(l, "pagehide", () => e()) : () => {},
216
+ onHide(e) {
217
+ return c ? O.listen(c, "visibilitychange", () => {
218
+ O.hidden() && e();
219
+ }) : () => {};
220
+ },
221
+ store: {
222
+ get(e) {
223
+ try {
224
+ return l && l.localStorage ? l.localStorage.getItem(e) : null;
225
+ } catch {
226
+ return null;
227
+ }
228
+ },
229
+ set(e, t) {
230
+ try {
231
+ l && l.localStorage && l.localStorage.setItem(e, t);
232
+ } catch {}
233
+ },
234
+ remove(e) {
235
+ try {
236
+ l && l.localStorage && l.localStorage.removeItem(e);
237
+ } catch {}
238
+ }
239
+ },
240
+ listen(e, t, n, r) {
241
+ e.addEventListener(t, n, r);
242
+ let i = () => {
243
+ e.removeEventListener(t, n, r), O.release(i);
244
+ };
245
+ return d.push(i), i;
246
+ },
247
+ own(e) {
248
+ return d.push(e), e;
249
+ },
250
+ release(e) {
251
+ let t = d.lastIndexOf(e);
252
+ t >= 0 && d.splice(t, 1);
253
+ },
254
+ slot(e, t) {
255
+ return f.has(e) || f.set(e, t(O)), f.get(e);
256
+ },
257
+ get ended() {
258
+ return p;
259
+ },
260
+ destroy() {
261
+ if (!p) {
262
+ for (p = !0; d.length;) try {
263
+ d.pop()();
264
+ } catch (e) {
265
+ console.error("An instance clean-up failed", e);
266
+ }
267
+ u.clear(), f.clear();
268
+ }
269
+ },
270
+ viewEdges: () => O.state.view === "dataflow" && O.state.flow ? O.state.flow.edges : O.state.edges
271
+ };
272
+ return O;
273
+ }
274
+ // ../explorer/flow-style.js
275
+ var r = {
276
+ outbox: {
277
+ color: "#f59e0b",
278
+ label: "Outbox → API (writes)"
279
+ },
280
+ changes: {
281
+ color: "#22d3ee",
282
+ label: "Change stream (reads back)"
283
+ },
284
+ trigger: {
285
+ color: "#a3e635",
286
+ label: "Trigger → audit_log (seq)"
287
+ },
288
+ sync: {
289
+ color: "#fb7185",
290
+ label: "Background sync (external)"
291
+ },
292
+ model: {
293
+ color: "#c084fc",
294
+ label: "Model classes feed a tier"
295
+ },
296
+ rom: {
297
+ color: "#f0abfc",
298
+ label: "ROM: change → re-bake → serve"
299
+ },
300
+ read: {
301
+ color: "#93c5fd",
302
+ label: "Server reads rows over HTTP"
303
+ },
304
+ api: {
305
+ color: "#38bdf8",
306
+ label: "App calls the API (derived from its code)"
307
+ },
308
+ build: {
309
+ color: "#d6d3d1",
310
+ label: "Build script writes files"
311
+ },
312
+ reads: {
313
+ color: "#fde047",
314
+ label: "Table → page (render reads)"
315
+ },
316
+ writes: {
317
+ color: "#f87171",
318
+ label: "Page → table (form / action)"
319
+ },
320
+ uses: {
321
+ color: "#f472b6",
322
+ label: "Stylesheet uses design tokens"
323
+ },
324
+ extends: {
325
+ color: "#5eead4",
326
+ label: "Component extends a base class"
327
+ },
328
+ calls: {
329
+ color: "#fb7185",
330
+ label: "Calls (service → service, outside system)"
331
+ },
332
+ triggers: {
333
+ color: "#a3e635",
334
+ label: "Triggers (cron, webhook, store change)"
335
+ },
336
+ delivers: {
337
+ color: "#94a3b8",
338
+ label: "Outside system → webhook endpoint"
339
+ },
340
+ "runs-on": {
341
+ color: "#a8a29e",
342
+ label: "App → the stack that serves its domain"
343
+ }
344
+ }, i = (e) => r[e.kind === "flow" ? e.flow : e.kind] || r.sync, a = {
345
+ "&": "&",
346
+ "<": "&lt;",
347
+ ">": "&gt;",
348
+ "\"": "&quot;",
349
+ "'": "&#39;"
350
+ };
351
+ function o(e) {
352
+ return String(e ?? "").replace(/[&<>"']/g, (e) => a[e]);
353
+ }
354
+ Object.freeze([
355
+ "open",
356
+ "merged",
357
+ "closed",
358
+ "draft",
359
+ "queued",
360
+ "running",
361
+ "requested",
362
+ "claimed",
363
+ "working",
364
+ "waiting",
365
+ "done",
366
+ "failed",
367
+ "stopped",
368
+ "success",
369
+ "failure",
370
+ "added",
371
+ "changed",
372
+ "removed",
373
+ "edit",
374
+ "sent-back"
375
+ ]), Object.freeze([
376
+ "added",
377
+ "changed",
378
+ "removed",
379
+ "edit"
380
+ ]), Object.freeze([
381
+ "requested",
382
+ "claimed",
383
+ "working",
384
+ "waiting",
385
+ "done",
386
+ "failed",
387
+ "stopped"
388
+ ]), Object.freeze({
389
+ quiet: "waiting",
390
+ "stop-requested": "stopped",
391
+ neutral: "done",
392
+ skipped: "done",
393
+ cancelled: "stopped",
394
+ approved: "success",
395
+ unreviewed: "waiting",
396
+ changed: "waiting",
397
+ missing: "failure",
398
+ allowed: "success",
399
+ refused: "failure",
400
+ mismatch: "failure",
401
+ pending: "running",
402
+ ok: "success",
403
+ bad: "failure",
404
+ stale: "waiting",
405
+ off: "stopped",
406
+ error: "failure",
407
+ idle: "running"
408
+ }), Object.freeze({
409
+ requested: "<circle cx=\"6\" cy=\"6\" r=\"4.2\" stroke-dasharray=\"2 1.8\"/>",
410
+ queued: "<circle cx=\"6\" cy=\"6\" r=\"4.2\" stroke-dasharray=\"2 1.8\"/>",
411
+ claimed: "<circle cx=\"6\" cy=\"6\" r=\"4.2\"/><circle cx=\"6\" cy=\"6\" r=\"1.4\" fill=\"currentColor\" stroke=\"none\"/>",
412
+ working: "<path class=\"hx-state-spin\" d=\"M6 1.8a4.2 4.2 0 1 1-4.2 4.2\"/>",
413
+ running: "<path class=\"hx-state-spin\" d=\"M6 1.8a4.2 4.2 0 1 1-4.2 4.2\"/>",
414
+ waiting: "<path d=\"M6 1.2L11 10.4H1Z\" stroke-linejoin=\"round\"/><path d=\"M6 4.6v2.7M6 8.6v.1\"/>",
415
+ done: "<path d=\"M2 6.4l2.6 2.6L10 3.4\"/>",
416
+ success: "<path d=\"M2 6.4l2.6 2.6L10 3.4\"/>",
417
+ failed: "<path d=\"M2.6 2.6l6.8 6.8M9.4 2.6L2.6 9.4\"/>",
418
+ failure: "<path d=\"M2.6 2.6l6.8 6.8M9.4 2.6L2.6 9.4\"/>",
419
+ stopped: "<rect x=\"2.4\" y=\"2.4\" width=\"7.2\" height=\"7.2\" rx=\"1\" fill=\"currentColor\"/>",
420
+ neutral: "<path d=\"M2.4 6h7.2\"/>",
421
+ skipped: "<path d=\"M2.4 6h7.2\"/>",
422
+ cancelled: "<circle cx=\"6\" cy=\"6\" r=\"4.2\"/><path d=\"M3 9L9 3\"/>",
423
+ "sent-back": "<path d=\"M4.6 2.2L2 4.8l2.6 2.6\"/><path d=\"M2.2 4.8H7a2.8 2.8 0 0 1 0 5.6H4.6\"/>"
424
+ }), Object.freeze([
425
+ ["code", "Code: a branch and a pull request"],
426
+ ["summary", "Summary of the conversation"],
427
+ ["brief", "A brief for another run"],
428
+ ["proposal", "A proposal drafted from the thread"]
429
+ ]), Object.freeze({
430
+ merged: "done",
431
+ closed: "stopped",
432
+ quiet: "waiting",
433
+ "stop-requested": "stopped"
434
+ }), Object.freeze([
435
+ "minutes",
436
+ "turns",
437
+ "cost",
438
+ "tokens"
439
+ ]);
440
+ // ../core/strings.js
441
+ var s = Object.freeze({
442
+ layers: "Layers",
443
+ layersAll: "All",
444
+ layersNone: "None",
445
+ overlays: "Overlays",
446
+ dataFlow: "Flow",
447
+ house: "House",
448
+ proposals: "Proposals",
449
+ issuesAndPrs: "Work",
450
+ searchPlaceholder: "Search...",
451
+ searchNoMatch: "No match for",
452
+ signOut: "Sign out",
453
+ poweredBy: "powered by cornfield",
454
+ before: "Before",
455
+ diff: "Diff",
456
+ after: "After",
457
+ closeProposal: "Close",
458
+ approve: "Approve",
459
+ sendBack: "Send back",
460
+ sendBackWithNote: "Send back with this note",
461
+ approveAnyway: "Approve anyway",
462
+ sendBackAnyway: "Send back anyway",
463
+ undo: "Undo",
464
+ approved: "Approved",
465
+ myEdits: "My edits",
466
+ showWholeMap: "Show the whole map",
467
+ wholeMap: "Whole map",
468
+ hiddenWhileReviewing: "hidden while reviewing",
469
+ yourEdits: "Your edits",
470
+ cancelLanding: "Cancel landing",
471
+ queueIt: "Queue it",
472
+ reviewNoteLabel: "Note for the drafting agent",
473
+ reviewNotePlaceholder: "What should change?",
474
+ openSpecsList: "Open the Specs list",
475
+ changes: "Changes",
476
+ personasAndScenarios: "Personas and scenarios",
477
+ scenarios: "Scenarios",
478
+ anyone: "Anyone",
479
+ notInAnyScenario: "Not in any scenario",
480
+ steps: "Steps",
481
+ previousStep: "Previous",
482
+ nextStep: "Next",
483
+ pause: "Pause",
484
+ play: "Play",
485
+ playAgain: "Play again",
486
+ nextScenario: "Next scenario",
487
+ notChecked: "Not checked",
488
+ tabSpecs: "Specs",
489
+ tabPulls: "PRs",
490
+ tabIssues: "Issues",
491
+ tabThreads: "Threads",
492
+ tabRuns: "Runs",
493
+ tabDeploys: "Deploys",
494
+ waitingOnYou: "waiting on you",
495
+ toDecide: "To decide",
496
+ withAgent: "With the agent",
497
+ approvedGroup: "Approved",
498
+ drafts: "Drafts",
499
+ needsYou: "Needs you",
500
+ inMotion: "In motion",
501
+ finished: "Finished",
502
+ answer: "Answer",
503
+ newIdea: "New idea",
504
+ landIt: "Land it",
505
+ startAgent: "Start an agent",
506
+ askRunner: "Ask the runner",
507
+ startAgain: "Start again",
508
+ stop: "Stop",
509
+ continueRun: "Continue",
510
+ reply: "Reply",
511
+ openFile: "Open file",
512
+ openRoute: "Open route",
513
+ startRun: "Start a run",
514
+ copySpec: "Copy Spec",
515
+ frame: "Frame them",
516
+ throughChildren: "Include its children's lines",
517
+ hintInspect: "Click a node to see what it is",
518
+ hintInspectTouch: "Tap a node to see what it is",
519
+ hintDrag: "Drag nodes to move • Double-click to inspect",
520
+ hintDragTouch: "Drag nodes to move • Double-tap to inspect",
521
+ hintDataFlow: "Data flow: browser → servers → API → tables → services → outside",
522
+ loading: "Loading topology.json …",
523
+ errorTitle: "The map could not be loaded",
524
+ retry: "Retry",
525
+ sourceLoading: "Loading the map …",
526
+ sourceSignedOut: "You are not signed in to cornfield",
527
+ sourceSignInText: "This map is behind cornfield's sign-in.",
528
+ sourceNotMaintainer: "This map is for the project's maintainers",
529
+ sourceNotMaintainerText: "You are signed in to cornfield, but not as a maintainer.",
530
+ sourceSignIn: "Sign in to cornfield",
531
+ sourceNotListed: "This page is not listed by that cornfield",
532
+ sourceNotListedHint: "Add this origin to embed.origins on the server:",
533
+ sourceOffline: "The map cannot be reached",
534
+ sourceOfflineText: "Check the connection, then try again.",
535
+ sourceBadAddress: "That is not the address of a cornfield server",
536
+ sourceVersion: "This map and its server are different versions",
537
+ sourceSecondMap: "This scope already has a map"
538
+ }), c = (e) => typeof e == "string" && Object.hasOwn(s, e), l = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]");
539
+ function u(e) {
540
+ return typeof e == "string" ? e.trim() ? l.test(e) ? "is one line of plain text (no line break or control character)" : [...e].length > 80 ? "is at most 80 characters" : null : "is empty (leave the key out to keep the default)" : "is text";
541
+ }
542
+ // ../explorer/engine/strings.js
543
+ var d = (e, t) => c(t) && Object.hasOwn(e.strings, t) && !u(e.strings[t]);
544
+ function f(e, t) {
545
+ for (let t of Object.keys(e.strings)) delete e.strings[t];
546
+ if (t && typeof t == "object" && !Array.isArray(t)) for (let [n, r] of Object.entries(t)) c(n) && !u(r) && (e.strings[n] = r);
547
+ }
548
+ function p(e, t) {
549
+ return d(e, t) ? e.strings[t] : c(t) ? s[t] : String(t);
550
+ }
551
+ var m = [
552
+ ["data-corn-string", (e, t) => {
553
+ e.textContent = t;
554
+ }],
555
+ ["data-corn-string-aria-label", (e, t) => e.setAttribute("aria-label", t)],
556
+ ["data-corn-string-placeholder", (e, t) => e.setAttribute("placeholder", t)]
557
+ ];
558
+ function h(e, t = e.root) {
559
+ if (t && typeof t.querySelectorAll == "function") for (let [n, r] of m) for (let i of t.querySelectorAll(`[${n}]`)) {
560
+ let t = i.getAttribute(n);
561
+ d(e, t) && r(i, e.strings[t]);
562
+ }
563
+ }
564
+ Object.freeze([
565
+ {
566
+ key: "decide",
567
+ title: "toDecide"
568
+ },
569
+ {
570
+ key: "agent",
571
+ title: "withAgent"
572
+ },
573
+ {
574
+ key: "approved",
575
+ title: "approvedGroup"
576
+ },
577
+ {
578
+ key: "drafts",
579
+ title: "drafts"
580
+ }
581
+ ]), Object.freeze([
582
+ {
583
+ key: "needs",
584
+ title: "needsYou"
585
+ },
586
+ {
587
+ key: "motion",
588
+ title: "inMotion"
589
+ },
590
+ {
591
+ key: "finished",
592
+ title: "finished"
593
+ }
594
+ ]), Object.freeze([
595
+ "to-decide",
596
+ "changed",
597
+ "sent-back",
598
+ "approved",
599
+ "draft-pr",
600
+ "local",
601
+ "unknown"
602
+ ]), Object.freeze({
603
+ "to-decide": "To decide",
604
+ changed: "Changed since approved",
605
+ "sent-back": "Sent back",
606
+ approved: "Approved",
607
+ "draft-pr": "Draft PR",
608
+ local: "Local",
609
+ unknown: "Review state unknown"
610
+ }), Object.freeze({
611
+ "to-decide": "waiting",
612
+ changed: "waiting",
613
+ "sent-back": "sent-back",
614
+ approved: "success",
615
+ "draft-pr": "draft",
616
+ local: "draft",
617
+ unknown: "failure"
618
+ });
619
+ // ../explorer/proposal-model.js
620
+ var g = (e) => !!e && !!e.mark && e.mark !== "none", _ = (e) => e.mark === "edit" ? e.editOp || "none" : e.mark || "none";
621
+ function v(e, t) {
622
+ return e === "before" ? _(t) !== "added" : e !== "after" || _(t) !== "removed";
623
+ }
624
+ function y(e, t) {
625
+ return v(e, t);
626
+ }
627
+ function b(e, t) {
628
+ let n = t.mark || "none";
629
+ return n === "edit" ? "edit" : e === "diff" ? n : "none";
630
+ }
631
+ function x(e) {
632
+ if (e.mark !== "changed" || !e.before) return e;
633
+ let t = { ...e };
634
+ for (let [n, r] of Object.entries(e.before)) r === null ? delete t[n] : t[n] = r;
635
+ return t;
636
+ }
637
+ function S(e, t) {
638
+ let n = /* @__PURE__ */ new Set();
639
+ for (let t of e) g(t) && n.add(t.id);
640
+ for (let e of t) g(e) && (n.add(e.from), n.add(e.to));
641
+ let r = new Set(n);
642
+ for (let e of t) {
643
+ let t = !e.kind && !e.dashed;
644
+ n.has(e.from) && (!t || n.has(e.to)) && r.add(e.to), n.has(e.to) && r.add(e.from);
645
+ }
646
+ return {
647
+ touched: n,
648
+ near: r
649
+ };
650
+ }
651
+ // ../core/schema.js
652
+ var C = {
653
+ root: {
654
+ color: "#f59e0b",
655
+ r: 28
656
+ },
657
+ app: {
658
+ color: "#5168ec",
659
+ r: 24
660
+ },
661
+ page: {
662
+ color: "#38bdf8",
663
+ r: 18
664
+ },
665
+ pkg: {
666
+ color: "#0f8293",
667
+ r: 24
668
+ },
669
+ core: {
670
+ color: "#14b8a6",
671
+ r: 20
672
+ },
673
+ token: {
674
+ color: "#ef409b",
675
+ r: 20
676
+ },
677
+ atom: {
678
+ color: "#108d4e",
679
+ r: 19
680
+ },
681
+ molecule: {
682
+ color: "#a855f7",
683
+ r: 21
684
+ },
685
+ tool: {
686
+ color: "#f43f5e",
687
+ r: 19
688
+ },
689
+ store: {
690
+ color: "#fb923c",
691
+ r: 20
692
+ },
693
+ table: {
694
+ color: "#fde047",
695
+ r: 18
696
+ },
697
+ rom: {
698
+ color: "#c398c6",
699
+ r: 19
700
+ },
701
+ service: {
702
+ color: "#84cc16",
703
+ r: 20
704
+ },
705
+ external: {
706
+ color: "#94a3b8",
707
+ r: 21
708
+ },
709
+ stack: {
710
+ color: "#b49fa0",
711
+ r: 22
712
+ },
713
+ machine: {
714
+ color: "#78716c",
715
+ r: 26
716
+ },
717
+ container: {
718
+ color: "#d6d3d1",
719
+ r: 12
720
+ },
721
+ persona: {
722
+ color: "#fb7185",
723
+ r: 22
724
+ },
725
+ device: {
726
+ color: "#2dd4bf",
727
+ r: 14
728
+ },
729
+ floor: {
730
+ color: "#a3e635",
731
+ r: 20
732
+ },
733
+ room: {
734
+ color: "#f7ed81",
735
+ r: 16
736
+ }
737
+ }, w = Object.freeze({
738
+ root: "circle",
739
+ app: "circle",
740
+ page: "circle",
741
+ pkg: "circle",
742
+ core: "circle",
743
+ token: "circle",
744
+ atom: "circle",
745
+ molecule: "circle",
746
+ tool: "circle",
747
+ rom: "circle",
748
+ service: "circle",
749
+ store: "rounded-square",
750
+ table: "rounded-square",
751
+ external: "hexagon",
752
+ stack: "square",
753
+ machine: "square",
754
+ container: "square",
755
+ device: "square",
756
+ floor: "square",
757
+ room: "square",
758
+ persona: "diamond"
759
+ }), T = Object.freeze([
760
+ "circle",
761
+ "rounded-square",
762
+ "hexagon",
763
+ "square",
764
+ "diamond"
765
+ ]), E = (e) => typeof e == "string" && Object.hasOwn(w, e) ? w[e] : "circle", D = ["reads", "writes"], ee = [
766
+ "calls",
767
+ "triggers",
768
+ "delivers"
769
+ ], O = ["runs-on"];
770
+ [
771
+ ...D,
772
+ ...ee,
773
+ ...O
774
+ ];
775
+ // ../explorer/cloud-model.js
776
+ var k = {
777
+ run: {
778
+ title: "Breaks now",
779
+ legend: "No tick: breaks as soon as it is down",
780
+ ticks: 0,
781
+ color: "#f87171"
782
+ },
783
+ deploy: {
784
+ title: "Breaks at the next deploy",
785
+ legend: "One tick: breaks at the next deploy, rebuild or first run",
786
+ ticks: 1,
787
+ color: "#fbbf24"
788
+ },
789
+ renew: {
790
+ title: "Breaks at the next certificate renewal",
791
+ legend: "Two ticks: breaks at the next certificate renewal",
792
+ ticks: 2,
793
+ color: "#a78bfa"
794
+ }
795
+ }, A = (e) => e && Object.hasOwn(k, e.when) ? e.when : "run", te = (e) => e && e.kind === "calls" ? k[A(e)].ticks : 0, ne = (e) => e && e.kind === "web" ? "web" : "cloud", j = Object.keys(k), re = Object.fromEntries(j.map((e, t) => [e, t])), ie = /* @__PURE__ */ new Set([
796
+ "persona",
797
+ "room",
798
+ "floor"
799
+ ]), ae = [
800
+ "external",
801
+ "machine",
802
+ "container",
803
+ "service",
804
+ "page",
805
+ "app"
806
+ ], oe = (e) => {
807
+ let t = ae.indexOf(e);
808
+ return t < 0 ? ae.length : t;
809
+ }, se = {
810
+ color: "#050608",
811
+ halo: "child"
812
+ }, ce = {
813
+ alpha: .92,
814
+ glow: 10,
815
+ edgeAlpha: .9,
816
+ edgeWidth: 2.2
817
+ }, le = (e, t) => `${e}->${t}`;
818
+ function ue(e, t, n) {
819
+ let r = new Map(t.map((e) => [e.id, e])), i = [...new Set(Array.isArray(e) ? e : [])].filter((e) => r.has(e)), a = new Set(i), o = /* @__PURE__ */ new Map(), s = (e, t) => {
820
+ o.has(e) || o.set(e, []), o.get(e).push(t);
821
+ }, c = /* @__PURE__ */ new Map();
822
+ for (let e of n) if (e && e.from && e.to) {
823
+ if (e.kind === "calls") s(e.to, {
824
+ from: e.from,
825
+ rank: re[A(e)],
826
+ browser: e.side === "browser",
827
+ key: le(e.from, e.to)
828
+ });
829
+ else if (e.kind === "triggers" && (r.get(e.from) || {}).type === "page" && (r.get(e.to) || {}).type === "service") s(e.to, {
830
+ from: e.from,
831
+ rank: 0,
832
+ browser: !1,
833
+ key: le(e.from, e.to)
834
+ });
835
+ else if (e.kind === "runs-on" && Array.isArray(e.mappings)) for (let t of e.mappings) {
836
+ if (!t || !t.service) continue;
837
+ let n = `${e.to}|${t.service}`;
838
+ c.has(n) || c.set(n, /* @__PURE__ */ new Set()), c.get(n).add(e.from);
839
+ }
840
+ }
841
+ let l = (e) => {
842
+ let t = o.get(e) || [], n = r.get(e);
843
+ if (!n || n.type !== "container" || !n.stack || !n.service) return t;
844
+ let i = [...c.get(`stack-${n.stack}|${n.service}`) || []].map((e) => ({
845
+ from: e,
846
+ rank: 0,
847
+ browser: !1,
848
+ key: null
849
+ }));
850
+ return i.length ? [...t, ...i] : t;
851
+ }, u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = j.map(() => []);
852
+ i.forEach((e) => f[0].push({
853
+ id: e,
854
+ rank: 0,
855
+ browser: !1
856
+ }));
857
+ for (let e = 0; e < f.length; e++) for (let t = 0; t < f[e].length; t++) {
858
+ let { id: n, rank: i, browser: o } = f[e][t], s = u.get(n);
859
+ if (!(s && (s.rank < i || s.rank === i && s.browser !== o))) for (let e of l(n)) {
860
+ let t = r.get(e.from);
861
+ if (!t || a.has(e.from) || ie.has(t.type)) continue;
862
+ let n = Math.max(i, e.rank), s = o || e.browser;
863
+ e.key && (!d.has(e.key) || re[d.get(e.key)] > n) && d.set(e.key, j[n]);
864
+ let c = u.get(e.from);
865
+ c && (c.rank < n || c.rank === n && (!c.browser || s)) || (u.set(e.from, {
866
+ rank: n,
867
+ when: j[n],
868
+ browser: s
869
+ }), f[n].push({
870
+ id: e.from,
871
+ rank: n,
872
+ browser: s
873
+ }));
874
+ }
875
+ }
876
+ let p = new Map([...u].map(([e, t]) => [e, {
877
+ when: t.when,
878
+ browser: t.browser
879
+ }])), m = (e) => String(r.get(e).label || e);
880
+ return {
881
+ down: i,
882
+ hits: p,
883
+ edges: d,
884
+ groups: j.map((e) => {
885
+ let t = [...p].filter(([, t]) => t.when === e).map(([e]) => e).sort((e, t) => oe(r.get(e).type) - oe(r.get(t).type) || m(e).localeCompare(m(t))), { title: n, color: i } = k[e];
886
+ return {
887
+ when: e,
888
+ title: n,
889
+ color: i,
890
+ ids: t
891
+ };
892
+ }).filter((e) => e.ids.length)
893
+ };
894
+ }
895
+ var M = null;
896
+ function de(e, t, n) {
897
+ let r = e && Array.isArray(e.down) ? e.down : [];
898
+ if (!r.length) return null;
899
+ let i = r.join("\0");
900
+ return M && M.key === i && M.nodes === t && M.edges === n || (M = {
901
+ key: i,
902
+ nodes: t,
903
+ edges: n,
904
+ radius: ue(r, t, n)
905
+ }), M.radius;
906
+ }
907
+ function fe(e, t) {
908
+ if (!t) return;
909
+ let n = new Set(t.down);
910
+ for (let r of e.nodes) {
911
+ if (n.has(r.id)) {
912
+ Object.assign(r, {
913
+ color: se.color,
914
+ alpha: 1,
915
+ labelAlpha: 1,
916
+ labelColor: "#f8fafc",
917
+ labelKeep: !0,
918
+ labelStrike: !0,
919
+ connected: !0,
920
+ glow: 0
921
+ }), r.halo === "none" && (r.halo = se.halo);
922
+ continue;
923
+ }
924
+ let e = t.hits.get(r.id);
925
+ if (!e) continue;
926
+ let i = Math.max(r.alpha, ce.alpha);
927
+ Object.assign(r, {
928
+ color: k[e.when].color,
929
+ alpha: i,
930
+ labelAlpha: i,
931
+ labelColor: "#f8fafc",
932
+ labelKeep: !0,
933
+ connected: !0,
934
+ glow: Math.max(r.glow || 0, ce.glow)
935
+ });
936
+ }
937
+ for (let n of e.edges) {
938
+ let e = t.edges.get(le(n.from, n.to));
939
+ if (!e) continue;
940
+ let r = k[e].color;
941
+ n.color = r, n.glow && (n.glowColor = r), n.alpha = Math.max(n.alpha, ce.edgeAlpha), n.width = Math.max(n.width, ce.edgeWidth), n.packet &&= {
942
+ ...n.packet,
943
+ glowColor: r
944
+ };
945
+ }
946
+ }
947
+ // ../explorer/house-model.js
948
+ var pe = /* @__PURE__ */ new Set([
949
+ "container",
950
+ "stack",
951
+ "machine"
952
+ ]);
953
+ function me(e, t) {
954
+ return !!(e.house && e.house.shown && e.house.shown.has(t.id));
955
+ }
956
+ var N = null;
957
+ function he(e) {
958
+ let t = e.house && e.house.cloudLines;
959
+ return !t || !t.length ? e.edges : (N && N.edges === e.edges && N.lines === t || (N = {
960
+ edges: e.edges,
961
+ lines: t,
962
+ all: [...e.edges, ...t]
963
+ }), N.all);
964
+ }
965
+ function ge(e, t, n) {
966
+ return e.kind === "runs-on" || e.kind === "delivers" ? "flow" : e.kind === "calls" && n && n.type === "external" ? e.rolled || !(t && pe.has(t.type)) ? "flow" : null : !e.kind && !e.dashed && t && t.type === "persona" && n && n.type === "device" || !e.kind && e.dashed && t && (t.type === "container" || t.type === "external") && n && n.type === "device" ? "link" : null;
967
+ }
968
+ var _e = [
969
+ "persona",
970
+ "machine",
971
+ "stack",
972
+ "floor",
973
+ "external"
974
+ ];
975
+ function ve(e, t) {
976
+ let n = t.house;
977
+ e.decor.rings = [], e.decor.lanes = n && n.lanes ? n.lanes : [];
978
+ for (let t of e.nodes) t.type === "room" ? (t.label = "", t.labelKeep = !1) : _e.includes(t.type) && (t.labelKeep = !0);
979
+ return n && n.cloudIds && n.cloudIds.size && Ce(e, t), e;
980
+ }
981
+ var ye = {
982
+ run: .9,
983
+ deploy: .25,
984
+ renew: .9
985
+ }, be = {
986
+ alpha: .9,
987
+ width: 2.2
988
+ }, xe = Object.keys(k), Se = (e) => xe.find((t) => k[t].ticks === (e.ticks || 0)) || "run";
989
+ function Ce(e, t) {
990
+ let n = t.house, r = t.scenario ? de(t.scenario, t.nodes, t.edges) : null, i = !t.scenario && !!t.selectedNode, a = new Map((n.cloudLines || []).map((e) => [`${e.from}->${e.to}|${e.when}`, e])), o = r ? new Set(r.down) : null;
991
+ e.edges = e.edges.filter((e) => {
992
+ if (e.kind !== "calls" || !n.cloudIds.has(e.to)) return !0;
993
+ let t = Se(e);
994
+ if (r) {
995
+ let i = a.get(`${e.from}->${e.to}|${t}`), s = o.has(e.to) ? "run" : r.hits.has(e.to) ? r.hits.get(e.to).when : null;
996
+ if (i && s) {
997
+ let n = xe[Math.max(xe.indexOf(s), xe.indexOf(t))];
998
+ return Object.assign(e, {
999
+ color: k[n].color,
1000
+ alpha: Math.max(e.alpha, be.alpha),
1001
+ width: Math.max(e.width, be.width)
1002
+ }), e.glow && (e.glowColor = e.color), !0;
1003
+ }
1004
+ return !n.phone || r.edges.has(`${e.from}->${e.to}`);
1005
+ }
1006
+ return i ? !n.phone || e.alpha >= .5 : !n.phone && (e.alpha = ye[t], !0);
1007
+ });
1008
+ }
1009
+ // ../explorer/check-model.js
1010
+ var we = {
1011
+ allowed: "#4ade80",
1012
+ refused: "#ff2d55",
1013
+ mismatch: "#fbbf24"
1014
+ }, Te = 18, Ee = 4.5;
1015
+ function De(e, t) {
1016
+ return e.from !== t.from || e.to !== t.to ? !1 : t.kind ? e.kind === t.kind && (!t.flow || e.key.split("|")[2] === t.flow) : e.kind === "ownership" || e.kind === "usage";
1017
+ }
1018
+ function Oe(e, t) {
1019
+ let n = t && t.verdict;
1020
+ if (!n || t.done) return;
1021
+ let r = n.mismatch ? we.mismatch : we[n.state];
1022
+ if (!r) return;
1023
+ let { node: i, edge: a } = t.current;
1024
+ if (i !== void 0) {
1025
+ let t = e.nodes.find((e) => e.id === i);
1026
+ t && (t.color = r, t.glow = Math.max(t.glow || 0, Te));
1027
+ } else a && e.edges.forEach((e) => {
1028
+ De(e, a) && (e.color = r, e.glowColor = r, e.glow = Math.max(e.glow || 0, Te), e.width = Math.max(e.width || 0, Ee), e.packet &&= n.state === "refused" && !n.mismatch ? {
1029
+ ...e.packet,
1030
+ color: r,
1031
+ glowColor: r,
1032
+ speed: 0,
1033
+ phase: .5
1034
+ } : {
1035
+ ...e.packet,
1036
+ glowColor: r
1037
+ });
1038
+ });
1039
+ }
1040
+ // ../core/layers.js
1041
+ var ke = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/, Ae = Object.freeze([
1042
+ "key",
1043
+ "label",
1044
+ "desc",
1045
+ "match"
1046
+ ]), P = Object.freeze([
1047
+ "type",
1048
+ "kind",
1049
+ "parent",
1050
+ "field"
1051
+ ]), je = Object.freeze([
1052
+ "add",
1053
+ "off",
1054
+ "order"
1055
+ ]), Me = /^[A-Za-z][A-Za-z0-9_]*$/, Ne = Object.freeze([
1056
+ "root",
1057
+ "external",
1058
+ "floor",
1059
+ "room"
1060
+ ]), Pe = Object.freeze([
1061
+ {
1062
+ key: "app",
1063
+ label: "Apps",
1064
+ desc: "Subdomains",
1065
+ match: { type: "app" }
1066
+ },
1067
+ {
1068
+ key: "pkg",
1069
+ label: "Packages",
1070
+ desc: "Libraries",
1071
+ match: { type: "pkg" }
1072
+ },
1073
+ {
1074
+ key: "page",
1075
+ label: "Pages & Routes",
1076
+ desc: "Routes",
1077
+ match: { type: "page" }
1078
+ },
1079
+ {
1080
+ key: "atom",
1081
+ label: "Atoms",
1082
+ desc: "Base Components",
1083
+ match: { type: "atom" }
1084
+ },
1085
+ {
1086
+ key: "molecule",
1087
+ label: "Molecules",
1088
+ desc: "Composites",
1089
+ match: { type: "molecule" }
1090
+ },
1091
+ {
1092
+ key: "token",
1093
+ label: "Design Tokens",
1094
+ desc: "Pollen CSS",
1095
+ match: { type: "token" }
1096
+ },
1097
+ {
1098
+ key: "tool",
1099
+ label: "Dev Tools",
1100
+ desc: "Utilities",
1101
+ match: { type: "tool" }
1102
+ },
1103
+ {
1104
+ key: "flow",
1105
+ label: "Data Flow",
1106
+ desc: "Tiers & sync",
1107
+ match: null
1108
+ },
1109
+ {
1110
+ key: "core",
1111
+ label: "Core",
1112
+ desc: "The shared core: what the apps and packages are built on. Shows with Packages or Atoms",
1113
+ match: { type: "core" }
1114
+ },
1115
+ {
1116
+ key: "store",
1117
+ label: "Stores",
1118
+ desc: "Storage tiers and the ends of the data flows. Shows with Data Flow",
1119
+ match: { type: "store" }
1120
+ },
1121
+ {
1122
+ key: "table",
1123
+ label: "Tables",
1124
+ desc: "SQLite tables, reads & writes",
1125
+ match: { type: "table" }
1126
+ },
1127
+ {
1128
+ key: "rom",
1129
+ label: "ROM",
1130
+ desc: "Render on Mutation",
1131
+ match: { type: "rom" }
1132
+ },
1133
+ {
1134
+ key: "service",
1135
+ label: "Services",
1136
+ desc: "API jobs, webhooks and hooks",
1137
+ match: { type: "service" }
1138
+ },
1139
+ {
1140
+ key: "cloud",
1141
+ label: "Cloud",
1142
+ desc: "Services outside the house that we do not control: what runs, where software comes from, accounts (topology.cloud.json)",
1143
+ match: {
1144
+ type: "external",
1145
+ kind: "cloud"
1146
+ }
1147
+ },
1148
+ {
1149
+ key: "web",
1150
+ label: "Public web",
1151
+ desc: "Any public page or picture a person points us at: not cloud",
1152
+ match: {
1153
+ type: "external",
1154
+ kind: "web"
1155
+ }
1156
+ },
1157
+ {
1158
+ key: "stack",
1159
+ label: "Infra",
1160
+ desc: "Compose stacks and the domains they serve",
1161
+ match: { type: "stack" }
1162
+ },
1163
+ {
1164
+ key: "machine",
1165
+ label: "Machines",
1166
+ desc: "The computers the code runs on, placed in their room from the inventory (live)",
1167
+ match: { type: "machine" },
1168
+ live: !0
1169
+ },
1170
+ {
1171
+ key: "container",
1172
+ label: "Containers",
1173
+ desc: "One service of a stack, from its compose file",
1174
+ match: { type: "container" }
1175
+ },
1176
+ {
1177
+ key: "device",
1178
+ label: "Devices",
1179
+ desc: "Cameras, and live: phones, NFC tags, Home Assistant devices",
1180
+ match: { type: "device" },
1181
+ live: !0
1182
+ },
1183
+ {
1184
+ key: "house",
1185
+ label: "House",
1186
+ desc: "Floors and rooms (live)",
1187
+ match: { type: ["floor", "room"] },
1188
+ live: !0
1189
+ },
1190
+ {
1191
+ key: "runs",
1192
+ label: "Runs in flight",
1193
+ desc: "A pulsing ring on the nodes an open agent run is changing; a dashed ring and a warning where two runs change the same node",
1194
+ match: null,
1195
+ overlay: !0
1196
+ },
1197
+ {
1198
+ key: "persona",
1199
+ label: "People",
1200
+ desc: "Personas, with a live count of their accounts (never a name)",
1201
+ match: { type: "persona" },
1202
+ live: !0
1203
+ }
1204
+ ]), Fe = Object.freeze(Pe.map((e) => e.key)), Ie = new Set(Fe), Le = Object.keys(C), F = (e) => typeof e == "object" && !!e && !Array.isArray(e), Re = /* @__PURE__ */ RegExp("[\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]"), I = (e) => typeof e == "string" ? `"${e.length > 40 ? `${e.slice(0, 40)}…` : e}"` : typeof e == "number" || typeof e == "boolean" ? String(e) : Array.isArray(e) ? "a list" : e === null ? "null" : typeof e, ze = (e) => typeof e == "string" && e.length > 0 && e.length <= 80 && !Re.test(e) || typeof e == "number" && Number.isFinite(e) || typeof e == "boolean", Be = /^[a-z0-9]+(-[a-z0-9]+)*$/, Ve = new Set(Le), He = (e, t) => Ve.has(e) && typeof t == "string" && t.length <= 32 && Be.test(t) ? `--corn-map-kind-${e}-${t}` : null, Ue = (e) => typeof e == "string" && e.length <= 32 && ke.test(e) ? `--corn-map-group-${e}` : null, We = ({ type: e, kind: t, layer: n, group: r }) => [
1205
+ He(e, t),
1206
+ n ? Ue(n) : null,
1207
+ `--corn-map-node-${e}`,
1208
+ `--corn-map-group-${r || e}`
1209
+ ].filter(Boolean);
1210
+ function Ge(e) {
1211
+ if (typeof e != "string") return null;
1212
+ if (Ve.has(e)) return { type: e };
1213
+ let t = e.indexOf(":");
1214
+ if (t < 0) return null;
1215
+ let n = e.slice(0, t), r = e.slice(t + 1);
1216
+ return n === "layer" ? ke.test(r) && r.length <= 32 ? { layer: r } : null : Ve.has(n) && Be.test(r) && r.length <= 32 ? {
1217
+ type: n,
1218
+ kind: r
1219
+ } : null;
1220
+ }
1221
+ function Ke(e, t, n) {
1222
+ let r = [];
1223
+ return typeof t == "string" && Be.test(t) && t.length <= 32 && r.push(`${e}:${t}`), n && r.push(`layer:${n}`), r.push(e), r;
1224
+ }
1225
+ var qe = /* @__PURE__ */ new WeakMap();
1226
+ function Je(e) {
1227
+ let t = qe.get(e);
1228
+ if (t && t.length === e.length) return t.map;
1229
+ let n = /* @__PURE__ */ new Map();
1230
+ for (let t of e) t && !t.dashed && !t.kind && t.from && t.to && t.from !== t.to && !n.has(t.to) && n.set(t.to, t.from);
1231
+ return qe.set(e, {
1232
+ length: e.length,
1233
+ map: n
1234
+ }), n;
1235
+ }
1236
+ var Ye = (e, t) => Array.isArray(e) ? e.includes(t) : e === t;
1237
+ function Xe(e, t, n) {
1238
+ if (!F(e)) return !1;
1239
+ let r = !1;
1240
+ if (e.type !== void 0 && (r = !0, !Ye(e.type, t.type)) || e.kind !== void 0 && (r = !0, !Ye(e.kind, t.kind)) || e.parent !== void 0 && (r = !0, !n || !Ye(e.parent, n(t)))) return !1;
1241
+ if (e.field !== void 0) {
1242
+ r = !0;
1243
+ for (let n of Object.keys(e.field)) {
1244
+ if (!Object.hasOwn(t, n)) return !1;
1245
+ let r = t[n], i = e.field[n];
1246
+ if (!(Array.isArray(r) ? r.some((e) => Ye(i, e)) : Ye(i, r))) return !1;
1247
+ }
1248
+ }
1249
+ return r;
1250
+ }
1251
+ var Ze = [...Pe.filter((e) => e.match)].sort((e, t) => Number("kind" in t.match) - Number("kind" in e.match));
1252
+ function Qe(e) {
1253
+ if (e.type === "root") return null;
1254
+ if (e.type === "external") return e.kind === "web" ? "web" : "cloud";
1255
+ for (let t of Ze) if (Xe(t.match, e)) return t.key;
1256
+ return e.type;
1257
+ }
1258
+ function $e(e, t, n) {
1259
+ if (!e || !e.length || t.type === "root") return null;
1260
+ for (let r of e) if (Xe(r.match, t, n)) return r.key;
1261
+ return null;
1262
+ }
1263
+ var et = (e, t, n) => $e(e, t, n) || Qe(t), tt = `${Le.slice(0, 5).join(", ")}, …`, nt = (e) => {
1264
+ let t = (Array.isArray(e) ? e : []).map((e) => F(e) && typeof e.key == "string" ? e.key : null).filter((e) => e && ke.test(e));
1265
+ return `${Fe.slice(0, 3).join(", ")}, …${t.length ? `, ${t[t.length - 1]}` : ""}`;
1266
+ };
1267
+ function rt(e, t, n, r) {
1268
+ return Array.isArray(n) ? (n.length ? n.length > 20 && r.push(`${e}.${t} has ${n.length} values: at most 20.`) : r.push(`${e}.${t} is an empty list: give at least one value, or leave the key out.`), n.length <= 20 ? n : []) : [n];
1269
+ }
1270
+ function it(e, t, n) {
1271
+ if (!F(t)) n.push(`${e}.match is { type, kind, parent, field }: say at least one of them.`);
1272
+ else {
1273
+ for (let r of Object.keys(t)) P.includes(r) || n.push(`${e}.match has unknown key "${r}": known: ${P.join(", ")}. A match is data: no pattern, no function.`);
1274
+ if (!Object.keys(t).some((e) => P.includes(e))) Object.keys(t).length || n.push(`${e}.match is empty: say at least one of ${P.join(", ")}.`);
1275
+ else {
1276
+ if ("type" in t) for (let r of rt(`${e}.match`, "type", t.type, n)) typeof r == "string" && Le.includes(r) || n.push(`${e}.match.type ${I(r)} is not a node type (${tt}).`);
1277
+ if ("kind" in t) for (let r of rt(`${e}.match`, "kind", t.kind, n)) (typeof r != "string" || !r || r.length > 80 || Re.test(r)) && n.push(`${e}.match.kind ${I(r)}: a kind is text, one line, at most 80 characters.`);
1278
+ if ("parent" in t) for (let r of rt(`${e}.match`, "parent", t.parent, n)) (typeof r != "string" || !r || r.length > 200 || Re.test(r)) && n.push(`${e}.match.parent ${I(r)}: a parent is a node id (text), like "pkg-core".`);
1279
+ if ("field" in t) {
1280
+ let r = t.field;
1281
+ if (!F(r)) {
1282
+ n.push(`${e}.match.field is { name: value }: a node field and the value (or list of values) it must have.`);
1283
+ return;
1284
+ }
1285
+ let i = Object.keys(r);
1286
+ i.length || n.push(`${e}.match.field is empty: name a field, like { audience: 'household' }.`), i.length > 4 && n.push(`${e}.match.field names ${i.length} fields: at most 4.`);
1287
+ for (let t of i.slice(0, 20)) {
1288
+ if (!Me.test(t) || t.length > 40) {
1289
+ n.push(`${e}.match.field "${t.slice(0, 40)}": a field name is letters, digits and "_", starting with a letter.`);
1290
+ continue;
1291
+ }
1292
+ if ([
1293
+ "type",
1294
+ "kind",
1295
+ "parent"
1296
+ ].includes(t)) {
1297
+ n.push(`${e}.match.field.${t}: use the match key "${t}" itself, not a field.`);
1298
+ continue;
1299
+ }
1300
+ let i = Array.isArray(r[t]) ? r[t] : [r[t]];
1301
+ Array.isArray(r[t]) && (!i.length || i.length > 20) ? n.push(`${e}.match.field.${t} is a list of ${i.length}: one to 20 values.`) : i.every(ze) || n.push(`${e}.match.field.${t}: a value is text, a number, true or false, or a list of them.`);
1302
+ }
1303
+ }
1304
+ }
1305
+ }
1306
+ }
1307
+ function at(e) {
1308
+ if (e === void 0) return [];
1309
+ if (!F(e)) return ["\"layers\" is an object: { add: [{ key, label, match }], off: [keys], order: [keys] }."];
1310
+ let t = [];
1311
+ for (let n of Object.keys(e)) je.includes(n) || t.push(`layers has unknown key "${n}": known: ${je.join(", ")}.`);
1312
+ let n = e.add;
1313
+ n !== void 0 && !Array.isArray(n) && t.push("layers.add is a list of project layers: [{ key, label, desc?, match }].");
1314
+ let r = Array.isArray(n) ? n : [];
1315
+ r.length > 24 && t.push(`layers.add has ${r.length} layers: at most 24.`);
1316
+ let i = /* @__PURE__ */ new Map();
1317
+ r.slice(0, 100).forEach((e, n) => {
1318
+ let r = `layers.add[${n}]`;
1319
+ if (!F(e)) {
1320
+ t.push(`${r} is { key, label, desc?, match }.`);
1321
+ return;
1322
+ }
1323
+ for (let n of Object.keys(e)) {
1324
+ if (Ae.includes(n)) continue;
1325
+ let e = /^colou?r$|^icon$|^fill$/i.test(n) ? " Colours and icons are the theme's." : n === "on" || n === "hide" ? " Whether a layer starts off is layers.off." : "";
1326
+ t.push(`${r} has unknown key "${n}": known: ${Ae.join(", ")}.${e}`);
1327
+ }
1328
+ let a = e.key;
1329
+ typeof a == "string" ? Ie.has(a) ? t.push(`${r}.key ${I(a)} is a starting layer: pick another key.`) : Ne.includes(a) ? t.push(`${r}.key ${I(a)} is reserved (a node type): pick another key.`) : !ke.test(a) || a.length > 32 ? t.push(`${r}.key ${I(a)}: lower-case words joined by "-", like "edge-stack"${a.length > 32 ? ", at most 32 characters" : ""}.`) : i.has(a) ? t.push(`${r}.key ${I(a)} is also layers.add[${i.get(a)}].key: a key is used once.`) : i.set(a, n) : t.push(`${r}.key is required: lower-case words joined by "-", like "edge-stack".`);
1330
+ let o = (n, i, a) => {
1331
+ let o = e[n];
1332
+ o === void 0 ? a && t.push(`${r}.${n} is required: plain text, one line, at most ${i} characters.`) : typeof o != "string" || !o.trim() ? t.push(`${r}.${n} ${I(o)}: plain text, one line, at most ${i} characters.`) : Re.test(o) ? t.push(`${r}.${n}: one line of plain text (no line break or control character).`) : [...o].length > i && t.push(`${r}.${n} is ${[...o].length} characters: at most ${i}.`);
1333
+ };
1334
+ o("label", 40, !0), o("desc", 120, !1), e.match === void 0 ? t.push(`${r}.match is required: say at least one of ${P.join(", ")}.`) : it(r, e.match, t);
1335
+ });
1336
+ let a = /* @__PURE__ */ new Set([...Fe, ...r.map((e) => F(e) && typeof e.key == "string" ? e.key : null).filter(Boolean)]);
1337
+ for (let r of ["off", "order"]) {
1338
+ let i = e[r];
1339
+ if (i === void 0) continue;
1340
+ if (!Array.isArray(i)) {
1341
+ t.push(`layers.${r} is a list of layer keys: ['${r === "off" ? "timers" : "app"}', …].`);
1342
+ continue;
1343
+ }
1344
+ let o = /* @__PURE__ */ new Set();
1345
+ i.forEach((e) => {
1346
+ typeof e != "string" || !a.has(e) ? t.push(`layers.${r} ${I(e)} is not a layer (${nt(n)}).`) : o.has(e) && t.push(`layers.${r} ${I(e)} is listed twice.`), o.add(e);
1347
+ });
1348
+ }
1349
+ return t;
1350
+ }
1351
+ function ot(e) {
1352
+ let t = {
1353
+ add: [],
1354
+ off: [],
1355
+ order: []
1356
+ };
1357
+ if (!F(e) || at(e).length) return t;
1358
+ let n = (e) => Array.isArray(e) ? e.slice(0, 20) : e;
1359
+ return {
1360
+ add: (e.add || []).map((e) => {
1361
+ let t = e.match, r = {};
1362
+ t.type !== void 0 && (r.type = n(t.type)), t.kind !== void 0 && (r.kind = n(t.kind)), t.parent !== void 0 && (r.parent = n(t.parent)), t.field !== void 0 && (r.field = Object.fromEntries(Object.keys(t.field).map((e) => [e, n(t.field[e])])));
1363
+ let i = {
1364
+ key: e.key,
1365
+ label: e.label.trim(),
1366
+ match: r
1367
+ };
1368
+ return typeof e.desc == "string" && e.desc.trim() && (i.desc = e.desc.trim()), i;
1369
+ }),
1370
+ off: [...e.off || []],
1371
+ order: [...e.order || []]
1372
+ };
1373
+ }
1374
+ function st(e) {
1375
+ let t = /* @__PURE__ */ new Map();
1376
+ for (let n of e) typeof n.kind == "string" && n.kind && (t.has(n.type) || t.set(n.type, /* @__PURE__ */ new Set()), t.get(n.type).add(n.kind));
1377
+ let n = /* @__PURE__ */ new Map();
1378
+ for (let [e, r] of t) {
1379
+ let t = [...r].sort(), i = t.map((e) => [...e.slice(0, 4).toLowerCase()].slice(0, 2)), a = /* @__PURE__ */ new Map();
1380
+ t.forEach((e, t) => {
1381
+ let n = i[t][0], r = i.some((e, r) => r !== t && e[0] === n);
1382
+ a.set(e, r ? i[t].join("") : n);
1383
+ }), n.set(e, a);
1384
+ }
1385
+ return n;
1386
+ }
1387
+ // ../explorer/layer-model.js
1388
+ var ct = (e) => (e.projectLayers || []).some((e) => e.match && e.match.parent !== void 0) ? (t) => Je(e.edges || []).get(t.id) : void 0;
1389
+ function lt(e, t) {
1390
+ let n = e.projectLayers;
1391
+ return !n || !n.length ? null : $e(n, t, ct(e));
1392
+ }
1393
+ var ut = (e, t) => et(e.projectLayers || [], t, ct(e)), dt = /* @__PURE__ */ new WeakMap();
1394
+ function ft(e) {
1395
+ let t = e.edges || [], n = dt.get(e.nodes);
1396
+ if (n && n.edges === t && n.n === e.nodes.length && n.e === t.length) return n.touched;
1397
+ let r = S(e.nodes, t).touched;
1398
+ return dt.set(e.nodes, {
1399
+ edges: t,
1400
+ n: e.nodes.length,
1401
+ e: t.length,
1402
+ touched: r
1403
+ }), r;
1404
+ }
1405
+ var pt = (e, t) => !!e.proposal && ft(e).has(t.id), mt = /* @__PURE__ */ new WeakMap();
1406
+ function ht(e, t) {
1407
+ if (typeof t.kind != "string" || !t.kind || t.type === "external") return "";
1408
+ let n = mt.get(e.nodes);
1409
+ n && n.n === e.nodes.length || (n = {
1410
+ n: e.nodes.length,
1411
+ map: st(e.nodes)
1412
+ }, mt.set(e.nodes, n));
1413
+ let r = n.map.get(t.type);
1414
+ return r && r.get(t.kind) || "";
1415
+ }
1416
+ var gt = Object.freeze({
1417
+ core: ["pkg"],
1418
+ store: ["flow"],
1419
+ rom: ["flow"]
1420
+ }), _t = (e) => !!e && !!e.mark && e.mark !== "none";
1421
+ function vt({ nodes: e, edges: t, rowOf: n, flight: r = null }) {
1422
+ let { touched: i } = S(e, t), a = /* @__PURE__ */ new Set();
1423
+ for (let t of e) {
1424
+ if (!i.has(t.id)) continue;
1425
+ let e = n(t);
1426
+ if (e) {
1427
+ a.add(e);
1428
+ for (let t of gt[e] || []) a.add(t);
1429
+ }
1430
+ r && r.has(t.id) && a.add("runs");
1431
+ }
1432
+ for (let e of t) _t(e) && e.kind === "flow" && a.add("flow");
1433
+ return a;
1434
+ }
1435
+ function yt({ active: e, touched: t, universe: n, review: r }) {
1436
+ let i = { ...e };
1437
+ if (!r.whole && t.size) for (let e of n) i[e] = t.has(e);
1438
+ return Object.assign(i, r.manual || {}, r.step || {}), i;
1439
+ }
1440
+ var bt = /* @__PURE__ */ new WeakMap();
1441
+ function xt(e) {
1442
+ let t = e.nodes, n = e.edges || [], r = e.runsMap ? e.runsMap.flight : null, i = bt.get(t);
1443
+ if (i && i.edges === n && i.n === t.length && i.e === n.length && i.flight === r && i.project === e.projectLayers) return i;
1444
+ let a = vt({
1445
+ nodes: t,
1446
+ edges: n,
1447
+ rowOf: (t) => ut(e, t),
1448
+ flight: r
1449
+ }), o = /* @__PURE__ */ new Set([
1450
+ ...Pe.map((e) => e.key),
1451
+ ...(e.projectLayers || []).map((e) => e.key),
1452
+ ...t.map((t) => ut(e, t)).filter(Boolean)
1453
+ ]), s = {
1454
+ edges: n,
1455
+ n: t.length,
1456
+ e: n.length,
1457
+ flight: r,
1458
+ project: e.projectLayers,
1459
+ touched: a,
1460
+ universe: o
1461
+ };
1462
+ return bt.set(t, s), s;
1463
+ }
1464
+ var St = /* @__PURE__ */ new WeakMap();
1465
+ function Ct(e) {
1466
+ let t = e.review;
1467
+ if (!t || !e.proposal) return e.activeLayers;
1468
+ let n = St.get(t);
1469
+ if (n && n.rev === t.rev && n.version === e.sceneVersion && n.active === e.activeLayers && n.nodes === e.nodes) return n.out;
1470
+ let { touched: r, universe: i } = xt(e), a = yt({
1471
+ active: e.activeLayers,
1472
+ touched: r,
1473
+ universe: i,
1474
+ review: t
1475
+ });
1476
+ return St.set(t, {
1477
+ rev: t.rev,
1478
+ version: e.sceneVersion,
1479
+ active: e.activeLayers,
1480
+ nodes: e.nodes,
1481
+ out: a
1482
+ }), a;
1483
+ }
1484
+ var wt = (e) => !!e.review && !!e.proposal && !e.review.whole && ft(e).size > 0, Tt = Object.freeze({
1485
+ aliceblue: "#f0f8ff",
1486
+ antiquewhite: "#faebd7",
1487
+ aqua: "#00ffff",
1488
+ aquamarine: "#7fffd4",
1489
+ azure: "#f0ffff",
1490
+ beige: "#f5f5dc",
1491
+ bisque: "#ffe4c4",
1492
+ black: "#000000",
1493
+ blanchedalmond: "#ffebcd",
1494
+ blue: "#0000ff",
1495
+ blueviolet: "#8a2be2",
1496
+ brown: "#a52a2a",
1497
+ burlywood: "#deb887",
1498
+ cadetblue: "#5f9ea0",
1499
+ chartreuse: "#7fff00",
1500
+ chocolate: "#d2691e",
1501
+ coral: "#ff7f50",
1502
+ cornflowerblue: "#6495ed",
1503
+ cornsilk: "#fff8dc",
1504
+ crimson: "#dc143c",
1505
+ cyan: "#00ffff",
1506
+ darkblue: "#00008b",
1507
+ darkcyan: "#008b8b",
1508
+ darkgoldenrod: "#b8860b",
1509
+ darkgray: "#a9a9a9",
1510
+ darkgreen: "#006400",
1511
+ darkgrey: "#a9a9a9",
1512
+ darkkhaki: "#bdb76b",
1513
+ darkmagenta: "#8b008b",
1514
+ darkolivegreen: "#556b2f",
1515
+ darkorange: "#ff8c00",
1516
+ darkorchid: "#9932cc",
1517
+ darkred: "#8b0000",
1518
+ darksalmon: "#e9967a",
1519
+ darkseagreen: "#8fbc8f",
1520
+ darkslateblue: "#483d8b",
1521
+ darkslategray: "#2f4f4f",
1522
+ darkslategrey: "#2f4f4f",
1523
+ darkturquoise: "#00ced1",
1524
+ darkviolet: "#9400d3",
1525
+ deeppink: "#ff1493",
1526
+ deepskyblue: "#00bfff",
1527
+ dimgray: "#696969",
1528
+ dimgrey: "#696969",
1529
+ dodgerblue: "#1e90ff",
1530
+ firebrick: "#b22222",
1531
+ floralwhite: "#fffaf0",
1532
+ forestgreen: "#228b22",
1533
+ fuchsia: "#ff00ff",
1534
+ gainsboro: "#dcdcdc",
1535
+ ghostwhite: "#f8f8ff",
1536
+ gold: "#ffd700",
1537
+ goldenrod: "#daa520",
1538
+ gray: "#808080",
1539
+ green: "#008000",
1540
+ greenyellow: "#adff2f",
1541
+ grey: "#808080",
1542
+ honeydew: "#f0fff0",
1543
+ hotpink: "#ff69b4",
1544
+ indianred: "#cd5c5c",
1545
+ indigo: "#4b0082",
1546
+ ivory: "#fffff0",
1547
+ khaki: "#f0e68c",
1548
+ lavender: "#e6e6fa",
1549
+ lavenderblush: "#fff0f5",
1550
+ lawngreen: "#7cfc00",
1551
+ lemonchiffon: "#fffacd",
1552
+ lightblue: "#add8e6",
1553
+ lightcoral: "#f08080",
1554
+ lightcyan: "#e0ffff",
1555
+ lightgoldenrodyellow: "#fafad2",
1556
+ lightgray: "#d3d3d3",
1557
+ lightgreen: "#90ee90",
1558
+ lightgrey: "#d3d3d3",
1559
+ lightpink: "#ffb6c1",
1560
+ lightsalmon: "#ffa07a",
1561
+ lightseagreen: "#20b2aa",
1562
+ lightskyblue: "#87cefa",
1563
+ lightslategray: "#778899",
1564
+ lightslategrey: "#778899",
1565
+ lightsteelblue: "#b0c4de",
1566
+ lightyellow: "#ffffe0",
1567
+ lime: "#00ff00",
1568
+ limegreen: "#32cd32",
1569
+ linen: "#faf0e6",
1570
+ magenta: "#ff00ff",
1571
+ maroon: "#800000",
1572
+ mediumaquamarine: "#66cdaa",
1573
+ mediumblue: "#0000cd",
1574
+ mediumorchid: "#ba55d3",
1575
+ mediumpurple: "#9370db",
1576
+ mediumseagreen: "#3cb371",
1577
+ mediumslateblue: "#7b68ee",
1578
+ mediumspringgreen: "#00fa9a",
1579
+ mediumturquoise: "#48d1cc",
1580
+ mediumvioletred: "#c71585",
1581
+ midnightblue: "#191970",
1582
+ mintcream: "#f5fffa",
1583
+ mistyrose: "#ffe4e1",
1584
+ moccasin: "#ffe4b5",
1585
+ navajowhite: "#ffdead",
1586
+ navy: "#000080",
1587
+ oldlace: "#fdf5e6",
1588
+ olive: "#808000",
1589
+ olivedrab: "#6b8e23",
1590
+ orange: "#ffa500",
1591
+ orangered: "#ff4500",
1592
+ orchid: "#da70d6",
1593
+ palegoldenrod: "#eee8aa",
1594
+ palegreen: "#98fb98",
1595
+ paleturquoise: "#afeeee",
1596
+ palevioletred: "#db7093",
1597
+ papayawhip: "#ffefd5",
1598
+ peachpuff: "#ffdab9",
1599
+ peru: "#cd853f",
1600
+ pink: "#ffc0cb",
1601
+ plum: "#dda0dd",
1602
+ powderblue: "#b0e0e6",
1603
+ purple: "#800080",
1604
+ rebeccapurple: "#663399",
1605
+ red: "#ff0000",
1606
+ rosybrown: "#bc8f8f",
1607
+ royalblue: "#4169e1",
1608
+ saddlebrown: "#8b4513",
1609
+ salmon: "#fa8072",
1610
+ sandybrown: "#f4a460",
1611
+ seagreen: "#2e8b57",
1612
+ seashell: "#fff5ee",
1613
+ sienna: "#a0522d",
1614
+ silver: "#c0c0c0",
1615
+ skyblue: "#87ceeb",
1616
+ slateblue: "#6a5acd",
1617
+ slategray: "#708090",
1618
+ slategrey: "#708090",
1619
+ snow: "#fffafa",
1620
+ springgreen: "#00ff7f",
1621
+ steelblue: "#4682b4",
1622
+ tan: "#d2b48c",
1623
+ teal: "#008080",
1624
+ thistle: "#d8bfd8",
1625
+ tomato: "#ff6347",
1626
+ turquoise: "#40e0d0",
1627
+ violet: "#ee82ee",
1628
+ wheat: "#f5deb3",
1629
+ white: "#ffffff",
1630
+ whitesmoke: "#f5f5f5",
1631
+ yellow: "#ffff00",
1632
+ yellowgreen: "#9acd32"
1633
+ }), Et = "[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?", Dt = (e, t, n) => Math.min(n, Math.max(t, e));
1634
+ function Ot(e, t) {
1635
+ let n = RegExp(`^${t}\\(`, "i").exec(e);
1636
+ if (!n || !e.endsWith(")")) return null;
1637
+ let r = 0;
1638
+ for (let t = n[0].length - 1; t < e.length; t++) if (e[t] === "(") r++;
1639
+ else if (e[t] === ")" && --r === 0 && t !== e.length - 1) return null;
1640
+ return r === 0 ? e.slice(n[0].length, -1) : null;
1641
+ }
1642
+ function kt(e, t) {
1643
+ let n = [], r = 0, i = 0;
1644
+ for (let a = 0; a < e.length; a++) e[a] === "(" ? r++ : e[a] === ")" ? r-- : e[a] === t && r === 0 && (n.push(e.slice(i, a)), i = a + 1);
1645
+ return n.push(e.slice(i)), n;
1646
+ }
1647
+ var At = (e, t) => {
1648
+ let n = RegExp(`^(${Et})(%?)$`, "i").exec(e);
1649
+ return n ? n[2] ? Number(n[1]) / 100 * t : Number(n[1]) : null;
1650
+ }, jt = (e) => e === void 0 ? 1 : (() => {
1651
+ let t = At(e, 1);
1652
+ return t === null ? null : Dt(t, 0, 1);
1653
+ })();
1654
+ function Mt(e, t, n) {
1655
+ let r = (t) => (t + e / 30) % 12, i = t * Math.min(n, 1 - n), a = (e) => n - i * Math.max(-1, Math.min(r(e) - 3, Math.min(9 - r(e), 1)));
1656
+ return [
1657
+ a(0) * 255,
1658
+ a(8) * 255,
1659
+ a(4) * 255
1660
+ ];
1661
+ }
1662
+ function Nt(e) {
1663
+ let t = e.trim();
1664
+ if (t.includes(",")) {
1665
+ let e = t.split(/\s*,\s*/);
1666
+ return (e.length === 3 || e.length === 4) && e.every((e) => e && !/[\s/]/.test(e)) ? e : null;
1667
+ }
1668
+ let n = /^(\S+)\s+(\S+)\s+([^\s/]+)(?:\s*\/\s*(\S+))?$/.exec(t);
1669
+ return n && !n.slice(1, 4).some((e) => e.includes("/")) ? n.slice(1, n[4] === void 0 ? 4 : 5) : null;
1670
+ }
1671
+ function Pt(e, t = 0) {
1672
+ let n = String(e).trim().toLowerCase();
1673
+ if (n === "transparent") return [
1674
+ 0,
1675
+ 0,
1676
+ 0,
1677
+ 0
1678
+ ];
1679
+ if (Tt[n]) return Pt(Tt[n], t);
1680
+ let r = /^#([0-9a-f]{3,4})$/.exec(n);
1681
+ if (r) {
1682
+ let e = [...r[1]].map((e) => parseInt(e + e, 16));
1683
+ return [
1684
+ e[0],
1685
+ e[1],
1686
+ e[2],
1687
+ e.length === 4 ? e[3] / 255 : 1
1688
+ ];
1689
+ }
1690
+ if (r = /^#([0-9a-f]{6}|[0-9a-f]{8})$/.exec(n), r) {
1691
+ let e = r[1];
1692
+ return [
1693
+ parseInt(e.slice(0, 2), 16),
1694
+ parseInt(e.slice(2, 4), 16),
1695
+ parseInt(e.slice(4, 6), 16),
1696
+ e.length === 8 ? parseInt(e.slice(6, 8), 16) / 255 : 1
1697
+ ];
1698
+ }
1699
+ let i = Ot(n, "rgba?");
1700
+ if (i !== null) {
1701
+ let e = Nt(i);
1702
+ if (!e) return null;
1703
+ let t = e.slice(0, 3).map((e) => At(e, 255)), n = jt(e[3]);
1704
+ return t.some((e) => e === null) || n === null ? null : [...t.map((e) => Dt(e, 0, 255)), n];
1705
+ }
1706
+ let a = Ot(n, "hsla?");
1707
+ if (a !== null) {
1708
+ let e = Nt(a);
1709
+ if (!e) return null;
1710
+ let t = RegExp(`^(${Et})(?:deg)?$`).exec(e[0]), n = /%$/.test(e[1]) ? At(e[1], 1) : null, r = /%$/.test(e[2]) ? At(e[2], 1) : null, i = jt(e[3]);
1711
+ return !t || n === null || r === null || i === null ? null : [...Mt((Number(t[1]) % 360 + 360) % 360, Dt(n, 0, 1), Dt(r, 0, 1)), i];
1712
+ }
1713
+ let o = t < 8 ? Ot(n, "color-mix") : null;
1714
+ if (o !== null) {
1715
+ let e = kt(o, ",").map((e) => e.trim());
1716
+ if (e.length !== 3 || !/^in\s+srgb$/.test(e[0])) return null;
1717
+ let n = (e) => {
1718
+ let n = /^(\d*\.?\d+)%\s+(.+)$/.exec(e), r = /^(.+?)\s+(\d*\.?\d+)%$/.exec(e), [i, a] = n ? [n[2], n[1]] : r ? [r[1], r[2]] : [e, null], o = Pt(i, t + 1);
1719
+ return o && {
1720
+ c: o,
1721
+ p: a === null ? null : Number(a) / 100
1722
+ };
1723
+ }, r = n(e[1]), i = n(e[2]);
1724
+ if (!r || !i || r.p !== null && (r.p < 0 || r.p > 1) || i.p !== null && (i.p < 0 || i.p > 1)) return null;
1725
+ let a = r.p ?? (i.p === null ? .5 : 1 - i.p), s = i.p ?? 1 - a;
1726
+ return a + s <= 0 ? null : It(r.c, a, i.c, s);
1727
+ }
1728
+ return null;
1729
+ }
1730
+ function Ft(e) {
1731
+ if (String(e).length > 4096) return null;
1732
+ try {
1733
+ return Pt(e);
1734
+ } catch {
1735
+ return null;
1736
+ }
1737
+ }
1738
+ function L(e) {
1739
+ return Ft(e) ?? [
1740
+ 0,
1741
+ 0,
1742
+ 0,
1743
+ 0
1744
+ ];
1745
+ }
1746
+ function It(e, t, n, r) {
1747
+ let i = t + r, [a, o] = [t / i, r / i], s = e[3] * a + n[3] * o, c = (t) => s === 0 ? 0 : (e[t] * e[3] * a + n[t] * n[3] * o) / s;
1748
+ return [
1749
+ c(0),
1750
+ c(1),
1751
+ c(2),
1752
+ s * Math.min(1, i)
1753
+ ];
1754
+ }
1755
+ var Lt = (e) => {
1756
+ let t = e / 255;
1757
+ return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
1758
+ }, Rt = ([e, t, n]) => .2126 * Lt(e) + .7152 * Lt(t) + .0722 * Lt(n), zt = (e, t) => (Math.max(e, t) + .05) / (Math.min(e, t) + .05), R = Object.freeze({
1759
+ dark: Object.freeze({
1760
+ added: "#2dd4bf",
1761
+ changed: "#fbbf24",
1762
+ removed: "#fa9292",
1763
+ edit: "#b49cfb"
1764
+ }),
1765
+ light: Object.freeze({
1766
+ added: "#197c6f",
1767
+ changed: "#8f6703",
1768
+ removed: "#e20b0b",
1769
+ edit: "#6839f6"
1770
+ })
1771
+ }), Bt = .85, Vt = .9, Ht = .6, Ut = .45, Wt = Object.freeze({
1772
+ light: Ht,
1773
+ dark: .5
1774
+ }), Gt = Object.freeze({
1775
+ added: Object.freeze({
1776
+ ringDash: Object.freeze([5, 4]),
1777
+ edgeDash: Object.freeze([7, 5]),
1778
+ strike: !1
1779
+ }),
1780
+ changed: Object.freeze({
1781
+ ringDash: null,
1782
+ edgeDash: null,
1783
+ strike: !1
1784
+ }),
1785
+ removed: Object.freeze({
1786
+ ringDash: null,
1787
+ edgeDash: Object.freeze([3, 4]),
1788
+ strike: !0
1789
+ }),
1790
+ edit: Object.freeze({
1791
+ ringDash: Object.freeze([2, 5]),
1792
+ edgeDash: Object.freeze([12, 4]),
1793
+ strike: !1
1794
+ })
1795
+ }), Kt = "#f4f6fa", qt = {
1796
+ mark: 3.2,
1797
+ text: 4.8
1798
+ }, Jt = .16, Yt = 1.35, Xt = .11;
1799
+ function Zt(e, t) {
1800
+ return e === "light" || e === "dark" ? e : t ? "light" : "dark";
1801
+ }
1802
+ function Qt([e, t, n]) {
1803
+ let r = e / 255, i = t / 255, a = n / 255, o = Math.max(r, i, a), s = Math.min(r, i, a), c = (o + s) / 2;
1804
+ if (o === s) return [
1805
+ 0,
1806
+ 0,
1807
+ c
1808
+ ];
1809
+ let l = o - s, u = c > .5 ? l / (2 - o - s) : l / (o + s);
1810
+ return [
1811
+ (o === r ? (i - a) / l + (i < a ? 6 : 0) : o === i ? (a - r) / l + 2 : (r - i) / l + 4) * 60,
1812
+ u,
1813
+ c
1814
+ ];
1815
+ }
1816
+ function $t([e, t, n]) {
1817
+ let r = (t) => (t + e / 30) % 12, i = t * Math.min(n, 1 - n), a = (e) => n - i * Math.max(-1, Math.min(r(e) - 3, 9 - r(e), 1));
1818
+ return [
1819
+ a(0),
1820
+ a(8),
1821
+ a(4)
1822
+ ].map((e) => Math.round(e * 255));
1823
+ }
1824
+ var en = (e) => `#${e.map((e) => e.toString(16).padStart(2, "0")).join("")}`, tn = (e, t) => t >= 1 ? en(e) : `rgba(${e.join(", ")}, ${+t.toFixed(3)})`, nn = Rt(L(Kt)), rn = /* @__PURE__ */ new Map();
1825
+ function z(e, t = "mark") {
1826
+ let n = `${t}|${e}`, r = rn.get(n);
1827
+ if (r !== void 0) return r;
1828
+ let i = an(e, t);
1829
+ return rn.set(n, i), i;
1830
+ }
1831
+ function an(e, t) {
1832
+ if (typeof e != "string") return e;
1833
+ let [n, r, i, a] = L(e);
1834
+ if (a === 0) return e;
1835
+ let [o, s, c] = Qt([
1836
+ n,
1837
+ r,
1838
+ i
1839
+ ]);
1840
+ if ((Math.max(n, r, i) - Math.min(n, r, i)) / 255 < Jt && c > .5) return tn($t([
1841
+ o,
1842
+ s,
1843
+ Math.max(Xt, 1 - c)
1844
+ ]), a);
1845
+ let l = qt[t] || qt.mark;
1846
+ if (zt(Rt([
1847
+ n,
1848
+ r,
1849
+ i
1850
+ ]), nn) >= l) return e;
1851
+ let u = 0, d = c;
1852
+ for (let e = 0; e < 20; e++) {
1853
+ let e = (u + d) / 2;
1854
+ zt(Rt($t([
1855
+ o,
1856
+ s,
1857
+ e
1858
+ ])), nn) >= l ? u = e : d = e;
1859
+ }
1860
+ return tn($t([
1861
+ o,
1862
+ s,
1863
+ u
1864
+ ]), a);
1865
+ }
1866
+ var on = (e) => {
1867
+ e && (e.color = z(e.color, "text"));
1868
+ };
1869
+ function sn(e) {
1870
+ e.theme = "light";
1871
+ for (let t of e.nodes) t.color = z(t.color), t.labelColor = z(t.labelColor, "text");
1872
+ for (let t of e.edges) {
1873
+ if (t.mark && t.mark !== "none") t.color = R.dark[t.mark] === t.color ? R.light[t.mark] : z(t.color);
1874
+ else {
1875
+ t.alpha < 1 && (t.alpha = Math.min(1, t.alpha * Yt)), t.color = z(t.color);
1876
+ let [e, n, r, i] = L(t.color);
1877
+ i > 0 && i < 1 && (t.color = tn([
1878
+ e,
1879
+ n,
1880
+ r
1881
+ ], Math.min(1, i * Yt)));
1882
+ }
1883
+ t.glowColor &&= z(t.glowColor), t.label &&= {
1884
+ ...t.label,
1885
+ color: z(t.label.color, "text")
1886
+ }, t.packet &&= {
1887
+ ...t.packet,
1888
+ color: z(t.packet.color),
1889
+ glowColor: z(t.packet.glowColor)
1890
+ };
1891
+ }
1892
+ let { decor: t } = e;
1893
+ return t.grid &&= {
1894
+ ...t.grid,
1895
+ color: z(t.grid.color)
1896
+ }, t.rings = t.rings.map((e) => ({
1897
+ ...e,
1898
+ color: z(e.color)
1899
+ })), t.lanes = t.lanes.map((e) => {
1900
+ let t = {
1901
+ ...e,
1902
+ fill: z(e.fill),
1903
+ stroke: z(e.stroke)
1904
+ };
1905
+ for (let e of [
1906
+ "title",
1907
+ "note",
1908
+ "arrow"
1909
+ ]) t[e] && (t[e] = { ...t[e] }, on(t[e]));
1910
+ return t;
1911
+ }), e;
1912
+ }
1913
+ var cn = 1.2, B = 96, ln = 24, un = "glyph:", dn = "#ffffff", fn = "#0b1220";
1914
+ Object.freeze(Object.keys(C));
1915
+ var pn = (e) => typeof e == "string" && Object.hasOwn(C, e), mn = (e, t) => `${un}${e}|${t}`, hn = (e) => typeof e == "string" && e.startsWith(un);
1916
+ function gn(e) {
1917
+ let t = e.slice(6), n = t.indexOf("|");
1918
+ return {
1919
+ type: t.slice(0, n),
1920
+ ink: t.slice(n + 1)
1921
+ };
1922
+ }
1923
+ var _n = ([e, t, n]) => {
1924
+ let r = (e) => {
1925
+ let t = e / 255;
1926
+ return t <= .03928 ? t / 12.92 : ((t + .055) / 1.055) ** 2.4;
1927
+ };
1928
+ return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
1929
+ }, vn = (e, t) => {
1930
+ let [n, r] = e > t ? [e, t] : [t, e];
1931
+ return (n + .05) / (r + .05);
1932
+ };
1933
+ function yn(e) {
1934
+ let t = _n(L(e));
1935
+ return vn(1, t) >= vn(_n(L("#0b1220")), t) ? dn : fn;
1936
+ }
1937
+ var bn = (e, t) => t && t.values && t.values["--corn-map-glyph"] || yn(e.color), xn = (e, t) => !!e.glyph && !e.icon && !e.letters && e.r * 2 * t >= 14, Sn = {
1938
+ root: (e) => {
1939
+ Cn(e, 12, 12, 8), H(e, 12, 12, 3.2);
1940
+ },
1941
+ app: (e) => {
1942
+ e.beginPath(), e.rect(3.5, 5, 17, 14), e.stroke(), V(e, 3.5, 9.5, 20.5, 9.5);
1943
+ },
1944
+ page: (e) => {
1945
+ e.beginPath(), e.rect(6, 3.5, 12, 17), e.stroke(), V(e, 9, 9, 15, 9), V(e, 9, 12.5, 15, 12.5), V(e, 9, 16, 13, 16);
1946
+ },
1947
+ pkg: (e) => {
1948
+ e.beginPath(), e.rect(4, 7, 16, 13), e.stroke(), V(e, 4, 12, 20, 12), V(e, 12, 7, 12, 12);
1949
+ },
1950
+ core: (e) => {
1951
+ Cn(e, 12, 12, 8.2), H(e, 12, 12, 4);
1952
+ },
1953
+ token: (e) => {
1954
+ for (let [t, n] of [
1955
+ [5, 5],
1956
+ [13, 5],
1957
+ [5, 13],
1958
+ [13, 13]
1959
+ ]) e.fillRect(t, n, 6, 6);
1960
+ },
1961
+ atom: (e) => {
1962
+ e.beginPath(), e.ellipse(12, 12, 9.5, 4, -.5, 0, Math.PI * 2), e.stroke(), H(e, 12, 12, 3);
1963
+ },
1964
+ molecule: (e) => {
1965
+ V(e, 7, 16, 17, 8), H(e, 7, 16, 4), H(e, 17, 8, 4);
1966
+ },
1967
+ tool: (e) => {
1968
+ V(e, 12, 4, 12, 20), V(e, 4, 12, 20, 12);
1969
+ },
1970
+ rom: (e) => {
1971
+ e.beginPath(), e.arc(12, 12, 7.5, .4, Math.PI * 1.6), e.stroke(), e.beginPath(), e.moveTo(14.5, 2.5), e.lineTo(20, 5.5), e.lineTo(14, 8.5), e.closePath(), e.fill();
1972
+ },
1973
+ service: (e) => {
1974
+ e.beginPath(), e.moveTo(13.5, 2.5), e.lineTo(6, 13.5), e.lineTo(11.5, 13.5), e.lineTo(10, 21.5), e.lineTo(18, 9.5), e.lineTo(12.5, 9.5), e.closePath(), e.fill();
1975
+ },
1976
+ store: (e) => {
1977
+ e.beginPath(), e.ellipse(12, 6.5, 7.5, 3, 0, 0, Math.PI * 2), e.stroke(), V(e, 4.5, 6.5, 4.5, 17.5), V(e, 19.5, 6.5, 19.5, 17.5), e.beginPath(), e.ellipse(12, 17.5, 7.5, 3, 0, 0, Math.PI), e.stroke();
1978
+ },
1979
+ table: (e) => {
1980
+ e.beginPath(), e.rect(4, 5, 16, 14), e.stroke(), V(e, 4, 10, 20, 10), V(e, 12, 10, 12, 19);
1981
+ },
1982
+ external: (e) => {
1983
+ V(e, 7, 17, 17, 7), e.beginPath(), e.moveTo(9.5, 6.5), e.lineTo(17.5, 6.5), e.lineTo(17.5, 14.5), e.stroke();
1984
+ },
1985
+ stack: (e) => {
1986
+ for (let t of [
1987
+ 4.5,
1988
+ 10.5,
1989
+ 16.5
1990
+ ]) e.fillRect(4, t, 16, 3.5);
1991
+ },
1992
+ machine: (e) => {
1993
+ e.beginPath(), e.rect(3.5, 4.5, 17, 11), e.stroke(), V(e, 12, 15.5, 12, 19.5), V(e, 7.5, 19.5, 16.5, 19.5);
1994
+ },
1995
+ container: (e) => {
1996
+ e.beginPath(), e.rect(4, 4, 16, 16), e.stroke(), e.fillRect(8.5, 8.5, 7, 7);
1997
+ },
1998
+ device: (e) => {
1999
+ e.beginPath(), e.rect(7.5, 3, 9, 18), e.stroke(), H(e, 12, 17.5, 1.3);
2000
+ },
2001
+ floor: (e) => {
2002
+ e.beginPath(), e.moveTo(3.5, 20.5), e.lineTo(3.5, 15.5), e.lineTo(9, 15.5), e.lineTo(9, 10.5), e.lineTo(14.5, 10.5), e.lineTo(14.5, 5.5), e.lineTo(20.5, 5.5), e.stroke();
2003
+ },
2004
+ room: (e) => {
2005
+ e.beginPath(), e.rect(6.5, 3.5, 11, 17), e.stroke(), H(e, 14.5, 12.5, 1.4);
2006
+ },
2007
+ persona: (e) => {
2008
+ H(e, 12, 8, 3.8), e.beginPath(), e.arc(12, 21, 8, Math.PI * 1.15, Math.PI * 1.85), e.stroke();
2009
+ }
2010
+ };
2011
+ function V(e, t, n, r, i) {
2012
+ e.beginPath(), e.moveTo(t, n), e.lineTo(r, i), e.stroke();
2013
+ }
2014
+ function Cn(e, t, n, r) {
2015
+ e.beginPath(), e.arc(t, n, r, 0, Math.PI * 2), e.stroke();
2016
+ }
2017
+ function H(e, t, n, r) {
2018
+ e.beginPath(), e.arc(t, n, r, 0, Math.PI * 2), e.fill();
2019
+ }
2020
+ function wn(e, t, n, r) {
2021
+ let i = Sn[t];
2022
+ if (!i) return;
2023
+ let a = n / ln;
2024
+ e.save(), e.scale(a, a), e.lineWidth = 2.4, e.lineCap = "round", e.lineJoin = "round", e.strokeStyle = r, e.fillStyle = r, i(e), e.restore();
2025
+ }
2026
+ var Tn = /* @__PURE__ */ new Map();
2027
+ function En(e, t) {
2028
+ if (!pn(e) || typeof t != "string") return null;
2029
+ let n = mn(e, t);
2030
+ if (Tn.has(n)) return Tn.get(n);
2031
+ if (Tn.size >= 64) return null;
2032
+ let r = null;
2033
+ try {
2034
+ let n = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(B, B) : typeof document < "u" ? Object.assign(document.createElement("canvas"), {
2035
+ width: B,
2036
+ height: B
2037
+ }) : null, i = n && n.getContext && n.getContext("2d");
2038
+ i && i.stroke && (wn(i, e, B, t), r = n);
2039
+ } catch {
2040
+ r = null;
2041
+ }
2042
+ return Tn.set(n, r), r;
2043
+ }
2044
+ Object.freeze([
2045
+ "pulls",
2046
+ "issues",
2047
+ "threads",
2048
+ "deploys",
2049
+ "notes"
2050
+ ]), Object.freeze({
2051
+ pulls: [
2052
+ ["open", "Open"],
2053
+ ["merged", "Merged"],
2054
+ ["closed", "Closed"],
2055
+ ["all", "All"]
2056
+ ],
2057
+ issues: [
2058
+ ["open", "Open"],
2059
+ ["closed", "Closed"],
2060
+ ["all", "All"]
2061
+ ],
2062
+ threads: [
2063
+ ["open", "Open"],
2064
+ ["closed", "Closed"],
2065
+ ["all", "All"]
2066
+ ],
2067
+ deploys: [
2068
+ ["all", "All"],
2069
+ ["success", "Succeeded"],
2070
+ ["failure", "Failed"],
2071
+ ["running", "Running or waiting"],
2072
+ ["other", "Cancelled or skipped"]
2073
+ ]
2074
+ });
2075
+ var Dn = .2, On = "#f87171";
2076
+ function kn(e, t) {
2077
+ if (!t || !t.changed.size && !t.failing.size) return;
2078
+ let n = (e) => t.changed.has(e) || t.failing.has(e);
2079
+ for (let r of e.nodes) n(r.id) ? (r.alpha = 1, r.labelAlpha = 1, r.glow = Math.max(r.glow, 14), r.labelKeep = !0, r.halo !== "selected" && (r.halo = "match"), t.failing.has(r.id) && (r.color = On)) : (r.alpha = Math.min(r.alpha, Dn), r.labelAlpha = r.alpha, r.glow = 0);
2080
+ for (let t of e.edges) !n(t.from) && !n(t.to) && (t.alpha = Math.min(t.alpha, Dn / 2));
2081
+ }
2082
+ // ../explorer/search-model.js
2083
+ var U = Object.freeze({
2084
+ labelStart: 0,
2085
+ wordStart: 1,
2086
+ label: 2,
2087
+ idOrFile: 3,
2088
+ typeOrKind: 4
2089
+ }), An = Object.freeze({
2090
+ root: "Root",
2091
+ app: "Apps",
2092
+ pkg: "Packages",
2093
+ page: "Pages & Routes",
2094
+ atom: "Atoms",
2095
+ molecule: "Molecules",
2096
+ token: "Design Tokens",
2097
+ tool: "Dev Tools",
2098
+ core: "Core",
2099
+ store: "Stores",
2100
+ table: "Tables",
2101
+ rom: "ROM",
2102
+ service: "Services",
2103
+ external: "Cloud",
2104
+ stack: "Infra",
2105
+ machine: "Machines",
2106
+ container: "Containers",
2107
+ device: "Devices",
2108
+ floor: "House",
2109
+ room: "House",
2110
+ persona: "People"
2111
+ }), jn = (e) => e && e.charAt(0).toUpperCase() + e.slice(1), Mn = (e) => An[e.type] || jn(String(e.type || "")), W = (e) => typeof e == "string" ? e.toLowerCase() : "", Nn = /[^\p{L}\p{N}]+/u;
2112
+ function Pn(e, t) {
2113
+ let n = String(t || "").toLowerCase();
2114
+ if (!n) return -1;
2115
+ let r = W(e.label);
2116
+ return r.startsWith(n) ? U.labelStart : r.split(Nn).some((e) => e && e.startsWith(n)) ? U.wordStart : r.includes(n) ? U.label : W(e.id).includes(n) || W(e.file).includes(n) ? U.idOrFile : W(e.type).includes(n) || W(Mn(e)).includes(n) || W(e.kind).includes(n) ? U.typeOrKind : -1;
2117
+ }
2118
+ function Fn(e, t) {
2119
+ let n = String(t || "").trim().toLowerCase(), r = /* @__PURE__ */ new Set();
2120
+ if (!n) return r;
2121
+ for (let t of e) Pn(t, n) >= 0 && r.add(t.id);
2122
+ return r;
2123
+ }
2124
+ // ../explorer/css-color.js
2125
+ var G, In = /* @__PURE__ */ new Map();
2126
+ function Ln() {
2127
+ if (G !== void 0) return G;
2128
+ G = null;
2129
+ try {
2130
+ typeof document < "u" && (G = document.createElement("canvas").getContext("2d", { willReadFrequently: !0 }) || null);
2131
+ } catch {
2132
+ G = null;
2133
+ }
2134
+ return G;
2135
+ }
2136
+ function Rn(e) {
2137
+ let t = typeof e == "string" ? e.trim() : "";
2138
+ if (!t || t.toLowerCase() === "auto") return null;
2139
+ if (Bn(t)) return t;
2140
+ if (/^transparent$/i.test(t)) return "rgba(0, 0, 0, 0)";
2141
+ if (In.has(t)) return In.get(t);
2142
+ let n = null, r = zn(t) && !/currentcolor/i.test(t) ? Ln() : null;
2143
+ if (r) try {
2144
+ let e = (e) => (r.fillStyle = e, r.fillStyle = t, String(r.fillStyle)), i = e("#010203"), a = i === "#010203" && e("#040506") === "#040506" ? null : i;
2145
+ n = a === null ? null : Hn(a) ? a : Un(r, t);
2146
+ } catch {
2147
+ n = null;
2148
+ }
2149
+ return In.set(t, n), n;
2150
+ }
2151
+ function zn(e) {
2152
+ try {
2153
+ return typeof CSS > "u" || typeof CSS.supports != "function" || CSS.supports("color", e);
2154
+ } catch {
2155
+ return !1;
2156
+ }
2157
+ }
2158
+ function Bn(e) {
2159
+ if (!Hn(e)) return !1;
2160
+ let t = /^rgba?\(/i.test(e.trim()) ? e.slice(e.indexOf("(") + 1, e.lastIndexOf(")")).split(",").map(Number) : null;
2161
+ if (t && (t.slice(0, 3).some((e) => !(e >= 0 && e <= 255)) || t.length > 3 && !(t[3] > 0 && t[3] <= 1))) return !1;
2162
+ let [n, r, i, a] = L(e);
2163
+ return [
2164
+ n,
2165
+ r,
2166
+ i
2167
+ ].every((e) => Number.isFinite(e) && e >= 0 && e <= 255) && Number.isFinite(a) && a > 0 && a <= 1;
2168
+ }
2169
+ var Vn = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$|^rgba?\(\s*[\d.]+\s*,\s*[\d.]+\s*,\s*[\d.]+\s*(?:,\s*[\d.]+\s*)?\)$/i, Hn = (e) => Vn.test(e.trim());
2170
+ function Un(e, t) {
2171
+ if (!e.getImageData || !e.fillRect) return null;
2172
+ e.clearRect(0, 0, 1, 1), e.fillStyle = t, e.fillRect(0, 0, 1, 1);
2173
+ let [n, r, i, a] = e.getImageData(0, 0, 1, 1).data;
2174
+ return Wn(n, r, i, a / 255);
2175
+ }
2176
+ var Wn = (e, t, n, r) => `rgba(${e}, ${t}, ${n}, ${+r.toFixed(3)})`;
2177
+ function Gn(e) {
2178
+ if (typeof e != "string" || e.length > 200) return null;
2179
+ let t = e.trim();
2180
+ return !t || /^(?:auto|currentcolor)$/i.test(t) ? null : Rn(t) || (Ln() === null && Ft(t) ? t : null);
2181
+ }
2182
+ // ../explorer/camera.js
2183
+ var K = .25, Kn = .005, qn = (e, t = K) => Math.max(Math.max(Kn, Math.min(t, K)), Math.min(3, e)), Jn = (e, t, n) => t < e ? Math.min(e, qn(t, n)) : qn(t, n);
2184
+ function Yn(e, t, n, r, i = K) {
2185
+ let a = Jn(e.zoom, e.zoom * t, i), o = (n - e.x) / e.zoom, s = (r - e.y) / e.zoom;
2186
+ return {
2187
+ x: n - o * a,
2188
+ y: r - s * a,
2189
+ zoom: a
2190
+ };
2191
+ }
2192
+ var Xn = (e, t, n) => ({
2193
+ x: e.x,
2194
+ y: e.y,
2195
+ zoom: e.zoom,
2196
+ dist: t,
2197
+ mid: {
2198
+ x: n.x,
2199
+ y: n.y
2200
+ }
2201
+ });
2202
+ function Zn(e, t, n, r = K) {
2203
+ let i = Jn(e.zoom, e.zoom * (t / e.dist), r), a = (e.mid.x - e.x) / e.zoom, o = (e.mid.y - e.y) / e.zoom;
2204
+ return {
2205
+ x: n.x - a * i,
2206
+ y: n.y - o * i,
2207
+ zoom: i
2208
+ };
2209
+ }
2210
+ function Qn(e, t, n = {}, r = 120) {
2211
+ let i = (e, t = 0, n = 0) => {
2212
+ let i = Math.max(0, t), a = Math.max(0, n), o = Math.max(0, e - r), s = i + a > o && i + a > 0 ? o / (i + a) : 1;
2213
+ return [i * s, a * s];
2214
+ }, [a, o] = i(t, n.top, n.bottom), [s, c] = i(e, n.left, n.right);
2215
+ return {
2216
+ x: s,
2217
+ y: a,
2218
+ width: Math.max(0, e - s - c),
2219
+ height: Math.max(0, t - a - o)
2220
+ };
2221
+ }
2222
+ var $n = (e) => {
2223
+ let t = e.r || 18;
2224
+ return {
2225
+ left: e.x - t - 25,
2226
+ right: e.x + t + 25,
2227
+ top: e.y - t - 25,
2228
+ bottom: e.y + t + 35
2229
+ };
2230
+ }, er = (e, t) => Math.min(e, t.width / 4, t.height / 4);
2231
+ function tr(e, t, { padding: n = 40, maxZoom: r = 1, minZoom: i = K } = {}) {
2232
+ if (!e.length) return null;
2233
+ let a = Infinity, o = -Infinity, s = Infinity, c = -Infinity;
2234
+ for (let t of e) {
2235
+ let e = $n(t);
2236
+ a = Math.min(a, e.left), o = Math.max(o, e.right), s = Math.min(s, e.top), c = Math.max(c, e.bottom);
2237
+ }
2238
+ let l = er(n, t), u = Math.min((t.width - l * 2) / (o - a), (t.height - l * 2) / (c - s)), d = Math.max(i, Math.min(r, u));
2239
+ return {
2240
+ x: t.x + t.width / 2 - (a + o) / 2 * d,
2241
+ y: t.y + t.height / 2 - (s + c) / 2 * d,
2242
+ zoom: d
2243
+ };
2244
+ }
2245
+ // ../explorer/selection-model.js
2246
+ var nr = Object.freeze({
2247
+ ownership: {
2248
+ panel: "Owns",
2249
+ edge: "owns"
2250
+ },
2251
+ usage: {
2252
+ panel: "Links",
2253
+ edge: "links"
2254
+ },
2255
+ flow: {
2256
+ panel: "Flows",
2257
+ edge: "flow"
2258
+ },
2259
+ reads: {
2260
+ panel: "Reads",
2261
+ edge: "reads"
2262
+ },
2263
+ writes: {
2264
+ panel: "Writes",
2265
+ edge: "writes"
2266
+ },
2267
+ calls: {
2268
+ panel: "Calls",
2269
+ edge: "calls"
2270
+ },
2271
+ triggers: {
2272
+ panel: "Triggers",
2273
+ edge: "triggers"
2274
+ },
2275
+ delivers: {
2276
+ panel: "Delivers",
2277
+ edge: "delivers"
2278
+ },
2279
+ "runs-on": {
2280
+ panel: "Runs on",
2281
+ edge: "runs on"
2282
+ },
2283
+ uses: {
2284
+ panel: "Uses",
2285
+ edge: "uses"
2286
+ },
2287
+ extends: {
2288
+ panel: "Extends",
2289
+ edge: "extends"
2290
+ }
2291
+ }), rr = (e) => e.kind || (e.dashed ? "usage" : "ownership"), ir = (e) => `${e.from}->${e.to}`, ar = (e) => Object.hasOwn(nr, e) ? nr[e].edge : String(e);
2292
+ function or(e, t, { throughChildren: n = !1, kind: r = null } = {}) {
2293
+ if (!e) return null;
2294
+ let i = e.id, a = /* @__PURE__ */ new Set();
2295
+ for (let e of t) !e.kind && !e.dashed && e.from === i && a.add(e.to);
2296
+ let o = n ? /* @__PURE__ */ new Set([i, ...a]) : null, s = [];
2297
+ for (let e of t) (o ? o.has(e.from) || o.has(e.to) : e.from === i || e.to === i) && s.push(e);
2298
+ let c = /* @__PURE__ */ new Map();
2299
+ for (let e of s) {
2300
+ let t = rr(e);
2301
+ c.set(t, (c.get(t) || 0) + 1);
2302
+ }
2303
+ let l = r && c.has(r) ? r : null, u = l ? s.filter((e) => rr(e) === l) : s, d = /* @__PURE__ */ new Set([i]), f = /* @__PURE__ */ new Set();
2304
+ for (let e of u) d.add(e.from), d.add(e.to), f.add(ir(e));
2305
+ return {
2306
+ connectedNodeIds: d,
2307
+ connectedEdgeKeys: f,
2308
+ childIds: a,
2309
+ selectedId: i,
2310
+ edges: u,
2311
+ kinds: c,
2312
+ kind: l,
2313
+ throughChildren: n
2314
+ };
2315
+ }
2316
+ function sr(e, t, n, { padding: r = 40 } = {}) {
2317
+ let i = tr(t.length ? t : [e], n, {
2318
+ padding: r,
2319
+ maxZoom: 1,
2320
+ minZoom: 1e-4
2321
+ });
2322
+ return i && i.zoom >= .5 ? {
2323
+ ...i,
2324
+ framed: !0
2325
+ } : {
2326
+ x: n.x + n.width / 2 - e.x * 1,
2327
+ y: n.y + n.height / 2 - e.y * 1,
2328
+ zoom: 1,
2329
+ framed: !1
2330
+ };
2331
+ }
2332
+ // ../explorer/scene.js
2333
+ var cr = [
2334
+ "root",
2335
+ "app",
2336
+ "pkg",
2337
+ "tool",
2338
+ "store",
2339
+ "rom",
2340
+ "floor"
2341
+ ], lr = "\"Segoe UI\", -apple-system, BlinkMacSystemFont, Roboto, sans-serif", ur = "\"Segoe UI\", -apple-system, sans-serif", dr = .32, fr = "#ffffff", pr = .07, mr = {
2342
+ node: {
2343
+ color: "rgba(9, 13, 22, 0.85)",
2344
+ width: 3.5
2345
+ },
2346
+ edge: {
2347
+ color: "rgba(9, 13, 22, 0.9)",
2348
+ width: 3
2349
+ }
2350
+ }, hr = {
2351
+ length: 9,
2352
+ spread: .45
2353
+ }, gr = Object.freeze({
2354
+ flow: "chevron",
2355
+ reads: "chevron",
2356
+ writes: "chevron",
2357
+ calls: "triangle",
2358
+ triggers: "triangle",
2359
+ delivers: "triangle",
2360
+ "runs-on": "bar",
2361
+ uses: "diamond",
2362
+ extends: "diamond"
2363
+ }), _r = Object.freeze({
2364
+ strokeWidth: 1.8,
2365
+ barHalf: 5,
2366
+ diamondHalf: 6,
2367
+ diamondAcross: 4.5,
2368
+ tickHalf: 4,
2369
+ tickWidth: 1.6,
2370
+ tickGap: 6
2371
+ }), q = Object.freeze({
2372
+ roundedHalf: .9,
2373
+ roundedCorner: .3,
2374
+ hexInradius: .9,
2375
+ squareHalf: .86,
2376
+ squareCorner: .12,
2377
+ diamondHalf: 1.15
2378
+ }), vr = Object.freeze({
2379
+ circle: 1,
2380
+ "rounded-square": (q.roundedHalf - q.roundedCorner) * Math.SQRT2 + q.roundedCorner,
2381
+ hexagon: q.hexInradius / Math.cos(Math.PI / 6),
2382
+ square: (q.squareHalf - q.squareCorner) * Math.SQRT2 + q.squareCorner,
2383
+ diamond: q.diamondHalf
2384
+ }), yr = Object.freeze([7, 5]), br = Object.freeze([1.5, 4]), xr = {
2385
+ selected: {
2386
+ fill: "rgba(99, 102, 241, 0.55)",
2387
+ fillR: 8,
2388
+ ring: "#818cf8",
2389
+ ringR: 13,
2390
+ ringWidth: 1.5
2391
+ },
2392
+ match: {
2393
+ fill: "rgba(245, 158, 11, 0.4)",
2394
+ fillR: 8,
2395
+ ring: "#f59e0b",
2396
+ ringR: 13,
2397
+ ringWidth: 1.5
2398
+ },
2399
+ child: {
2400
+ fill: null,
2401
+ fillR: 0,
2402
+ ring: "rgba(255, 255, 255, 0.28)",
2403
+ ringR: 5,
2404
+ ringWidth: 1.2
2405
+ }
2406
+ }, Sr = {
2407
+ halfLength: 7,
2408
+ width: 2
2409
+ }, Cr = {
2410
+ color: "#ffffff",
2411
+ radius: 3.5,
2412
+ glow: 10,
2413
+ cycleMs: 2600
2414
+ }, J = {
2415
+ added: {
2416
+ ...Gt.added,
2417
+ color: R.dark.added,
2418
+ ringR: 9,
2419
+ ringWidth: 2,
2420
+ edgeWidth: 2.2,
2421
+ alpha: 1
2422
+ },
2423
+ changed: {
2424
+ ...Gt.changed,
2425
+ color: R.dark.changed,
2426
+ ringR: 9,
2427
+ ringWidth: 2.5,
2428
+ edgeWidth: 2.4,
2429
+ alpha: 1
2430
+ },
2431
+ removed: {
2432
+ ...Gt.removed,
2433
+ color: R.dark.removed,
2434
+ ringR: 9,
2435
+ ringWidth: 2,
2436
+ edgeWidth: 2,
2437
+ alpha: Bt
2438
+ },
2439
+ edit: {
2440
+ ...Gt.edit,
2441
+ color: R.dark.edit,
2442
+ ringR: 9,
2443
+ ringWidth: 3,
2444
+ edgeWidth: 2.4,
2445
+ alpha: 1
2446
+ }
2447
+ };
2448
+ function wr(e) {
2449
+ return e === "light" ? Dr : Er;
2450
+ }
2451
+ var Tr = (e) => {
2452
+ let t = { ...e };
2453
+ for (let e of [
2454
+ "fill",
2455
+ "ring",
2456
+ "color"
2457
+ ]) typeof t[e] == "string" && (t[e] = z(t[e]));
2458
+ return t;
2459
+ }, Er = Object.freeze({
2460
+ halo: xr,
2461
+ mark: J,
2462
+ core: fr,
2463
+ labelOutline: mr
2464
+ }), Dr = Object.freeze({
2465
+ halo: Object.fromEntries(Object.entries(xr).map(([e, t]) => [e, Tr(t)])),
2466
+ mark: Object.fromEntries(Object.entries(J).map(([e, t]) => [e, {
2467
+ ...t,
2468
+ color: R.light[e]
2469
+ }])),
2470
+ core: fr,
2471
+ labelOutline: {
2472
+ node: {
2473
+ color: "rgba(244, 246, 250, 0.9)",
2474
+ width: 3.5
2475
+ },
2476
+ edge: {
2477
+ color: "rgba(244, 246, 250, 0.92)",
2478
+ width: 3
2479
+ }
2480
+ }
2481
+ }), Or = {
2482
+ ring: 1.8,
2483
+ edge: 1.6,
2484
+ gap: 4
2485
+ }, kr = .28;
2486
+ function Y(e, t, { viewer: n = !1 } = {}) {
2487
+ return e.proposal && !v(e.proposalView || "diff", t) ? !1 : e.view === "dataflow" ? !!e.flow && e.flow.ids.has(t.id) : e.view === "house" ? me(e, t) : t.type === "root" || Ar(e, t, n ? e.activeLayers : Ct(e)) || pt(e, t);
2488
+ }
2489
+ function Ar(e, t, n = Ct(e)) {
2490
+ let r = lt(e, t);
2491
+ return r ? n[r] !== !1 : t.type === "core" ? (n.pkg || n.atom) && n.core !== !1 : t.type === "store" ? n.flow !== !1 && n.store !== !1 : t.type === "rom" ? n.rom !== !1 && n.flow !== !1 : t.type === "floor" || t.type === "room" ? n.house !== !1 : t.type === "external" ? n[ne(t)] !== !1 : n[t.type] !== !1;
2492
+ }
2493
+ var jr = (e) => e.view === "dataflow" && e.flow ? e.flow.edges : e.view === "house" ? he(e) : e.edges;
2494
+ function Mr(e, t, n) {
2495
+ return or(e, t, n);
2496
+ }
2497
+ function Nr(e) {
2498
+ let t = e.scenario, n = new Set(t.visited.nodes), r = new Set(t.visited.edgeList.map(X));
2499
+ t.linkNodes && e.edges.forEach((e) => {
2500
+ n.has(e.from) && n.has(e.to) && r.add(X(e));
2501
+ });
2502
+ let i = de(t, e.nodes, e.edges);
2503
+ i && (i.down.forEach((e) => n.add(e)), i.hits.forEach((e, t) => n.add(t)), i.edges.forEach((e, t) => r.add(t)));
2504
+ let { node: a, edge: o } = t.current, s = a === void 0 ? o ? o.kind === "writes" ? o.from : o.to : void 0 : a;
2505
+ return {
2506
+ connectedNodeIds: n,
2507
+ connectedEdgeKeys: r,
2508
+ childIds: /* @__PURE__ */ new Set(),
2509
+ selectedId: s
2510
+ };
2511
+ }
2512
+ function Pr(e, t, n) {
2513
+ let r = n.x - t.x, i = n.y - t.y, a = Math.hypot(r, i) || 1, o = e.bend === void 0 ? .18 : e.bend, s = {
2514
+ x: (t.x + n.x) / 2 + -i / a * a * o,
2515
+ y: (t.y + n.y) / 2 + r / a * a * o
2516
+ }, c = (e, t, n) => {
2517
+ let r = t.x - e.x, i = t.y - e.y, a = Math.hypot(r, i) || 1;
2518
+ return {
2519
+ x: e.x + r / a * n,
2520
+ y: e.y + i / a * n
2521
+ };
2522
+ };
2523
+ return {
2524
+ a: c(t, s, (t.r || 18) + 3),
2525
+ b: c(n, s, (n.r || 18) + 9),
2526
+ c: s
2527
+ };
2528
+ }
2529
+ function Fr(e, t, n, r) {
2530
+ let i = 1 - r;
2531
+ return {
2532
+ x: i * i * e.x + 2 * i * r * t.x + r * r * n.x,
2533
+ y: i * i * e.y + 2 * i * r * t.y + r * r * n.y
2534
+ };
2535
+ }
2536
+ function Ir(e, t) {
2537
+ let n = {
2538
+ x: e.x1,
2539
+ y: e.y1
2540
+ }, r = {
2541
+ x: e.x2,
2542
+ y: e.y2
2543
+ };
2544
+ return Fr(n, e.curve ? {
2545
+ x: e.curve.cx,
2546
+ y: e.curve.cy
2547
+ } : {
2548
+ x: (n.x + r.x) / 2,
2549
+ y: (n.y + r.y) / 2
2550
+ }, r, t);
2551
+ }
2552
+ function Lr(e, t) {
2553
+ return Ir(e, (t / 1e3 * e.packet.speed + e.packet.phase) % 1);
2554
+ }
2555
+ var Rr = (e) => e.kind || (e.dashed ? "usage" : "ownership"), zr = (e) => `${e.from}->${e.to}${e.kind ? `|${e.kind}` : e.dashed ? "|dashed" : ""}${e.kind === "flow" && e.flow ? `|${e.flow}` : ""}`, X = (e) => `${e.from}->${e.to}`;
2556
+ function Br(e, t, n, r, a, o) {
2557
+ let s = e.kind === "reads" || e.kind === "writes", c = i(e), l = !r || r.connectedEdgeKeys.has(X(e)), u = e.status !== "live", { a: d, b: f, c: p } = Pr(e, t, n), m = !!r && l, h = Rr(e), g = null;
2558
+ if (r && l) {
2559
+ let t = Fr(d, p, f, .5);
2560
+ g = {
2561
+ text: e.count !== void 0 && e.label ? e.label : ar(h),
2562
+ x: t.x,
2563
+ y: t.y,
2564
+ color: c.color,
2565
+ italic: u
2566
+ };
2567
+ }
2568
+ let _ = null;
2569
+ if ((r ? l : a) && !o) {
2570
+ let t = e.phase === void 0 ? (e.from.length * 7 + e.to.length * 13) % 10 / 10 : e.phase;
2571
+ _ = {
2572
+ color: Cr.color,
2573
+ glowColor: c.color,
2574
+ radius: Cr.radius,
2575
+ glow: Cr.glow,
2576
+ speed: 1e3 / Cr.cycleMs,
2577
+ phase: t
2578
+ };
2579
+ }
2580
+ return {
2581
+ key: zr(e),
2582
+ from: e.from,
2583
+ to: e.to,
2584
+ kind: Rr(e),
2585
+ x1: d.x,
2586
+ y1: d.y,
2587
+ x2: f.x,
2588
+ y2: f.y,
2589
+ r1: t.r,
2590
+ r2: n.r,
2591
+ color: c.color,
2592
+ width: m ? 2.4 : a && !s ? 2 : 1.6,
2593
+ alpha: r ? l ? 1 : .04 : a ? s ? .2 : .65 : s ? .12 : .45,
2594
+ dash: u ? yr : null,
2595
+ ticks: te(e),
2596
+ curve: {
2597
+ cx: p.x,
2598
+ cy: p.y
2599
+ },
2600
+ arrow: !0,
2601
+ end: Object.hasOwn(gr, h) ? gr[h] : "triangle",
2602
+ glow: m ? 8 : 0,
2603
+ glowColor: m ? c.color : null,
2604
+ label: g,
2605
+ packet: _,
2606
+ mark: "none",
2607
+ live: !!e.live
2608
+ };
2609
+ }
2610
+ function Vr(e, t, n, r) {
2611
+ let i = !r || r.connectedEdgeKeys.has(X(e)), a, o, s = null, c = 0, l = null;
2612
+ return r ? i ? e.dashed ? (a = "#818cf8", o = 2, c = 8, l = "rgba(129, 140, 248, 0.7)", s = br) : (a = "#ffffff", o = 2.4, c = 10, l = "rgba(255, 255, 255, 0.8)") : (a = "rgba(255, 255, 255, 0.02)", o = .8, s = e.dashed ? br : null) : e.dashed ? (a = "rgba(129, 140, 248, 0.35)", o = 1.2, s = br) : (a = "rgba(255, 255, 255, 0.16)", o = 1.4), {
2613
+ key: zr(e),
2614
+ from: e.from,
2615
+ to: e.to,
2616
+ kind: Rr(e),
2617
+ x1: t.x,
2618
+ y1: t.y,
2619
+ x2: n.x,
2620
+ y2: n.y,
2621
+ r1: t.r,
2622
+ r2: n.r,
2623
+ color: a,
2624
+ width: o,
2625
+ alpha: 1,
2626
+ dash: s,
2627
+ ticks: 0,
2628
+ curve: null,
2629
+ arrow: !1,
2630
+ end: null,
2631
+ glow: c,
2632
+ glowColor: l,
2633
+ label: null,
2634
+ packet: null,
2635
+ mark: "none",
2636
+ live: !!e.live
2637
+ };
2638
+ }
2639
+ var Hr = [
2640
+ "flow",
2641
+ "reads",
2642
+ "writes",
2643
+ "runs-on",
2644
+ "calls",
2645
+ "triggers",
2646
+ "delivers",
2647
+ "uses",
2648
+ "extends"
2649
+ ], Ur = (e) => e.proposal ? e.proposalView || "diff" : null;
2650
+ function Wr(e, t, n, r = !1, i = !1) {
2651
+ if (e.mark = t, t === "none") {
2652
+ (n === "diff" || i) && (e.alpha *= kr, e.glow = 0, e.packet = null), i && (e.greyed = !0);
2653
+ return;
2654
+ }
2655
+ let a = J[t];
2656
+ e.color = a.color, e.dash = r ? J.removed.edgeDash : a.edgeDash, e.width = Math.max(e.width, a.edgeWidth), e.alpha >= .1 && (e.alpha = Math.max(e.alpha, Vt) * (r ? J.removed.alpha : a.alpha)), e.glow && (e.glowColor = a.color);
2657
+ }
2658
+ function Gr(e, t, n) {
2659
+ let { nodes: r } = e, i = Ct(e), a = wt(e), o = new Map(r.map((e) => [e.id, e])), s = e.view === "dataflow", c = [], l = (e) => !!t && t.connectedEdgeKeys.has(X(e)), u = (e, r, i) => c.push(Br(e, r, i, t, s, n)), d = Ur(e), f = (n) => {
2660
+ let r = o.get(n.from), a = o.get(n.to);
2661
+ if (r && a && Y(e, r) && Y(e, a)) {
2662
+ if (s) return u(n, r, a);
2663
+ if (e.view === "house") {
2664
+ let e = ge(n, r, a);
2665
+ e === "flow" ? u(n, r, a) : e === "link" && c.push(Vr(n, r, a, t));
2666
+ } else n.kind === "flow" ? i.flow !== !1 && u(n, r, a) : n.kind === "reads" || n.kind === "writes" ? i.table !== !1 && u(n, r, a) : n.kind === "runs-on" ? (i.stack !== !1 || a.type === "machine") && u(n, r, a) : n.kind === "calls" || n.kind === "triggers" || n.kind === "delivers" ? (r.type !== "page" || n.kind !== "calls" || l(n)) && u(n, r, a) : n.kind === "uses" || n.kind === "extends" ? l(n) && u(n, r, a) : c.push(Vr(n, r, a, t));
2667
+ }
2668
+ };
2669
+ return jr(e).forEach((n) => {
2670
+ if (d && !y(d, n)) return;
2671
+ let r = d === "before" ? x(n) : n, i = d ? b(d, n) : "none", l = c.length;
2672
+ if (i === "none") f(r);
2673
+ else {
2674
+ let n = o.get(r.from), i = o.get(r.to);
2675
+ if (!n || !i || !Y(e, n) || !Y(e, i)) return;
2676
+ s || Hr.includes(r.kind) ? u(r, n, i) : c.push(Vr(r, n, i, t));
2677
+ }
2678
+ for (let e = l; e < c.length; e++) Wr(c[e], i, d, i === "edit" && n.editOp === "removed", a);
2679
+ }), c;
2680
+ }
2681
+ var Kr = (e) => e.type === "floor" || e.type === "room" ? "house" : e.type === "external" ? ne(e) : e.type, qr = (e) => Gn(e.color) ?? (C[e.type] || C.external).color;
2682
+ function Jr(e, t) {
2683
+ let { nodes: n, selectedNode: r, searchQuery: i } = e, a = i ? Fn(n, i) : null, o = !!a && n.some((t) => a.has(t.id) && Y(e, t)), s = [], c = Ur(e), l = wt(e), u = c === "diff" || c && l ? S(n, jr(e)) : null;
2684
+ return n.forEach((n) => {
2685
+ if (!Y(e, n)) return;
2686
+ let i = c === "before" ? x(n) : n, d = !!a && a.has(n.id), f = d && e.searchCurrent === n.id, p = !!r && r.id === n.id, m = !t || t.connectedNodeIds.has(n.id), h = t && t.childIds ? t.childIds.has(n.id) : !1, g = c ? b(c, n) : "none", _ = J[g], v = g === "edit" && n.editOp === "removed", y = t && !m && !(o && d) ? pr : 1;
2687
+ o && !d && !p && !(t && m) && (y = pr);
2688
+ let S = l && !!u && !u.touched.has(n.id);
2689
+ u && !u.touched.has(n.id) && (y = Math.min(y, S ? Ut : kr)), _ && (y *= v ? J.removed.alpha : _.alpha);
2690
+ let C = i.type === "root" || i.type === "app", w = ht(e, i), T = lt(e, i);
2691
+ s.push({
2692
+ id: n.id,
2693
+ type: i.type,
2694
+ group: Kr(i),
2695
+ ...typeof i.kind == "string" && i.kind ? { kind: i.kind } : {},
2696
+ ...w ? { letters: w } : {},
2697
+ shape: E(i.type),
2698
+ hitR: i.r * vr[E(i.type)],
2699
+ ...pn(i.type) ? { glyph: i.type } : {},
2700
+ ...T ? { layer: T } : {},
2701
+ x: n.x,
2702
+ y: n.y,
2703
+ r: i.r,
2704
+ color: qr(i),
2705
+ alpha: y,
2706
+ glow: m && y >= .5 ? C ? 15 : 9 : 0,
2707
+ halo: d ? "match" : p ? "selected" : h ? "child" : "none",
2708
+ mark: g,
2709
+ ...S ? { greyed: !0 } : {},
2710
+ selected: p,
2711
+ match: d,
2712
+ current: f,
2713
+ connected: m,
2714
+ degree: n.degree || 0,
2715
+ label: i.label,
2716
+ labelSize: C && !S ? 12 : 11,
2717
+ labelBold: C && !S,
2718
+ labelAlpha: S && (!t || m) ? Wt[e.theme === "light" ? "light" : "dark"] : u && !u.touched.has(n.id) && (!t || m) ? Math.max(y, Ht) : y,
2719
+ labelColor: m ? "#f8fafc" : "rgba(255, 255, 255, 0.3)",
2720
+ labelKeep: cr.includes(i.type) && !S || p || d || g !== "none" || !!(t && m),
2721
+ labelStrike: !!_ && (_.strike || v),
2722
+ live: !!n.live,
2723
+ box: n.box || null
2724
+ });
2725
+ }), s;
2726
+ }
2727
+ function Yr(e) {
2728
+ let { rings: t, selectedNode: n } = e, r = {
2729
+ color: n ? "rgba(66, 153, 225, 0.04)" : "rgba(66, 153, 225, 0.14)",
2730
+ width: 1,
2731
+ dash: [4, 6]
2732
+ }, i = {
2733
+ color: n ? "rgba(66, 153, 225, 0.03)" : "rgba(66, 153, 225, 0.08)",
2734
+ width: 1,
2735
+ dash: [4, 6]
2736
+ };
2737
+ return [...t.rings.map(({ x: e, y: t, r: n }) => ({
2738
+ x: e,
2739
+ y: t,
2740
+ r: n,
2741
+ ...r
2742
+ })), ...t.clusters.flatMap(({ x: e, y: t, radii: n }) => n.map((n) => ({
2743
+ x: e,
2744
+ y: t,
2745
+ r: n,
2746
+ ...i
2747
+ })))];
2748
+ }
2749
+ function Xr(e) {
2750
+ let t = -e.top + 40;
2751
+ return e.headers.map((n, r) => {
2752
+ let i = e.headers[r + 1];
2753
+ return {
2754
+ x: n.left - 12,
2755
+ y: e.top + 30,
2756
+ w: n.right - n.left + 24,
2757
+ h: t - e.top - 30,
2758
+ radius: 14,
2759
+ fill: "rgba(66, 153, 225, 0.05)",
2760
+ stroke: "rgba(66, 153, 225, 0.18)",
2761
+ strokeWidth: 1,
2762
+ title: {
2763
+ text: n.title,
2764
+ x: n.x,
2765
+ y: e.top + 4,
2766
+ size: 15,
2767
+ bold: !0,
2768
+ color: "#e2e8f0"
2769
+ },
2770
+ note: {
2771
+ text: n.note,
2772
+ x: n.x,
2773
+ y: e.top + 22,
2774
+ size: 11,
2775
+ bold: !1,
2776
+ color: "#94a3b8"
2777
+ },
2778
+ arrow: i ? {
2779
+ text: "→",
2780
+ x: (n.right + i.left) / 2,
2781
+ y: e.top + 8,
2782
+ size: 18,
2783
+ bold: !0,
2784
+ color: "rgba(148, 163, 184, 0.5)"
2785
+ } : null
2786
+ };
2787
+ });
2788
+ }
2789
+ var Zr = .55, Qr = .5, $r = {
2790
+ color: "#ffffff",
2791
+ radius: 4.5,
2792
+ glow: 12
2793
+ }, ei = {
2794
+ width: 3.6,
2795
+ glow: 14
2796
+ };
2797
+ function ti(e, t) {
2798
+ return e.from !== t.from || e.to !== t.to ? !1 : t.kind ? e.kind === t.kind && (!t.flow || e.key.split("|")[2] === t.flow) : e.kind === "ownership" || e.kind === "usage";
2799
+ }
2800
+ function ni(e, t, n = {}) {
2801
+ if (t.done) return;
2802
+ let { node: r, edge: i, at: a } = t.current, o = new Set(r === void 0 ? i ? [i.from, i.to] : [] : [r]);
2803
+ a !== void 0 && o.add(a), e.nodes.forEach((e) => {
2804
+ e.connected && (o.has(e.id) ? (r !== void 0 || e.id === a) && e.halo !== "match" && (e.halo = "selected") : (e.alpha = Zr, e.labelAlpha = Zr));
2805
+ });
2806
+ let s = new Set(t.visited.edgeList.map(X)), c = (e) => s.has(X(e)) || t.linkNodes && t.visited.nodes.has(e.from) && t.visited.nodes.has(e.to);
2807
+ e.edges.forEach((e) => {
2808
+ if (i && ti(e, i)) {
2809
+ e.alpha = 1, e.width = Math.max(e.width, ei.width), e.glow = ei.glow, e.glowColor = e.glowColor || e.color;
2810
+ let r = 1e3 / t.stepMs, i = t.stepStartMs == null ? 0 : (-t.stepStartMs / 1e3 * r % 1 + 1) % 1;
2811
+ e.packet = n.reduceMotion ? null : {
2812
+ ...$r,
2813
+ glowColor: e.color,
2814
+ speed: r,
2815
+ phase: i
2816
+ };
2817
+ } else c(e) && (e.alpha = Qr, e.packet = null);
2818
+ });
2819
+ }
2820
+ function ri(e, t = {}) {
2821
+ let n = e.view === "dataflow", r = e.scenario ? Nr(e) : e.selectedNode ? Mr(e.selectedNode, jr(e), {
2822
+ throughChildren: !!e.throughChildren,
2823
+ kind: e.selectedKind || null
2824
+ }) : null, i = n && e.flow ? Xr(e.flow) : [], a = !(n && e.flow) && !e.isFreeform ? Yr(e) : [], o = {
2825
+ nodes: Jr(e, r),
2826
+ edges: Gr(e, r, !!t.reduceMotion),
2827
+ decor: {
2828
+ grid: {
2829
+ size: 48,
2830
+ color: "rgba(255, 255, 255, 0.035)",
2831
+ width: .5,
2832
+ margin: 200
2833
+ },
2834
+ rings: a,
2835
+ lanes: i
2836
+ },
2837
+ painted: {
2838
+ nodes: /* @__PURE__ */ new Set(),
2839
+ edges: /* @__PURE__ */ new Set()
2840
+ },
2841
+ preset: n,
2842
+ theme: "dark",
2843
+ version: e.sceneVersion || 0
2844
+ };
2845
+ e.view === "house" && ve(o, e), e.scenario && ni(o, e.scenario, t), o.greying = o.nodes.some((e) => e.greyed) || o.edges.some((e) => e.greyed);
2846
+ let s = {
2847
+ nodes: o.nodes.map((e) => e.color),
2848
+ edges: o.edges.map((e) => e.color)
2849
+ };
2850
+ return e.scenario && fe(o, de(e.scenario, e.nodes, e.edges)), e.scenario && Oe(o, e.scenario), e.forgeLit && kn(o, e.forgeLit), o.nodes.forEach((e, t) => {
2851
+ s.nodes.length === o.nodes.length && e.color !== s.nodes[t] && o.painted.nodes.add(e.id);
2852
+ }), o.edges.forEach((e, t) => {
2853
+ s.edges.length === o.edges.length && e.color !== s.edges[t] && o.painted.edges.add(e.key);
2854
+ }), e.theme === "light" && sn(o), o;
2855
+ }
2856
+ function ii(e = ri) {
2857
+ let t = null, n, r = {
2858
+ builds: 0,
2859
+ get(i) {
2860
+ return t && n === i.sceneVersion || (t = e(i), n = i.sceneVersion, r.builds++), t;
2861
+ }
2862
+ };
2863
+ return r;
2864
+ }
2865
+ // ../explorer/engine/map-style.js
2866
+ var ai = Object.freeze(Object.keys(C)), oi = Object.freeze([
2867
+ "app",
2868
+ "pkg",
2869
+ "page",
2870
+ "atom",
2871
+ "molecule",
2872
+ "token",
2873
+ "tool",
2874
+ "table",
2875
+ "rom",
2876
+ "service",
2877
+ "cloud",
2878
+ "web",
2879
+ "stack",
2880
+ "machine",
2881
+ "container",
2882
+ "device",
2883
+ "house",
2884
+ "persona"
2885
+ ]), si = Object.freeze([
2886
+ "ownership",
2887
+ "usage",
2888
+ "flow",
2889
+ "reads",
2890
+ "writes",
2891
+ "calls",
2892
+ "triggers",
2893
+ "delivers",
2894
+ "runs-on",
2895
+ "uses",
2896
+ "extends"
2897
+ ]), ci = Object.freeze([
2898
+ "added",
2899
+ "changed",
2900
+ "removed",
2901
+ "edit"
2902
+ ]), li = Object.freeze([
2903
+ "selected",
2904
+ "match",
2905
+ "lit"
2906
+ ]), ui = "--corn-map-stroke", di = "--corn-map-label", fi = "--corn-map-label-halo", pi = "--corn-map-font", mi = "--corn-map-edge-width", hi = "--corn-map-glow", gi = "--corn-map-label-min", _i = "--corn-map-grey", vi = "--corn-map-grey-alpha", yi = "--corn-map-glyph", bi = 1.6, xi = 1.5, Si = 1.2, Ci = (e) => `--corn-map-node-${e}`, wi = (e) => `--corn-map-group-${e}`, Ti = (e) => `--corn-map-edge-${e}`, Z = (e) => `--corn-map-${e}`, Ei = Object.freeze([
2907
+ ...ai.map(Ci),
2908
+ ...oi.map(wi),
2909
+ ui,
2910
+ di,
2911
+ fi,
2912
+ yi,
2913
+ _i,
2914
+ ...si.map(Ti),
2915
+ ...ci.map(Z),
2916
+ ...li.map(Z)
2917
+ ]);
2918
+ function Q(e, t) {
2919
+ let [n, r, i, a] = L(e), o = L(t)[3];
2920
+ return o >= 1 ? e : Wn(n, r, i, a * o);
2921
+ }
2922
+ var Di = /^(?:serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-serif|ui-sans-serif|ui-monospace|ui-rounded|emoji|math|fangsong)$/i, Oi = /^(?:-apple-system|BlinkMacSystemFont)$/;
2923
+ function ki(e) {
2924
+ let t = typeof e == "string" ? e.trim() : "";
2925
+ if (!t || t.length > 200 || t.toLowerCase() === "auto" || /[();:{}<>@\\/\u0000-\u001f\u007f]|\burl\b|\bvar\b|\bexpression\b|\bimport\b/i.test(t)) return null;
2926
+ let n = t.split(",").map((e) => e.trim());
2927
+ if (n.length > 8) return null;
2928
+ let r = [];
2929
+ for (let e of n) {
2930
+ let t = /^"([A-Za-z0-9 ._+-]{1,60})"$|^'([A-Za-z0-9 ._+-]{1,60})'$/.exec(e), n = t ? (t[1] ?? t[2]).trim() : /^-?[A-Za-z][A-Za-z0-9 _-]{0,59}$/.test(e) ? e.replace(/\s+/g, " ") : null;
2931
+ if (!n) return null;
2932
+ r.push(Di.test(n) ? n.toLowerCase() : Oi.test(n) ? n : `"${n}"`);
2933
+ }
2934
+ return r.join(", ");
2935
+ }
2936
+ function Ai(e, t) {
2937
+ let n = /^\s*(\d*\.?\d+)(?:px)?\s*$/i.exec(String(e ?? "")), r = n ? parseFloat(n[1]) : NaN;
2938
+ return Number.isFinite(r) && r > 0 && r <= t ? r : null;
2939
+ }
2940
+ function ji(e) {
2941
+ let t = Ai(e, 24);
2942
+ return t !== null && t >= 9 ? t : null;
2943
+ }
2944
+ function Mi(e) {
2945
+ let t = /^\s*(\d*\.?\d+)(px)?\s*$/i.exec(String(e ?? ""));
2946
+ if (!t) return null;
2947
+ let n = parseFloat(t[1]);
2948
+ return t[2] && n !== 0 ? null : Number.isFinite(n) && n >= 0 && n <= 4 ? n : null;
2949
+ }
2950
+ function Ni(e) {
2951
+ let t = /^\s*(\d*\.?\d+)\s*$/.exec(String(e ?? "")), n = t ? parseFloat(t[1]) : NaN;
2952
+ return Number.isFinite(n) && n >= .1 && n <= 1 ? n : null;
2953
+ }
2954
+ function Pi(e, t = []) {
2955
+ let n = {};
2956
+ for (let r of [...Ei, ...t]) {
2957
+ let t = Rn(e(r));
2958
+ t && (n[r] = t);
2959
+ }
2960
+ let r = parseFloat(String(e("--corn-map-stroke-width") ?? ""));
2961
+ return {
2962
+ values: n,
2963
+ strokeWidth: Number.isFinite(r) && r >= 0 ? r : xi,
2964
+ font: ki(e(pi)),
2965
+ edgeWidth: Ai(e(mi), 12),
2966
+ glow: Mi(e(hi)),
2967
+ labelMin: ji(e(gi)),
2968
+ greyAlpha: Ni(e(vi))
2969
+ };
2970
+ }
2971
+ function Fi(e, t = "") {
2972
+ return new Promise((n, r) => {
2973
+ if (typeof Image > "u") {
2974
+ r(/* @__PURE__ */ Error("no Image"));
2975
+ return;
2976
+ }
2977
+ let i = new Image();
2978
+ t && (i.crossOrigin = t), i.onload = () => i.naturalWidth > 0 && i.naturalHeight > 0 ? n(i) : r(/* @__PURE__ */ Error(`${e} has no size`)), i.onerror = () => r(/* @__PURE__ */ Error(`${e} did not load`)), i.src = e;
2979
+ });
2980
+ }
2981
+ function Ii(e, { load: t = Fi, onChange: n = () => {}, warn: r = (e) => console.warn(e) } = {}) {
2982
+ let i = /* @__PURE__ */ new Map(), a = 0;
2983
+ for (let [o, s] of Object.entries(e || {})) {
2984
+ if (!Ge(o) || typeof s != "string" || !s.startsWith("/cornfield/theme/assets/") || s.includes("..")) continue;
2985
+ let e = {
2986
+ status: "loading",
2987
+ image: null
2988
+ };
2989
+ i.set(o, e), Promise.resolve().then(() => t(s)).then((t) => {
2990
+ e.status = "ready", e.image = t, a++, n();
2991
+ }, (t) => {
2992
+ e.status = "failed", r(`Map icon for "${o}" not drawn: ${t && t.message ? t.message : t}`);
2993
+ });
2994
+ }
2995
+ return {
2996
+ kinds: [...i.keys()],
2997
+ get: (e) => {
2998
+ let t = i.get(e);
2999
+ return t && t.status === "ready" ? t.image : null;
3000
+ },
3001
+ status: (e) => i.has(e) ? i.get(e).status : "none",
3002
+ anyReady: () => a > 0
3003
+ };
3004
+ }
3005
+ var Li = {
3006
+ values: {},
3007
+ strokeWidth: xi,
3008
+ font: null,
3009
+ edgeWidth: null,
3010
+ glow: null,
3011
+ labelMin: null,
3012
+ greyAlpha: null
3013
+ }, Ri = Object.freeze({
3014
+ version: 0,
3015
+ values: Object.freeze({}),
3016
+ strokeWidth: xi,
3017
+ font: null,
3018
+ edgeWidth: null,
3019
+ glow: null,
3020
+ labelMin: null,
3021
+ greyAlpha: null,
3022
+ icons: null,
3023
+ pixelated: !1,
3024
+ plain: !0
3025
+ }), zi = 500;
3026
+ function Bi(e) {
3027
+ let t = Li, n = null, r = !1, i = 0, a = [], o = /* @__PURE__ */ new Set(), s = () => {
3028
+ let e = !Object.keys(t.values).length && !(n && n.anyReady()) && t.font === null && t.edgeWidth === null && t.glow === null && t.labelMin === null && t.greyAlpha === null;
3029
+ return Object.freeze({
3030
+ version: i,
3031
+ values: t.values,
3032
+ strokeWidth: t.strokeWidth,
3033
+ font: t.font,
3034
+ edgeWidth: t.edgeWidth,
3035
+ glow: t.glow,
3036
+ labelMin: t.labelMin,
3037
+ greyAlpha: t.greyAlpha,
3038
+ icons: n,
3039
+ pixelated: r,
3040
+ plain: e
3041
+ });
3042
+ }, c = s(), l = !1;
3043
+ e.own(() => {
3044
+ l = !0, o.clear();
3045
+ });
3046
+ let u = () => {
3047
+ l || (i++, c = s(), o.forEach((e) => e(c)));
3048
+ }, d = {
3049
+ get: () => c,
3050
+ onChange(e) {
3051
+ return o.add(e), () => o.delete(e);
3052
+ },
3053
+ setSubjects({ kinds: e = [], layers: t = [] } = {}) {
3054
+ let n = [...new Set([...e.map(([e, t]) => He(e, t)), ...t.map((e) => Ue(e))].filter(Boolean))].sort().slice(0, zi);
3055
+ return n.length === a.length && n.every((e, t) => e === a[t]) ? !1 : (a = n, d.refresh());
3056
+ },
3057
+ refresh(n = e.tokenReader()) {
3058
+ if (!n) return !1;
3059
+ let r = Pi(n, a);
3060
+ if (r.strokeWidth === t.strokeWidth && r.font === t.font && r.edgeWidth === t.edgeWidth && r.glow === t.glow && r.labelMin === t.labelMin && Object.keys(r.values).length === Object.keys(t.values).length && Object.entries(r.values).every(([e, n]) => t.values[e] === n)) return !1;
3061
+ t = r, u();
3062
+ try {
3063
+ let t = e.doc && e.doc.fonts;
3064
+ r.font && t && t.load && t.load(`12px ${r.font}`).catch(() => {});
3065
+ } catch {}
3066
+ return !0;
3067
+ },
3068
+ setIcons(t, i = {}) {
3069
+ let a = t && t.icons && typeof t.icons == "object" ? t.icons : {};
3070
+ r = !!(t && t.pixelated === !0);
3071
+ let o = e.base ? "anonymous" : "", s = i.load || ((t) => Fi(e.url(t), o));
3072
+ return n = Object.keys(a).length ? Ii(a, {
3073
+ ...i,
3074
+ load: s,
3075
+ onChange: () => {
3076
+ u(), i.onChange && i.onChange();
3077
+ }
3078
+ }) : null, u(), n;
3079
+ },
3080
+ applyTheme(t, n = {}) {
3081
+ let r = e.tokenElement();
3082
+ return r && r.setAttribute && (t && t.pixelated === !0 ? r.setAttribute("data-pixelated", "") : r.removeAttribute("data-pixelated")), d.setIcons(t, n);
3083
+ },
3084
+ reset() {
3085
+ t = Li, n = null, r = !1, a = [], u();
3086
+ },
3087
+ watch() {
3088
+ let n = () => {
3089
+ d.refresh();
3090
+ }, r = [], i = e.tokenElement();
3091
+ if (i && e.win && e.win.MutationObserver) {
3092
+ let t = new e.win.MutationObserver(n);
3093
+ t.observe(i, {
3094
+ attributes: !0,
3095
+ attributeFilter: [
3096
+ "data-theme",
3097
+ "data-theme-name",
3098
+ "class"
3099
+ ]
3100
+ }), r.push(() => t.disconnect());
3101
+ }
3102
+ e.root && r.push(e.listen(e.root, "load", (e) => {
3103
+ e.target && e.target.tagName === "LINK" && n();
3104
+ }, !0));
3105
+ let a = e.win && e.win.matchMedia ? e.win.matchMedia("(prefers-color-scheme: light)") : null;
3106
+ a && (a.addEventListener ? (a.addEventListener("change", n), r.push(() => a.removeEventListener("change", n))) : a.addListener && (a.addListener(n), r.push(() => a.removeListener(n))));
3107
+ let o = e.doc && e.doc.fonts;
3108
+ if (o && o.addEventListener) {
3109
+ let e = () => {
3110
+ t.font && u();
3111
+ };
3112
+ o.addEventListener("loadingdone", e), r.push(() => o.removeEventListener("loadingdone", e));
3113
+ }
3114
+ n();
3115
+ let s = () => {
3116
+ for (; r.length;) r.pop()();
3117
+ };
3118
+ return e.own(s), s;
3119
+ }
3120
+ };
3121
+ return d;
3122
+ }
3123
+ var Vi = (e) => e.slot("map-style", Bi), Hi = (e, t) => {
3124
+ for (let n of t) if (e[n]) return e[n];
3125
+ return null;
3126
+ }, Ui = We, Wi = (e, t) => Hi(e, Ui(t));
3127
+ function Gi(e, t) {
3128
+ let n = t.edgeWidth == null ? 1 : t.edgeWidth / bi, r = t.glow == null ? 1 : t.glow;
3129
+ if (n === 1 && r === 1) return e;
3130
+ let i = {
3131
+ ...e,
3132
+ width: e.width * n,
3133
+ glow: e.glow * r
3134
+ };
3135
+ return e.packet && (i.packet = {
3136
+ ...e.packet,
3137
+ glow: e.packet.glow * r
3138
+ }), i;
3139
+ }
3140
+ function Ki(e, t, n) {
3141
+ let { values: r } = t;
3142
+ if (e.mark && e.mark !== "none") {
3143
+ let n = r[Z(e.mark)];
3144
+ return Gi(n ? {
3145
+ ...e,
3146
+ color: n,
3147
+ glowColor: e.glowColor ? n : e.glowColor
3148
+ } : e, t);
3149
+ }
3150
+ if (n.has(e.key)) return Gi(e, t);
3151
+ let i = !e.curve && e.glow > 0 && !e.arrow && r[Z("lit")] || r[Ti(e.kind)];
3152
+ if (!i) return Gi(e, t);
3153
+ let a = {
3154
+ ...e,
3155
+ color: Q(i, e.color)
3156
+ };
3157
+ return e.glowColor && (a.glowColor = Q(i, e.glowColor)), e.packet && (a.packet = {
3158
+ ...e.packet,
3159
+ glowColor: Q(i, e.packet.glowColor)
3160
+ }), Gi(a, t);
3161
+ }
3162
+ function qi(e) {
3163
+ let [t, n, r, i] = L(e), a = Math.round(.2126 * t + .7152 * n + .0722 * r);
3164
+ return i >= 1 ? `rgb(${a}, ${a}, ${a})` : Wn(a, a, a, i);
3165
+ }
3166
+ function Ji(e, t) {
3167
+ let { values: n } = t, r = n[_i], i = t.greyAlpha == null ? 1 : t.greyAlpha / Ut, a = (e) => r ? Q(r, e) : qi(e), o = n[di], s = n[ui], c = e.painted || {
3168
+ nodes: /* @__PURE__ */ new Set(),
3169
+ edges: /* @__PURE__ */ new Set()
3170
+ }, l = e.nodes.map((e) => {
3171
+ let r = !c.nodes.has(e.id) && Wi(n, e), l = t.icons && Ke(e.type, e.kind, e.layer).find((e) => t.icons.get(e)) || null, u = t.glow != null && t.glow !== 1 && e.glow > 0, d = !!e.greyed && !c.nodes.has(e.id);
3172
+ if (!r && !o && !s && !l && !u && !d) return e;
3173
+ let f = { ...e };
3174
+ return u && (f.glow = e.glow * t.glow), r && (f.color = r), o && (f.labelColor = Q(o, e.labelColor)), s && t.strokeWidth > 0 && (f.stroke = {
3175
+ color: d ? a(s) : s,
3176
+ width: t.strokeWidth
3177
+ }), l && !d && (f.icon = l), d && (f.color = a(f.color), f.alpha = Math.min(1, e.alpha * i)), f;
3178
+ }), u = e.edges.map((e) => {
3179
+ let n = Ki(e, t, c.edges);
3180
+ return !e.greyed || c.edges.has(e.key) ? n : {
3181
+ ...n,
3182
+ color: a(n.color),
3183
+ glowColor: null,
3184
+ alpha: Math.min(1, n.alpha * i)
3185
+ };
3186
+ }), d = {
3187
+ ...e,
3188
+ nodes: l,
3189
+ edges: u
3190
+ };
3191
+ t.font && (d.labelFont = t.font), t.labelMin != null && (d.labelMin = t.labelMin);
3192
+ let f = n[fi];
3193
+ if (f) {
3194
+ let { node: t, edge: n } = wr(e.theme).labelOutline;
3195
+ d.labelOutline = {
3196
+ node: {
3197
+ ...t,
3198
+ color: f
3199
+ },
3200
+ edge: {
3201
+ ...n,
3202
+ color: f
3203
+ }
3204
+ };
3205
+ }
3206
+ return d;
3207
+ }
3208
+ var Yi = /* @__PURE__ */ new WeakMap();
3209
+ function Xi(e, t) {
3210
+ if (!t || t.plain && !e.greying) return e;
3211
+ let n = Yi.get(e);
3212
+ if (n && n.style === t) return n.out;
3213
+ let r = Ji(e, t);
3214
+ return Yi.set(e, {
3215
+ style: t,
3216
+ out: r
3217
+ }), r;
3218
+ }
3219
+ var Zi = /* @__PURE__ */ new WeakMap();
3220
+ function Qi(e, t) {
3221
+ if (!t || t.plain) return e;
3222
+ let n = Zi.get(e);
3223
+ if (n && n.style === t) return n.out;
3224
+ let { values: r } = t, i = { ...e.halo };
3225
+ for (let e of ["selected", "match"]) {
3226
+ let t = r[Z(e)];
3227
+ t && (i[e] = {
3228
+ ...i[e],
3229
+ ring: t,
3230
+ fill: i[e].fill ? Q(t, i[e].fill) : i[e].fill
3231
+ });
3232
+ }
3233
+ let a = { ...e.mark };
3234
+ for (let e of ci) {
3235
+ let t = r[Z(e)];
3236
+ t && (a[e] = {
3237
+ ...a[e],
3238
+ color: t
3239
+ });
3240
+ }
3241
+ let o = {
3242
+ ...e,
3243
+ halo: i,
3244
+ mark: a
3245
+ };
3246
+ return Zi.set(e, {
3247
+ style: t,
3248
+ out: o
3249
+ }), o;
3250
+ }
3251
+ // ../explorer/engine/layout.js
3252
+ function $i(e) {
3253
+ let { state: t } = e;
3254
+ e.touchScene();
3255
+ let n = {};
3256
+ t.nodes.forEach((e) => {
3257
+ n[e.id] = 0, e.baseR === void 0 && (e.baseR = e.r);
3258
+ }), t.edges.forEach((e) => {
3259
+ n[e.from] !== void 0 && n[e.from]++, n[e.to] !== void 0 && n[e.to]++;
3260
+ }), t.nodes.forEach((e) => {
3261
+ let t = n[e.id] || 0;
3262
+ e.degree = t;
3263
+ let r = Math.max(-3, Math.min(7, (Math.sqrt(t) - 1.4) * 2.2));
3264
+ e.r = Math.max(12, Math.round(e.baseR + r)), e.scaleDelta = r;
3265
+ });
3266
+ }
3267
+ var ea = "\"Segoe UI\", -apple-system, sans-serif";
3268
+ function ta(e, t) {
3269
+ let { ctx: n } = e.state;
3270
+ n.save(), n.font = `${t.type === "root" || t.type === "app" ? "bold 12px" : "11px"} ${ea}`;
3271
+ let r = n.measureText(t.label || "").width;
3272
+ return n.restore(), r;
3273
+ }
3274
+ var na = [
3275
+ "store",
3276
+ "table",
3277
+ "rom"
3278
+ ], ra = [
3279
+ "core",
3280
+ "atom",
3281
+ "molecule",
3282
+ "token",
3283
+ "page",
3284
+ "service",
3285
+ "external",
3286
+ "stack",
3287
+ "table",
3288
+ "store",
3289
+ "tool",
3290
+ "app",
3291
+ "pkg"
3292
+ ];
3293
+ function ia(e, { first: t = 110, gap: n = 76, spacing: r = 90 } = {}) {
3294
+ let i = [], a = [], o = 0, s = 0;
3295
+ for (; o < e.length;) {
3296
+ let c = t + s * n, l = Math.max(1, Math.floor(2 * Math.PI * c / r)), u = Math.min(l, e.length - o), d = (e) => Array.from({ length: u }, (t, n) => -Math.PI / 2 + e + n / u * Math.PI * 2).some((e) => Math.abs(Math.atan2(Math.sin(e - Math.PI / 2), Math.cos(e - Math.PI / 2))) < .35), f = s % 2 ? Math.PI / u : 0;
3297
+ d(f) && (f += Math.PI / u);
3298
+ for (let e = 0; e < u; e++) {
3299
+ let t = -Math.PI / 2 + f + e / u * Math.PI * 2;
3300
+ i.push({
3301
+ x: Math.cos(t) * c,
3302
+ y: Math.sin(t) * c
3303
+ });
3304
+ }
3305
+ a.push(c), o += u, s++;
3306
+ }
3307
+ return {
3308
+ offsets: i,
3309
+ radii: a
3310
+ };
3311
+ }
3312
+ function aa(e, t, n, r, i = /* @__PURE__ */ new Set()) {
3313
+ let a = [], o = [];
3314
+ e.forEach((e) => {
3315
+ let s = i.has(e.id) ? [] : t(e);
3316
+ if (!s.length) {
3317
+ o.push(e);
3318
+ return;
3319
+ }
3320
+ i.add(e.id);
3321
+ let c = aa(s.sort(r), t, n, r, i);
3322
+ a.push({
3323
+ c: e,
3324
+ sub: c,
3325
+ fp: c.extent
3326
+ });
3327
+ }), a.sort((e, t) => t.fp - e.fp);
3328
+ let s = ia(o, { spacing: n(e) }), c = {
3329
+ children: [...o],
3330
+ offsets: [...s.offsets],
3331
+ radii: s.radii,
3332
+ subs: o.map(() => null),
3333
+ extent: s.radii.length ? s.radii[s.radii.length - 1] + 40 : 0
3334
+ };
3335
+ if (a.length) {
3336
+ let e = s.radii.length ? s.radii[s.radii.length - 1] : 0, t = a[0].fp, n = a.reduce((e, t) => e + 2 * t.fp + 30, 0), r = [], i = -Math.PI / 2;
3337
+ a.forEach((e) => {
3338
+ let t = (2 * e.fp + 30) / n * Math.PI * 2;
3339
+ r.push(i + t / 2), i += t;
3340
+ });
3341
+ let o = Math.max(110, e + t + 40, n / (2 * Math.PI));
3342
+ for (let e = 0; e < a.length; e++) for (let t = e + 1; t < a.length; t++) {
3343
+ let n = Math.sin(Math.abs(r[t] - r[e]) / 2);
3344
+ n > 1e-6 && (o = Math.max(o, (a[e].fp + a[t].fp + 30) / (2 * n)));
3345
+ }
3346
+ a.forEach((e, t) => {
3347
+ c.children.push(e.c), c.offsets.push({
3348
+ x: Math.cos(r[t]) * o,
3349
+ y: Math.sin(r[t]) * o
3350
+ }), c.subs.push(e.sub);
3351
+ }), c.bigRadius = o, c.extent = Math.max(c.extent, o + t);
3352
+ }
3353
+ return c;
3354
+ }
3355
+ function oa(e, t, n, r) {
3356
+ e.children.forEach((i, a) => {
3357
+ i.x = t + e.offsets[a].x, i.y = n + e.offsets[a].y;
3358
+ let o = e.subs[a];
3359
+ o && (r.push({
3360
+ x: i.x,
3361
+ y: i.y,
3362
+ radii: o.radii
3363
+ }), oa(o, i.x, i.y, r));
3364
+ });
3365
+ }
3366
+ var sa = 2;
3367
+ function ca(e, t) {
3368
+ let n = null;
3369
+ for (let r = 0; r < 360; r += sa) {
3370
+ let i = -Math.PI / 2 + r * Math.PI / 180, a = Math.cos(i), o = Math.sin(i), s = [];
3371
+ for (let n of e) {
3372
+ let e = a * n.x + o * n.y, r = n.r + t, i = e * e - (n.x * n.x + n.y * n.y) + r * r;
3373
+ i > 0 && s.push([e - Math.sqrt(i), e + Math.sqrt(i)]);
3374
+ }
3375
+ s.sort((e, t) => e[0] - t[0]);
3376
+ let c = 0;
3377
+ for (let [e, t] of s) e < c + 1e-9 && t > c && (c = t);
3378
+ (!n || c < n.at - 1e-6) && (n = {
3379
+ at: c,
3380
+ x: a * c,
3381
+ y: o * c
3382
+ });
3383
+ }
3384
+ return n;
3385
+ }
3386
+ function la(e) {
3387
+ let { state: t } = e;
3388
+ e.touchScene();
3389
+ let { nodes: n, edges: r } = t;
3390
+ if (n.length === 0) return;
3391
+ t.rings = {
3392
+ rings: [],
3393
+ clusters: []
3394
+ };
3395
+ let i = t.rings, a = new Set(n.map((e) => e.id)), o = {};
3396
+ r.forEach((e) => {
3397
+ !e.dashed && !e.kind && e.from && e.to && a.has(e.from) && e.from !== e.to && !o[e.to] && (o[e.to] = e.from);
3398
+ }), n.forEach((e) => {
3399
+ let t = /* @__PURE__ */ new Set([e.id]);
3400
+ for (let n = o[e.id]; n; n = o[n]) {
3401
+ if (t.has(n)) {
3402
+ delete o[n];
3403
+ break;
3404
+ }
3405
+ t.add(n);
3406
+ }
3407
+ }), n.forEach((e) => {
3408
+ e.x = 0, e.y = 0;
3409
+ });
3410
+ let s = n.find((e) => e.id === "root");
3411
+ s && (s.x = 0, s.y = 0);
3412
+ let c = (e) => na.includes(e.type), l = new Set(Object.values(o)), u = new Set(n.filter((e) => o[e.id] && !c(e)).map((e) => o[e.id])), d = new Set(n.filter((e) => e.id !== "root" && (c(e) ? l.has(e.id) && (!o[e.id] || o[e.id] === "root") && (e.type === "store" || u.has(e.id)) : o[e.id] === "root" || !o[e.id] && (l.has(e.id) || [
3413
+ "app",
3414
+ "pkg",
3415
+ "tool",
3416
+ "external",
3417
+ "stack"
3418
+ ].includes(e.type)))).map((e) => e.id)), f = n.filter((e) => d.has(e.id) || e.id !== "root" && c(e) && u.has(e.id) && !d.has(o[e.id])), p = new Set(f.map((e) => e.id)), m = (e) => {
3419
+ let t = ra.indexOf(e.type);
3420
+ return t < 0 ? 99 : t;
3421
+ }, h = (e, t) => m(e) - m(t) || String(e.label).localeCompare(String(t.label)), g = n.filter((e) => c(e) && !p.has(e.id) && !p.has(o[e.id])).sort((e, t) => na.indexOf(e.type) - na.indexOf(t.type) || String(e.label).localeCompare(String(t.label))), _ = Math.max(110, ...g.map((t) => ta(e, t) + 24)), v = Math.max(150, g.length * _ / (2 * Math.PI));
3422
+ g.forEach((e, t) => {
3423
+ let n = -Math.PI / 2 + t / Math.max(1, g.length) * Math.PI * 2;
3424
+ e.x = Math.cos(n) * v, e.y = Math.sin(n) * v;
3425
+ });
3426
+ let y = g.length ? v + 50 : 60;
3427
+ g.length && i.rings.push({
3428
+ x: 0,
3429
+ y: 0,
3430
+ r: v
3431
+ });
3432
+ let b = (e) => e.id === "root" ? [] : n.filter((t) => o[t.id] === e.id && !p.has(t.id) && !c(t) && t.id !== "root"), x = (t) => Math.min(170, Math.max(84, ...t.map((t) => ta(e, t) * .8 + 26))), S = /* @__PURE__ */ new Map();
3433
+ f.forEach((e) => {
3434
+ let t = n.filter((t) => o[t.id] === e.id && !p.has(t.id)).sort(h);
3435
+ t.length && S.set(e.id, aa(t, b, x, h, /* @__PURE__ */ new Set([e.id])));
3436
+ });
3437
+ let C = f.filter((e) => S.has(e.id)).sort((e, t) => S.get(t.id).extent - S.get(e.id).extent || String(e.label).localeCompare(String(t.label))), w = [{
3438
+ x: 0,
3439
+ y: 0,
3440
+ r: y
3441
+ }], T = y;
3442
+ C.forEach((e) => {
3443
+ let t = S.get(e.id), n = ca(w, t.extent + 35);
3444
+ e.x = n.x, e.y = n.y, w.push({
3445
+ x: e.x,
3446
+ y: e.y,
3447
+ r: t.extent + 35
3448
+ }), T = Math.max(T, Math.hypot(e.x, e.y) + t.extent), i.clusters.push({
3449
+ x: e.x,
3450
+ y: e.y,
3451
+ radii: t.radii
3452
+ }), oa(t, e.x, e.y, i.clusters);
3453
+ });
3454
+ let E = n.filter((e) => e.id !== "root" && !o[e.id] && !c(e) && !p.has(e.id)), D = [...f.filter((e) => !S.has(e.id)), ...E].sort(h), ee = Math.max(120, ...D.map((t) => ta(e, t) + 30)), O = Math.max(T + 90, D.length * ee / (2 * Math.PI));
3455
+ D.forEach((e, t) => {
3456
+ let n = -Math.PI / 2 + t / Math.max(1, D.length) * Math.PI * 2;
3457
+ e.x = Math.cos(n) * O, e.y = Math.sin(n) * O;
3458
+ }), D.length && i.rings.push({
3459
+ x: 0,
3460
+ y: 0,
3461
+ r: O
3462
+ });
3463
+ let k = (e) => e.id === "root" || e.x !== 0 || e.y !== 0, A = /* @__PURE__ */ new Map();
3464
+ n.forEach((e) => {
3465
+ let t = o[e.id];
3466
+ !k(e) && t && (A.get(t) || A.set(t, []).get(t)).push(e);
3467
+ });
3468
+ let te = new Map(n.map((e) => [e.id, e]));
3469
+ A.forEach((e, t) => {
3470
+ let n = te.get(t);
3471
+ if (!n || !k(n) || e.every(k)) return;
3472
+ let r = aa(e.sort(h), b, x, h, /* @__PURE__ */ new Set([t]));
3473
+ i.clusters.push({
3474
+ x: n.x,
3475
+ y: n.y,
3476
+ radii: r.radii
3477
+ }), oa(r, n.x, n.y, i.clusters);
3478
+ });
3479
+ }
3480
+ var ua = 50, da = 110, fa = 15;
3481
+ function pa(e, t) {
3482
+ e.touchScene();
3483
+ let n = 0;
3484
+ t.headers = [];
3485
+ let r = [];
3486
+ t.tiers.forEach((i) => {
3487
+ if (!i.nodes.length) return;
3488
+ let a = Math.ceil(i.nodes.length / fa), o = Math.ceil(i.nodes.length / a), s = Math.max(70, ...i.nodes.map((t) => ta(e, t) + 30)), c = n;
3489
+ i.nodes.forEach((e, t) => {
3490
+ let n = Math.floor(t / o), i = t % o;
3491
+ e.x = c + n * s + s / 2, e.y = (i - (o - 1) / 2) * ua, r.push(e);
3492
+ });
3493
+ let l = a * s;
3494
+ t.headers.push({
3495
+ title: i.title,
3496
+ note: i.note,
3497
+ x: c + l / 2,
3498
+ left: c,
3499
+ right: c + l,
3500
+ rows: o
3501
+ }), n += l + da;
3502
+ }), t.top = -((Math.max(1, ...t.headers.map((e) => e.rows)) - 1) / 2) * ua - 70;
3503
+ let i = (n - da) / 2;
3504
+ r.forEach((e) => {
3505
+ e.x -= i;
3506
+ }), t.headers.forEach((e) => {
3507
+ e.x -= i, e.left -= i, e.right -= i;
3508
+ });
3509
+ }
3510
+ var ma = "cornfield-freeform-positions";
3511
+ function ha(e) {
3512
+ e.store.set(ma, JSON.stringify(e.state.freeformPositions));
3513
+ }
3514
+ function ga(e) {
3515
+ let { state: t } = e;
3516
+ e.touchScene();
3517
+ let n = 0;
3518
+ return t.nodes.forEach((e) => {
3519
+ let r = t.freeformPositions[e.id];
3520
+ r && (e.x = r.x, e.y = r.y, n++);
3521
+ }), n > 0;
3522
+ }
3523
+ function _a(e) {
3524
+ la(e), e.state.isFreeform && ga(e);
3525
+ }
3526
+ // ../explorer/engine/hint.js
3527
+ var va = "cornfield:hint-done";
3528
+ function ya(e) {
3529
+ try {
3530
+ return !!(e && e.matchMedia && e.matchMedia("(pointer: coarse)").matches);
3531
+ } catch {
3532
+ return !1;
3533
+ }
3534
+ }
3535
+ function ba(e, t, n) {
3536
+ return n && (t.set || !e.set) ? t.text : e.text;
3537
+ }
3538
+ function xa(e, t = ya(e.win)) {
3539
+ let { state: n } = e;
3540
+ return n.view === "dataflow" ? p(e, "hintDataFlow") : n.isFreeform ? ba({
3541
+ text: p(e, "hintDrag"),
3542
+ set: d(e, "hintDrag")
3543
+ }, {
3544
+ text: p(e, "hintDragTouch"),
3545
+ set: d(e, "hintDragTouch")
3546
+ }, t) : ba({
3547
+ text: p(e, "hintInspect"),
3548
+ set: d(e, "hintInspect")
3549
+ }, {
3550
+ text: p(e, "hintInspectTouch"),
3551
+ set: d(e, "hintInspectTouch")
3552
+ }, t);
3553
+ }
3554
+ var Sa = (e) => {
3555
+ try {
3556
+ return e.win ? e.win.sessionStorage : null;
3557
+ } catch {
3558
+ return null;
3559
+ }
3560
+ }, Ca = (e) => e.slot("hint", () => {
3561
+ let t = { dismissed: !1 };
3562
+ try {
3563
+ let n = Sa(e);
3564
+ t.dismissed = !!n && n.getItem("cornfield:hint-done") === "1";
3565
+ } catch {
3566
+ t.dismissed = !1;
3567
+ }
3568
+ return t;
3569
+ });
3570
+ function wa(e) {
3571
+ let t = Ca(e);
3572
+ if (!t.dismissed && (t.dismissed = !0, e.el("instruction-badge-text"))) {
3573
+ try {
3574
+ let t = Sa(e);
3575
+ t && t.setItem(va, "1");
3576
+ } catch {}
3577
+ Ea(e);
3578
+ }
3579
+ }
3580
+ function Ta(e) {
3581
+ let t = (t) => e.el(t), n = t("proposal-bar");
3582
+ if (n && !n.hidden) return !0;
3583
+ let r = t("spec-drawer");
3584
+ if (r && r.classList.contains("drawer-open")) return !0;
3585
+ let i = t("forge-panel");
3586
+ return i && i.classList.contains("forge-open") ? !0 : !!(e.root && e.root.querySelector("[data-corn=\"scenario-player\"]"));
3587
+ }
3588
+ function Ea(e) {
3589
+ let t = e.el("instruction-badge-text"), n = xa(e);
3590
+ t && t.textContent !== n && (t.textContent = n);
3591
+ let r = t && t.closest("[data-corn=\"hint\"]");
3592
+ if (!r) return;
3593
+ let i = Ta(e) || Ca(e).dismissed && e.state.view !== "dataflow";
3594
+ r.hidden !== i && (r.hidden = i);
3595
+ }
3596
+ // ../explorer/sheet-model.js
3597
+ var Da = Object.freeze({
3598
+ proposal: "review",
3599
+ player: "review",
3600
+ forge: "other",
3601
+ drawer: "other"
3602
+ }), Oa = /* @__PURE__ */ new Set(["other"]);
3603
+ function ka(e = Da) {
3604
+ let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = null, i = (t) => e[t] || t;
3605
+ return {
3606
+ add: (e) => {
3607
+ t.add(e), n.add(e);
3608
+ },
3609
+ remove: (e) => {
3610
+ t.delete(e), n.delete(e), r === e && (r = null);
3611
+ },
3612
+ has: (e) => t.has(e),
3613
+ show(e) {
3614
+ if (!t.has(e) || (n.add(e), !Oa.has(i(e)))) return [];
3615
+ let a = [...n].filter((t) => t !== e && i(t) === i(e));
3616
+ for (let e of a) n.delete(e), r === e && (r = null);
3617
+ return a;
3618
+ },
3619
+ hide(e) {
3620
+ n.delete(e), r === e && (r = null);
3621
+ },
3622
+ isShown: (e) => n.has(e),
3623
+ shown: () => [...n],
3624
+ expand(e) {
3625
+ return !t.has(e) || !n.has(e) || r === e ? !1 : (r = e, !0);
3626
+ },
3627
+ collapse(e) {
3628
+ return r === e && (r = null, !0);
3629
+ },
3630
+ collapseAll() {
3631
+ return r !== null && (r = null, !0);
3632
+ },
3633
+ toggle(e) {
3634
+ return !t.has(e) || !n.has(e) ? !1 : (r = r === e ? null : e, !0);
3635
+ },
3636
+ isExpanded: (e) => r === e,
3637
+ expanded: () => r,
3638
+ stateOf(e) {
3639
+ if (t.has(e)) return n.has(e) ? r === e ? "expanded" : r !== null && i(r) !== i(e) ? "stub" : "peek" : "hidden";
3640
+ },
3641
+ stubs() {
3642
+ return [...n].filter((e) => r !== null && e !== r && i(e) !== i(r)).length;
3643
+ },
3644
+ ids: () => [...t]
3645
+ };
3646
+ }
3647
+ function Aa(e) {
3648
+ return e.slot("sheets", () => ({
3649
+ model: ka(),
3650
+ elements: /* @__PURE__ */ new Map(),
3651
+ options: /* @__PURE__ */ new Map(),
3652
+ offs: /* @__PURE__ */ new Map(),
3653
+ away: /* @__PURE__ */ new Set(),
3654
+ listeners: /* @__PURE__ */ new Set(),
3655
+ dock: null,
3656
+ lastCovered: 0,
3657
+ observers: [],
3658
+ wiredDock: null,
3659
+ documentWired: !1
3660
+ }));
3661
+ }
3662
+ var ja = (e) => !!(e.win && typeof e.win.matchMedia == "function" && e.win.matchMedia("(max-width: 767px)").matches), Ma = (e, t) => t.dock && t.dock.parentElement || (e.state.canvas ? e.state.canvas.parentElement : null);
3663
+ function Na(e) {
3664
+ let t = Aa(e), { state: n } = e;
3665
+ if (!t.dock || !t.dock.isConnected) return n.coveredBottom || 0;
3666
+ let r = ja(e) ? Math.round(t.dock.offsetHeight || 0) : 0;
3667
+ n.coveredBottom = r;
3668
+ let i = Ma(e, t);
3669
+ return i && i.style.setProperty("--hx-covered", `${r}px`), r !== t.lastCovered && (t.lastCovered = r, t.listeners.forEach((e) => e())), r;
3670
+ }
3671
+ function Pa(e) {
3672
+ let { state: t } = e, n = {
3673
+ top: 0,
3674
+ bottom: 0,
3675
+ left: 0,
3676
+ right: 0
3677
+ }, r = t.canvas, i = (e) => !!e && !e.hidden && e.isConnected;
3678
+ if (ja(e)) n.bottom = Na(e) + 8;
3679
+ else if (r && typeof r.getBoundingClientRect == "function") {
3680
+ let t = r.getBoundingClientRect(), a = e.el("proposal-bar");
3681
+ i(a) && (n.top = Math.max(0, a.getBoundingClientRect().bottom - t.top) + 8);
3682
+ let o = e.el("spec-drawer");
3683
+ i(o) && o.classList.contains("drawer-open") && (n.right = o.offsetWidth);
3684
+ let s = e.el("forge-panel");
3685
+ i(s) && s.classList.contains("forge-open") && (n.left = s.offsetWidth);
3686
+ let c = e.el("review-column");
3687
+ i(c) && (n.left = Math.max(n.left, Math.max(0, c.getBoundingClientRect().right - t.left) + 8));
3688
+ let l = e.root ? e.root.querySelector(".hx-player") : null;
3689
+ i(l) && (n.bottom = Math.max(0, t.bottom - l.getBoundingClientRect().top) + 8);
3690
+ }
3691
+ return Qn(t.width || 0, t.height || 0, n);
3692
+ }
3693
+ function Fa(e) {
3694
+ return e.slot("fly", () => {
3695
+ let t = { glide: null };
3696
+ return t.tick = (n) => {
3697
+ if (!t.glide) return;
3698
+ let r = t.glide.last === null ? 16 : Math.min(n - t.glide.last, 100);
3699
+ t.glide.last = n;
3700
+ let i = 1 - Math.exp(-r / 120), a = e.state.camera;
3701
+ a.x += (t.glide.to.x - a.x) * i, a.y += (t.glide.to.y - a.y) * i, a.zoom += (t.glide.to.zoom - a.zoom) * i, Math.abs(t.glide.to.x - a.x) < .5 && Math.abs(t.glide.to.y - a.y) < .5 && Math.abs(t.glide.to.zoom - a.zoom) < .002 && (Object.assign(a, t.glide.to), t.glide = null);
3702
+ }, t.off = e.map ? e.map.addFrameClient({
3703
+ wants: () => !!t.glide,
3704
+ tick: t.tick
3705
+ }) : null, t.off && e.own(t.off), t;
3706
+ });
3707
+ }
3708
+ function Ia(e, t) {
3709
+ if (!t) return;
3710
+ let n = Fa(e), { state: r } = e;
3711
+ e.reducedMotion || !r.width ? (Object.assign(r.camera, t), n.glide = null, e.map.render()) : (n.glide = {
3712
+ to: { ...t },
3713
+ last: null
3714
+ }, e.map.ensureFlowLoop());
3715
+ }
3716
+ function La(e) {
3717
+ Fa(e).glide = null;
3718
+ }
3719
+ // ../explorer/selection-view.js
3720
+ function Ra(e) {
3721
+ return !e.state.selectedNode || e.state.scenario ? [] : e.map.getScene().nodes.filter((e) => e.connected);
3722
+ }
3723
+ function za(e) {
3724
+ let t = e.state.selectedNode;
3725
+ if (!t) return null;
3726
+ let n = sr(t, Ra(e), Pa(e), { padding: e.map.fitPadding() });
3727
+ return Ia(e, {
3728
+ x: n.x,
3729
+ y: n.y,
3730
+ zoom: n.zoom
3731
+ }), n;
3732
+ }
3733
+ // ../explorer/engine/selection.js
3734
+ function Ba(e, t, { frame: n = !1, source: r = "api" } = {}) {
3735
+ if (!t) return;
3736
+ let { state: i } = e;
3737
+ e.emit("scenario:clear"), wa(e), i.selectedNode && i.selectedNode.id === t.id || (i.selectedKind = null);
3738
+ let a = e.setSelection(t, null, {
3739
+ source: r,
3740
+ quiet: !0
3741
+ });
3742
+ e.touchScene(), e.map.render(), a.announce(), e.emit("node:show", {
3743
+ node: t,
3744
+ frame: n
3745
+ }), n && za(e);
3746
+ }
3747
+ function Va(e, { source: t = "api" } = {}) {
3748
+ e.emit("scenario:clear");
3749
+ let n = e.setSelection(null, null, {
3750
+ source: t,
3751
+ quiet: !0
3752
+ });
3753
+ e.touchScene(), e.map.render(), e.emit("node:close"), n.announce();
3754
+ }
3755
+ var Ha = 1.25, Ua = {
3756
+ ArrowLeft: [-1, 0],
3757
+ ArrowRight: [1, 0],
3758
+ ArrowUp: [0, -1],
3759
+ ArrowDown: [0, 1]
3760
+ };
3761
+ function Wa(e, t = {}) {
3762
+ let { shift: n = !1, alt: r = !1, ctrl: i = !1, meta: a = !1, scenario: o = !1, freeform: s = !1, selected: c = !1 } = t;
3763
+ if (i || a) return null;
3764
+ let l = Ua[e];
3765
+ if (l) {
3766
+ if (r) return s && c ? {
3767
+ type: "move",
3768
+ dx: l[0] * (n ? 80 : 20),
3769
+ dy: l[1] * (n ? 80 : 20)
3770
+ } : null;
3771
+ if (o && l[1] === 0) return null;
3772
+ let e = n ? 240 : 60;
3773
+ return {
3774
+ type: "pan",
3775
+ dx: -l[0] * e,
3776
+ dy: -l[1] * e
3777
+ };
3778
+ }
3779
+ if (r) return null;
3780
+ switch (e) {
3781
+ case "+":
3782
+ case "=": return {
3783
+ type: "zoom",
3784
+ factor: Ha
3785
+ };
3786
+ case "-":
3787
+ case "_": return {
3788
+ type: "zoom",
3789
+ factor: 1 / Ha
3790
+ };
3791
+ case "0": return { type: "fit" };
3792
+ case "n":
3793
+ case "N":
3794
+ case "]": return {
3795
+ type: "step",
3796
+ by: 1
3797
+ };
3798
+ case "p":
3799
+ case "P":
3800
+ case "[": return {
3801
+ type: "step",
3802
+ by: -1
3803
+ };
3804
+ case "f":
3805
+ case "F": return c ? { type: "frame" } : null;
3806
+ case "Home": return { type: "first" };
3807
+ case "End": return { type: "last" };
3808
+ case "Enter": return c ? { type: "open" } : null;
3809
+ case "Escape": return c ? { type: "close" } : null;
3810
+ default: return null;
3811
+ }
3812
+ }
3813
+ function Ga(e) {
3814
+ return [...e].sort((e, t) => Math.floor(e.y / 40) - Math.floor(t.y / 40) || e.x - t.x || (e.id < t.id ? -1 : +(e.id > t.id)));
3815
+ }
3816
+ function Ka(e, t, n) {
3817
+ if (!e.length) return null;
3818
+ let r = t == null ? -1 : e.findIndex((e) => e.id === t);
3819
+ if (r < 0) return n >= 0 ? e[0] : e[e.length - 1];
3820
+ let i = e.length;
3821
+ return e[((r + n) % i + i) % i];
3822
+ }
3823
+ function qa(e, t, n) {
3824
+ let r = e.type === "external" ? "outside service" : e.type, i = Number.isFinite(e.degree) ? `, ${e.degree} ${e.degree === 1 ? "connection" : "connections"}` : "", a = Number.isFinite(t) && Number.isFinite(n) ? `, ${n + 1} of ${t}` : "";
3825
+ return `${e.label}, ${r}${i}${a}`;
3826
+ }
3827
+ var Ja = (e) => `Zoom ${Math.round(e * 100)} percent`;
3828
+ // ../explorer/engine/keyboard.js
3829
+ function $(e, t) {
3830
+ let n = e.slot("announce", () => {
3831
+ let t = { timer: null };
3832
+ return e.own(() => clearTimeout(t.timer)), t;
3833
+ });
3834
+ e.emit("announce", t);
3835
+ let r = e.el("map-announcer");
3836
+ r && (r.textContent = "", clearTimeout(n.timer), n.timer = setTimeout(() => {
3837
+ r.textContent = t;
3838
+ }, 30));
3839
+ }
3840
+ var Ya = (e) => Ga(e.state.nodes.filter((t) => e.map.isNodeVisible(t)));
3841
+ function Xa(e, t, n) {
3842
+ t ? (Ba(e, t, {
3843
+ frame: !0,
3844
+ source: "keyboard"
3845
+ }), $(e, qa(t, n.length, n.indexOf(t)))) : $(e, e.el("legend-dropdown") ? "No nodes are shown. Turn a layer on in the Layers menu." : "No nodes are shown.");
3846
+ }
3847
+ function Za(e) {
3848
+ let { state: t } = e;
3849
+ if (!t.selectedNode) return;
3850
+ let n = za(e);
3851
+ if (!n) return;
3852
+ let r = Math.max(0, Ra(e).length - 1);
3853
+ $(e, n.framed ? `Framed ${t.selectedNode.label} and ${r} connected` : `${t.selectedNode.label} centred: ${r} connected, too spread out to frame together`);
3854
+ }
3855
+ function Qa(e, t, n) {
3856
+ let { state: r } = e, i = r.selectedNode;
3857
+ i && (i.x += t, i.y += n, r.freeformPositions[i.id] = {
3858
+ x: i.x,
3859
+ y: i.y
3860
+ }, e.touchScene(), ha(e), e.map.render(), $(e, `Moved ${i.label}`));
3861
+ }
3862
+ function $a(e, t) {
3863
+ let { state: n, map: r } = e;
3864
+ if (t.target !== n.canvas || t.defaultPrevented) return;
3865
+ let i = Wa(t.key, {
3866
+ shift: t.shiftKey,
3867
+ alt: t.altKey,
3868
+ ctrl: t.ctrlKey,
3869
+ meta: t.metaKey,
3870
+ scenario: !!n.scenario,
3871
+ freeform: n.isFreeform && n.view === "orbit",
3872
+ selected: !!n.selectedNode
3873
+ });
3874
+ if (!i) return;
3875
+ t.preventDefault();
3876
+ let { camera: a, width: o, height: s } = n;
3877
+ switch (i.type) {
3878
+ case "pan":
3879
+ a.x += i.dx, a.y += i.dy, r.render();
3880
+ break;
3881
+ case "zoom":
3882
+ Object.assign(a, Yn(a, i.factor, o / 2, s / 2, r.getMinZoom())), r.render(), $(e, Ja(a.zoom));
3883
+ break;
3884
+ case "fit":
3885
+ r.fitGraphToViewport(r.fitPadding()), $(e, `The whole map. ${Ja(a.zoom)}`);
3886
+ break;
3887
+ case "step": {
3888
+ if (e.ask("search:active") && e.ask("search:step", i.by)) break;
3889
+ let t = Ya(e);
3890
+ Xa(e, Ka(t, n.selectedNode && n.selectedNode.id, i.by), t);
3891
+ break;
3892
+ }
3893
+ case "first":
3894
+ case "last": {
3895
+ let t = Ya(e);
3896
+ Xa(e, i.type === "first" ? t[0] : t[t.length - 1], t);
3897
+ break;
3898
+ }
3899
+ case "frame":
3900
+ Za(e);
3901
+ break;
3902
+ case "open":
3903
+ e.emit("node:focus");
3904
+ break;
3905
+ case "close":
3906
+ Va(e, { source: "keyboard" }), $(e, e.el("spec-drawer") ? "Panel closed" : "Selection cleared");
3907
+ break;
3908
+ case "move": Qa(e, i.dx, i.dy);
3909
+ }
3910
+ }
3911
+ function eo(e) {
3912
+ let t = e.slot("keyboard", () => ({ off: null }));
3913
+ !t.off && e.state.canvas && (t.off = e.listen(e.state.canvas, "keydown", (t) => $a(e, t)));
3914
+ }
3915
+ function to(e) {
3916
+ let t = e.slot("keyboard", () => ({ off: null }));
3917
+ t.off && t.off(), t.off = null;
3918
+ }
3919
+ // ../explorer/engine/piece.js
3920
+ var no = /* @__PURE__ */ RegExp("\\sdata-corn=\\\"([^\\\"]+)\\\"");
3921
+ function ro(e) {
3922
+ return String(e).replace(/<[a-zA-Z][^<>]*>/g, (e) => /\spart=/.test(e) ? e : e.replace(no, (e, t) => ` data-corn=\"${t}\" part=\"${t}\"`));
3923
+ }
3924
+ function io(e) {
3925
+ for (let t of e.querySelectorAll("[data-corn]:not([part])")) t.setAttribute("part", t.getAttribute("data-corn"));
3926
+ }
3927
+ function ao(e) {
3928
+ let t = [], n = !1, r = {
3929
+ listen(n, r, i, a) {
3930
+ let o = e.listen(n, r, i, a);
3931
+ return t.push(o), o;
3932
+ },
3933
+ on(n, r) {
3934
+ let i = e.on(n, r);
3935
+ return t.push(i), i;
3936
+ },
3937
+ own(e) {
3938
+ return t.push(e), e;
3939
+ },
3940
+ timeout(e, n) {
3941
+ let r = setTimeout(() => {
3942
+ e();
3943
+ }, n);
3944
+ return t.push(() => clearTimeout(r)), r;
3945
+ },
3946
+ keepParts(...n) {
3947
+ let r = e.win && e.win.MutationObserver;
3948
+ if (!r) return;
3949
+ let i = new r((e) => {
3950
+ for (let t of e) for (let e of t.addedNodes) e.nodeType === 1 && (e.hasAttribute("data-corn") && !e.hasAttribute("part") && e.setAttribute("part", e.getAttribute("data-corn")), io(e));
3951
+ });
3952
+ for (let e of n) i.observe(e, {
3953
+ childList: !0,
3954
+ subtree: !0
3955
+ });
3956
+ t.push(() => i.disconnect());
3957
+ },
3958
+ destroy() {
3959
+ if (!n) for (n = !0, e.release(r.destroy); t.length;) try {
3960
+ t.pop()();
3961
+ } catch (e) {
3962
+ console.error("A piece clean-up failed", e);
3963
+ }
3964
+ }
3965
+ };
3966
+ return e.own(r.destroy), r;
3967
+ }
3968
+ function oo(e, t, n, r, i) {
3969
+ let a = e.doc.createElement("template");
3970
+ a.innerHTML = ro(n), h(e, a.content);
3971
+ let o = [...a.content.children], s = r && i ? r[i] : null;
3972
+ if (s && s.parentNode) {
3973
+ let t = so(s);
3974
+ s.parentNode.insertBefore(a.content, s), t && co(e, t, o);
3975
+ } else t.append(a.content);
3976
+ return o;
3977
+ }
3978
+ function so(e) {
3979
+ let t = [], n = `corn-placeholder:${String(e.data || "").replace(/^corn-piece:/, "")}`;
3980
+ for (let r = e.previousSibling; r; r = r.previousSibling) if (t.push(r), r.nodeType === 8 && r.data === n) return t;
3981
+ return null;
3982
+ }
3983
+ function co(e, t, n) {
3984
+ let r = (e) => e.flatMap((e) => e.nodeType === 1 ? [...e.matches("button, input") ? [e] : [], ...e.querySelectorAll("button, input")] : []), i = r(t.slice().reverse()), a = r(n), o = e.active();
3985
+ i.forEach((e, t) => {
3986
+ let n = a[t];
3987
+ n && n.tagName === e.tagName && (e.tagName === "INPUT" && e.value && (n.value = e.value), e === o && n.focus());
3988
+ }), t.forEach((e) => e.remove());
3989
+ }
3990
+ // ../explorer/pieces/adopt-tokens.js
3991
+ var lo = Symbol.for("cornfield.default-tokens"), uo = "data-corn-default-tokens";
3992
+ function fo(e, t) {
3993
+ if (!e || !t) return !1;
3994
+ let n = e.nodeType === 9 ? e : e.ownerDocument, r = e.adoptedStyleSheets;
3995
+ if (Array.isArray(r) && n && n.defaultView && typeof n.defaultView.CSSStyleSheet == "function" && "replaceSync" in n.defaultView.CSSStyleSheet.prototype) {
3996
+ if (r.some((e) => e && e[lo])) return !1;
3997
+ let i = new n.defaultView.CSSStyleSheet();
3998
+ return i.replaceSync(t), i[lo] = !0, e.adoptedStyleSheets = [...r, i], !0;
3999
+ }
4000
+ let i = e.nodeType === 9 ? e.head : e;
4001
+ if (!i || i.querySelector(`style[${uo}]`)) return !1;
4002
+ let a = n.createElement("style");
4003
+ return a.setAttribute(uo, ""), a.textContent = t, i.prepend(a), !0;
4004
+ }
4005
+ // ../explorer/pieces/scope-link.js
4006
+ var po = "corn-scope-request", mo = "corn-scope-changed", ho = (e) => e.slot("scope", () => ({
4007
+ theme: "auto",
4008
+ serverTheme: null,
4009
+ host: null,
4010
+ source: null,
4011
+ mountStatus: null
4012
+ })), go = (e) => {
4013
+ let t = ho(e);
4014
+ return t.host ? t : null;
4015
+ };
4016
+ function _o(e, t) {
4017
+ let n = null;
4018
+ e.dispatchEvent(new CustomEvent(po, {
4019
+ bubbles: !0,
4020
+ composed: !0,
4021
+ detail: {
4022
+ el: e,
4023
+ claim: (e) => {
4024
+ n = e;
4025
+ }
4026
+ }
4027
+ }));
4028
+ let r = () => t();
4029
+ e.addEventListener(mo, r);
4030
+ let i = !1;
4031
+ return {
4032
+ inst: n ? n.inst : null,
4033
+ scope: n ? n.scope : null,
4034
+ leave() {
4035
+ i || (i = !0, e.removeEventListener(mo, r), n && n.release());
4036
+ }
4037
+ };
4038
+ }
4039
+ // \0corn-default-tokens
4040
+ var vo = "/* cornfield's default design tokens, generated from explorer/tokens.css by components/scripts/tokens.mjs: do not edit.\n Every selector is :where(...), at zero specificity: any ordinary rule of yours (on :root, or on one element) overrides it. */\n\n:where(:root) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-blur: 16px;\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-text-on-accent: #fff;\n --corn-mockup-ground: #fff;\n --corn-accent: #4f46e5;\n --corn-accent-hover: #6265f1;\n --corn-accent-text: #98a1fa;\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n --corn-font-display: var(--corn-font);\n --corn-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace;\n --corn-font-num: var(--corn-font);\n --corn-text-2xs: 10px;\n --corn-text-xs: 11px;\n --corn-text-sm: 12px;\n --corn-text-md: 13px;\n --corn-text-base: 14px;\n --corn-text-lg: 15px;\n --corn-text-xl: 20px;\n --corn-radius-xs: 3px;\n --corn-radius-sm: 6px;\n --corn-radius: 10px;\n --corn-radius-lg: 14px;\n --corn-radius-pill: 999px;\n --corn-border: 1px;\n --corn-border-strong: 2px;\n --corn-focus-width: 2px;\n --corn-focus-offset: 2px;\n --corn-space: 4px;\n --corn-space-1: var(--corn-space);\n --corn-space-2: 6px;\n --corn-space-3: 8px;\n --corn-space-4: 12px;\n --corn-space-5: 16px;\n --corn-space-6: 24px;\n --corn-control-height: 32px;\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-map-stroke: auto;\n --corn-map-stroke-width: 1.5px;\n --corn-map-label: auto;\n --corn-map-label-halo: auto;\n --corn-map-collision: var(--corn-warn);\n --corn-map-font: auto;\n --corn-map-edge-width: auto;\n --corn-map-glow: auto;\n --corn-map-label-min: auto;\n --corn-map-glyph: auto;\n --corn-map-grey: auto;\n --corn-map-grey-alpha: auto;\n --corn-map-added: auto;\n --corn-map-changed: auto;\n --corn-map-removed: auto;\n --corn-map-edit: auto;\n --corn-map-selected: auto;\n --corn-map-match: auto;\n --corn-map-lit: auto;\n --corn-map-edge-ownership: auto;\n --corn-map-edge-usage: auto;\n --corn-map-edge-flow: auto;\n --corn-map-edge-reads: auto;\n --corn-map-edge-writes: auto;\n --corn-map-edge-calls: auto;\n --corn-map-edge-triggers: auto;\n --corn-map-edge-delivers: auto;\n --corn-map-edge-runs-on: auto;\n --corn-map-edge-uses: auto;\n --corn-map-edge-extends: auto;\n --corn-map-node-root: auto;\n --corn-map-node-app: auto;\n --corn-map-node-page: auto;\n --corn-map-node-pkg: auto;\n --corn-map-node-core: auto;\n --corn-map-node-token: auto;\n --corn-map-node-atom: auto;\n --corn-map-node-molecule: auto;\n --corn-map-node-tool: auto;\n --corn-map-node-store: auto;\n --corn-map-node-table: auto;\n --corn-map-node-rom: auto;\n --corn-map-node-service: auto;\n --corn-map-node-external: auto;\n --corn-map-node-stack: auto;\n --corn-map-node-machine: auto;\n --corn-map-node-container: auto;\n --corn-map-node-persona: auto;\n --corn-map-node-device: auto;\n --corn-map-node-floor: auto;\n --corn-map-node-room: auto;\n --corn-map-group-app: auto;\n --corn-map-group-pkg: auto;\n --corn-map-group-page: auto;\n --corn-map-group-atom: auto;\n --corn-map-group-molecule: auto;\n --corn-map-group-token: auto;\n --corn-map-group-tool: auto;\n --corn-map-group-table: auto;\n --corn-map-group-rom: auto;\n --corn-map-group-service: auto;\n --corn-map-group-cloud: auto;\n --corn-map-group-web: auto;\n --corn-map-group-stack: auto;\n --corn-map-group-machine: auto;\n --corn-map-group-container: auto;\n --corn-map-group-device: auto;\n --corn-map-group-house: auto;\n --corn-map-group-persona: auto;\n}\n\n@media (prefers-color-scheme: light) {\n :where(:root:not([data-theme=\"dark\"])) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n }\n}\n\n:where(:root[data-theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n}\n\n@media (max-width: 767px) {\n :where(:root) {\n --corn-control-height: 44px;\n }\n}\n\n@media (max-width: 639px) {\n :where(:root) {\n --corn-panel-pad: var(--corn-space-5);\n }\n}\n\n:where(:root) {\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"light\" on an element: this mode's tokens, on the element itself */\n:where(corn-map[theme=\"light\"]),\n:where(corn-scope[theme=\"light\"]) {\n --corn-ground: #f4f6fa;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.06) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.04) 0%, transparent 45%);\n --corn-surface-1: rgba(255, 255, 255, 0.8);\n --corn-surface-2: rgba(241, 245, 249, 0.92);\n --corn-surface-3: rgba(226, 232, 240, 0.95);\n --corn-line: rgba(15, 23, 42, 0.12);\n --corn-line-soft: rgba(15, 23, 42, 0.07);\n --corn-shadow: 0 8px 28px 0 rgba(15, 23, 42, 0.12);\n --corn-shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.25);\n --corn-shadow-lg: 0 10px 30px -12px rgba(15, 23, 42, 0.18);\n --corn-shadow-color: rgba(15, 23, 42, 0.25);\n --corn-glow: 0px;\n --corn-scrim: rgba(15, 23, 42, 0.35);\n --corn-text: #0f172a;\n --corn-text-2: #334155;\n --corn-text-3: #475569;\n --corn-accent-text: #4f46e5;\n --corn-focus: #4f46e5;\n --corn-brand-gradient: linear-gradient(135deg, #2563eb 0%, #4f46e5 50%, #dc2626 100%);\n --corn-ok: #046f51;\n --corn-warn: #854d0e;\n --corn-bad: #b91c1c;\n --corn-info: #03679e;\n --corn-added: #197c6f;\n --corn-changed: #8f6703;\n --corn-removed: #e20b0b;\n --corn-edit: #6839f6;\n --corn-hue-orange: #c2410c;\n --corn-hue-fuchsia: #a21caf;\n --corn-hue-pink: #be185d;\n --corn-hue-lime: #4c7b0f;\n --corn-hue-orange-text: #9a3412;\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 30%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 55%, transparent);\n --corn-glyph-mix: 45%;\n color-scheme: light;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n\n/* theme=\"dark\" on an element: this mode's tokens, on the element itself */\n:where(corn-map[theme=\"dark\"]),\n:where(corn-scope[theme=\"dark\"]) {\n --corn-ground: #090d16;\n --corn-ground-image: radial-gradient(circle at 14% 18%, rgba(66, 153, 225, 0.2) 0%, transparent 45%),\n radial-gradient(circle at 86% 82%, rgba(229, 62, 62, 0.16) 0%, transparent 45%),\n radial-gradient(circle at 50% 50%, rgba(66, 153, 225, 0.10) 0%, transparent 60%);\n --corn-surface-1: rgba(26, 34, 52, 0.72);\n --corn-surface-2: rgba(30, 41, 59, 0.8);\n --corn-surface-3: rgba(51, 65, 85, 0.8);\n --corn-line: rgba(255, 255, 255, 0.12);\n --corn-line-soft: rgba(255, 255, 255, 0.07);\n --corn-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.45);\n --corn-shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.4);\n --corn-shadow-lg: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n --corn-shadow-color: rgba(0, 0, 0, 0.5);\n --corn-glow: 8px;\n --corn-scrim: rgba(0, 0, 0, 0.6);\n --corn-text: #f8fafc;\n --corn-text-2: #cbd5e1;\n --corn-text-3: #9aa9bc;\n --corn-accent-text: #98a1fa;\n --corn-focus: #818cf8;\n --corn-brand-gradient: linear-gradient(135deg, #4299e1 0%, #818cf8 50%, #e53e3e 100%);\n --corn-ok: #34d399;\n --corn-warn: #fcd34d;\n --corn-bad: #fca5a5;\n --corn-info: #7dd3fc;\n --corn-added: #2dd4bf;\n --corn-changed: #fbbf24;\n --corn-removed: #fa9292;\n --corn-edit: #b49cfb;\n --corn-hue-orange: #fb923c;\n --corn-hue-fuchsia: #e879f9;\n --corn-hue-pink: #f472b6;\n --corn-hue-lime: #a3e635;\n --corn-hue-orange-text: var(--corn-hue-orange);\n --corn-house-line: color-mix(in srgb, var(--corn-hue-lime) 18%, transparent);\n --corn-house-room: color-mix(in srgb, var(--corn-hue-lime) 45%, transparent);\n --corn-glyph-mix: 100%;\n color-scheme: dark;\n --corn-shadow-sheet: 0 -8px 24px color-mix(in srgb, var(--corn-shadow-color) 70%, transparent);\n --corn-accent-soft: color-mix(in srgb, var(--corn-accent-hover) 20%, transparent);\n --corn-ok-soft: color-mix(in srgb, var(--corn-ok) 15%, transparent);\n --corn-run-requested: var(--corn-text-3);\n --corn-run-claimed: var(--corn-info);\n --corn-run-working: var(--corn-info);\n --corn-run-waiting: var(--corn-warn);\n --corn-run-waiting-ink: var(--corn-ground);\n --corn-run-done: var(--corn-ok);\n --corn-run-failed: var(--corn-bad);\n --corn-run-stopped: var(--corn-text-2);\n --corn-added-text: color-mix(in srgb, var(--corn-added) 60%, var(--corn-text));\n --corn-edit-text: color-mix(in srgb, var(--corn-edit) 60%, var(--corn-text));\n --corn-hue-orange-soft: color-mix(in srgb, var(--corn-hue-orange) 12%, transparent);\n --corn-font-display: var(--corn-font);\n --corn-font-num: var(--corn-font);\n --corn-space-1: var(--corn-space);\n --corn-panel-pad: calc(var(--corn-space-5) + var(--corn-space-1));\n --corn-panel-head-height: calc(var(--corn-control-height) + var(--corn-space-3));\n --corn-map-collision: var(--corn-warn);\n --hx-bg: var(--corn-ground);\n --hx-text: var(--corn-text);\n --hx-ink: var(--corn-text);\n --hx-text-1: var(--corn-text);\n --hx-text-2: var(--corn-text-2);\n --hx-slate-300: var(--corn-text-2);\n --hx-slate-400: var(--corn-text-3);\n --hx-slate-500: var(--corn-text-3);\n --hx-slate-600: var(--corn-text-3);\n --hx-slate-700: var(--corn-surface-3);\n --hx-slate-800: var(--corn-surface-2);\n --hx-slate-900: var(--corn-ground);\n --hx-slate-950: var(--corn-ground);\n --hx-indigo: var(--corn-accent-text);\n --hx-indigo-strong: var(--corn-accent);\n --hx-emerald: var(--corn-ok);\n --hx-amber: var(--corn-warn);\n --hx-sky: var(--corn-info);\n --hx-pink: var(--corn-hue-pink);\n --hx-fuchsia: var(--corn-hue-fuchsia);\n --hx-fuchsia-strong: var(--corn-hue-fuchsia);\n --hx-red: var(--corn-bad);\n --hx-code: var(--corn-warn);\n --hx-orange-text: var(--corn-hue-orange);\n --hx-orange-strong: var(--corn-hue-orange);\n --hx-teal-text: var(--corn-added-text);\n --hx-teal-strong: var(--corn-added-text);\n --hx-violet-text: var(--corn-edit-text);\n --hx-green-text: var(--corn-ok);\n --hx-lime-text: var(--corn-hue-lime);\n --hx-mark-added: var(--corn-added);\n --hx-mark-changed: var(--corn-changed);\n --hx-mark-removed: var(--corn-removed);\n --hx-mark-edit: var(--corn-edit);\n --hx-control: var(--corn-surface-2);\n --hx-control-hover: var(--corn-surface-3);\n --hx-control-off: color-mix(in srgb, var(--corn-ground) 40%, transparent);\n --hx-well: color-mix(in srgb, var(--corn-ground) 80%, transparent);\n --hx-well-soft: color-mix(in srgb, var(--corn-ground) 55%, transparent);\n --hx-line: var(--corn-line);\n --hx-line-soft: var(--corn-line-soft);\n --hx-scroll: color-mix(in srgb, var(--corn-text) 18%, transparent);\n --hx-scroll-hover: color-mix(in srgb, var(--corn-text) 28%, transparent);\n --hx-swatch-solid: color-mix(in srgb, var(--corn-text) 55%, transparent);\n --hx-backdrop: var(--corn-scrim);\n --hx-glyph-mix: var(--corn-glyph-mix);\n --surface-glass: var(--corn-surface-1);\n --surface-glass-header: color-mix(in srgb, var(--corn-ground) 88%, transparent);\n --border-glass: var(--corn-line);\n --border-subtle: var(--corn-line-soft);\n --glass-blur: blur(var(--corn-blur));\n --glass-shadow: var(--corn-shadow);\n --gradient-primary: var(--corn-brand-gradient);\n --bg-gradient: var(--corn-ground-image), var(--corn-ground);\n --pop-font-body: var(--corn-font);\n --pop-font-mono: var(--corn-mono);\n}\n";
4041
+ export { gn as $, ur as A, wr as B, Qi as C, dr as D, hr as E, ri as F, Xn as G, Kn as H, ii as I, fn as J, Yn as K, Ir as L, cr as M, Or as N, Sr as O, q as P, mn as Q, Mr as R, Ri as S, Xi as T, K as U, Lr as V, Zn as W, En as X, dn as Y, bn as Z, pa as _, _o as a, Pe as at, yi as b, oo as c, T as ct, eo as d, o as dt, yn as et, to as f, n as ft, $i as g, La as h, ho as i, L as it, lr as j, _r as k, ao as l, f as lt, Ba as m, mo as n, xn as nt, go as o, ot, Va as p, cn as q, po as r, Zt as rt, fo as s, C as st, vo as t, hn as tt, ro as u, p as ut, _a as v, Vi as w, Si as x, ha as y, Y as z };