@principal-ai/subsystems-react 0.51.0 → 0.51.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/pierre/PierreTrailCodeView.d.ts +1 -1
- package/dist/pierre/PierreTrailCodeView.d.ts.map +1 -1
- package/dist/pierre/PierreTrailCodeView.js +44 -21
- package/dist/pierre/PierreTrailCodeView.js.map +1 -1
- package/dist/stories/Subsystem/C4Graph/c4ProposedElements.fixture.d.ts +493 -0
- package/dist/stories/Subsystem/C4Graph/c4ProposedElements.fixture.d.ts.map +1 -0
- package/dist/stories/Subsystem/C4Graph/c4ProposedElements.fixture.js +329 -0
- package/dist/stories/Subsystem/C4Graph/c4ProposedElements.fixture.js.map +1 -0
- package/dist/subsystem/C4Graph.d.ts +2 -2
- package/dist/subsystem/C4Graph.d.ts.map +1 -1
- package/dist/subsystem/C4Graph.js +25 -16
- package/dist/subsystem/C4Graph.js.map +1 -1
- package/dist/subsystem/C4NodeCard.d.ts +71 -36
- package/dist/subsystem/C4NodeCard.d.ts.map +1 -1
- package/dist/subsystem/C4NodeCard.js +88 -94
- package/dist/subsystem/C4NodeCard.js.map +1 -1
- package/dist/subsystem/FileDrawer.d.ts.map +1 -1
- package/dist/subsystem/FileDrawer.js +20 -21
- package/dist/subsystem/FileDrawer.js.map +1 -1
- package/dist/subsystem/IssueList.js +1 -1
- package/dist/subsystem/IssueList.js.map +1 -1
- package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
- package/dist/subsystem/SubsystemComponentGraph.js +13 -4
- package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
- package/dist/subsystem/c4.d.ts +272 -0
- package/dist/subsystem/c4.d.ts.map +1 -0
- package/dist/subsystem/c4.js +322 -0
- package/dist/subsystem/c4.js.map +1 -0
- package/dist/subsystem/c4Evidence.d.ts +143 -0
- package/dist/subsystem/c4Evidence.d.ts.map +1 -0
- package/dist/subsystem/c4Evidence.js +240 -0
- package/dist/subsystem/c4Evidence.js.map +1 -0
- package/dist/subsystem/model.d.ts +2 -6
- package/dist/subsystem/model.d.ts.map +1 -1
- package/dist/subsystem/model.js.map +1 -1
- package/package.json +4 -3
- package/src/index.ts +26 -28
- package/src/pierre/PierreTrailCodeView.tsx +49 -21
- package/src/stories/Subsystem/C4Graph/C4NodeGallery.stories.tsx +167 -79
- package/src/stories/Subsystem/C4Graph/ProposedElements.stories.tsx +293 -0
- package/src/stories/Subsystem/C4Graph/c4ProposedElements.fixture.ts +366 -0
- package/src/stories/Subsystem/ComponentGraph/IssueOverlay.stories.tsx +1 -1
- package/src/stories/Subsystem/ComponentGraph/Issues.stories.tsx +1 -1
- package/src/subsystem/C4Graph.tsx +39 -24
- package/src/subsystem/C4NodeCard.test.ts +169 -64
- package/src/subsystem/C4NodeCard.tsx +102 -108
- package/src/subsystem/FileDrawer.tsx +32 -34
- package/src/subsystem/IssueList.tsx +1 -1
- package/src/subsystem/SubsystemComponentGraph.tsx +13 -5
- package/src/subsystem/c4.test.ts +573 -0
- package/src/subsystem/c4.ts +558 -0
- package/src/subsystem/c4Evidence.test.ts +386 -0
- package/src/subsystem/c4Evidence.ts +329 -0
- package/src/subsystem/model.ts +2 -6
- package/dist/stories/Subsystem/C4Graph/c4Associations.fixture.d.ts +0 -95
- package/dist/stories/Subsystem/C4Graph/c4Associations.fixture.d.ts.map +0 -1
- package/dist/stories/Subsystem/C4Graph/c4Associations.fixture.js +0 -340
- package/dist/stories/Subsystem/C4Graph/c4Associations.fixture.js.map +0 -1
- package/dist/stories/Subsystem/C4Graph/c4Fixture.d.ts +0 -7
- package/dist/stories/Subsystem/C4Graph/c4Fixture.d.ts.map +0 -1
- package/dist/stories/Subsystem/C4Graph/c4Fixture.js +0 -7335
- package/dist/stories/Subsystem/C4Graph/c4Fixture.js.map +0 -1
- package/dist/stories/Subsystem/C4Graph/generateFixture.d.ts +0 -2
- package/dist/stories/Subsystem/C4Graph/generateFixture.d.ts.map +0 -1
- package/dist/stories/Subsystem/C4Graph/generateFixture.js +0 -145
- package/dist/stories/Subsystem/C4Graph/generateFixture.js.map +0 -1
- package/dist/subsystem/c4Associations.d.ts +0 -186
- package/dist/subsystem/c4Associations.d.ts.map +0 -1
- package/dist/subsystem/c4Associations.js +0 -284
- package/dist/subsystem/c4Associations.js.map +0 -1
- package/dist/subsystem/toC4.d.ts +0 -214
- package/dist/subsystem/toC4.d.ts.map +0 -1
- package/dist/subsystem/toC4.js +0 -282
- package/dist/subsystem/toC4.js.map +0 -1
- package/src/stories/Subsystem/C4Graph/C4Associations.stories.tsx +0 -273
- package/src/stories/Subsystem/C4Graph/C4Container.stories.tsx +0 -101
- package/src/stories/Subsystem/C4Graph/c4Associations.fixture.ts +0 -344
- package/src/stories/Subsystem/C4Graph/c4Fixture.ts +0 -7339
- package/src/stories/Subsystem/C4Graph/generateFixture.ts +0 -161
- package/src/subsystem/c4Associations.test.ts +0 -484
- package/src/subsystem/c4Associations.ts +0 -398
- package/src/subsystem/toC4.test.ts +0 -114
- package/src/subsystem/toC4.ts +0 -478
|
@@ -7,69 +7,104 @@
|
|
|
7
7
|
*
|
|
8
8
|
* The encoding has one job: make confirmation state legible at a glance. A box
|
|
9
9
|
* nobody has looked at must not read the same as a box a person signed off.
|
|
10
|
-
*
|
|
11
|
-
* surfaced in the order a
|
|
10
|
+
* Kind says what the box is — shape, size, and a written tag — and everything
|
|
11
|
+
* else in C4 notation (technology, description) is surfaced in the order a
|
|
12
|
+
* reader wants it.
|
|
12
13
|
*/
|
|
13
14
|
/// <reference types="react" />
|
|
14
15
|
import { useTheme } from '@principal-ade/industry-theme';
|
|
15
|
-
import type { C4Node } from './
|
|
16
|
+
import type { C4Node } from './c4';
|
|
16
17
|
/**
|
|
17
|
-
* Card box
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* what lets the `needs …` marker sit on its own line instead of clipping.
|
|
18
|
+
* Card box for a container: a wide rectangle. A container carries four things
|
|
19
|
+
* at once (tag, label, type + technology, and the notation gap it still has),
|
|
20
|
+
* and a strip would force the last two to truncate.
|
|
21
21
|
*/
|
|
22
22
|
export declare const NODE_W = 210;
|
|
23
23
|
export declare const NODE_H = 138;
|
|
24
|
+
/**
|
|
25
|
+
* A component is a proper square — equal sides, and visibly smaller than the
|
|
26
|
+
* container it sits inside. Square-vs-rectangle is the clearest signal that
|
|
27
|
+
* these are different C4 levels, and it survives grayscale and colour-blind
|
|
28
|
+
* reading where a border-weight difference alone does not.
|
|
29
|
+
*/
|
|
30
|
+
export declare const COMPONENT_SIZE = 132;
|
|
31
|
+
/**
|
|
32
|
+
* Per-level box size. The graph lays out against these, so a square component
|
|
33
|
+
* and a rectangular container do not collide at a shared nominal width.
|
|
34
|
+
*/
|
|
35
|
+
export declare function nodeSize(node: C4Node): {
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
};
|
|
24
39
|
type Theme = ReturnType<typeof useTheme>['theme'];
|
|
25
40
|
export interface NodeStyle {
|
|
26
41
|
color: string;
|
|
27
|
-
dash:
|
|
42
|
+
dash: 'solid' | 'dashed' | 'dotted';
|
|
28
43
|
width: number;
|
|
29
44
|
}
|
|
30
45
|
/**
|
|
31
|
-
* Border style
|
|
46
|
+
* Border style for one node: colour, dash and weight, from confirmation state
|
|
47
|
+
* and level.
|
|
48
|
+
*
|
|
49
|
+
* One axis per channel, so nothing is said twice and nothing is contradicted:
|
|
32
50
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
51
|
+
* colour + dash → confirmation state (the primary axis)
|
|
52
|
+
* weight → C4 level, as a grayscale redundancy for the square
|
|
53
|
+
* shape + size → C4 kind (`nodeShape`, `nodeSize`)
|
|
54
|
+
*
|
|
55
|
+
* State owning the dash is deliberate. An earlier build gave the dash to kind
|
|
56
|
+
* and drew proposed boxes solid, quietly contradicting the one thing the
|
|
57
|
+
* confirm UI needs a reader to see. Kind now says itself through shape, and
|
|
58
|
+
* the border says who vouched for it.
|
|
36
59
|
*/
|
|
37
60
|
export declare function nodeStyle(node: C4Node, theme: Theme, selected?: boolean): NodeStyle;
|
|
38
|
-
/** The type + technology line under the label. */
|
|
39
|
-
export declare function nodeSubtitle(node: C4Node): string;
|
|
40
61
|
/**
|
|
41
|
-
* The
|
|
62
|
+
* The kind + technology line under the label.
|
|
42
63
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* reviewed it; collapsing the two into one label is what made the two
|
|
46
|
-
* indistinguishable. Confirmation is a separate axis (`nodeStateTag`).
|
|
64
|
+
* A container shows its `containerKind` (application / data-store / queue);
|
|
65
|
+
* C4 has no kind for the other three, so they show technology or nothing.
|
|
47
66
|
*/
|
|
48
|
-
export declare function
|
|
67
|
+
export declare function nodeSubtitle(node: C4Node): string;
|
|
49
68
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
69
|
+
* What the box IS — its C4 kind. An accepted container is still a container;
|
|
70
|
+
* collapsing the two is what once made containers and components unreadable.
|
|
71
|
+
* Confirmation state is a separate axis carried by the border (see
|
|
72
|
+
* `nodeStyle`), not by a word on the card.
|
|
52
73
|
*/
|
|
53
|
-
export declare function
|
|
74
|
+
export declare function nodeTag(node: C4Node): string;
|
|
75
|
+
/** How a box is drawn. Shape carries the C4 kind, independent of colour. */
|
|
76
|
+
export type C4ShapeKind = 'rect' | 'square' | 'pill';
|
|
77
|
+
export interface NodeShape {
|
|
78
|
+
kind: C4ShapeKind;
|
|
79
|
+
/** Corner radius, for the shapes that use one. */
|
|
80
|
+
radius: number;
|
|
81
|
+
}
|
|
54
82
|
/**
|
|
55
|
-
* Shape cue for the C4
|
|
83
|
+
* Shape cue for the C4 kind, independent of colour and dash — both of which
|
|
84
|
+
* belong to confirmation state.
|
|
56
85
|
*
|
|
57
|
-
* Colour alone is not enough: a container and a component with no association
|
|
58
|
-
* both fall back to the muted border, so they were identical in grayscale.
|
|
59
86
|
* The convention:
|
|
60
87
|
*
|
|
61
|
-
* container
|
|
62
|
-
* component
|
|
63
|
-
* external
|
|
64
|
-
*
|
|
88
|
+
* container wide rectangle, sharp corners — a runtime boundary
|
|
89
|
+
* component square — a part inside one (see `nodeSize`)
|
|
90
|
+
* external system wide rectangle, rounded — someone else's system
|
|
91
|
+
* person pill — not a box at all
|
|
92
|
+
*
|
|
93
|
+
* An external system is separated from a container by radius alone, which is
|
|
94
|
+
* a weak cue. That is deliberate rather than an oversight: the border dash is
|
|
95
|
+
* the only channel that could say "outside our control" loudly, and it is
|
|
96
|
+
* already spent on proposed-vs-accepted. The kind tag says it in words, and
|
|
97
|
+
* the frame position says it structurally.
|
|
65
98
|
*/
|
|
66
|
-
export declare function nodeShape(node: C4Node):
|
|
67
|
-
radius: number;
|
|
68
|
-
dash: 'solid' | 'dashed';
|
|
69
|
-
};
|
|
99
|
+
export declare function nodeShape(node: C4Node): NodeShape;
|
|
70
100
|
/**
|
|
71
|
-
* C4 notation
|
|
72
|
-
*
|
|
101
|
+
* The gaps the C4 notation still wants on this element, named rather than left
|
|
102
|
+
* to be noticed.
|
|
103
|
+
*
|
|
104
|
+
* Containers are where the notation is strictest: it requires a technology and
|
|
105
|
+
* a description on every one. A component needs a technology too, but a
|
|
106
|
+
* component drawn without a parent already reports `unknown_container`, and
|
|
107
|
+
* that is the question worth asking first.
|
|
73
108
|
*/
|
|
74
109
|
export declare function nodeMissing(node: C4Node): string[];
|
|
75
110
|
export interface C4NodeCardProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C4NodeCard.d.ts","sourceRoot":"","sources":["../../src/subsystem/C4NodeCard.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"C4NodeCard.d.ts","sourceRoot":"","sources":["../../src/subsystem/C4NodeCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,MAAM,MAAM,CAAC;AAC1B,eAAO,MAAM,MAAM,MAAM,CAAC;AAE1B;;;;;GAKG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIxE;AAUD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;AAElD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,UAAQ,GAAG,SAAS,CAmBjF;AAOD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,4EAA4E;AAC5E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAWjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMlD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,QAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,eAAe,+BA2GvF"}
|
|
@@ -8,19 +8,35 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
8
8
|
*
|
|
9
9
|
* The encoding has one job: make confirmation state legible at a glance. A box
|
|
10
10
|
* nobody has looked at must not read the same as a box a person signed off.
|
|
11
|
-
*
|
|
12
|
-
* surfaced in the order a
|
|
11
|
+
* Kind says what the box is — shape, size, and a written tag — and everything
|
|
12
|
+
* else in C4 notation (technology, description) is surfaced in the order a
|
|
13
|
+
* reader wants it.
|
|
13
14
|
*/
|
|
14
15
|
import { useTheme } from '@principal-ade/industry-theme';
|
|
15
16
|
import { describeConstructBreakdown } from './model';
|
|
16
17
|
/**
|
|
17
|
-
* Card box
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* what lets the `needs …` marker sit on its own line instead of clipping.
|
|
18
|
+
* Card box for a container: a wide rectangle. A container carries four things
|
|
19
|
+
* at once (tag, label, type + technology, and the notation gap it still has),
|
|
20
|
+
* and a strip would force the last two to truncate.
|
|
21
21
|
*/
|
|
22
22
|
export const NODE_W = 210;
|
|
23
23
|
export const NODE_H = 138;
|
|
24
|
+
/**
|
|
25
|
+
* A component is a proper square — equal sides, and visibly smaller than the
|
|
26
|
+
* container it sits inside. Square-vs-rectangle is the clearest signal that
|
|
27
|
+
* these are different C4 levels, and it survives grayscale and colour-blind
|
|
28
|
+
* reading where a border-weight difference alone does not.
|
|
29
|
+
*/
|
|
30
|
+
export const COMPONENT_SIZE = 132;
|
|
31
|
+
/**
|
|
32
|
+
* Per-level box size. The graph lays out against these, so a square component
|
|
33
|
+
* and a rectangular container do not collide at a shared nominal width.
|
|
34
|
+
*/
|
|
35
|
+
export function nodeSize(node) {
|
|
36
|
+
return node.kind === 'component'
|
|
37
|
+
? { width: COMPONENT_SIZE, height: COMPONENT_SIZE }
|
|
38
|
+
: { width: NODE_W, height: NODE_H };
|
|
39
|
+
}
|
|
24
40
|
/**
|
|
25
41
|
* Fixed slot heights, so rows line up across every card regardless of which
|
|
26
42
|
* optional fields are present. Without these a card missing its notation-gap
|
|
@@ -29,20 +45,28 @@ export const NODE_H = 138;
|
|
|
29
45
|
const LABEL_SLOT_H = 40;
|
|
30
46
|
const GAP_SLOT_H = 18;
|
|
31
47
|
/**
|
|
32
|
-
* Border style
|
|
48
|
+
* Border style for one node: colour, dash and weight, from confirmation state
|
|
49
|
+
* and level.
|
|
50
|
+
*
|
|
51
|
+
* One axis per channel, so nothing is said twice and nothing is contradicted:
|
|
33
52
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
53
|
+
* colour + dash → confirmation state (the primary axis)
|
|
54
|
+
* weight → C4 level, as a grayscale redundancy for the square
|
|
55
|
+
* shape + size → C4 kind (`nodeShape`, `nodeSize`)
|
|
56
|
+
*
|
|
57
|
+
* State owning the dash is deliberate. An earlier build gave the dash to kind
|
|
58
|
+
* and drew proposed boxes solid, quietly contradicting the one thing the
|
|
59
|
+
* confirm UI needs a reader to see. Kind now says itself through shape, and
|
|
60
|
+
* the border says who vouched for it.
|
|
37
61
|
*/
|
|
38
62
|
export function nodeStyle(node, theme, selected = false) {
|
|
39
63
|
const muted = theme.colors.border ?? '#555';
|
|
40
64
|
if (selected)
|
|
41
65
|
return { color: theme.colors.primary ?? '#5aa', dash: 'solid', width: 3 };
|
|
42
|
-
// Border
|
|
66
|
+
// Border weight carries the level, so a component stays a component even
|
|
43
67
|
// in grayscale or for a reader who cannot separate the hues.
|
|
44
68
|
const weight = node.kind === 'component' ? 1 : 2;
|
|
45
|
-
switch (node.
|
|
69
|
+
switch (node.state) {
|
|
46
70
|
case 'accepted':
|
|
47
71
|
// Solid and saturated — part of the architecture now.
|
|
48
72
|
return { color: theme.colors.primary ?? '#4ec9b0', dash: 'solid', width: weight };
|
|
@@ -50,31 +74,24 @@ export function nodeStyle(node, theme, selected = false) {
|
|
|
50
74
|
// Dashed — an agent asked; a human has not answered.
|
|
51
75
|
return { color: theme.colors.warning ?? '#e8a33a', dash: 'dashed', width: weight };
|
|
52
76
|
case 'rejected':
|
|
53
|
-
// Should never be drawn (
|
|
77
|
+
// Should never be drawn (buildC4Model drops it); belt-and-braces.
|
|
54
78
|
return { color: muted, dash: 'dotted', width: 1 };
|
|
55
|
-
default:
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
// No association at all — the raw derivation. Muted, so confirmed boxes
|
|
59
|
-
// read as the stronger signal.
|
|
60
|
-
switch (node.kind) {
|
|
61
|
-
case 'external':
|
|
62
|
-
return { color: theme.colors.warning ?? '#a78bfa', dash: 'solid', width: weight };
|
|
63
|
-
case 'actor':
|
|
64
|
-
return { color: theme.colors.accent ?? theme.colors.info ?? '#e3b341', dash: 'solid', width: weight };
|
|
65
|
-
default:
|
|
66
|
-
return { color: muted, dash: 'solid', width: weight };
|
|
67
79
|
}
|
|
68
80
|
}
|
|
69
81
|
function baseName(path) {
|
|
70
82
|
const parts = path.split('/').filter(Boolean);
|
|
71
83
|
return parts[parts.length - 1] ?? path;
|
|
72
84
|
}
|
|
73
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* The kind + technology line under the label.
|
|
87
|
+
*
|
|
88
|
+
* A container shows its `containerKind` (application / data-store / queue);
|
|
89
|
+
* C4 has no kind for the other three, so they show technology or nothing.
|
|
90
|
+
*/
|
|
74
91
|
export function nodeSubtitle(node) {
|
|
75
|
-
const
|
|
76
|
-
if (
|
|
77
|
-
return
|
|
92
|
+
const parts = [node.containerKind, node.technology].filter(Boolean);
|
|
93
|
+
if (parts.length > 0)
|
|
94
|
+
return parts.join(' · ');
|
|
78
95
|
// No confirmed attributes: fall back to what the document told us.
|
|
79
96
|
if (node.kind === 'component') {
|
|
80
97
|
return `${node.component?.construct ?? 'code'}${node.component?.file ? ` · ${baseName(node.component.file)}` : ''}`;
|
|
@@ -83,67 +100,59 @@ export function nodeSubtitle(node) {
|
|
|
83
100
|
return `${describeConstructBreakdown(node.constructs)}${count > 0 ? ` · ${count} component${count === 1 ? '' : 's'}` : ''}`;
|
|
84
101
|
}
|
|
85
102
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* reviewed it; collapsing the two into one label is what made the two
|
|
91
|
-
* indistinguishable. Confirmation is a separate axis (`nodeStateTag`).
|
|
103
|
+
* What the box IS — its C4 kind. An accepted container is still a container;
|
|
104
|
+
* collapsing the two is what once made containers and components unreadable.
|
|
105
|
+
* Confirmation state is a separate axis carried by the border (see
|
|
106
|
+
* `nodeStyle`), not by a word on the card.
|
|
92
107
|
*/
|
|
93
108
|
export function nodeTag(node) {
|
|
94
109
|
return node.kind;
|
|
95
110
|
}
|
|
96
111
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*/
|
|
100
|
-
export function nodeStateTag(node) {
|
|
101
|
-
switch (node.decoration?.state) {
|
|
102
|
-
case 'accepted':
|
|
103
|
-
return 'confirmed';
|
|
104
|
-
case 'proposed':
|
|
105
|
-
return 'proposed';
|
|
106
|
-
case 'rejected':
|
|
107
|
-
return 'rejected';
|
|
108
|
-
default:
|
|
109
|
-
return 'unconfirmed';
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Shape cue for the C4 level, independent of colour and dash pattern.
|
|
112
|
+
* Shape cue for the C4 kind, independent of colour and dash — both of which
|
|
113
|
+
* belong to confirmation state.
|
|
114
114
|
*
|
|
115
|
-
* Colour alone is not enough: a container and a component with no association
|
|
116
|
-
* both fall back to the muted border, so they were identical in grayscale.
|
|
117
115
|
* The convention:
|
|
118
116
|
*
|
|
119
|
-
* container
|
|
120
|
-
* component
|
|
121
|
-
* external
|
|
122
|
-
*
|
|
117
|
+
* container wide rectangle, sharp corners — a runtime boundary
|
|
118
|
+
* component square — a part inside one (see `nodeSize`)
|
|
119
|
+
* external system wide rectangle, rounded — someone else's system
|
|
120
|
+
* person pill — not a box at all
|
|
121
|
+
*
|
|
122
|
+
* An external system is separated from a container by radius alone, which is
|
|
123
|
+
* a weak cue. That is deliberate rather than an oversight: the border dash is
|
|
124
|
+
* the only channel that could say "outside our control" loudly, and it is
|
|
125
|
+
* already spent on proposed-vs-accepted. The kind tag says it in words, and
|
|
126
|
+
* the frame position says it structurally.
|
|
123
127
|
*/
|
|
124
128
|
export function nodeShape(node) {
|
|
125
129
|
switch (node.kind) {
|
|
126
|
-
case '
|
|
127
|
-
return { radius: NODE_H / 2
|
|
128
|
-
case 'external':
|
|
129
|
-
return {
|
|
130
|
+
case 'person':
|
|
131
|
+
return { kind: 'pill', radius: NODE_H / 2 };
|
|
132
|
+
case 'external-system':
|
|
133
|
+
return { kind: 'rect', radius: 14 };
|
|
130
134
|
case 'component':
|
|
131
|
-
return {
|
|
135
|
+
return { kind: 'square', radius: 6 };
|
|
132
136
|
default:
|
|
133
|
-
return {
|
|
137
|
+
return { kind: 'rect', radius: 4 };
|
|
134
138
|
}
|
|
135
139
|
}
|
|
136
140
|
/**
|
|
137
|
-
* C4 notation
|
|
138
|
-
*
|
|
141
|
+
* The gaps the C4 notation still wants on this element, named rather than left
|
|
142
|
+
* to be noticed.
|
|
143
|
+
*
|
|
144
|
+
* Containers are where the notation is strictest: it requires a technology and
|
|
145
|
+
* a description on every one. A component needs a technology too, but a
|
|
146
|
+
* component drawn without a parent already reports `unknown_container`, and
|
|
147
|
+
* that is the question worth asking first.
|
|
139
148
|
*/
|
|
140
149
|
export function nodeMissing(node) {
|
|
141
150
|
if (node.kind !== 'container')
|
|
142
151
|
return [];
|
|
143
152
|
const missing = [];
|
|
144
|
-
if (!node.
|
|
153
|
+
if (!node.technology)
|
|
145
154
|
missing.push('technology');
|
|
146
|
-
if (!node.
|
|
155
|
+
if (!node.description)
|
|
147
156
|
missing.push('description');
|
|
148
157
|
return missing;
|
|
149
158
|
}
|
|
@@ -153,10 +162,10 @@ export function C4NodeCard({ node, selected = false, handles, onClick }) {
|
|
|
153
162
|
const style = nodeStyle(node, theme, selected);
|
|
154
163
|
const shape = nodeShape(node);
|
|
155
164
|
const missing = nodeMissing(node);
|
|
156
|
-
const
|
|
165
|
+
const size = nodeSize(node);
|
|
157
166
|
return (_jsxs("div", { onClick: onClick, style: {
|
|
158
|
-
width:
|
|
159
|
-
minHeight:
|
|
167
|
+
width: size.width,
|
|
168
|
+
minHeight: size.height,
|
|
160
169
|
boxSizing: 'border-box',
|
|
161
170
|
display: 'flex',
|
|
162
171
|
flexDirection: 'column',
|
|
@@ -172,32 +181,17 @@ export function C4NodeCard({ node, selected = false, handles, onClick }) {
|
|
|
172
181
|
boxShadow: '0 1px 4px rgba(0,0,0,0.25)',
|
|
173
182
|
cursor: onClick ? 'pointer' : 'default',
|
|
174
183
|
fontFamily: theme.fonts.body,
|
|
175
|
-
}, children: [
|
|
176
|
-
display: 'flex',
|
|
177
|
-
alignItems: 'baseline',
|
|
178
|
-
gap: 6,
|
|
184
|
+
}, children: [_jsx("span", { style: {
|
|
179
185
|
fontFamily: theme.fonts.monospace,
|
|
180
186
|
fontSize: theme.fontSizes[0],
|
|
187
|
+
color: style.color,
|
|
188
|
+
fontWeight: 600,
|
|
181
189
|
letterSpacing: 0.5,
|
|
182
190
|
textTransform: 'uppercase',
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
overflow: 'hidden',
|
|
188
|
-
textOverflow: 'ellipsis',
|
|
189
|
-
minWidth: 0,
|
|
190
|
-
}, children: nodeTag(node) }), _jsx("span", { title: unconfirmed ? 'Nobody has reviewed this element yet' : undefined, style: {
|
|
191
|
-
color: unconfirmed ? muted : style.color,
|
|
192
|
-
// Unconfirmed is a quiet absence, not a loud claim.
|
|
193
|
-
opacity: unconfirmed ? 0.75 : 1,
|
|
194
|
-
letterSpacing: 0,
|
|
195
|
-
textTransform: 'none',
|
|
196
|
-
whiteSpace: 'nowrap',
|
|
197
|
-
overflow: 'hidden',
|
|
198
|
-
textOverflow: 'ellipsis',
|
|
199
|
-
minWidth: 0,
|
|
200
|
-
}, children: nodeStateTag(node) })] }), _jsx("span", { style: {
|
|
191
|
+
whiteSpace: 'nowrap',
|
|
192
|
+
overflow: 'hidden',
|
|
193
|
+
textOverflow: 'ellipsis',
|
|
194
|
+
}, children: nodeTag(node) }), _jsx("span", { style: {
|
|
201
195
|
fontWeight: 600,
|
|
202
196
|
fontSize: theme.fontSizes[2],
|
|
203
197
|
color: theme.colors.text,
|
|
@@ -214,7 +208,7 @@ export function C4NodeCard({ node, selected = false, handles, onClick }) {
|
|
|
214
208
|
whiteSpace: 'nowrap',
|
|
215
209
|
overflow: 'hidden',
|
|
216
210
|
textOverflow: 'ellipsis',
|
|
217
|
-
}, title: node.
|
|
211
|
+
}, title: node.description ?? node.members.join(', '), children: nodeSubtitle(node) }), _jsx("span", { style: { height: GAP_SLOT_H }, "aria-hidden": "true" }), missing.length > 0 && (_jsxs("span", { title: `C4 requires a ${missing.join(' and a ')} on every container`, style: {
|
|
218
212
|
fontFamily: theme.fonts.monospace,
|
|
219
213
|
fontSize: theme.fontSizes[0],
|
|
220
214
|
color: theme.colors.warning ?? '#e8a33a',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C4NodeCard.js","sourceRoot":"","sources":["../../src/subsystem/C4NodeCard.tsx"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"C4NodeCard.js","sourceRoot":"","sources":["../../src/subsystem/C4NodeCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileDrawer.d.ts","sourceRoot":"","sources":["../../src/subsystem/FileDrawer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC;2EAC2E;AAC3E,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;iFAIiF;AACjF,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,OAAO,EACP,UAAkB,EAClB,cAAsB,EACtB,MAAc,EACd,QAAe,EACf,QAAQ,GACT,EAAE;IACD,qDAAqD;IACrD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+
|
|
1
|
+
{"version":3,"file":"FileDrawer.d.ts","sourceRoot":"","sources":["../../src/subsystem/FileDrawer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC;2EAC2E;AAC3E,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;iFAIiF;AACjF,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,OAAO,EACP,UAAkB,EAClB,cAAsB,EACtB,MAAc,EACd,QAAe,EACf,QAAQ,GACT,EAAE;IACD,qDAAqD;IACrD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAyLA"}
|
|
@@ -72,17 +72,28 @@ export function FileDrawer({ title, onClose, fillHeight = false, suppressEscape
|
|
|
72
72
|
flexShrink: 0,
|
|
73
73
|
cursor: "default",
|
|
74
74
|
userSelect: "none",
|
|
75
|
-
}, children: [
|
|
75
|
+
}, children: [showProgress && progress != null && (_jsx("div", { role: "img", "aria-label": `Step ${progress.index + 1} of ${progress.total}`, style: {
|
|
76
|
+
display: "flex",
|
|
77
|
+
gap: 2,
|
|
78
|
+
flexShrink: 0,
|
|
79
|
+
}, children: Array.from({ length: progress.total }, (_, i) => (_jsx("span", { style: {
|
|
80
|
+
flex: 1,
|
|
81
|
+
height: 2,
|
|
82
|
+
borderRadius: 1,
|
|
83
|
+
background: i <= progress.index
|
|
84
|
+
? theme.colors.primary
|
|
85
|
+
: theme.colors.border,
|
|
86
|
+
} }, i))) })), _jsxs("div", { style: {
|
|
76
87
|
display: "flex",
|
|
77
88
|
alignItems: "center",
|
|
78
89
|
gap: 8,
|
|
79
|
-
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}, children: [_jsx("span", {
|
|
90
|
+
// Top runs deeper than the bottom so the title/label sits
|
|
91
|
+
// optically centered inside the sticky top edge.
|
|
92
|
+
padding: "10px 10px 8px",
|
|
93
|
+
// The header row is the last chrome row now, so its hairline is
|
|
94
|
+
// the boundary with the code below.
|
|
95
|
+
borderBottom: `1px solid ${theme.colors.border}`,
|
|
96
|
+
}, children: [_jsx("span", { style: {
|
|
86
97
|
flex: 1,
|
|
87
98
|
minWidth: 0,
|
|
88
99
|
overflow: "hidden",
|
|
@@ -118,18 +129,6 @@ export function FileDrawer({ title, onClose, fillHeight = false, suppressEscape
|
|
|
118
129
|
color: closeHover ? theme.colors.text : muted,
|
|
119
130
|
cursor: "pointer",
|
|
120
131
|
transition: "background 120ms ease, color 120ms ease",
|
|
121
|
-
}, children: _jsx(X, { size: 14 }) })] }),
|
|
122
|
-
display: "flex",
|
|
123
|
-
gap: 2,
|
|
124
|
-
flexShrink: 0,
|
|
125
|
-
padding: "0 10px 6px",
|
|
126
|
-
}, children: Array.from({ length: progress.total }, (_, i) => (_jsx("span", { style: {
|
|
127
|
-
flex: 1,
|
|
128
|
-
height: 2,
|
|
129
|
-
borderRadius: 1,
|
|
130
|
-
background: i <= progress.index
|
|
131
|
-
? theme.colors.primary
|
|
132
|
-
: theme.colors.border,
|
|
133
|
-
} }, i))) }))] }), _jsx("div", { style: { flex: 1, minHeight: 0, overflow: "auto" }, children: children })] })] }));
|
|
132
|
+
}, children: _jsx(X, { size: 14 }) })] })] }), _jsx("div", { style: { flex: 1, minHeight: 0, overflow: "auto" }, children: children })] })] }));
|
|
134
133
|
}
|
|
135
134
|
//# sourceMappingURL=FileDrawer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileDrawer.js","sourceRoot":"","sources":["../../src/subsystem/FileDrawer.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"FileDrawer.js","sourceRoot":"","sources":["../../src/subsystem/FileDrawer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -136,7 +136,7 @@ export function humanizeIssueKind(kind) {
|
|
|
136
136
|
const KIND_LABEL = {
|
|
137
137
|
missing_file: 'Construct declaration file missing',
|
|
138
138
|
symbol_ambiguous: 'Multiple construct symbol matches',
|
|
139
|
-
symbol_unmatched: 'Construct symbol
|
|
139
|
+
symbol_unmatched: 'Construct symbol missing',
|
|
140
140
|
stale_declaration: 'Construct declaration drift',
|
|
141
141
|
construct_mismatch: 'Construct type mismatch',
|
|
142
142
|
construct_unconfirmed: 'Construct type unconfirmed',
|