@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 CHANGED
@@ -1,4 +1,9 @@
1
- # Linework
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. Light lines on deep blue, monospace. |
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
 
@@ -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
- amber: { tint: '#FFFBEB', line: '#FCD34D', ink: '#92400E', solid: '#B45309', edge: '#D97706' },
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: light lines on deep blue. Color only changes the line.
63
+ // Blueprint: a drafting sheet. Blue ink on pale paper; color only changes the line.
63
64
  const BP_LINE = {
64
- blue: '#93C5FD',
65
- violet: '#C4B5FD',
66
- pink: '#F9A8D4',
67
- red: '#FCA5A5',
68
- orange: '#FDBA74',
69
- amber: '#FDE68A',
70
- green: '#86EFAC',
71
- teal: '#5EEAD4',
72
- gray: '#CBD5E1',
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: 'red',
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 s = LIGHT_SW[color === 'neutral' ? 'red' : color];
183
- return { fill: s.line, stroke: s.solid, text: SKETCH_INK, sub: s.ink, strokeWidth: 2.5, extra: solid };
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 ?? 'red'];
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 BP_BG = '#0F3460';
198
- const BP_INK = '#EAF2FF';
199
- const BP_HI = '#FFD43B';
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: BP_BG,
206
+ canvas: BP_PAPER,
204
207
  text: BP_INK,
205
- muted: '#9DB8DF',
206
- edge: '#9DB8DF',
207
- edgeText: '#C9DBF5',
208
+ muted: '#5A6F92',
209
+ edge: '#6F86AD',
210
+ edgeText: '#4A5F84',
208
211
  edgeWidth: 1.25,
209
- accent: 'amber',
212
+ accent: 'blue',
210
213
  kindColors: false,
211
214
  radius: 4,
212
- group: { fill: 'none', stroke: '#5B82B8', dashed: true, text: '#9DB8DF' },
213
- note: { fill: '#16467E', stroke: '#5B82B8', text: BP_INK },
214
- well: '#16467E',
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: BP_BG, sub: '#3A4A63', strokeWidth: 1 };
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: BP_BG, sub: BP_BG, strokeWidth: 1 };
222
+ return { fill: BP_INK, stroke: BP_INK, text: '#FFFFFF', sub: '#C9D5EA', strokeWidth: 1 };
220
223
  if (color === 'neutral')
221
- return { fill: BP_BG, stroke: BP_INK, text: BP_INK, sub: '#9DB8DF', strokeWidth: 1.25 };
222
- return { fill: BP_BG, stroke: BP_LINE[color], text: BP_INK, sub: BP_LINE[color], strokeWidth: 1.25 };
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-PlantUML's colours for architecture kinds; other diagram types use `clean`.
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: '#08427B', stroke: '#073B6F', text: '#FFFFFF', type: 'Person' },
234
- external: { fill: '#999999', stroke: '#8A8A8A', text: '#FFFFFF', type: 'External system' },
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: '#438DD5', stroke: '#3C7FC0', text: '#FFFFFF', type: 'Container' };
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itsthecsguy/linework",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Software diagrams an AI can write and a person can edit. YAML spec in, .drawio.svg out, editable in draw.io.",
5
5
  "keywords": [
6
6
  "diagram",
@@ -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`: light lines on deep blue, monospace. For technical deep dives that want a distinct look.
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, red accent | Kalam (handwriting) |
44
- | `blueprint` | light lines on deep blue, yellow accent, drafting capitals for group titles | IBM Plex Mono |
45
- | `c4` | C4-PlantUML colors; each box says its element type | IBM Plex Sans |
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