@unpunnyfuns/conduit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/README.md +202 -0
- package/dist/assert.d.ts +6 -0
- package/dist/assert.d.ts.map +1 -0
- package/dist/assert.js +8 -0
- package/dist/assert.js.map +1 -0
- package/dist/cn.d.ts +3 -0
- package/dist/cn.d.ts.map +1 -0
- package/dist/cn.js +3 -0
- package/dist/cn.js.map +1 -0
- package/dist/components/Badge.d.ts +6 -0
- package/dist/components/Badge.d.ts.map +1 -0
- package/dist/components/Badge.js +11 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Card.d.ts +20 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +24 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Diagram.d.ts +37 -0
- package/dist/components/Diagram.d.ts.map +1 -0
- package/dist/components/Diagram.js +92 -0
- package/dist/components/Diagram.js.map +1 -0
- package/dist/components/EdgeLayer.d.ts +23 -0
- package/dist/components/EdgeLayer.d.ts.map +1 -0
- package/dist/components/EdgeLayer.js +85 -0
- package/dist/components/EdgeLayer.js.map +1 -0
- package/dist/components/Lane.d.ts +11 -0
- package/dist/components/Lane.d.ts.map +1 -0
- package/dist/components/Lane.js +6 -0
- package/dist/components/Lane.js.map +1 -0
- package/dist/components/icons.d.ts +7 -0
- package/dist/components/icons.d.ts.map +1 -0
- package/dist/components/icons.js +47 -0
- package/dist/components/icons.js.map +1 -0
- package/dist/components/pulse.d.ts +15 -0
- package/dist/components/pulse.d.ts.map +1 -0
- package/dist/components/pulse.js +10 -0
- package/dist/components/pulse.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/architecture.d.ts +60 -0
- package/dist/layout/architecture.d.ts.map +1 -0
- package/dist/layout/architecture.js +88 -0
- package/dist/layout/architecture.js.map +1 -0
- package/dist/layout/bounds.d.ts +25 -0
- package/dist/layout/bounds.d.ts.map +1 -0
- package/dist/layout/bounds.js +32 -0
- package/dist/layout/bounds.js.map +1 -0
- package/dist/layout/congestion.d.ts +18 -0
- package/dist/layout/congestion.d.ts.map +1 -0
- package/dist/layout/congestion.js +49 -0
- package/dist/layout/congestion.js.map +1 -0
- package/dist/layout/design.d.ts +98 -0
- package/dist/layout/design.d.ts.map +1 -0
- package/dist/layout/design.js +92 -0
- package/dist/layout/design.js.map +1 -0
- package/dist/layout/edges.d.ts +53 -0
- package/dist/layout/edges.d.ts.map +1 -0
- package/dist/layout/edges.js +848 -0
- package/dist/layout/edges.js.map +1 -0
- package/dist/layout/errors.d.ts +6 -0
- package/dist/layout/errors.d.ts.map +1 -0
- package/dist/layout/errors.js +9 -0
- package/dist/layout/errors.js.map +1 -0
- package/dist/layout/frame.d.ts +35 -0
- package/dist/layout/frame.d.ts.map +1 -0
- package/dist/layout/frame.js +63 -0
- package/dist/layout/frame.js.map +1 -0
- package/dist/layout/geometry.d.ts +23 -0
- package/dist/layout/geometry.d.ts.map +1 -0
- package/dist/layout/geometry.js +22 -0
- package/dist/layout/geometry.js.map +1 -0
- package/dist/layout/labels.d.ts +12 -0
- package/dist/layout/labels.d.ts.map +1 -0
- package/dist/layout/labels.js +153 -0
- package/dist/layout/labels.js.map +1 -0
- package/dist/layout/lanes.d.ts +5 -0
- package/dist/layout/lanes.d.ts.map +1 -0
- package/dist/layout/lanes.js +13 -0
- package/dist/layout/lanes.js.map +1 -0
- package/dist/layout/layout.d.ts +42 -0
- package/dist/layout/layout.d.ts.map +1 -0
- package/dist/layout/layout.js +94 -0
- package/dist/layout/layout.js.map +1 -0
- package/dist/layout/rank.d.ts +14 -0
- package/dist/layout/rank.d.ts.map +1 -0
- package/dist/layout/rank.js +78 -0
- package/dist/layout/rank.js.map +1 -0
- package/dist/layout/scope.d.ts +20 -0
- package/dist/layout/scope.d.ts.map +1 -0
- package/dist/layout/scope.js +52 -0
- package/dist/layout/scope.js.map +1 -0
- package/dist/layout/seating.d.ts +27 -0
- package/dist/layout/seating.d.ts.map +1 -0
- package/dist/layout/seating.js +135 -0
- package/dist/layout/seating.js.map +1 -0
- package/dist/layout/text.d.ts +12 -0
- package/dist/layout/text.d.ts.map +1 -0
- package/dist/layout/text.js +148 -0
- package/dist/layout/text.js.map +1 -0
- package/dist/layout/trace.d.ts +8 -0
- package/dist/layout/trace.d.ts.map +1 -0
- package/dist/layout/trace.js +51 -0
- package/dist/layout/trace.js.map +1 -0
- package/dist/layout.d.ts +9 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +6 -0
- package/dist/layout.js.map +1 -0
- package/dist/schema/document.d.ts +239 -0
- package/dist/schema/document.d.ts.map +1 -0
- package/dist/schema/document.js +83 -0
- package/dist/schema/document.js.map +1 -0
- package/dist/schema/errors.d.ts +20 -0
- package/dist/schema/errors.d.ts.map +1 -0
- package/dist/schema/errors.js +12 -0
- package/dist/schema/errors.js.map +1 -0
- package/dist/schema/integrity.d.ts +8 -0
- package/dist/schema/integrity.d.ts.map +1 -0
- package/dist/schema/integrity.js +63 -0
- package/dist/schema/integrity.js.map +1 -0
- package/dist/schema/parse.d.ts +6 -0
- package/dist/schema/parse.d.ts.map +1 -0
- package/dist/schema/parse.js +53 -0
- package/dist/schema/parse.js.map +1 -0
- package/dist/schema/primitives.d.ts +58 -0
- package/dist/schema/primitives.d.ts.map +1 -0
- package/dist/schema/primitives.js +44 -0
- package/dist/schema/primitives.js.map +1 -0
- package/dist/theme.css +63 -0
- package/package.json +83 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EdgeLayer.js","sourceRoot":"","sources":["../../src/components/EdgeLayer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Lane } from "../schema/document.js";
|
|
2
|
+
import type { Box } from "../layout/geometry.js";
|
|
3
|
+
export type LaneBandProps = {
|
|
4
|
+
id?: string;
|
|
5
|
+
lane: Lane;
|
|
6
|
+
box: Box;
|
|
7
|
+
dimmed?: boolean;
|
|
8
|
+
};
|
|
9
|
+
/** The grouping band behind a lane's cards, with its tracked uppercase header. */
|
|
10
|
+
export declare const LaneBand: ({ id, lane, box, dimmed }: LaneBandProps) => import("react").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=Lane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Lane.d.ts","sourceRoot":"","sources":["../../src/components/Lane.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,kFAAkF;AAClF,eAAO,MAAM,QAAQ,8BAAuC,aAAa,gCAaxE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../cn.js";
|
|
3
|
+
import { LANE_PADDING_X } from "../layout/design.js";
|
|
4
|
+
/** The grouping band behind a lane's cards, with its tracked uppercase header. */
|
|
5
|
+
export const LaneBand = ({ id, lane, box, dimmed = false }) => (_jsx("div", { "data-conduit-lane": id, className: cn("absolute rounded-xl bg-conduit-lane transition-opacity", dimmed && "opacity-45"), style: { left: box.x, top: box.y, width: box.width, height: box.height }, children: _jsx("div", { className: "absolute top-[14px] truncate text-[10px] font-bold uppercase tracking-[0.12em] text-conduit-muted", style: { left: LANE_PADDING_X, width: box.width - LANE_PADDING_X * 2 }, children: lane.subtitle === undefined ? lane.label : `${lane.label} · ${lane.subtitle}` }) }));
|
|
6
|
+
//# sourceMappingURL=Lane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Lane.js","sourceRoot":"","sources":["../../src/components/Lane.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,kFAAkF;AAClF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAiB,EAAE,EAAE,CAAC,CAC5E,mCACqB,EAAE,EACrB,SAAS,EAAE,EAAE,CAAC,wDAAwD,EAAE,MAAM,IAAI,YAAY,CAAC,EAC/F,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAExE,cACE,SAAS,EAAC,mGAAmG,EAC7G,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,cAAc,GAAG,CAAC,EAAE,YAErE,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,QAAQ,EAAE,GAC1E,GACF,CACP,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NodeKind } from "../schema/primitives.js";
|
|
2
|
+
/** The chip glyph for a node's kind: "what sort of thing is this" at a glance. */
|
|
3
|
+
export declare const KindIcon: ({ kind, className }: {
|
|
4
|
+
kind: NodeKind;
|
|
5
|
+
className?: string;
|
|
6
|
+
}) => import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/components/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AA+GxD,kFAAkF;AAClF,eAAO,MAAM,QAAQ,wBAAyB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,gCAInF,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { assertNever } from "../assert.js";
|
|
3
|
+
import { cn } from "../cn.js";
|
|
4
|
+
const FILL = "fill-conduit-muted";
|
|
5
|
+
const STROKE = "fill-none stroke-conduit-muted stroke-[1.4]";
|
|
6
|
+
const Stroked = ({ d }) => _jsx("path", { className: STROKE, d: d });
|
|
7
|
+
const Rect = ({ w, h, r }) => (_jsx("rect", { className: STROKE, x: -w / 2, y: -h / 2, width: w, height: h, rx: r }));
|
|
8
|
+
const Text = ({ children, className }) => (_jsx("text", { className: cn(FILL, className), x: 0, y: 4.5, textAnchor: "middle", children: children }));
|
|
9
|
+
const glyph = (kind) => {
|
|
10
|
+
switch (kind) {
|
|
11
|
+
case "service":
|
|
12
|
+
return (_jsxs(_Fragment, { children: [_jsx(Rect, { w: 13, h: 13, r: 3 }), _jsx("circle", { className: FILL, cx: 0, cy: 0, r: 2 })] }));
|
|
13
|
+
case "app":
|
|
14
|
+
return (_jsxs(_Fragment, { children: [_jsx(Rect, { w: 14, h: 12, r: 2 }), _jsx(Stroked, { d: "M-7,-2 h14" })] }));
|
|
15
|
+
case "module":
|
|
16
|
+
return _jsx(Text, { className: "text-[11px] font-mono", children: "{ }" });
|
|
17
|
+
case "function":
|
|
18
|
+
return _jsx(Text, { className: "text-[14px] italic font-serif", children: "\u0192" });
|
|
19
|
+
case "route":
|
|
20
|
+
return _jsx("path", { className: FILL, d: "M-7,-6 L7,0 L-7,6 Z" });
|
|
21
|
+
case "job":
|
|
22
|
+
return (_jsxs(_Fragment, { children: [_jsx("circle", { className: STROKE, cx: 0, cy: 0, r: 6.5 }), _jsx(Stroked, { d: "M0,-3.5 V0 H3" })] }));
|
|
23
|
+
case "queue":
|
|
24
|
+
return (_jsxs(_Fragment, { children: [_jsx(Stroked, { d: "M-6.5,-4.5 h13" }), _jsx(Stroked, { d: "M-6.5,0 h13" }), _jsx(Stroked, { d: "M-6.5,4.5 h13" })] }));
|
|
25
|
+
case "datastore":
|
|
26
|
+
return (_jsxs(_Fragment, { children: [_jsx("ellipse", { className: STROKE, cx: 0, cy: -4.5, rx: 6.5, ry: 2.6 }), _jsx(Stroked, { d: "M-6.5,-4.5 v9 a6.5,2.6 0 0 0 13 0 v-9" })] }));
|
|
27
|
+
case "cache":
|
|
28
|
+
return _jsx("path", { className: FILL, d: "M1,-7 L-6,1 H-1 L-1,7 L6,-1 H1 Z" });
|
|
29
|
+
case "external":
|
|
30
|
+
return (_jsxs(_Fragment, { children: [_jsx(Rect, { w: 16, h: 12, r: 2 }), _jsx(Stroked, { d: "M-8,-4 l8,6 8,-6" })] }));
|
|
31
|
+
case "ui":
|
|
32
|
+
return (_jsxs(_Fragment, { children: [_jsx(Rect, { w: 14, h: 12, r: 2 }), _jsx(Stroked, { d: "M-2.5,-6 v12" })] }));
|
|
33
|
+
case "config":
|
|
34
|
+
return (_jsxs(_Fragment, { children: [_jsx(Stroked, { d: "M-7,-4 h14" }), _jsx(Stroked, { d: "M-7,4 h14" }), _jsx("circle", { className: FILL, cx: -2, cy: -4, r: 2.2 }), _jsx("circle", { className: FILL, cx: 3, cy: 4, r: 2.2 })] }));
|
|
35
|
+
case "test":
|
|
36
|
+
return _jsx(Stroked, { d: "M-6,0 l4,4 l8,-8" });
|
|
37
|
+
case "package":
|
|
38
|
+
return (_jsxs(_Fragment, { children: [_jsx(Stroked, { d: "M0,-7 l6.5,3.5 v7 l-6.5,3.5 l-6.5,-3.5 v-7 Z" }), _jsx(Stroked, { d: "M-6.5,-3.5 l6.5,3.5 l6.5,-3.5" }), _jsx(Stroked, { d: "M0,0 v7" })] }));
|
|
39
|
+
case "other":
|
|
40
|
+
return (_jsxs(_Fragment, { children: [_jsx("circle", { className: FILL, cx: -5, cy: 0, r: 1.8 }), _jsx("circle", { className: FILL, cx: 0, cy: 0, r: 1.8 }), _jsx("circle", { className: FILL, cx: 5, cy: 0, r: 1.8 })] }));
|
|
41
|
+
default:
|
|
42
|
+
return assertNever(kind, "Unhandled node kind");
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
/** The chip glyph for a node's kind: "what sort of thing is this" at a glance. */
|
|
46
|
+
export const KindIcon = ({ kind, className }) => (_jsx("svg", { viewBox: "-13 -13 26 26", width: 26, height: 26, "aria-hidden": true, className: className, children: glyph(kind) }));
|
|
47
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/components/icons.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a hop is doing right now, as the app sees it. Absent means "whatever
|
|
3
|
+
* the document says". `done` is a hop that completed — a batch that ran —
|
|
4
|
+
* as opposed to `idle`, which never started, and `stale`, which should have.
|
|
5
|
+
*/
|
|
6
|
+
export type EdgeLevel = "live" | "idle" | "done" | "stale" | "down";
|
|
7
|
+
export declare const EDGE_LEVELS: readonly EdgeLevel[];
|
|
8
|
+
export type EdgeState = {
|
|
9
|
+
level: EdgeLevel;
|
|
10
|
+
/** Messages per second, or any unit; only its magnitude sets the pulse period. */
|
|
11
|
+
rate?: number;
|
|
12
|
+
};
|
|
13
|
+
/** Seconds per pulse cycle for a rate, clamped so extremes stay legible. */
|
|
14
|
+
export declare const pulseDurationFor: (rate?: number) => number;
|
|
15
|
+
//# sourceMappingURL=pulse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pulse.d.ts","sourceRoot":"","sources":["../../src/components/pulse.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpE,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAA8C,CAAC;AAE3F,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,UAAW,MAAM,KAAG,MAIhD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PULSE_DURATION, PULSE_DURATION_MAX, PULSE_DURATION_MIN, PULSE_RATE_SCALE, } from "../layout/design.js";
|
|
2
|
+
export const EDGE_LEVELS = ["live", "idle", "done", "stale", "down"];
|
|
3
|
+
/** Seconds per pulse cycle for a rate, clamped so extremes stay legible. */
|
|
4
|
+
export const pulseDurationFor = (rate) => {
|
|
5
|
+
if (rate === undefined || !(rate > 0))
|
|
6
|
+
return PULSE_DURATION;
|
|
7
|
+
const raw = PULSE_RATE_SCALE / rate;
|
|
8
|
+
return Math.round(Math.min(PULSE_DURATION_MAX, Math.max(PULSE_DURATION_MIN, raw)) * 100) / 100;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=pulse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pulse.js","sourceRoot":"","sources":["../../src/components/pulse.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAS7B,MAAM,CAAC,MAAM,WAAW,GAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAQ3F,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAU,EAAE;IACxD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAAE,OAAO,cAAc,CAAC;IAC7D,MAAM,GAAG,GAAG,gBAAgB,GAAG,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACjG,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type { Badge as BadgeInput, Edge, Lane, ConduitDocument, ConduitDocumentInput, ConduitNode, NodeSize, View, ViewInput, ViewScope, } from "./schema/document.js";
|
|
2
|
+
export type { Direction, EdgeEmphasis, EdgeKind, NodeKind, Status } from "./schema/primitives.js";
|
|
3
|
+
export { STATUSES } from "./schema/primitives.js";
|
|
4
|
+
export { ConduitDocumentError, type Parsed, type SchemaIssue } from "./schema/errors.js";
|
|
5
|
+
export { parseDocument, safeParseDocument } from "./schema/parse.js";
|
|
6
|
+
export * from "./layout.js";
|
|
7
|
+
export { Diagram, type DiagramProps } from "./components/Diagram.js";
|
|
8
|
+
export { Card, type CardProps } from "./components/Card.js";
|
|
9
|
+
export { LaneBand, type LaneBandProps } from "./components/Lane.js";
|
|
10
|
+
export { EdgeLayer, type EdgeLayerProps } from "./components/EdgeLayer.js";
|
|
11
|
+
export { EDGE_LEVELS, pulseDurationFor, type EdgeLevel, type EdgeState, } from "./components/pulse.js";
|
|
12
|
+
export { Badge } from "./components/Badge.js";
|
|
13
|
+
export { KindIcon } from "./components/icons.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,IAAI,UAAU,EACnB,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,SAAS,GACV,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrE,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { STATUSES } from "./schema/primitives.js";
|
|
2
|
+
export { ConduitDocumentError } from "./schema/errors.js";
|
|
3
|
+
export { parseDocument, safeParseDocument } from "./schema/parse.js";
|
|
4
|
+
export * from "./layout.js";
|
|
5
|
+
export { Diagram } from "./components/Diagram.js";
|
|
6
|
+
export { Card } from "./components/Card.js";
|
|
7
|
+
export { LaneBand } from "./components/Lane.js";
|
|
8
|
+
export { EdgeLayer } from "./components/EdgeLayer.js";
|
|
9
|
+
export { EDGE_LEVELS, pulseDurationFor, } from "./components/pulse.js";
|
|
10
|
+
export { Badge } from "./components/Badge.js";
|
|
11
|
+
export { KindIcon } from "./components/icons.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAiC,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrE,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAqB,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAkB,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAsB,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAuB,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EACL,WAAW,EACX,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Lane, ConduitNode } from "../schema/document.js";
|
|
2
|
+
import type { Frame } from "./frame.js";
|
|
3
|
+
import type { Box } from "./geometry.js";
|
|
4
|
+
import type { ScopedGraph } from "./scope.js";
|
|
5
|
+
export { cardHeight, orderLanes } from "./lanes.js";
|
|
6
|
+
export type PlacedNode = {
|
|
7
|
+
node: ConduitNode;
|
|
8
|
+
box: Box;
|
|
9
|
+
row: number;
|
|
10
|
+
laneIndex: number;
|
|
11
|
+
};
|
|
12
|
+
export type PlacedLane = {
|
|
13
|
+
lane: Lane;
|
|
14
|
+
box: Box;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The gaps of the grid, for the router: the vertical corridors beside each
|
|
18
|
+
* lane's cards and the horizontal extents of every row. Corridor `i` runs to
|
|
19
|
+
* the left of lane `i`; one extra corridor sits after the last lane.
|
|
20
|
+
*
|
|
21
|
+
* Frame space: for a `"down"` document these become horizontal and vertical
|
|
22
|
+
* on screen after `layout()` transposes.
|
|
23
|
+
*/
|
|
24
|
+
export type LayoutGrid = {
|
|
25
|
+
rows: {
|
|
26
|
+
top: number;
|
|
27
|
+
height: number;
|
|
28
|
+
}[];
|
|
29
|
+
corridors: {
|
|
30
|
+
left: number;
|
|
31
|
+
right: number;
|
|
32
|
+
}[];
|
|
33
|
+
/** Where lane content ends — the floor of the last band under the last row. */
|
|
34
|
+
laneBottom: number;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Extra room granted to individual gaps, keyed by corridor or band index —
|
|
38
|
+
* how the layout widens where traffic would otherwise compress track pitch
|
|
39
|
+
* through the floor. Expanding a corridor moves every lane after it sideways
|
|
40
|
+
* by the same amount; expanding a band moves every row after it down. Cards
|
|
41
|
+
* travel with their lane and row — nothing re-seats, nothing reorders.
|
|
42
|
+
*/
|
|
43
|
+
export type GapExpansions = {
|
|
44
|
+
corridors: ReadonlyMap<number, number>;
|
|
45
|
+
bands: ReadonlyMap<number, number>;
|
|
46
|
+
};
|
|
47
|
+
export type ArchitectureLayout = {
|
|
48
|
+
width: number;
|
|
49
|
+
height: number;
|
|
50
|
+
lanes: PlacedLane[];
|
|
51
|
+
nodes: PlacedNode[];
|
|
52
|
+
grid: LayoutGrid;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Lanes as columns along x, rows going down y — always. Which screen axis
|
|
56
|
+
* each of those becomes is the frame's business, and `layout()` transposes
|
|
57
|
+
* afterwards when the document flows the other way.
|
|
58
|
+
*/
|
|
59
|
+
export declare const layoutArchitecture: (graph: ScopedGraph, frame: Frame, expansions?: GapExpansions) => ArchitectureLayout;
|
|
60
|
+
//# sourceMappingURL=architecture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../src/layout/architecture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,UACtB,WAAW,SACX,KAAK,eACC,aAAa,KACzB,kBA2FF,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { CARD_GAP_X, DIAGRAM_MARGIN, LANE_GAP, LANE_TOP, ROW_GAP } from "./design.js";
|
|
2
|
+
import { orderLanes } from "./lanes.js";
|
|
3
|
+
import { seatNodes } from "./seating.js";
|
|
4
|
+
export { cardHeight, orderLanes } from "./lanes.js";
|
|
5
|
+
/**
|
|
6
|
+
* Lanes as columns along x, rows going down y — always. Which screen axis
|
|
7
|
+
* each of those becomes is the frame's business, and `layout()` transposes
|
|
8
|
+
* afterwards when the document flows the other way.
|
|
9
|
+
*/
|
|
10
|
+
export const layoutArchitecture = (graph, frame, expansions) => {
|
|
11
|
+
const corridorExtra = (index) => expansions?.corridors.get(index) ?? 0;
|
|
12
|
+
const bandExtra = (index) => expansions?.bands.get(index) ?? 0;
|
|
13
|
+
const ordered = orderLanes(graph.lanes);
|
|
14
|
+
const seating = seatNodes(ordered, graph.nodes, graph.edges);
|
|
15
|
+
const lanes = ordered.flatMap((lane) => {
|
|
16
|
+
const rows = seating.rowsByLane.get(lane.id);
|
|
17
|
+
return rows === undefined ? [] : [{ lane, rows }];
|
|
18
|
+
});
|
|
19
|
+
const laneBoxWidth = frame.crossStart + frame.laneCross + frame.crossEnd;
|
|
20
|
+
const contentTop = LANE_TOP + frame.alongStart;
|
|
21
|
+
const gridHeights = new Map();
|
|
22
|
+
for (const { rows } of lanes)
|
|
23
|
+
for (const { grid, nodes } of rows) {
|
|
24
|
+
const height = Math.max(...nodes.map((node) => frame.along(node)));
|
|
25
|
+
gridHeights.set(grid, Math.max(gridHeights.get(grid) ?? 0, height));
|
|
26
|
+
}
|
|
27
|
+
const gridRows = [];
|
|
28
|
+
let cursor = contentTop;
|
|
29
|
+
for (let grid = 0; grid < seating.rowCount; grid += 1) {
|
|
30
|
+
if (grid > 0)
|
|
31
|
+
cursor += bandExtra(grid);
|
|
32
|
+
const height = gridHeights.get(grid) ?? 0;
|
|
33
|
+
gridRows.push({ top: cursor, height });
|
|
34
|
+
cursor += height + ROW_GAP;
|
|
35
|
+
}
|
|
36
|
+
const contentBottom = cursor - ROW_GAP;
|
|
37
|
+
const laneBottom = contentBottom + frame.alongEnd + bandExtra(seating.rowCount);
|
|
38
|
+
const placedLanes = [];
|
|
39
|
+
const placedNodes = [];
|
|
40
|
+
let laneX = DIAGRAM_MARGIN;
|
|
41
|
+
lanes.forEach(({ lane, rows }, laneIndex) => {
|
|
42
|
+
laneX += corridorExtra(laneIndex);
|
|
43
|
+
const contentX = laneX + frame.crossStart;
|
|
44
|
+
placedLanes.push({
|
|
45
|
+
lane,
|
|
46
|
+
box: { x: laneX, y: LANE_TOP, width: laneBoxWidth, height: laneBottom - LANE_TOP },
|
|
47
|
+
});
|
|
48
|
+
for (const row of rows) {
|
|
49
|
+
const top = gridRows[row.grid]?.top ?? contentTop;
|
|
50
|
+
const widths = frame.crossSplit(row);
|
|
51
|
+
let x = contentX;
|
|
52
|
+
row.nodes.forEach((node, index) => {
|
|
53
|
+
const width = widths[index] ?? frame.laneCross;
|
|
54
|
+
placedNodes.push({
|
|
55
|
+
node,
|
|
56
|
+
box: { x, y: top, width, height: frame.along(node) },
|
|
57
|
+
row: row.grid,
|
|
58
|
+
laneIndex,
|
|
59
|
+
});
|
|
60
|
+
x += width + CARD_GAP_X;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
laneX += laneBoxWidth + LANE_GAP;
|
|
64
|
+
});
|
|
65
|
+
const corridors = placedLanes.map(({ box }, index) => ({
|
|
66
|
+
left: box.x - LANE_GAP - frame.crossEnd - corridorExtra(index),
|
|
67
|
+
right: box.x + frame.crossStartRoutable,
|
|
68
|
+
}));
|
|
69
|
+
const lastContentRight = (placedLanes[placedLanes.length - 1]?.box.x ?? DIAGRAM_MARGIN) +
|
|
70
|
+
frame.crossStart +
|
|
71
|
+
frame.laneCross;
|
|
72
|
+
corridors.push({
|
|
73
|
+
left: lastContentRight,
|
|
74
|
+
right: lastContentRight +
|
|
75
|
+
frame.crossEnd +
|
|
76
|
+
LANE_GAP +
|
|
77
|
+
frame.crossStartRoutable +
|
|
78
|
+
corridorExtra(placedLanes.length),
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
width: Math.ceil(laneX - LANE_GAP + DIAGRAM_MARGIN),
|
|
82
|
+
height: Math.ceil(laneBottom + DIAGRAM_MARGIN),
|
|
83
|
+
lanes: placedLanes,
|
|
84
|
+
nodes: placedNodes,
|
|
85
|
+
grid: { rows: gridRows, corridors, laneBottom },
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=architecture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/layout/architecture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Box } from "./geometry.js";
|
|
2
|
+
/** The smallest box containing both of them. */
|
|
3
|
+
export declare const covering: (a: Box, b: Box) => Box;
|
|
4
|
+
/** The smallest box containing all of them, or nothing when there are none. */
|
|
5
|
+
export declare const union: (boxes: readonly Box[]) => Box | undefined;
|
|
6
|
+
export type Canvas = {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
shiftX: number;
|
|
10
|
+
shiftY: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* A canvas big enough for everything that was drawn.
|
|
14
|
+
*
|
|
15
|
+
* Edge routes deliberately leave their lane, and a label pill can be pushed
|
|
16
|
+
* past the last card in search of clear air, so the space the lanes occupy is
|
|
17
|
+
* a floor rather than the answer. The canvas only ever grows: the margins the
|
|
18
|
+
* design leaves above and beside the lanes are part of the design, not slack
|
|
19
|
+
* to be reclaimed.
|
|
20
|
+
*/
|
|
21
|
+
export declare const canvasFor: (laid: {
|
|
22
|
+
width: number;
|
|
23
|
+
height: number;
|
|
24
|
+
}, drawn: Box | undefined, margin: number) => Canvas;
|
|
25
|
+
//# sourceMappingURL=bounds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounds.d.ts","sourceRoot":"","sources":["../../src/layout/bounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,gDAAgD;AAChD,eAAO,MAAM,QAAQ,MAAO,GAAG,KAAK,GAAG,KAAG,GAOzC,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,KAAK,UAAW,SAAS,GAAG,EAAE,KAAG,GAAG,GAAG,SAIjD,CAAC;AAEJ,MAAM,MAAM,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,SACd;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,SAChC,GAAG,GAAG,SAAS,UACd,MAAM,KACb,MAYF,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** The smallest box containing both of them. */
|
|
2
|
+
export const covering = (a, b) => {
|
|
3
|
+
const left = Math.min(a.x, b.x);
|
|
4
|
+
const top = Math.min(a.y, b.y);
|
|
5
|
+
const right = Math.max(a.x + a.width, b.x + b.width);
|
|
6
|
+
const bottom = Math.max(a.y + a.height, b.y + b.height);
|
|
7
|
+
return { x: left, y: top, width: right - left, height: bottom - top };
|
|
8
|
+
};
|
|
9
|
+
/** The smallest box containing all of them, or nothing when there are none. */
|
|
10
|
+
export const union = (boxes) => boxes.reduce((grown, box) => (grown === undefined ? box : covering(grown, box)), undefined);
|
|
11
|
+
/**
|
|
12
|
+
* A canvas big enough for everything that was drawn.
|
|
13
|
+
*
|
|
14
|
+
* Edge routes deliberately leave their lane, and a label pill can be pushed
|
|
15
|
+
* past the last card in search of clear air, so the space the lanes occupy is
|
|
16
|
+
* a floor rather than the answer. The canvas only ever grows: the margins the
|
|
17
|
+
* design leaves above and beside the lanes are part of the design, not slack
|
|
18
|
+
* to be reclaimed.
|
|
19
|
+
*/
|
|
20
|
+
export const canvasFor = (laid, drawn, margin) => {
|
|
21
|
+
if (drawn === undefined)
|
|
22
|
+
return { width: laid.width, height: laid.height, shiftX: 0, shiftY: 0 };
|
|
23
|
+
const shiftX = Math.max(0, margin - drawn.x);
|
|
24
|
+
const shiftY = Math.max(0, margin - drawn.y);
|
|
25
|
+
return {
|
|
26
|
+
width: Math.ceil(Math.max(laid.width, drawn.x + drawn.width + margin) + shiftX),
|
|
27
|
+
height: Math.ceil(Math.max(laid.height, drawn.y + drawn.height + margin) + shiftY),
|
|
28
|
+
shiftX,
|
|
29
|
+
shiftY,
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=bounds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounds.js","sourceRoot":"","sources":["../../src/layout/bounds.ts"],"names":[],"mappings":"AAEA,gDAAgD;AAChD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAE,CAAM,EAAO,EAAE;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAExD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACxE,CAAC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAqB,EAAmB,EAAE,CAC9D,KAAK,CAAC,MAAM,CACV,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAClE,SAAS,CACV,CAAC;AAIJ;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,IAAuC,EACvC,KAAsB,EACtB,MAAc,EACN,EAAE;IACV,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAEjG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7C,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;QAC/E,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;QAClF,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Frame } from "./frame.js";
|
|
2
|
+
import type { ScopedGraph } from "./scope.js";
|
|
3
|
+
import { type ArchitectureLayout } from "./architecture.js";
|
|
4
|
+
import { type RoutedEdge } from "./edges.js";
|
|
5
|
+
/**
|
|
6
|
+
* Layout and routing with the pitch floor held: any gap whose traffic would
|
|
7
|
+
* compress its tracks below TRACK_PITCH_MIN is widened to exactly what that
|
|
8
|
+
* traffic needs, and the graph is laid out again around the wider gap. The
|
|
9
|
+
* extra room is a pure function of the traffic count, so one added route
|
|
10
|
+
* moves the lanes or rows beside a saturated gap by one pitch step — a small
|
|
11
|
+
* change staying a small move — and an uncrowded document is laid out
|
|
12
|
+
* exactly as if this pass did not exist.
|
|
13
|
+
*/
|
|
14
|
+
export declare const relieveCongestion: (graph: ScopedGraph, frame: Frame) => {
|
|
15
|
+
layout: ArchitectureLayout;
|
|
16
|
+
routed: RoutedEdge[];
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=congestion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"congestion.d.ts","sourceRoot":"","sources":["../../src/layout/congestion.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAEL,KAAK,kBAAkB,EAGxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAmD,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9F;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,UACrB,WAAW,SACX,KAAK,KACX;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,UAAU,EAAE,CAAA;CAepD,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { TRACK_CLEARANCE, TRACK_PITCH_MIN } from "./design.js";
|
|
2
|
+
import { layoutArchitecture, } from "./architecture.js";
|
|
3
|
+
import { channelTraffic, routeEdges } from "./edges.js";
|
|
4
|
+
/**
|
|
5
|
+
* Layout and routing with the pitch floor held: any gap whose traffic would
|
|
6
|
+
* compress its tracks below TRACK_PITCH_MIN is widened to exactly what that
|
|
7
|
+
* traffic needs, and the graph is laid out again around the wider gap. The
|
|
8
|
+
* extra room is a pure function of the traffic count, so one added route
|
|
9
|
+
* moves the lanes or rows beside a saturated gap by one pitch step — a small
|
|
10
|
+
* change staying a small move — and an uncrowded document is laid out
|
|
11
|
+
* exactly as if this pass did not exist.
|
|
12
|
+
*/
|
|
13
|
+
export const relieveCongestion = (graph, frame) => {
|
|
14
|
+
let expansions = { corridors: new Map(), bands: new Map() };
|
|
15
|
+
let layout = layoutArchitecture(graph, frame, expansions);
|
|
16
|
+
// Widening never changes which gaps the routes choose — plans are made of
|
|
17
|
+
// lane and row indices, and cards keep their in-lane positions — so the
|
|
18
|
+
// second round sees the same traffic and settles. The bound is a backstop.
|
|
19
|
+
for (let round = 0; round < 3; round += 1) {
|
|
20
|
+
const needed = expansionsFor(channelTraffic(graph.edges, layout), layout.grid, frame);
|
|
21
|
+
if (sameExpansions(needed, expansions))
|
|
22
|
+
break;
|
|
23
|
+
expansions = needed;
|
|
24
|
+
layout = layoutArchitecture(graph, frame, expansions);
|
|
25
|
+
}
|
|
26
|
+
return { layout, routed: routeEdges(graph.edges, layout) };
|
|
27
|
+
};
|
|
28
|
+
/** Room for this many tracks at the floor pitch, plus clearance to the cards. */
|
|
29
|
+
const widthNeeded = (traffic) => (traffic - 1) * TRACK_PITCH_MIN + TRACK_CLEARANCE * 2;
|
|
30
|
+
const expansionsFor = (traffic, grid, frame) => {
|
|
31
|
+
const corridors = new Map();
|
|
32
|
+
for (const [index, count] of traffic.corridors) {
|
|
33
|
+
const extra = widthNeeded(count) - frame.corridorWidth;
|
|
34
|
+
if (extra > 0)
|
|
35
|
+
corridors.set(index, extra);
|
|
36
|
+
}
|
|
37
|
+
const bands = new Map();
|
|
38
|
+
for (const [index, count] of traffic.bands) {
|
|
39
|
+
// The band after the last row is the sliver of lane bottom padding.
|
|
40
|
+
const width = index === grid.rows.length ? frame.alongEnd : frame.bandWidth;
|
|
41
|
+
const extra = widthNeeded(count) - width;
|
|
42
|
+
if (extra > 0)
|
|
43
|
+
bands.set(index, extra);
|
|
44
|
+
}
|
|
45
|
+
return { corridors, bands };
|
|
46
|
+
};
|
|
47
|
+
const sameExpansions = (a, b) => sameEntries(a.corridors, b.corridors) && sameEntries(a.bands, b.bands);
|
|
48
|
+
const sameEntries = (a, b) => a.size === b.size && [...a].every(([key, value]) => b.get(key) === value);
|
|
49
|
+
//# sourceMappingURL=congestion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"congestion.js","sourceRoot":"","sources":["../../src/layout/congestion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The measurements of the validated prototype, in one place. These are the
|
|
3
|
+
* design system: change a number here and every diagram moves with it.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DIAGRAM_MARGIN = 16;
|
|
6
|
+
export declare const LANE_TOP = 44;
|
|
7
|
+
export declare const LANE_HEADER_BASELINE = 68;
|
|
8
|
+
export declare const LANE_PADDING_X = 16;
|
|
9
|
+
export declare const LANE_GAP = 20;
|
|
10
|
+
export declare const LANE_BOTTOM_PADDING = 20;
|
|
11
|
+
/**
|
|
12
|
+
* Every lane is the same width, and that width is a constant rather than
|
|
13
|
+
* anything derived from what the lanes hold.
|
|
14
|
+
*
|
|
15
|
+
* A lane's width decides where the lane after it starts, so a width drawn
|
|
16
|
+
* from content couples every column to the contents of the ones before it:
|
|
17
|
+
* adding one node with a long name to the first lane would slide every card
|
|
18
|
+
* in every later lane sideways, which is exactly the teleport a reviewer
|
|
19
|
+
* comparing two pushes must never be shown. The cost is that a lane holding
|
|
20
|
+
* something narrow is wider than it needs to be. Stability is worth more.
|
|
21
|
+
*
|
|
22
|
+
* Sized so that two cards sharing a row still each get a readable width.
|
|
23
|
+
*/
|
|
24
|
+
export declare const LANE_CONTENT_WIDTH = 372;
|
|
25
|
+
export declare const LANE_RADIUS = 12;
|
|
26
|
+
export declare const LANE_LABEL_SIZE = 10;
|
|
27
|
+
export declare const LANE_LABEL_TRACKING = 0.12;
|
|
28
|
+
/** Room at the top of a lane for its header, before the first row. */
|
|
29
|
+
export declare const LANE_HEADER_STRIP = 48;
|
|
30
|
+
export declare const ROW_GAP = 52;
|
|
31
|
+
export declare const CARD_RADIUS = 10;
|
|
32
|
+
export declare const CARD_GAP_X = 12;
|
|
33
|
+
export declare const CARD_PADDING_X = 14;
|
|
34
|
+
export declare const ICON_CHIP_SIZE = 26;
|
|
35
|
+
export declare const ICON_CHIP_GAP = 10;
|
|
36
|
+
export declare const ICON_CHIP_RADIUS = 7;
|
|
37
|
+
export declare const SUBTITLE_SIZE = 9.5;
|
|
38
|
+
export declare const BADGE_HEIGHT = 16;
|
|
39
|
+
export declare const BADGE_PADDING_X = 9;
|
|
40
|
+
export declare const BADGE_TEXT_SIZE = 8.5;
|
|
41
|
+
export declare const BADGE_TRACKING = 0.06;
|
|
42
|
+
export declare const BADGE_GAP = 6;
|
|
43
|
+
export declare const BADGE_RADIUS = 8;
|
|
44
|
+
/** How far the badge row rides above the top edge of the card it labels. */
|
|
45
|
+
export declare const BADGE_RISE = 8;
|
|
46
|
+
export declare const PILL_HEIGHT = 15;
|
|
47
|
+
export declare const PILL_PADDING_X = 8;
|
|
48
|
+
export declare const PILL_TEXT_SIZE = 9.5;
|
|
49
|
+
/** Two label pills never sit closer than this, in either direction. */
|
|
50
|
+
export declare const PILL_CLEARANCE = 2;
|
|
51
|
+
/**
|
|
52
|
+
* Routes travel in the gaps of the grid: vertical corridors beside lanes and
|
|
53
|
+
* horizontal bands between rows. Both gaps are physically 52px across — lane
|
|
54
|
+
* padding + lane gap + lane padding one way, ROW_GAP the other — and a track
|
|
55
|
+
* keeps this clearance from the cards on either side, leaving 40px of room.
|
|
56
|
+
*/
|
|
57
|
+
export declare const TRACK_CLEARANCE = 6;
|
|
58
|
+
/**
|
|
59
|
+
* Neighbouring tracks in one gap sit this far apart at most; when a gap
|
|
60
|
+
* carries more traffic than the room allows, the pitch shrinks to fit. An
|
|
61
|
+
* added route therefore nudges its gap-mates proportionately — an accepted
|
|
62
|
+
* trade, and one that never moves a card.
|
|
63
|
+
*/
|
|
64
|
+
export declare const TRACK_PITCH_MAX = 16;
|
|
65
|
+
/**
|
|
66
|
+
* And never closer than this: below it, parallel runs stop reading as
|
|
67
|
+
* separate lines. A gap asked to carry more traffic than the floor allows
|
|
68
|
+
* does not compress further — it widens instead, corridors pushing the lanes
|
|
69
|
+
* beside them apart and row gaps pushing the rows, in proportion to the
|
|
70
|
+
* traffic and to nothing else.
|
|
71
|
+
*/
|
|
72
|
+
export declare const TRACK_PITCH_MIN = 10;
|
|
73
|
+
/** Step between neighbouring arrow ports along one card face. */
|
|
74
|
+
export declare const PORT_PITCH = 16;
|
|
75
|
+
/** Ports keep clear of the card's rounded corners. */
|
|
76
|
+
export declare const PORT_INSET = 14;
|
|
77
|
+
/**
|
|
78
|
+
* A turn's bend radius comes from the shorter of its two legs, capped here.
|
|
79
|
+
* Deriving it from the longer leg balloons a route with one short leg and one
|
|
80
|
+
* long one — the shape every corridor run has — clear out of its corridor.
|
|
81
|
+
*/
|
|
82
|
+
export declare const BEND_RADIUS_MAX = 34;
|
|
83
|
+
/** One turn of the travelling pulse, and of the staggered train. */
|
|
84
|
+
export declare const PULSE_DURATION = 1.6;
|
|
85
|
+
export declare const HERO_PULSE_DURATION = 2.1;
|
|
86
|
+
export declare const HERO_PULSE_COUNT = 3;
|
|
87
|
+
/** Live edges: seconds per pulse ≈ PULSE_RATE_SCALE / rate, clamped so 10/s and 10k/s both read as traffic. */
|
|
88
|
+
export declare const PULSE_RATE_SCALE = 160;
|
|
89
|
+
export declare const PULSE_DURATION_MIN = 0.6;
|
|
90
|
+
export declare const PULSE_DURATION_MAX = 3;
|
|
91
|
+
/** Card heights by declared size. `chart` reserves a body slot under the header. */
|
|
92
|
+
export type CardHeights = {
|
|
93
|
+
compact: number;
|
|
94
|
+
withSubtitle: number;
|
|
95
|
+
chart: number;
|
|
96
|
+
};
|
|
97
|
+
export declare const DEFAULT_CARD_HEIGHTS: CardHeights;
|
|
98
|
+
//# sourceMappingURL=design.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../../src/layout/design.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,OAAO,KAAK,CAAC;AAE1B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,4EAA4E;AAC5E,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,uEAAuE;AACvE,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,iEAAiE;AACjE,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,sDAAsD;AACtD,eAAO,MAAM,UAAU,KAAK,CAAC;AAE7B;;;;GAIG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,oEAAoE;AACpE,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,+GAA+G;AAC/G,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,oFAAoF;AACpF,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACnF,eAAO,MAAM,oBAAoB,EAAE,WAA2D,CAAC"}
|