system-canvas 0.1.0 → 0.1.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.
Files changed (65) hide show
  1. package/dist/actions.d.ts +50 -0
  2. package/dist/actions.d.ts.map +1 -0
  3. package/dist/actions.js +85 -0
  4. package/dist/actions.js.map +1 -0
  5. package/dist/canvas.d.ts +40 -1
  6. package/dist/canvas.d.ts.map +1 -1
  7. package/dist/canvas.js +180 -0
  8. package/dist/canvas.js.map +1 -1
  9. package/dist/index.d.ts +12 -4
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +15 -3
  12. package/dist/index.js.map +1 -1
  13. package/dist/lanes.d.ts +50 -0
  14. package/dist/lanes.d.ts.map +1 -0
  15. package/dist/lanes.js +129 -0
  16. package/dist/lanes.js.map +1 -0
  17. package/dist/paths.d.ts +15 -0
  18. package/dist/paths.d.ts.map +1 -0
  19. package/dist/paths.js +41 -0
  20. package/dist/paths.js.map +1 -0
  21. package/dist/rendering/index.d.ts +2 -1
  22. package/dist/rendering/index.d.ts.map +1 -1
  23. package/dist/rendering/index.js +1 -1
  24. package/dist/rendering/index.js.map +1 -1
  25. package/dist/rendering/viewport-math.d.ts +28 -0
  26. package/dist/rendering/viewport-math.d.ts.map +1 -1
  27. package/dist/rendering/viewport-math.js +49 -0
  28. package/dist/rendering/viewport-math.js.map +1 -1
  29. package/dist/rollup.d.ts +23 -0
  30. package/dist/rollup.d.ts.map +1 -0
  31. package/dist/rollup.js +56 -0
  32. package/dist/rollup.js.map +1 -0
  33. package/dist/slots.d.ts +65 -0
  34. package/dist/slots.d.ts.map +1 -0
  35. package/dist/slots.js +367 -0
  36. package/dist/slots.js.map +1 -0
  37. package/dist/themes/blueprint.d.ts.map +1 -1
  38. package/dist/themes/blueprint.js +13 -1
  39. package/dist/themes/blueprint.js.map +1 -1
  40. package/dist/themes/dark.d.ts.map +1 -1
  41. package/dist/themes/dark.js +13 -1
  42. package/dist/themes/dark.js.map +1 -1
  43. package/dist/themes/index.d.ts +1 -0
  44. package/dist/themes/index.d.ts.map +1 -1
  45. package/dist/themes/index.js +1 -0
  46. package/dist/themes/index.js.map +1 -1
  47. package/dist/themes/light.d.ts.map +1 -1
  48. package/dist/themes/light.js +13 -1
  49. package/dist/themes/light.js.map +1 -1
  50. package/dist/themes/midnight.d.ts.map +1 -1
  51. package/dist/themes/midnight.js +13 -1
  52. package/dist/themes/midnight.js.map +1 -1
  53. package/dist/themes/resolve.d.ts.map +1 -1
  54. package/dist/themes/resolve.js +5 -0
  55. package/dist/themes/resolve.js.map +1 -1
  56. package/dist/themes/roadmap.d.ts +13 -0
  57. package/dist/themes/roadmap.d.ts.map +1 -0
  58. package/dist/themes/roadmap.js +264 -0
  59. package/dist/themes/roadmap.js.map +1 -0
  60. package/dist/themes/warm.d.ts.map +1 -1
  61. package/dist/themes/warm.js +13 -1
  62. package/dist/themes/warm.js.map +1 -1
  63. package/dist/types.d.ts +419 -0
  64. package/dist/types.d.ts.map +1 -1
  65. package/package.json +13 -3
package/dist/types.d.ts CHANGED
@@ -35,6 +35,13 @@ export interface CanvasNode {
35
35
  background?: string;
36
36
  /** type: 'group' — background rendering style */
37
37
  backgroundStyle?: BackgroundStyle;
38
+ /**
39
+ * Free-form pass-through data for consumer-specific fields that the
40
+ * library does not need to understand (e.g. `status`, `owner`, `progress`,
41
+ * `dueDate`). Survives round-trips through the library's mutation helpers
42
+ * and is emitted back to the consumer via the update callbacks.
43
+ */
44
+ customData?: Record<string, any>;
38
45
  }
39
46
  /** An edge connecting two nodes. */
