@itsthecsguy/linework 0.1.1 → 0.1.2
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/README.md +8 -3
- package/dist/drawio/theme.js +39 -34
- package/package.json +1 -1
- package/skills/linework/SKILL.md +1 -1
- package/skills/linework/references/spec.md +3 -3
package/README.md
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
<h1>
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/brand/logo-dark.svg">
|
|
4
|
+
<img alt="Linework" src="docs/brand/logo-light.svg" height="64">
|
|
5
|
+
</picture>
|
|
6
|
+
</h1>
|
|
2
7
|
|
|
3
8
|
Software diagrams your AI agent writes and you can edit by hand, in Claude Code, Codex, Cursor, Antigravity, Copilot, Grok Build or any other agent.
|
|
4
9
|
|
|
@@ -107,8 +112,8 @@ Set `theme:` in the spec.
|
|
|
107
112
|
| `soft` | slides. Borderless pastel cards, tinted by kind. |
|
|
108
113
|
| `dark` | dark-mode pages |
|
|
109
114
|
| `sketch` | early drafts. Hand-drawn lines and a handwriting font. |
|
|
110
|
-
| `blueprint` | technical deep dives.
|
|
111
|
-
| `c4` | C4-model diagrams |
|
|
115
|
+
| `blueprint` | technical deep dives. Blue ink on pale drafting paper, monospace. |
|
|
116
|
+
| `c4` | C4-model diagrams, in quiet blues and grays |
|
|
112
117
|
|
|
113
118
|
Color is for meaning. Nodes stay neutral by default, and errors and successes are red and green in every style. Mark the part the doc is about with `highlight: true` on a node or `==>` on an edge, and it's drawn in the style's accent color. Use `color: red` (or blue, violet, pink, orange, amber, green, teal, gray) for categories.
|
|
114
119
|
|
package/dist/drawio/theme.js
CHANGED
|
@@ -31,7 +31,8 @@ const LIGHT_SW = {
|
|
|
31
31
|
pink: { tint: '#FDF2F8', line: '#F9A8D4', ink: '#9D174D', solid: '#DB2777', edge: '#DB2777' },
|
|
32
32
|
red: { tint: '#FEF2F2', line: '#FCA5A5', ink: '#991B1B', solid: '#DC2626', edge: '#DC2626' },
|
|
33
33
|
orange: { tint: '#FFF7ED', line: '#FDBA74', ink: '#9A3412', solid: '#C2410C', edge: '#EA580C' },
|
|
34
|
-
|
|
34
|
+
// Ochre, not orange: the two read as one color at line weight otherwise
|
|
35
|
+
amber: { tint: '#FFFBEB', line: '#FCD34D', ink: '#92400E', solid: '#B45309', edge: '#A16207' },
|
|
35
36
|
green: { tint: '#F0FDF4', line: '#86EFAC', ink: '#166534', solid: '#15803D', edge: '#16A34A' },
|
|
36
37
|
teal: { tint: '#F0FDFA', line: '#5EEAD4', ink: '#115E59', solid: '#0F766E', edge: '#0D9488' },
|
|
37
38
|
gray: { tint: '#F4F4F5', line: '#D4D4D8', ink: '#3F3F46', solid: '#52525B', edge: '#71717A' },
|
|
@@ -59,17 +60,17 @@ const DARK_SW = {
|
|
|
59
60
|
teal: { tint: '#042F2E', line: '#115E59', ink: '#99F6E4', solid: '#0F766E', edge: '#2DD4BF' },
|
|
60
61
|
gray: { tint: '#27272A', line: '#52525B', ink: '#E4E4E7', solid: '#52525B', edge: '#A1A1AA' },
|
|
61
62
|
};
|
|
62
|
-
// Blueprint:
|
|
63
|
+
// Blueprint: a drafting sheet. Blue ink on pale paper; color only changes the line.
|
|
63
64
|
const BP_LINE = {
|
|
64
|
-
blue: '#
|
|
65
|
-
violet: '#
|
|
66
|
-
pink: '#
|
|
67
|
-
red: '#
|
|
68
|
-
orange: '#
|
|
69
|
-
amber: '#
|
|
70
|
-
green: '#
|
|
71
|
-
teal: '#
|
|
72
|
-
gray: '#
|
|
65
|
+
blue: '#1D4ED8',
|
|
66
|
+
violet: '#6D28D9',
|
|
67
|
+
pink: '#BE185D',
|
|
68
|
+
red: '#B91C1C',
|
|
69
|
+
orange: '#C2410C',
|
|
70
|
+
amber: '#A16207',
|
|
71
|
+
green: '#15803D',
|
|
72
|
+
teal: '#0F766E',
|
|
73
|
+
gray: '#64748B',
|
|
73
74
|
};
|
|
74
75
|
function lightPaint(sw, neutral, text, muted, accent) {
|
|
75
76
|
return (color, highlight) => {
|
|
@@ -167,7 +168,7 @@ const SKETCH = {
|
|
|
167
168
|
edge: '#3F3F46',
|
|
168
169
|
edgeText: '#3F3F46',
|
|
169
170
|
edgeWidth: 1.5,
|
|
170
|
-
accent: '
|
|
171
|
+
accent: 'blue',
|
|
171
172
|
kindColors: true,
|
|
172
173
|
radius: 8,
|
|
173
174
|
group: { fill: 'none', stroke: '#71717A', dashed: true, text: '#3F3F46' },
|
|
@@ -179,8 +180,9 @@ const SKETCH = {
|
|
|
179
180
|
if (color === 'ink')
|
|
180
181
|
return { fill: SKETCH_INK, stroke: SKETCH_INK, text: '#FFFFFF', sub: '#5C5C66', strokeWidth: 1.5, extra: solid };
|
|
181
182
|
if (hl) {
|
|
182
|
-
const
|
|
183
|
-
|
|
183
|
+
const c = color === 'neutral' ? 'blue' : color;
|
|
184
|
+
// A marker pass: a stronger tint than any kind's, under the accent's line
|
|
185
|
+
return { fill: c === 'blue' ? '#B9C6FF' : LIGHT_SW[c].line, stroke: LIGHT_SW[c].solid, text: SKETCH_INK, sub: LIGHT_SW[c].ink, strokeWidth: 2.5, extra: solid };
|
|
184
186
|
}
|
|
185
187
|
if (color === 'neutral')
|
|
186
188
|
return { fill: '#FFFFFF', stroke: SKETCH_INK, text: SKETCH_INK, sub: '#5C5C66', strokeWidth: 1.5, extra: solid };
|
|
@@ -189,37 +191,38 @@ const SKETCH = {
|
|
|
189
191
|
edgePaint: (color, hl) => {
|
|
190
192
|
if (!color && !hl)
|
|
191
193
|
return { stroke: SKETCH.edge, text: SKETCH.edgeText, width: 1.5 };
|
|
192
|
-
const s = LIGHT_SW[color ?? '
|
|
194
|
+
const s = LIGHT_SW[color ?? 'blue'];
|
|
193
195
|
return { stroke: s.solid, text: s.ink, width: hl ? 2.5 : 1.5 };
|
|
194
196
|
},
|
|
195
197
|
extra: 'sketch=1;curveFitting=1;jiggle=2;',
|
|
196
198
|
};
|
|
197
|
-
const
|
|
198
|
-
const BP_INK = '#
|
|
199
|
-
const
|
|
199
|
+
const BP_PAPER = '#F6F8FC';
|
|
200
|
+
const BP_INK = '#1B2F55';
|
|
201
|
+
const BP_LINE_INK = '#3F5F96';
|
|
202
|
+
const BP_HI = '#1D4ED8';
|
|
200
203
|
const BLUEPRINT = {
|
|
201
204
|
name: 'blueprint',
|
|
202
205
|
type: MONO,
|
|
203
|
-
canvas:
|
|
206
|
+
canvas: BP_PAPER,
|
|
204
207
|
text: BP_INK,
|
|
205
|
-
muted: '#
|
|
206
|
-
edge: '#
|
|
207
|
-
edgeText: '#
|
|
208
|
+
muted: '#5A6F92',
|
|
209
|
+
edge: '#6F86AD',
|
|
210
|
+
edgeText: '#4A5F84',
|
|
208
211
|
edgeWidth: 1.25,
|
|
209
|
-
accent: '
|
|
212
|
+
accent: 'blue',
|
|
210
213
|
kindColors: false,
|
|
211
214
|
radius: 4,
|
|
212
|
-
group: { fill: 'none', stroke: '#
|
|
213
|
-
note: { fill: '#
|
|
214
|
-
well: '#
|
|
215
|
+
group: { fill: 'none', stroke: '#9DB0D0', dashed: true, text: '#5A6F92' },
|
|
216
|
+
note: { fill: '#EAF0FA', stroke: '#9DB0D0', text: BP_INK },
|
|
217
|
+
well: '#EAF0FA',
|
|
215
218
|
paint: (color, hl) => {
|
|
216
219
|
if (hl)
|
|
217
|
-
return { fill: BP_HI, stroke: BP_HI, text:
|
|
220
|
+
return { fill: BP_HI, stroke: BP_HI, text: '#FFFFFF', sub: 'rgba(255,255,255,0.8)', strokeWidth: 1 };
|
|
218
221
|
if (color === 'ink')
|
|
219
|
-
return { fill: BP_INK, stroke: BP_INK, text:
|
|
222
|
+
return { fill: BP_INK, stroke: BP_INK, text: '#FFFFFF', sub: '#C9D5EA', strokeWidth: 1 };
|
|
220
223
|
if (color === 'neutral')
|
|
221
|
-
return { fill:
|
|
222
|
-
return { fill:
|
|
224
|
+
return { fill: '#FFFFFF', stroke: BP_LINE_INK, text: BP_INK, sub: '#5A6F92', strokeWidth: 1.25 };
|
|
225
|
+
return { fill: '#FFFFFF', stroke: BP_LINE[color], text: BP_INK, sub: BP_LINE[color], strokeWidth: 1.25 };
|
|
223
226
|
},
|
|
224
227
|
edgePaint: (color, hl) => {
|
|
225
228
|
if (hl)
|
|
@@ -228,12 +231,14 @@ const BLUEPRINT = {
|
|
|
228
231
|
},
|
|
229
232
|
extra: '',
|
|
230
233
|
};
|
|
231
|
-
// C4
|
|
234
|
+
// C4's convention (a dark person, blue containers, gray external systems) in
|
|
235
|
+
// quieter tones than C4-PlantUML's, so a highlight still stands out, with white text at 4.5:1 or better on each.
|
|
236
|
+
// Other diagram types use `clean`.
|
|
232
237
|
const C4_KIND = {
|
|
233
|
-
person: { fill: '#
|
|
234
|
-
external: { fill: '#
|
|
238
|
+
person: { fill: '#1E3466', stroke: '#1E3466', text: '#FFFFFF', type: 'Person' },
|
|
239
|
+
external: { fill: '#6B7383', stroke: '#6B7383', text: '#FFFFFF', type: 'External system' },
|
|
235
240
|
};
|
|
236
|
-
const C4_CONTAINER = { fill: '#
|
|
241
|
+
const C4_CONTAINER = { fill: '#456A9E', stroke: '#456A9E', text: '#FFFFFF', type: 'Container' };
|
|
237
242
|
const C4 = { ...CLEAN, name: 'c4', group: { fill: 'none', stroke: '#444444', dashed: true, text: '#444444' }, edge: '#707070', edgeText: '#444444' };
|
|
238
243
|
const THEMES_BY_NAME = { clean: CLEAN, soft: SOFT, dark: DARK, sketch: SKETCH, blueprint: BLUEPRINT, c4: C4 };
|
|
239
244
|
export function palette(theme = 'clean') {
|
package/package.json
CHANGED
package/skills/linework/SKILL.md
CHANGED
|
@@ -78,7 +78,7 @@ edges: # "from ARROW to: label"
|
|
|
78
78
|
- `soft`: borderless pastel cards, tinted by kind. For slides and docs that want color coding.
|
|
79
79
|
- `dark`: for dark-mode docs and slides.
|
|
80
80
|
- `sketch`: hand-drawn lines and handwriting. For early proposals ("this is a draft") and whiteboard-style explainers.
|
|
81
|
-
- `blueprint`:
|
|
81
|
+
- `blueprint`: blue ink on pale drafting paper, monospace. For technical deep dives that want a distinct look.
|
|
82
82
|
- `c4`: C4-model conventions; labels each box with its element type.
|
|
83
83
|
- Color is for meaning, so most nodes stay neutral:
|
|
84
84
|
- `highlight: true` on a node, group or participant, or `==>` on an edge or message, makes it the first thing a reader sees. Highlight the one path or component the surrounding text is about: often one node and the 2 or 3 edges into and out of it. `build` warns when you highlight so much that nothing stands out.
|
|
@@ -40,9 +40,9 @@ nodes:
|
|
|
40
40
|
| `clean` | white boxes with hairline borders, groups drawn as gray grounds, cobalt accent. Nodes are neutral unless the kind means something (error, success). | IBM Plex Sans |
|
|
41
41
|
| `soft` | borderless pastel cards, each kind its own tint | IBM Plex Sans |
|
|
42
42
|
| `dark` | `clean` in GitHub's dark colors, so it sits flush on a dark README | IBM Plex Sans |
|
|
43
|
-
| `sketch` | hand-drawn strokes, pastel fills,
|
|
44
|
-
| `blueprint` |
|
|
45
|
-
| `c4` | C4
|
|
43
|
+
| `sketch` | hand-drawn strokes, pastel fills, blue accent | Kalam (handwriting) |
|
|
44
|
+
| `blueprint` | blue ink on pale drafting paper, drafting capitals for group titles | IBM Plex Mono |
|
|
45
|
+
| `c4` | C4's colors (dark person, blue containers, gray external systems) in quiet tones; each box says its element type | IBM Plex Sans |
|
|
46
46
|
|
|
47
47
|
The "drawn as" columns below describe `soft`. In `clean`, `dark` and `blueprint`, kinds differ by shape and dash only, and color comes from `highlight`, `color` and the error/success kinds.
|
|
48
48
|
|