@bitsnbobs/starch 0.0.1-alpha.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.
Files changed (90) hide show
  1. package/README.md +273 -0
  2. package/dist/components/Diagram.d.ts +40 -0
  3. package/dist/components/Diagram.d.ts.map +1 -0
  4. package/dist/components/Editor.d.ts +9 -0
  5. package/dist/components/Editor.d.ts.map +1 -0
  6. package/dist/components/Timeline.d.ts +15 -0
  7. package/dist/components/Timeline.d.ts.map +1 -0
  8. package/dist/core/Scene.d.ts +47 -0
  9. package/dist/core/Scene.d.ts.map +1 -0
  10. package/dist/core/colours.d.ts +16 -0
  11. package/dist/core/colours.d.ts.map +1 -0
  12. package/dist/core/schemas.d.ts +349 -0
  13. package/dist/core/schemas.d.ts.map +1 -0
  14. package/dist/core/types/animation.d.ts +27 -0
  15. package/dist/core/types/animation.d.ts.map +1 -0
  16. package/dist/core/types/base.d.ts +26 -0
  17. package/dist/core/types/base.d.ts.map +1 -0
  18. package/dist/core/types/box.d.ts +9 -0
  19. package/dist/core/types/box.d.ts.map +1 -0
  20. package/dist/core/types/circle.d.ts +6 -0
  21. package/dist/core/types/circle.d.ts.map +1 -0
  22. package/dist/core/types/events.d.ts +17 -0
  23. package/dist/core/types/events.d.ts.map +1 -0
  24. package/dist/core/types/group.d.ts +20 -0
  25. package/dist/core/types/group.d.ts.map +1 -0
  26. package/dist/core/types/index.d.ts +12 -0
  27. package/dist/core/types/index.d.ts.map +1 -0
  28. package/dist/core/types/label.d.ts +9 -0
  29. package/dist/core/types/label.d.ts.map +1 -0
  30. package/dist/core/types/line.d.ts +28 -0
  31. package/dist/core/types/line.d.ts.map +1 -0
  32. package/dist/core/types/path.d.ts +13 -0
  33. package/dist/core/types/path.d.ts.map +1 -0
  34. package/dist/core/types/scene.d.ts +17 -0
  35. package/dist/core/types/scene.d.ts.map +1 -0
  36. package/dist/core/types/table.d.ts +11 -0
  37. package/dist/core/types/table.d.ts.map +1 -0
  38. package/dist/editor/completions.d.ts +6 -0
  39. package/dist/editor/completions.d.ts.map +1 -0
  40. package/dist/editor/index.d.ts +3 -0
  41. package/dist/editor/index.d.ts.map +1 -0
  42. package/dist/editor/theme.d.ts +3 -0
  43. package/dist/editor/theme.d.ts.map +1 -0
  44. package/dist/embed.d.ts +43 -0
  45. package/dist/embed.d.ts.map +1 -0
  46. package/dist/engine/anchor.d.ts +35 -0
  47. package/dist/engine/anchor.d.ts.map +1 -0
  48. package/dist/engine/bezier.d.ts +101 -0
  49. package/dist/engine/bezier.d.ts.map +1 -0
  50. package/dist/engine/easing.d.ts +4 -0
  51. package/dist/engine/easing.d.ts.map +1 -0
  52. package/dist/engine/evaluator.d.ts +12 -0
  53. package/dist/engine/evaluator.d.ts.map +1 -0
  54. package/dist/engine/interpolate.d.ts +4 -0
  55. package/dist/engine/interpolate.d.ts.map +1 -0
  56. package/dist/engine/layout.d.ts +7 -0
  57. package/dist/engine/layout.d.ts.map +1 -0
  58. package/dist/engine/timeline.d.ts +3 -0
  59. package/dist/engine/timeline.d.ts.map +1 -0
  60. package/dist/index.d.ts +26 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/parser/parser.d.ts +43 -0
  63. package/dist/parser/parser.d.ts.map +1 -0
  64. package/dist/parser/shorthands.d.ts +7 -0
  65. package/dist/parser/shorthands.d.ts.map +1 -0
  66. package/dist/renderer/EdgeGeometry.d.ts +22 -0
  67. package/dist/renderer/EdgeGeometry.d.ts.map +1 -0
  68. package/dist/renderer/renderObject.d.ts +6 -0
  69. package/dist/renderer/renderObject.d.ts.map +1 -0
  70. package/dist/renderer/svg/BoxRenderer.d.ts +6 -0
  71. package/dist/renderer/svg/BoxRenderer.d.ts.map +1 -0
  72. package/dist/renderer/svg/CircleRenderer.d.ts +6 -0
  73. package/dist/renderer/svg/CircleRenderer.d.ts.map +1 -0
  74. package/dist/renderer/svg/GroupRenderer.d.ts +10 -0
  75. package/dist/renderer/svg/GroupRenderer.d.ts.map +1 -0
  76. package/dist/renderer/svg/LabelRenderer.d.ts +6 -0
  77. package/dist/renderer/svg/LabelRenderer.d.ts.map +1 -0
  78. package/dist/renderer/svg/LineRenderer.d.ts +11 -0
  79. package/dist/renderer/svg/LineRenderer.d.ts.map +1 -0
  80. package/dist/renderer/svg/PathRenderer.d.ts +7 -0
  81. package/dist/renderer/svg/PathRenderer.d.ts.map +1 -0
  82. package/dist/renderer/svg/SvgCanvas.d.ts +9 -0
  83. package/dist/renderer/svg/SvgCanvas.d.ts.map +1 -0
  84. package/dist/renderer/svg/TableRenderer.d.ts +6 -0
  85. package/dist/renderer/svg/TableRenderer.d.ts.map +1 -0
  86. package/dist/renderer/svg/constants.d.ts +2 -0
  87. package/dist/renderer/svg/constants.d.ts.map +1 -0
  88. package/dist/starch-embed.iife.js +100 -0
  89. package/dist/starch.js +5973 -0
  90. package/package.json +51 -0