40
47
  export interface CanvasEdge {
@@ -62,12 +69,38 @@ export interface CanvasThemeHint {
62
69
  /** Inline category definitions, merged into the active theme's categories */
63
70
  categories?: Record<string, CategoryDefinition>;
64
71
  }
72
+ /**
73
+ * A named band on the canvas. Columns are vertical bands (positioned along x);
74
+ * rows are horizontal bands (positioned along y).
75
+ *
76
+ * Lanes are a pure rendering/snapping primitive — the library has no opinion
77
+ * on what they represent. Consumers use them for roadmap columns
78
+ * (Now/Next/Later, Q1/Q2/Q3, phase names, date ranges), swim-lane teams,
79
+ * kanban groupings, or any other ordinal or positional labeling.
80
+ */
81
+ export interface CanvasLane {
82
+ id: string;
83
+ label: string;
84
+ /**
85
+ * Position along the lane axis, in canvas-space. For a column this is its
86
+ * left edge (x); for a row it is its top edge (y).
87
+ */
88
+ start: number;
89
+ /** Extent along the lane axis (width for columns, height for rows). */
90
+ size: number;
91
+ /** Optional preset "1"-"6" or hex color override for the band fill. */
92
+ color?: CanvasColor;
93
+ }
65
94
  /** A JSON Canvas document (with system-canvas extensions). */
66
95
  export interface CanvasData {
67
96
  nodes?: CanvasNode[];
68
97
  edges?: CanvasEdge[];
69
98
  /** Optional theme hint — lets the document declare categories and a preferred base theme */
70
99
  theme?: CanvasThemeHint;
100
+ /** Vertical bands rendered behind nodes. Consumer defines what they mean. */
101
+ columns?: CanvasLane[];
102
+ /** Horizontal bands rendered behind nodes. Consumer defines what they mean. */
103
+ rows?: CanvasLane[];
71
104
  }
72
105
  export interface CategoryDefinition {
73
106
  defaultWidth: number;
@@ -77,6 +110,249 @@ export interface CategoryDefinition {
77
110
  cornerRadius?: number;
78
111
  /** Icon identifier — rendered inside the node */
79
112
  icon?: string | null;
113
+ /**
114
+ * The JSON Canvas node type to create when this category is chosen from
115
+ * the add-node menu. Defaults to 'text'.
116
+ */
117
+ type?: NodeType;
118
+ /**
119
+ * Declarative visual add-ons rendered in library-owned positional regions
120
+ * on nodes of this category. See `SlotPosition` and `SlotSpec`.
121
+ */
122
+ slots?: CategorySlots;
123
+ /**
124
+ * Per-category toolbar override. When present, fully replaces the theme's
125
+ * default `nodeActions` for nodes of this category (no merge). Use
126
+ * `buildDefaultToolbar(theme)` to spread the theme default explicitly.
127
+ */
128
+ toolbar?: NodeActionGroup[];
129
+ /**
130
+ * Per-category inline editor schema. When present, the node editor renders
131
+ * a multi-field form instead of the single-field text/input. Falls through
132
+ * to the single-field editor when absent.
133
+ */
134
+ editableFields?: EditableField[];
135
+ /**
136
+ * Seed `customData` for new nodes created from this category via the
137
+ * add-node menu. Deep-cloned per instance (via `structuredClone`) so two
138
+ * new nodes never share nested object/array references.
139
+ */
140
+ defaultCustomData?: Record<string, unknown>;
141
+ }
142
+ /**
143
+ * A library-owned positional region on a node. Each category slot maps to
144
+ * exactly one of these positions; each position holds at most one slot.
145
+ *
146
+ * - `topEdge`, `bottomEdge`, `leftEdge`, `rightEdge` — thin strips along
147
+ * the node's perimeter.
148
+ * - `topLeft`, `topRight`, `bottomLeft`, `bottomRight` — small square
149
+ * corner badges, inset from the corner.
150
+ * - `header`, `footer` — full-width inset strips inside the top / bottom
151
+ * of the node. Cause text to reflow.
152
+ * - `body` — the main content area (same rect the default label would
153
+ * occupy, minus header/footer/edge reservations). When present, the
154
+ * default label is suppressed and the category owns body rendering.
155
+ */
156
+ export type SlotPosition = 'topEdge' | 'bottomEdge' | 'leftEdge' | 'rightEdge' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'header' | 'footer'
157
+ /**
158
+ * A horizontal band sitting just below the header (or just below the
159
+ * top of the content box when no header is present). Sized like a
160
+ * single-line row — intended for inline progress bars under a title,
161
+ * divider strips, sparklines, etc. Does not reflow text.
162
+ */
163
+ | 'bodyTop'
164
+ /**
165
+ * The node's main content area — the same rect that the default label
166
+ * would be drawn into, shrunk by any header/footer/edge reservations.
167
+ * When a category declares a `body` slot, the default label rendering
168
+ * is suppressed and the slot owns the main text area entirely. Use for
169
+ * big numeric figures (`$142k`), styled titles, or any main-body
170
+ * visual that can't be expressed through decorative slots alone.
171
+ */
172
+ | 'body'
173
+ /**
174
+ * Hangs off the top-right corner of the node, partially outside its
175
+ * bounding box. Designed for notification-style tab badges (e.g. a
176
+ * count that clips into the node's stroke). Lets a node carry both a
177
+ * `topRight` status pill AND a tab badge without collision.
178
+ */
179
+ | 'topRightOuter';
180
+ export type CategorySlots = Partial<Record<SlotPosition, SlotSpec>>;
181
+ export type SlotSpec = ColorSlot | ProgressSlot | CountSlot | TextSlot | DotSlot | PillSlot | CustomSlot;
182
+ /**
183
+ * Flat color fill of the region.
184
+ *
185
+ * On edge-strip positions (`topEdge` / `bottomEdge` / `leftEdge` /
186
+ * `rightEdge`), defaults to a *short, pinned* strip that covers only part
187
+ * of the edge (~55%, pinned to start). Set `extent: 'full'` to force a
188
+ * full-width strip.
189
+ *
190
+ * `color` is optional — when omitted the slot inherits `node.resolvedStroke`,
191
+ * so it automatically follows toolbar color changes.
192
+ */
193
+ export interface ColorSlot {
194
+ kind: 'color';
195
+ color?: NodeAccessor<string>;
196
+ /**
197
+ * Edge-strip extent. `'short'` (default on edge positions) draws a
198
+ * ~55%-length strip pinned to the start (left/top). `'full'` draws a
199
+ * strip across the whole edge, from one rounded-corner tangent to the
200
+ * other. Ignored for non-edge positions.
201
+ */
202
+ extent?: 'short' | 'full';
203
+ /** Optional fractional length for `extent: 'short'`. Defaults to 0.55. */
204
+ length?: NodeAccessor<number>;
205
+ }
206
+ /**
207
+ * Uppercase pill-style status tag — slim rounded rect with a tinted fill
208
+ * and colored text. Use for OK / ATTN / RISK tags, or any short badge
209
+ * label. Text is rendered uppercase with letter-spacing.
210
+ *
211
+ * `color` is optional — when omitted the pill inherits `node.resolvedStroke`.
212
+ */
213
+ export interface PillSlot {
214
+ kind: 'pill';
215
+ value: NodeAccessor<string>;
216
+ /** Accent color — drives both the subtle fill tint and the text color. */
217
+ color?: NodeAccessor<string>;
218
+ /** Override the text color (defaults to `color`). */
219
+ textColor?: NodeAccessor<string>;
220
+ /** Override the fill (defaults to `color` at ~15% alpha). */
221
+ fill?: NodeAccessor<string>;
222
+ }
223
+ /**
224
+ * Horizontal progress bar. Value is clamped to 0..1.
225
+ *
226
+ * `color` is optional — defaults to `node.resolvedStroke`.
227
+ */
228
+ export interface ProgressSlot {
229
+ kind: 'progress';
230
+ value: NodeAccessor<number>;
231
+ color?: NodeAccessor<string>;
232
+ bgColor?: NodeAccessor<string>;
233
+ }
234
+ /**
235
+ * Count / badge. Renders a pill with a number or short string.
236
+ *
237
+ * `color` is optional — defaults to `node.resolvedStroke`.
238
+ */
239
+ export interface CountSlot {
240
+ kind: 'count';
241
+ value: NodeAccessor<number | string>;
242
+ color?: NodeAccessor<string>;
243
+ textColor?: NodeAccessor<string>;
244
+ /** When true (default), the badge is hidden when value resolves to 0 or ''. */
245
+ hideWhenEmpty?: boolean;
246
+ }
247
+ /**
248
+ * Text label inside the region. Sized as a small kicker by default, but
249
+ * can be enlarged via `fontSize` for use in a `body` slot (large headline
250
+ * figures like `$142k`) or styled independently per-position.
251
+ *
252
+ * `align` defaults to `start` for `header` / `footer` / `body`, `center`
253
+ * otherwise. `uppercase` / `useLabelFont` default to `true` for `header`
254
+ * (kicker styling) and `false` elsewhere.
255
+ */
256
+ export interface TextSlot {
257
+ kind: 'text';
258
+ value: NodeAccessor<string>;
259
+ color?: NodeAccessor<string>;
260
+ /** Font size in px. When omitted, uses a position-appropriate default. */
261
+ fontSize?: NodeAccessor<number>;
262
+ /** Font weight (100–900). Defaults by position. */
263
+ fontWeight?: NodeAccessor<number>;
264
+ /** Horizontal alignment inside the region. */
265
+ align?: 'start' | 'center' | 'end';
266
+ /** Render uppercase with letter-spacing (kicker styling). */
267
+ uppercase?: boolean;
268
+ /**
269
+ * Use the theme's `labelFont` (display font) rather than the body
270
+ * `fontFamily`. Useful for headline figures in a `body` slot.
271
+ */
272
+ useLabelFont?: boolean;
273
+ /** Direct font-family override. Wins over `useLabelFont` when both set. */
274
+ fontFamily?: NodeAccessor<string>;
275
+ }
276
+ /**
277
+ * A small solid dot centered in the region (typically a corner).
278
+ *
279
+ * `color` is optional — defaults to `node.resolvedStroke`.
280
+ */
281
+ export interface DotSlot {
282
+ kind: 'dot';
283
+ color?: NodeAccessor<string>;
284
+ }
285
+ /**
286
+ * Escape hatch for arbitrary SVG inside the region. The library still owns
287
+ * positioning (the region `Rect` is provided via `ctx.region`), paint order,
288
+ * and ref-indicator collision.
289
+ */
290
+ export interface CustomSlot {
291
+ kind: 'custom';
292
+ render: (ctx: SlotContext) => unknown;
293
+ }
294
+ /** A value or a function that computes the value from a `SlotContext`. */
295
+ export type NodeAccessor<T> = T | ((ctx: SlotContext) => T);
296
+ /**
297
+ * Context passed to slot accessors and `custom` renderers. Scoped to one
298
+ * node instance and one region.
299
+ */
300
+ export interface SlotContext {
301
+ node: ResolvedNode;
302
+ theme: CanvasTheme;
303
+ /** The region rect this slot is rendering into (canvas-space). */
304
+ region: SlotRect;
305
+ /** Resolve a sub-canvas by ref (synchronous canvases map + async cache). */
306
+ getSubCanvas: (ref: string) => CanvasData | undefined;
307
+ canvases?: Record<string, CanvasData>;
308
+ /**
309
+ * Rollup scoped to this node's sub-canvas. Equivalent to
310
+ * `rollupNodes(getSubCanvas(node.ref), predicate)`. Returns zeros when
311
+ * the node has no ref or the sub-canvas is unresolved.
312
+ */
313
+ rollup: (predicate: (n: CanvasNode) => boolean) => RollupResult;
314
+ }
315
+ /**
316
+ * Axis-aligned rectangle in canvas-space. Duplicated from `rendering/` so
317
+ * core's data-model module has no cross-package import cycles.
318
+ */
319
+ export interface SlotRect {
320
+ x: number;
321
+ y: number;
322
+ width: number;
323
+ height: number;
324
+ }
325
+ /**
326
+ * Result of rolling up descendant nodes against a predicate. Returned by
327
+ * `rollupNodes` / `rollupNodesDeep` and by `SlotContext.rollup`.
328
+ */
329
+ export interface RollupResult {
330
+ /** Total nodes considered. */
331
+ total: number;
332
+ /** Nodes matching the predicate. */
333
+ matched: number;
334
+ /** `matched / total`, or 0 when `total === 0`. */
335
+ fraction: number;
336
+ }
337
+ export type EditableFieldKind = 'text' | 'textarea' | 'number' | 'select' | 'boolean';
338
+ export interface EditableField {
339
+ /**
340
+ * Dot-path into the node. Top-level fields like `'text'`, `'label'`,
341
+ * `'file'`, `'url'`, or nested like `'customData.status'`.
342
+ */
343
+ path: string;
344
+ kind: EditableFieldKind;
345
+ label?: string;
346
+ /** Options for `kind: 'select'`. */
347
+ options?: Array<{
348
+ value: string;
349
+ label?: string;
350
+ }>;
351
+ /** Numeric constraints for `kind: 'number'`. */
352
+ min?: number;
353
+ max?: number;
354
+ step?: number;
355
+ placeholder?: string;
80
356
  }
81
357
  export interface PresetColor {
82
358
  fill: string;
@@ -89,7 +365,15 @@ export interface GridConfig {
89
365
  }
90
366
  export interface RefIndicatorConfig {
91
367
  icon: 'chevron' | 'arrow' | 'expand' | 'none';
368
+ /** Resting glyph color */
92
369
  color: string;
370
+ /**
371
+ * Hover fill of the carved square. Defaults to `node.labelColor` at 18%.
372
+ * Any valid CSS color (rgba/hex/named).
373
+ */
374
+ hoverFill?: string;
375
+ /** Hover glyph color. Defaults to `theme.background` (inverted on the fill). */
376
+ hoverColor?: string;
93
377
  }
94
378
  export interface NodeTheme {
95
379
  fill: string;
@@ -98,7 +382,19 @@ export interface NodeTheme {
98
382
  cornerRadius: number;
99
383
  labelColor: string;
100
384
  sublabelColor: string;
385
+ /**
386
+ * Primary font stack for monospace / data-style text (file paths,
387
+ * footer metrics, counts). Used by everything unless a specific
388
+ * consumer overrides it.
389
+ */
101
390
  fontFamily: string;
391
+ /**
392
+ * Optional display-font stack for node titles and header kickers.
393
+ * Defaults to `fontFamily` so existing themes are unchanged. Swap in
394
+ * a sans-serif here for an app-style / dashboard look while keeping
395
+ * numbers and metrics monospaced.
396
+ */
397
+ labelFont?: string;
102
398
  fontSize: number;
103
399
  sublabelFontSize: number;
104
400
  refIndicator: RefIndicatorConfig;
@@ -127,6 +423,88 @@ export interface BreadcrumbTheme {
127
423
  fontFamily: string;
128
424
  fontSize: number;
129
425
  }
426
+ export interface LanesTheme {
427
+ /** Fill color for odd-indexed bands (0, 2, 4, ...). */
428
+ bandFillEven: string;
429
+ /** Fill color for even-indexed bands (1, 3, 5, ...). */
430
+ bandFillOdd: string;
431
+ /** Color of the divider line drawn between bands. */
432
+ dividerColor: string;
433
+ dividerWidth: number;
434
+ /** Header (pinned label) styling */
435
+ headerBackground: string;
436
+ headerTextColor: string;
437
+ headerFontFamily: string;
438
+ headerFontSize: number;
439
+ /** Thickness of the sticky header strip, in screen pixels. */
440
+ headerSize: number;
441
+ /** Padding between header text and the band edge, in screen pixels. */
442
+ headerPadding: number;
443
+ }
444
+ /**
445
+ * A single action that a user can trigger on a selected node via the
446
+ * floating node toolbar. Each action carries its own visual treatment and
447
+ * the patch it applies — themes declare these so the library can render a
448
+ * generic toolbar without knowing the consumer's domain.
449
+ *
450
+ * The library has no opinion about what actions represent. Common uses:
451
+ * - Status toggles (planned / in-progress / done) via `customData` patches
452
+ * - Category switchers (initiative / milestone / service / database)
453
+ * - Color palettes tied to `color` or `customData`
454
+ * - Priority markers, owners, tags — anything the consumer can express
455
+ * as a patch to a CanvasNode.
456
+ */
457
+ export interface NodeAction {
458
+ /** Stable id, unique within its group. */
459
+ id: string;
460
+ /** Human-readable label used as tooltip text. */
461
+ label: string;
462
+ /**
463
+ * Optional icon key — looked up in the theme's `icons` map (or the built-in
464
+ * set). Renders inside a button-style action.
465
+ */
466
+ icon?: string;
467
+ /**
468
+ * Optional swatch color — renders as a small colored dot/pill. Use for
469
+ * status/color palette groups.
470
+ */
471
+ swatch?: string;
472
+ /**
473
+ * Patch to apply when the action is triggered. Can be a static patch or
474
+ * a function that receives the current node and returns one (for toggles,
475
+ * cycles, or "merge customData" behaviors).
476
+ */
477
+ patch: NodeUpdate | ((node: CanvasNode) => NodeUpdate);
478
+ /**
479
+ * Optional predicate — when present, the action is only rendered for
480
+ * nodes that match. Useful for category-specific actions.
481
+ */
482
+ appliesTo?: (node: CanvasNode) => boolean;
483
+ /**
484
+ * Optional predicate — when present and true, the action is rendered as
485
+ * "active" (e.g. a highlighted swatch). Use this to reflect the node's
486
+ * current state in the toolbar.
487
+ */
488
+ isActive?: (node: CanvasNode) => boolean;
489
+ }
490
+ /**
491
+ * A group of related NodeActions, rendered together in the toolbar.
492
+ * Groups are separated by a divider.
493
+ */
494
+ export interface NodeActionGroup {
495
+ /** Stable id, unique within the theme. */
496
+ id: string;
497
+ /** Optional heading shown above the group (or as a tooltip). */
498
+ label?: string;
499
+ /**
500
+ * Visual treatment:
501
+ * - `'swatches'` — a row of colored dots (good for color palettes and status)
502
+ * - `'buttons'` — icon buttons in a row
503
+ * - `'menu'` — a dropdown/popover with labels (good for longer lists like categories)
504
+ */
505
+ kind?: 'swatches' | 'buttons' | 'menu';
506
+ actions: NodeAction[];
507
+ }
130
508
  export interface CanvasTheme {
131
509
  name: string;
132
510
  background: string;
@@ -135,10 +513,31 @@ export interface CanvasTheme {
135
513
  edge: EdgeTheme;
136
514
  group: GroupTheme;
137
515
  breadcrumbs: BreadcrumbTheme;
516
+ lanes: LanesTheme;
138
517
  /** Map preset colors "1"-"6" to fill/stroke */
139
518
  presetColors: Record<string, PresetColor>;
140
519
  /** Map category strings to visual definitions */
141
520
  categories: Record<string, CategoryDefinition>;
521
+ /**
522
+ * Custom icons, merged over the built-in icon set. Each value is an array
523
+ * of SVG path `d` strings authored in a 16x16 coordinate space — matching
524
+ * the coordinate system used by the built-in icons. Useful for shipping
525
+ * domain-specific glyphs via the theme without forking the library.
526
+ */
527
+ icons?: Record<string, string[]>;
528
+ /**
529
+ * Action groups shown in the floating node toolbar when a node is selected
530
+ * in editable mode. When omitted, the library falls back to a generic
531
+ * color-swatch group derived from `presetColors`.
532
+ */
533
+ nodeActions?: NodeActionGroup[];
534
+ /**
535
+ * When true, suppress the trailing delete button in the node toolbar.
536
+ * Defaults to false (delete button shown). Consumers who want a custom
537
+ * delete action (confirmation dialog, soft-delete, etc.) can hide the
538
+ * built-in button and add their own via `nodeActions`.
539
+ */
540
+ hideToolbarDelete?: boolean;
142
541
  }
143
542
  /** A node with all dimensions resolved (category defaults applied). */
144
543
  export interface ResolvedNode extends CanvasNode {
@@ -188,4 +587,24 @@ export interface ContextMenuEvent {
188
587
  y: number;
189
588
  };
190
589
  }
590
+ /** A partial update to an existing node (x/y/text/label/url/file/etc.). */
591
+ export type NodeUpdate = Partial<Omit<CanvasNode, 'id' | 'type'>>;
592
+ /** A partial update to an existing edge (label/color/style/endpoints/etc.). */
593
+ export type EdgeUpdate = Partial<Omit<CanvasEdge, 'id'>>;
594
+ /** An entry in the add-node menu. */
595
+ export interface NodeMenuOption {
596
+ kind: 'category' | 'type';
597
+ /** For kind='category': the category key. For kind='type': the NodeType. */
598
+ value: string;
599
+ label: string;
600
+ icon?: string | null;
601
+ fill?: string;
602
+ stroke?: string;
603
+ /**
604
+ * The resolved JSON Canvas node type for this option.
605
+ * Matches category.type (or 'text' if unset) for categories,
606
+ * or the NodeType itself for base types.
607
+ */
608
+ nodeType: NodeType;
609
+ }
191
610
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "system-canvas",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Interactive, zoomable SVG diagrams from JSON Canvas documents. Pure TypeScript core with types, themes, edge routing, and viewport math.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,8 +12,18 @@
12
12
  "import": "./dist/index.js"
13
13
  }
14
14
  },
15
- "files": ["dist"],
16
- "keywords": ["canvas", "diagram", "svg", "json-canvas", "interactive", "zoomable", "system-diagram"],
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "keywords": [
19
+ "canvas",
20
+ "diagram",
21
+ "svg",
22
+ "json-canvas",
23
+ "interactive",
24
+ "zoomable",
25
+ "system-diagram"
26
+ ],
17
27
  "scripts": {
18
28
  "build": "tsc",
19
29
  "typecheck": "tsc --noEmit",