@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.
- package/README.md +273 -0
- package/dist/components/Diagram.d.ts +40 -0
- package/dist/components/Diagram.d.ts.map +1 -0
- package/dist/components/Editor.d.ts +9 -0
- package/dist/components/Editor.d.ts.map +1 -0
- package/dist/components/Timeline.d.ts +15 -0
- package/dist/components/Timeline.d.ts.map +1 -0
- package/dist/core/Scene.d.ts +47 -0
- package/dist/core/Scene.d.ts.map +1 -0
- package/dist/core/colours.d.ts +16 -0
- package/dist/core/colours.d.ts.map +1 -0
- package/dist/core/schemas.d.ts +349 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/types/animation.d.ts +27 -0
- package/dist/core/types/animation.d.ts.map +1 -0
- package/dist/core/types/base.d.ts +26 -0
- package/dist/core/types/base.d.ts.map +1 -0
- package/dist/core/types/box.d.ts +9 -0
- package/dist/core/types/box.d.ts.map +1 -0
- package/dist/core/types/circle.d.ts +6 -0
- package/dist/core/types/circle.d.ts.map +1 -0
- package/dist/core/types/events.d.ts +17 -0
- package/dist/core/types/events.d.ts.map +1 -0
- package/dist/core/types/group.d.ts +20 -0
- package/dist/core/types/group.d.ts.map +1 -0
- package/dist/core/types/index.d.ts +12 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/label.d.ts +9 -0
- package/dist/core/types/label.d.ts.map +1 -0
- package/dist/core/types/line.d.ts +28 -0
- package/dist/core/types/line.d.ts.map +1 -0
- package/dist/core/types/path.d.ts +13 -0
- package/dist/core/types/path.d.ts.map +1 -0
- package/dist/core/types/scene.d.ts +17 -0
- package/dist/core/types/scene.d.ts.map +1 -0
- package/dist/core/types/table.d.ts +11 -0
- package/dist/core/types/table.d.ts.map +1 -0
- package/dist/editor/completions.d.ts +6 -0
- package/dist/editor/completions.d.ts.map +1 -0
- package/dist/editor/index.d.ts +3 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/theme.d.ts +3 -0
- package/dist/editor/theme.d.ts.map +1 -0
- package/dist/embed.d.ts +43 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/engine/anchor.d.ts +35 -0
- package/dist/engine/anchor.d.ts.map +1 -0
- package/dist/engine/bezier.d.ts +101 -0
- package/dist/engine/bezier.d.ts.map +1 -0
- package/dist/engine/easing.d.ts +4 -0
- package/dist/engine/easing.d.ts.map +1 -0
- package/dist/engine/evaluator.d.ts +12 -0
- package/dist/engine/evaluator.d.ts.map +1 -0
- package/dist/engine/interpolate.d.ts +4 -0
- package/dist/engine/interpolate.d.ts.map +1 -0
- package/dist/engine/layout.d.ts +7 -0
- package/dist/engine/layout.d.ts.map +1 -0
- package/dist/engine/timeline.d.ts +3 -0
- package/dist/engine/timeline.d.ts.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/parser/parser.d.ts +43 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/shorthands.d.ts +7 -0
- package/dist/parser/shorthands.d.ts.map +1 -0
- package/dist/renderer/EdgeGeometry.d.ts +22 -0
- package/dist/renderer/EdgeGeometry.d.ts.map +1 -0
- package/dist/renderer/renderObject.d.ts +6 -0
- package/dist/renderer/renderObject.d.ts.map +1 -0
- package/dist/renderer/svg/BoxRenderer.d.ts +6 -0
- package/dist/renderer/svg/BoxRenderer.d.ts.map +1 -0
- package/dist/renderer/svg/CircleRenderer.d.ts +6 -0
- package/dist/renderer/svg/CircleRenderer.d.ts.map +1 -0
- package/dist/renderer/svg/GroupRenderer.d.ts +10 -0
- package/dist/renderer/svg/GroupRenderer.d.ts.map +1 -0
- package/dist/renderer/svg/LabelRenderer.d.ts +6 -0
- package/dist/renderer/svg/LabelRenderer.d.ts.map +1 -0
- package/dist/renderer/svg/LineRenderer.d.ts +11 -0
- package/dist/renderer/svg/LineRenderer.d.ts.map +1 -0
- package/dist/renderer/svg/PathRenderer.d.ts +7 -0
- package/dist/renderer/svg/PathRenderer.d.ts.map +1 -0
- package/dist/renderer/svg/SvgCanvas.d.ts +9 -0
- package/dist/renderer/svg/SvgCanvas.d.ts.map +1 -0
- package/dist/renderer/svg/TableRenderer.d.ts +6 -0
- package/dist/renderer/svg/TableRenderer.d.ts.map +1 -0
- package/dist/renderer/svg/constants.d.ts +2 -0
- package/dist/renderer/svg/constants.d.ts.map +1 -0
- package/dist/starch-embed.iife.js +100 -0
- package/dist/starch.js +5973 -0
- 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"}
|