package/README.md ADDED
@@ -0,0 +1,273 @@
1
+ # starch
2
+
3
+ Animated diagram library for documenting application internals. Define objects and keyframe animations with a concise DSL or programmatic API, and render interactive SVG diagrams in React apps or any webpage.
4
+
5
+ > **Note:** This entire project — code, architecture, and documentation — was built agentically using [Claude Code](https://claude.com/claude-code). It is under active development as an experiment in agentic software engineering. The library is at version 0.0.1 and the API may change.
6
+
7
+ ## Try It — Interactive Playground
8
+
9
+ The fastest way to start is the built-in playground. It gives you a live editor alongside the rendered diagram with playback controls, so you can experiment with the DSL in real time.
10
+
11
+ ```bash
12
+ git clone https://github.com/zummed/starch.git
13
+ cd starch
14
+ npm install
15
+ npm run dev
16
+ ```
17
+
18
+ This opens a split-pane view with a CodeMirror editor on the left, the animated SVG canvas on the right, and a timeline with play/pause/seek/speed controls at the bottom. Several built-in examples (state machine, data pipeline, container layout, path motion) are available from a dropdown to get started.
19
+
20
+ The `Editor` and `Timeline` components used in the playground are exported from the library, so you can build your own editor experiences with them.
21
+
22
+ ## Install
23
+
24
+ ```bash
25
+ npm install starch
26
+ ```
27
+
28
+ Requires React 18 or 19 as a peer dependency.
29
+
30
+ ## Usage
31
+
32
+ ### React
33
+
34
+ ```tsx
35
+ import { Diagram } from 'starch';
36
+
37
+ const dsl = `{
38
+ objects: [
39
+ { box: "server", at: [200, 100], size: [120, 50], colour: "#34d399", text: "Server" },
40
+ { box: "client", at: [200, 250], size: [120, 50], colour: "#22d3ee", text: "Client" },
41
+ { line: "req", from: "client", to: "server", colour: "#fbbf24", label: "request" },
42
+ ],
43
+ animate: {
44
+ duration: 3,
45
+ keyframes: {
46
+ req: [[1.5, "progress", 1, "easeInOut"]],
47
+ server: [[1.5, "scale", 1.1], [2, "scale", 1, "easeOutBack"]],
48
+ }
49
+ }
50
+ }`;
51
+
52
+ function App() {
53
+ return <Diagram dsl={dsl} autoplay />;
54
+ }
55
+ ```
56
+
57
+ ### Any Webpage (No React Required)
58
+
59
+ Include the standalone embed bundle and use the `<starch-diagram>` custom element:
60
+
61
+ ```html
62
+ <script src="https://unpkg.com/starch/dist/starch-embed.iife.js"></script>
63
+
64
+ <starch-diagram autoplay speed="1">
65
+ {
66
+ objects: [
67
+ { box: "server", at: [200, 100], size: [120, 50], colour: "#34d399", text: "Server" },
68
+ { box: "client", at: [200, 250], size: [120, 50], colour: "#22d3ee", text: "Client" },
69
+ { line: "req", from: "client", to: "server", colour: "#fbbf24", label: "request" },
70
+ ],
71
+ animate: {
72
+ duration: 3,
73
+ keyframes: {
74
+ req: [[1.5, "progress", 1, "easeInOut"]],
75
+ server: [[1.5, "scale", 1.1], [2, "scale", 1, "easeOutBack"]],
76
+ }
77
+ }
78
+ }
79
+ </starch-diagram>
80
+ ```
81
+
82
+ The embed bundle is self-contained (~100KB gzip) with React bundled in.
83
+
84
+ ## DSL
85
+
86
+ Diagrams are defined in a JSON5-based format with these object types:
87
+
88
+ - **box** — rectangle with optional text, rounded corners, fill
89
+ - **circle** — circle with radius
90
+ - **label** — standalone text
91
+ - **table** — rows and columns
92
+ - **line** — connects two objects with optional label, bend, and dashing
93
+ - **path** — arbitrary point sequence with spline curves
94
+ - **group** — container with flex-like layout (direction, gap, padding)
95
+
96
+ ### Animation
97
+
98
+ Keyframes target any object property at a given time with an optional easing. Properties that the user explicitly sets on the object definition are automatically used as the starting value, so you only need to specify the destination:
99
+
100
+ ```
101
+ // A box defined with at: [100, 200]
102
+ keyframes: {
103
+ myBox: [
104
+ [2, "x", 300, "easeOutBack"], // slides from x=100 (the defined value) to 300
105
+ ]
106
+ }
107
+ ```
108
+
109
+ Supported easings: `linear`, `easeIn`, `easeOut`, `easeInOut`, `easeInCubic`, `easeOutCubic`, `easeInOutCubic`, `easeOutBack`, `easeInBack`, `bounce`, `elastic`, `spring`, `snap`, `step`.
110
+
111
+ Chapters define named time markers for navigation:
112
+
113
+ ```
114
+ chapters: [
115
+ [0, "intro", "Introduction"],
116
+ [3, "demo", "Live Demo"],
117
+ ]
118
+ ```
119
+
120
+ ## API
121
+
122
+ ### `<Diagram>` Component
123
+
124
+ ```tsx
125
+ <Diagram
126
+ dsl={string} // DSL string
127
+ scene={Scene} // or a programmatic Scene instance
128
+ autoplay={boolean}
129
+ speed={number}
130
+ debug={boolean}
131
+ onEvent={(e) => {}} // chapter enter/exit, animation end/loop
132
+ />
133
+ ```
134
+
135
+ Accepts a `ref` exposing `DiagramHandle`:
136
+
137
+ ```tsx
138
+ const ref = useRef<DiagramHandle>(null);
139
+
140
+ ref.current.play();
141
+ ref.current.pause();
142
+ ref.current.seek(2.5);
143
+ ref.current.nextChapter();
144
+ ref.current.prevChapter();
145
+ ref.current.goToChapter('step-2');
146
+ ```
147
+
148
+ ### `useDiagram` Hook
149
+
150
+ For custom layouts and full state access:
151
+
152
+ ```tsx
153
+ const diagram = useDiagram({ dsl, autoplay: true });
154
+
155
+ // State
156
+ diagram.time // current time
157
+ diagram.duration // total duration
158
+ diagram.playing // playback state
159
+ diagram.speed // playback speed
160
+ diagram.chapters // chapter definitions
161
+ diagram.activeChapter // currently active chapter
162
+
163
+ // Methods
164
+ diagram.play()
165
+ diagram.pause()
166
+ diagram.seek(time)
167
+ diagram.nextChapter()
168
+ diagram.prevChapter()
169
+ diagram.goToChapter(id)
170
+
171
+ // Rendering data
172
+ diagram.objects // parsed scene objects
173
+ diagram.animatedProps // current animated properties per object
174
+ diagram.renderOrder // depth-sorted render order
175
+ ```
176
+
177
+ ### `Scene` (Programmatic API)
178
+
179
+ ```tsx
180
+ import { Scene, Diagram } from 'starch';
181
+
182
+ const scene = new Scene();
183
+ scene.box('server', { x: 200, y: 100, w: 120, h: 50, text: 'Server', stroke: '#34d399' });
184
+ scene.line('conn', { from: 'client', to: 'server', stroke: '#fbbf24' });
185
+
186
+ const anim = scene.animate({ duration: 5 });
187
+ anim.at(0, 'conn', 'progress', 0);
188
+ anim.at(2, 'conn', 'progress', 1, 'easeInOut');
189
+ anim.chapter(0, 'start', 'Start');
190
+
191
+ <Diagram scene={scene} autoplay />
192
+ ```
193
+
194
+ ### `<starch-diagram>` Custom Element
195
+
196
+ Attributes: `autoplay`, `speed`, `debug`, `src`
197
+
198
+ ```html
199
+ <!-- Inline DSL -->
200
+ <starch-diagram autoplay>
201
+ ...DSL here...
202
+ </starch-diagram>
203
+
204
+ <!-- External DSL file -->
205
+ <starch-diagram src="/diagrams/my-diagram.starch" autoplay></starch-diagram>
206
+ ```
207
+
208
+ JavaScript interaction:
209
+
210
+ ```js
211
+ const el = document.querySelector('starch-diagram');
212
+
213
+ // Control
214
+ el.play();
215
+ el.pause();
216
+ el.seek(2.5);
217
+ el.goToChapter('step-2');
218
+
219
+ // Read state
220
+ el.time; // current time
221
+ el.duration; // total duration
222
+ el.playing; // boolean
223
+ el.chapters; // array
224
+
225
+ // Events
226
+ el.addEventListener('starch:chapterenter', (e) => {
227
+ console.log('Entered chapter:', e.detail.chapter);
228
+ });
229
+ el.addEventListener('starch:chapterexit', (e) => { ... });
230
+ el.addEventListener('starch:event', (e) => { ... });
231
+ ```
232
+
233
+ ## MkDocs Integration
234
+
235
+ For MkDocs sites, starch can render fenced code blocks as live diagrams.
236
+
237
+ 1. Add the scripts to your `mkdocs.yml`:
238
+
239
+ ```yaml
240
+ extra_javascript:
241
+ - https://unpkg.com/starch/dist/starch-embed.iife.js
242
+ - js/starch-init.js
243
+ ```
244
+
245
+ 2. Copy `docs/mkdocs-snippet.js` to your MkDocs `docs/js/starch-init.js`.
246
+
247
+ 3. Use fenced code blocks in your markdown:
248
+
249
+ ````markdown
250
+ ```starch
251
+ {
252
+ objects: [
253
+ { box: "api", at: [200, 100], size: [100, 50], colour: "#34d399", text: "API" }
254
+ ],
255
+ animate: { duration: 3 }
256
+ }
257
+ ```
258
+ ````
259
+
260
+ The snippet finds `language-starch` code blocks and replaces them with live `<starch-diagram>` elements.
261
+
262
+ ## Development
263
+
264
+ ```bash
265
+ npm run dev # Start dev server with playground
266
+ npm run build # Build React library
267
+ npm run build:embed # Build standalone embed
268
+ npm run build:all # Build both
269
+ ```
270
+
271
+ ## License
272
+
273
+ ISC
@@ -0,0 +1,40 @@
1
+ import { SceneObject, DiagramHandle, Chapter, StarchEvent } from '../core/types';
2
+ import { Scene } from '../core/Scene';
3
+ export interface DiagramProps {
4
+ scene?: Scene;
5
+ dsl?: string;
6
+ autoplay?: boolean;
7
+ speed?: number;
8
+ debug?: boolean;
9
+ onChapterEnter?: (event: StarchEvent) => void;
10
+ onChapterExit?: (event: StarchEvent) => void;
11
+ onEvent?: (event: StarchEvent) => void;
12
+ }
13
+ /**
14
+ * Hook version of Diagram for full layout control.
15
+ */
16
+ export declare function useDiagram(props: DiagramProps): {
17
+ time: number;
18
+ duration: number;
19
+ playing: boolean;
20
+ speed: number;
21
+ chapters: Chapter[];
22
+ activeChapter: Chapter | undefined;
23
+ objects: Record<string, SceneObject<import('..').ObjectType>>;
24
+ animatedProps: Record<string, Record<string, unknown>>;
25
+ renderOrder: [string, SceneObject<import('..').ObjectType>][];
26
+ pct: number;
27
+ seek: (t: number) => void;
28
+ setPlaying: import('react').Dispatch<import('react').SetStateAction<boolean>>;
29
+ setSpeed: import('react').Dispatch<import('react').SetStateAction<number>>;
30
+ play: () => void;
31
+ pause: () => void;
32
+ nextChapter: () => void;
33
+ prevChapter: () => void;
34
+ goToChapter: (id: string) => void;
35
+ };
36
+ /**
37
+ * Self-contained Diagram component with SVG canvas.
38
+ */
39
+ export declare const Diagram: import('react').ForwardRefExoticComponent<DiagramProps & import('react').RefAttributes<DiagramHandle>>;
40
+ //# sourceMappingURL=Diagram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Diagram.d.ts","sourceRoot":"","sources":["../../src/components/Diagram.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAY,WAAW,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAOtC,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACxC;AAiOD;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY;;;;;;;;;;;cAhItC,MAAM;;;;;;;sBA0BL,MAAM;EAwGd;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,wGA2BlB,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface EditorProps {
2
+ value: string;
3
+ onChange: (value: string) => void;
4
+ parseError?: string | null;
5
+ width?: number;
6
+ }
7
+ export declare function Editor({ value, onChange, parseError, width }: EditorProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=Editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../src/components/Editor.tsx"],"names":[],"mappings":"AAYA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAW,EAAE,EAAE,WAAW,2CAkG/E"}
@@ -0,0 +1,15 @@
1
+ import { Chapter } from '../core/types';
2
+ interface TimelineProps {
3
+ time: number;
4
+ duration: number;
5
+ playing: boolean;
6
+ speed: number;
7
+ chapters?: Chapter[];
8
+ onSeek: (time: number) => void;
9
+ onTogglePlay: () => void;
10
+ onRestart: () => void;
11
+ onSpeedChange: (speed: number) => void;
12
+ }
13
+ export declare function Timeline({ time, duration, playing, speed, chapters, onSeek, onTogglePlay, onRestart, onSpeedChange, }: TimelineProps): import("react/jsx-runtime").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=Timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timeline.d.ts","sourceRoot":"","sources":["../../src/components/Timeline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,KAAK,EACL,QAAa,EACb,MAAM,EACN,YAAY,EACZ,SAAS,EACT,aAAa,GACd,EAAE,aAAa,2CA4Ff"}
@@ -0,0 +1,47 @@
1
+ import { SceneObject, AnimConfig, BoxProps, CircleProps, LabelProps, TableProps, LineProps, PathProps, GroupProps, EasingName, Chapter, StarchEvent, StarchEventType, StarchEventHandler } from './types';
2
+ declare class AnimationBuilder {
3
+ private config;
4
+ constructor(config: AnimConfig);
5
+ at(time: number, target: string, prop: string, value: number | string | boolean, easing?: EasingName): this;
6
+ chapter(time: number, id: string, title: string, description?: string): this;
7
+ }
8
+ export declare class Scene {
9
+ private _objects;
10
+ private _animConfig;
11
+ private _listeners;
12
+ box(id: string, props: Partial<BoxProps> & {
13
+ w?: number;
14
+ h?: number;
15
+ }): this;
16
+ circle(id: string, props: Partial<CircleProps> & {
17
+ r?: number;
18
+ }): this;
19
+ label(id: string, props: Partial<LabelProps> & {
20
+ text: string;
21
+ }): this;
22
+ table(id: string, props: Partial<TableProps> & {
23
+ cols: string[];
24
+ }): this;
25
+ line(id: string, props: Partial<LineProps>): this;
26
+ path(id: string, props: Partial<PathProps> & {
27
+ points: Array<{
28
+ x: number;
29
+ y: number;
30
+ }>;
31
+ }): this;
32
+ group(id: string, props: Partial<GroupProps> & {
33
+ children?: string[];
34
+ }): this;
35
+ animate(opts: {
36
+ duration: number;
37
+ loop?: boolean;
38
+ }): AnimationBuilder;
39
+ on(type: StarchEventType, handler: StarchEventHandler): this;
40
+ off(type: StarchEventType, handler: StarchEventHandler): this;
41
+ emit(event: StarchEvent): void;
42
+ getObjects(): Record<string, SceneObject>;
43
+ getAnimConfig(): AnimConfig;
44
+ getChapters(): Chapter[];
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=Scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../src/core/Scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,OAAO,EACP,WAAW,EACX,eAAe,EACf,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAIjB,cAAM,gBAAgB;IACpB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAI9B,EAAE,CACA,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAChC,MAAM,CAAC,EAAE,UAAU,GAClB,IAAI;IAWP,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;CAI7E;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,WAAW,CAKjB;IACF,OAAO,CAAC,UAAU,CAA4D;IAI9E,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAO5E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG;QAAE,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOtE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOtE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAOxE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IAOjD,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG;QAAE,MAAM,EAAE,KAAK,CAAC;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAAG,IAAI;IAO/F,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAkB7E,OAAO,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,gBAAgB;IAQrE,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAQ5D,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAK7D,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAM9B,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IAKzC,aAAa,IAAI,UAAU;IAI3B,WAAW,IAAI,OAAO,EAAE;CAGzB"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Resolve a colour string (named colour or #rrggbb) to hex.
3
+ */
4
+ export declare function resolveColour(input: string): string;
5
+ /**
6
+ * Derive a dark-themed fill colour from a stroke colour.
7
+ * Produces a near-black fill with a subtle hue tint.
8
+ */
9
+ export declare function deriveFill(hex: string): string;
10
+ /**
11
+ * Resolve the `colour` shortcut into fill and stroke values.
12
+ * Returns { fill, stroke } where colour is resolved to hex,
13
+ * fill is derived (duller shade), and explicit fill/stroke override.
14
+ */
15
+ export declare function resolveColourShortcut(props: Record<string, unknown>): Record<string, unknown>;
16
+ //# sourceMappingURL=colours.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colours.d.ts","sourceRoot":"","sources":["../../src/core/colours.ts"],"names":[],"mappings":"AA6FA;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzB"}