sketchmark 1.1.5 → 1.2.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 +148 -77
- package/dist/animation/index.d.ts +2 -0
- package/dist/animation/index.d.ts.map +1 -1
- package/dist/ast/types.d.ts +14 -1
- package/dist/ast/types.d.ts.map +1 -1
- package/dist/index.cjs +279 -95
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +279 -95
- package/dist/index.js.map +1 -1
- package/dist/layout/entity-rect.d.ts +2 -0
- package/dist/layout/entity-rect.d.ts.map +1 -1
- package/dist/layout/index.d.ts +8 -0
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/parser/index.d.ts +2 -1
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/tokenizer.d.ts.map +1 -1
- package/dist/plugins.d.ts +12 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/render.d.ts +2 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/renderer/shared.d.ts +1 -1
- package/dist/renderer/shared.d.ts.map +1 -1
- package/dist/renderer/svg/index.d.ts.map +1 -1
- package/dist/scene/index.d.ts +13 -1
- package/dist/scene/index.d.ts.map +1 -1
- package/dist/sketchmark.iife.js +279 -95
- package/dist/ui/canvas.d.ts +2 -0
- package/dist/ui/canvas.d.ts.map +1 -1
- package/dist/ui/embed.d.ts +2 -0
- package/dist/ui/embed.d.ts.map +1 -1
- package/package.json +18 -1
package/README.md
CHANGED
|
@@ -68,6 +68,45 @@ const instance = render({
|
|
|
68
68
|
});
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
+
### Plugins
|
|
72
|
+
|
|
73
|
+
Sketchmark supports lightweight parse plugins. A plugin can preprocess the DSL source before parsing, transform the parsed AST after parsing, or do both. This keeps domain features like official packages such as `@sketchmark/plugin-notation` outside the core bundle.
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
import { render } from 'sketchmark';
|
|
77
|
+
import { notation } from '@sketchmark/plugin-notation';
|
|
78
|
+
|
|
79
|
+
render({
|
|
80
|
+
container: document.getElementById('diagram'),
|
|
81
|
+
dsl: `
|
|
82
|
+
diagram
|
|
83
|
+
box eq label="$x^2 + y^2 = z^2$"
|
|
84
|
+
step narrate "$\\theta = 45^\\circ$"
|
|
85
|
+
end
|
|
86
|
+
`.trim(),
|
|
87
|
+
plugins: [notation()],
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The first `@sketchmark/plugin-notation` release focuses on lightweight TeX-style math to Unicode conversion for labels and `step narrate`, which keeps the core renderer small while still making math-heavy diagrams nicer to author.
|
|
92
|
+
|
|
93
|
+
Another official package, `@sketchmark/plugin-geometry`, follows the same model by compiling `geo.*` commands into ordinary `circle`, `path`, and `text` nodes for textbook-style diagrams without adding geometry-specific renderer logic to the core bundle.
|
|
94
|
+
|
|
95
|
+
`@sketchmark/plugin-anchors` keeps edge syntax readable by rewriting endpoint refs like `a@right --> b@left` into ordinary edges with anchor metadata, which lets named attachment points stay outside the core parser surface.
|
|
96
|
+
|
|
97
|
+
`@sketchmark/plugin-annotations` builds on that idea for geometry-style marks such as angle arcs, right-angle squares, equal ticks, midpoint marks, and dimension lines, again by compiling into ordinary Sketchmark nodes.
|
|
98
|
+
|
|
99
|
+
`@sketchmark/plugin-wireframe` applies the same pattern to primitive UI mockups, compiling `wf.screen`, `wf.panel`, `wf.text`, `wf.media`, `wf.control`, and `wf.divider` into regular Sketchmark groups and nodes so wireframe support stays outside the core bundle too.
|
|
100
|
+
|
|
101
|
+
`@sketchmark/plugin-circuit` does the same for draw-focused circuit notation, compiling `ckt.comp`, `ckt.port`, `ckt.junction`, and `ckt.wire` into regular groups plus `path`, `circle`, and `text` nodes.
|
|
102
|
+
|
|
103
|
+
`@sketchmark/plugin-chem-molecule` extends the same pattern to lightweight molecule diagrams, compiling `chem.atom`, `chem.bond`, `chem.ring`, and `chem.label` into ordinary groups plus `path` and `text` nodes.
|
|
104
|
+
|
|
105
|
+
`@sketchmark/plugin-graph` applies the same approach to coordinate-plane graphing, compiling `graph.axes`, `graph.plot`, `graph.point`, `graph.line`, `graph.arrow`, `graph.region`, `graph.tangent`, and `graph.area` into ordinary nodes so sampled math graphs stay outside the core bundle too.
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
71
110
|
### Reusable UI Widgets
|
|
72
111
|
|
|
73
112
|
```javascript
|
|
@@ -84,11 +123,11 @@ end
|
|
|
84
123
|
`.trim(),
|
|
85
124
|
});
|
|
86
125
|
|
|
87
|
-
const canvas = new SketchmarkCanvas({
|
|
88
|
-
container: document.getElementById('viewport'),
|
|
89
|
-
showCaption: false,
|
|
90
|
-
tts: true,
|
|
91
|
-
});
|
|
126
|
+
const canvas = new SketchmarkCanvas({
|
|
127
|
+
container: document.getElementById('viewport'),
|
|
128
|
+
showCaption: false,
|
|
129
|
+
tts: true,
|
|
130
|
+
});
|
|
92
131
|
|
|
93
132
|
canvas.bindEditor(editor);
|
|
94
133
|
```
|
|
@@ -96,21 +135,21 @@ canvas.bindEditor(editor);
|
|
|
96
135
|
```javascript
|
|
97
136
|
import { SketchmarkEmbed } from 'sketchmark';
|
|
98
137
|
|
|
99
|
-
const embed = new SketchmarkEmbed({
|
|
100
|
-
container: document.getElementById('article-embed'),
|
|
101
|
-
dsl,
|
|
102
|
-
width: 960,
|
|
103
|
-
height: 540,
|
|
104
|
-
playStepDelay: 700,
|
|
105
|
-
showCaption: false,
|
|
106
|
-
tts: true,
|
|
107
|
-
fitPadding: 24,
|
|
108
|
-
zoomMin: 0.08,
|
|
109
|
-
zoomMax: 4,
|
|
110
|
-
});
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Use `SketchmarkCanvas` for the full playground-style surface, and `SketchmarkEmbed` for fixed-size embeds that clip overflow, auto-fit large diagrams, and expose built-in zoom, playback, caption, and TTS controls.
|
|
138
|
+
const embed = new SketchmarkEmbed({
|
|
139
|
+
container: document.getElementById('article-embed'),
|
|
140
|
+
dsl,
|
|
141
|
+
width: 960,
|
|
142
|
+
height: 540,
|
|
143
|
+
playStepDelay: 700,
|
|
144
|
+
showCaption: false,
|
|
145
|
+
tts: true,
|
|
146
|
+
fitPadding: 24,
|
|
147
|
+
zoomMin: 0.08,
|
|
148
|
+
zoomMax: 4,
|
|
149
|
+
});
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Use `SketchmarkCanvas` for the full playground-style surface, and `SketchmarkEmbed` for fixed-size embeds that clip overflow, auto-fit large diagrams, and expose built-in zoom, playback, caption, and TTS controls.
|
|
114
153
|
|
|
115
154
|
---
|
|
116
155
|
|
|
@@ -263,7 +302,7 @@ Every diagram follows this structure:
|
|
|
263
302
|
```
|
|
264
303
|
diagram
|
|
265
304
|
[title label="My Title"]
|
|
266
|
-
[layout row|column|grid]
|
|
305
|
+
[layout row|column|grid|absolute]
|
|
267
306
|
[config key=value ...]
|
|
268
307
|
[theme name fill="..." stroke="..." color="..."]
|
|
269
308
|
|
|
@@ -273,6 +312,17 @@ diagram
|
|
|
273
312
|
end
|
|
274
313
|
```
|
|
275
314
|
|
|
315
|
+
When `layout=absolute`, authored elements use `x`/`y` coordinates instead of flow layout:
|
|
316
|
+
|
|
317
|
+
```
|
|
318
|
+
diagram
|
|
319
|
+
layout absolute
|
|
320
|
+
box start x=40 y=60 label="Start"
|
|
321
|
+
box finish x=240 y=140 label="Finish"
|
|
322
|
+
start --> finish
|
|
323
|
+
end
|
|
324
|
+
```
|
|
325
|
+
|
|
276
326
|
- Lines starting with `#` or `//` are comments.
|
|
277
327
|
- All key-value attributes use the `key=value` or `key="quoted value"` syntax.
|
|
278
328
|
- The DSL is **whitespace-sensitive** — do not indent lines.
|
|
@@ -330,6 +380,8 @@ note myNote label="Remember this!"
|
|
|
330
380
|
| `label` | string | Display text (required) | `label="Hello World"` |
|
|
331
381
|
| `width` | number | Override auto-width (px) | `width=140` |
|
|
332
382
|
| `height` | number | Override auto-height (px) | `height=55` |
|
|
383
|
+
| `x` | number | Authored X position when parent/root uses `layout=absolute` | `x=80` |
|
|
384
|
+
| `y` | number | Authored Y position when parent/root uses `layout=absolute` | `y=40` |
|
|
333
385
|
| `theme` | string | Named theme preset | `theme=primary` |
|
|
334
386
|
| `fill` | CSS color | Background fill color | `fill="#e8f4ff"` |
|
|
335
387
|
| `stroke` | CSS color | Border/outline color | `stroke="#0044cc"` |
|
|
@@ -349,8 +401,8 @@ note myNote label="Remember this!"
|
|
|
349
401
|
| `name` | string | Iconify icon name (for `icon`) | `name="mdi:cog"` |
|
|
350
402
|
| `value` | string | SVG path data (for `path`) | `value="M 0 0 L 50 0"` |
|
|
351
403
|
| `deg` | number | Static rotation (degrees) | `deg=45` |
|
|
352
|
-
| `dx` | number | Static X translation (px) | `dx=20` |
|
|
353
|
-
| `dy` | number | Static Y translation (px) | `dy=-10` |
|
|
404
|
+
| `dx` | number | Static visual X translation after layout (px) | `dx=20` |
|
|
405
|
+
| `dy` | number | Static visual Y translation after layout (px) | `dy=-10` |
|
|
354
406
|
| `factor` | number | Static scale factor | `factor=1.2` |
|
|
355
407
|
|
|
356
408
|
---
|
|
@@ -420,10 +472,10 @@ group outer label="Outer Group" layout=column items=[a,b,inner]
|
|
|
420
472
|
General form:
|
|
421
473
|
|
|
422
474
|
```
|
|
423
|
-
group <id> [label="..."] [layout=row|column|grid] [gap=N] [padding=N]
|
|
475
|
+
group <id> [label="..."] [layout=row|column|grid|absolute] [gap=N] [padding=N]
|
|
424
476
|
[columns=N] [align=start|center|end]
|
|
425
477
|
[justify=start|center|end|space-between|space-around]
|
|
426
|
-
[theme=...] [fill="..."] [stroke="..."] [width=N] [height=N]
|
|
478
|
+
[theme=...] [fill="..."] [stroke="..."] [x=N] [y=N] [width=N] [height=N]
|
|
427
479
|
[items=[id1,id2,...]]
|
|
428
480
|
```
|
|
429
481
|
|
|
@@ -437,12 +489,14 @@ group <id> [label="..."] [layout=row|column|grid] [gap=N] [padding=N]
|
|
|
437
489
|
| Property | Type | Description |
|
|
438
490
|
|----------|------|-------------|
|
|
439
491
|
| `label` | string | Group title (shown at top) |
|
|
440
|
-
| `layout` | row / column / grid | Child arrangement direction |
|
|
492
|
+
| `layout` | row / column / grid / absolute | Child arrangement direction |
|
|
441
493
|
| `gap` | number | Space between children (px) |
|
|
442
494
|
| `padding` | number | Inner padding (px) |
|
|
443
495
|
| `columns` | number | Column count (for `layout=grid`) |
|
|
444
496
|
| `align` | start/center/end | Cross-axis alignment (align-items) |
|
|
445
497
|
| `justify` | start/center/end/space-between/space-around | Main-axis alignment |
|
|
498
|
+
| `x` | number | Authored X position when parent/root uses `layout=absolute` |
|
|
499
|
+
| `y` | number | Authored Y position when parent/root uses `layout=absolute` |
|
|
446
500
|
| `width` | number | Minimum width override |
|
|
447
501
|
| `height` | number | Minimum height override |
|
|
448
502
|
| `theme` | string | Named theme preset |
|
|
@@ -450,6 +504,8 @@ group <id> [label="..."] [layout=row|column|grid] [gap=N] [padding=N]
|
|
|
450
504
|
| `stroke` | CSS color | Border color |
|
|
451
505
|
| `stroke-width` | number | Border thickness |
|
|
452
506
|
|
|
507
|
+
For absolute groups, child `x`/`y` coordinates are relative to the group's inner content box.
|
|
508
|
+
|
|
453
509
|
#### `bare` keyword
|
|
454
510
|
|
|
455
511
|
`bare` is an alias for a group with no visible border or fill:
|
|
@@ -465,7 +521,7 @@ bare myContainer layout=row items=[a,b]
|
|
|
465
521
|
## Tables
|
|
466
522
|
|
|
467
523
|
```
|
|
468
|
-
table <id> [label="..."] [theme=...] [fill="..."] [stroke="..."]
|
|
524
|
+
table <id> [label="..."] [x=N] [y=N] [theme=...] [fill="..."] [stroke="..."]
|
|
469
525
|
{
|
|
470
526
|
header Col1 Col2 Col3
|
|
471
527
|
row "Value A" "Value B" "Value C"
|
|
@@ -478,13 +534,14 @@ table <id> [label="..."] [theme=...] [fill="..."] [stroke="..."]
|
|
|
478
534
|
- `"value"` must use a double-quoted string literal.
|
|
479
535
|
- Column widths auto-size to content.
|
|
480
536
|
- Tables support `fill`, `stroke`, `color`, `font-size`, `font`, `text-align`, `letter-spacing`, `theme`, `opacity` style props (same as nodes).
|
|
537
|
+
- Tables also accept `x` and `y` when the parent/root uses `layout=absolute`.
|
|
481
538
|
|
|
482
539
|
---
|
|
483
540
|
|
|
484
541
|
## Charts
|
|
485
542
|
|
|
486
543
|
```
|
|
487
|
-
<chart-type> <id> [label="Title"] [width=N] [height=N] [theme=...] [style props]
|
|
544
|
+
<chart-type> <id> [label="Title"] [x=N] [y=N] [width=N] [height=N] [theme=...] [style props]
|
|
488
545
|
data
|
|
489
546
|
[["Category", "Series1", "Series2"],
|
|
490
547
|
["Jan", 120, 80],
|
|
@@ -520,6 +577,8 @@ data
|
|
|
520
577
|
["Gamma", 27]]
|
|
521
578
|
```
|
|
522
579
|
|
|
580
|
+
Charts also accept `x` and `y` when the parent/root uses `layout=absolute`.
|
|
581
|
+
|
|
523
582
|
---
|
|
524
583
|
|
|
525
584
|
## Markdown Blocks
|
|
@@ -527,7 +586,7 @@ data
|
|
|
527
586
|
Renders inline rich text with headings and bold/italic:
|
|
528
587
|
|
|
529
588
|
```
|
|
530
|
-
markdown <id> [width=N] [height=N] [theme=...] [style props]
|
|
589
|
+
markdown <id> [x=N] [y=N] [width=N] [height=N] [theme=...] [style props]
|
|
531
590
|
"""
|
|
532
591
|
# Heading 1
|
|
533
592
|
## Heading 2
|
|
@@ -542,6 +601,7 @@ Another paragraph here.
|
|
|
542
601
|
- Triple-quote `"""` delimiters for the content block.
|
|
543
602
|
- Supported formatting: `# H1`, `## H2`, `### H3`, `**bold**`, `*italic*`, blank lines.
|
|
544
603
|
- Style props: `color`, `font`, `font-size`, `text-align`, `padding`, `fill`, `stroke`, `opacity`, `letter-spacing`.
|
|
604
|
+
- Markdown blocks also accept `x` and `y` when the parent/root uses `layout=absolute`.
|
|
545
605
|
|
|
546
606
|
---
|
|
547
607
|
|
|
@@ -665,11 +725,11 @@ step narrate "Plants need sunlight to make food"
|
|
|
665
725
|
step narrate "This is the most important step" pace=slow
|
|
666
726
|
```
|
|
667
727
|
|
|
668
|
-
- Caption is rendered as a fixed-position `<div>` on `document.body` (independent of diagram pan/zoom).
|
|
669
|
-
- Access via `anim.captionElement` to reparent it anywhere.
|
|
670
|
-
- `SketchmarkCanvas` and `SketchmarkEmbed` support `showCaption: false` to hide the caption bar UI.
|
|
671
|
-
- Both widget UIs also include a built-in caption toggle button by default.
|
|
672
|
-
- Supports built-in browser text-to-speech (see [TTS](#text-to-speech)).
|
|
728
|
+
- Caption is rendered as a fixed-position `<div>` on `document.body` (independent of diagram pan/zoom).
|
|
729
|
+
- Access via `anim.captionElement` to reparent it anywhere.
|
|
730
|
+
- `SketchmarkCanvas` and `SketchmarkEmbed` support `showCaption: false` to hide the caption bar UI.
|
|
731
|
+
- Both widget UIs also include a built-in caption toggle button by default.
|
|
732
|
+
- Supports built-in browser text-to-speech (see [TTS](#text-to-speech)).
|
|
673
733
|
|
|
674
734
|
### Annotations
|
|
675
735
|
|
|
@@ -805,14 +865,14 @@ anim.destroy() // remove caption, annotations, pointer from DOM
|
|
|
805
865
|
|
|
806
866
|
// Toggle TTS programmatically
|
|
807
867
|
anim.tts = true; // enable browser speech
|
|
808
|
-
anim.tts = false; // disable (stops current speech)
|
|
809
|
-
|
|
810
|
-
// Reparent the narration caption to a custom container
|
|
811
|
-
myDiv.appendChild(anim.captionElement);
|
|
812
|
-
|
|
813
|
-
// UI widgets can suppress the visible caption bar
|
|
814
|
-
const embed = new SketchmarkEmbed({ container, dsl, showCaption: false });
|
|
815
|
-
embed.setCaptionVisible(true);
|
|
868
|
+
anim.tts = false; // disable (stops current speech)
|
|
869
|
+
|
|
870
|
+
// Reparent the narration caption to a custom container
|
|
871
|
+
myDiv.appendChild(anim.captionElement);
|
|
872
|
+
|
|
873
|
+
// UI widgets can suppress the visible caption bar
|
|
874
|
+
const embed = new SketchmarkEmbed({ container, dsl, showCaption: false });
|
|
875
|
+
embed.setCaptionVisible(true);
|
|
816
876
|
|
|
817
877
|
// Event listener
|
|
818
878
|
const unsub = anim.on((event) => {
|
|
@@ -824,31 +884,31 @@ const unsub = anim.on((event) => {
|
|
|
824
884
|
unsub(); // unsubscribe
|
|
825
885
|
```
|
|
826
886
|
|
|
827
|
-
### Text-to-Speech
|
|
828
|
-
|
|
829
|
-
Enable browser-native speech synthesis for narrate steps. You can drive it from the diagram config or from the JS API. If both are provided, the JS option wins. `SketchmarkCanvas` and `SketchmarkEmbed` also include a built-in TTS toggle button by default.
|
|
830
|
-
|
|
831
|
-
```
|
|
832
|
-
# In DSL
|
|
833
|
-
config tts=on
|
|
834
|
-
```
|
|
835
|
-
|
|
836
|
-
```javascript
|
|
837
|
-
// Direct render option
|
|
838
|
-
const instance = render({ container, dsl, tts: true });
|
|
839
|
-
|
|
840
|
-
// Widget options
|
|
841
|
-
const canvas = new SketchmarkCanvas({ container, dsl, tts: true });
|
|
842
|
-
const embed = new SketchmarkEmbed({ container, dsl, tts: true });
|
|
843
|
-
|
|
844
|
-
// Or toggle at runtime
|
|
845
|
-
anim.tts = true;
|
|
846
|
-
canvas.setTtsEnabled(false);
|
|
847
|
-
embed.setTtsEnabled(true);
|
|
848
|
-
|
|
849
|
-
// Custom TTS (e.g. ElevenLabs) via event listener
|
|
850
|
-
anim.tts = false; // disable built-in
|
|
851
|
-
anim.on((e) => {
|
|
887
|
+
### Text-to-Speech
|
|
888
|
+
|
|
889
|
+
Enable browser-native speech synthesis for narrate steps. You can drive it from the diagram config or from the JS API. If both are provided, the JS option wins. `SketchmarkCanvas` and `SketchmarkEmbed` also include a built-in TTS toggle button by default.
|
|
890
|
+
|
|
891
|
+
```
|
|
892
|
+
# In DSL
|
|
893
|
+
config tts=on
|
|
894
|
+
```
|
|
895
|
+
|
|
896
|
+
```javascript
|
|
897
|
+
// Direct render option
|
|
898
|
+
const instance = render({ container, dsl, tts: true });
|
|
899
|
+
|
|
900
|
+
// Widget options
|
|
901
|
+
const canvas = new SketchmarkCanvas({ container, dsl, tts: true });
|
|
902
|
+
const embed = new SketchmarkEmbed({ container, dsl, tts: true });
|
|
903
|
+
|
|
904
|
+
// Or toggle at runtime
|
|
905
|
+
anim.tts = true;
|
|
906
|
+
canvas.setTtsEnabled(false);
|
|
907
|
+
embed.setTtsEnabled(true);
|
|
908
|
+
|
|
909
|
+
// Custom TTS (e.g. ElevenLabs) via event listener
|
|
910
|
+
anim.tts = false; // disable built-in
|
|
911
|
+
anim.on((e) => {
|
|
852
912
|
if (e.step?.kind === 'step' && e.step.action === 'narrate') {
|
|
853
913
|
myTTSService.speak(e.step.value);
|
|
854
914
|
}
|
|
@@ -976,6 +1036,8 @@ exportHTML(instance.svg, dslSource, { filename: 'diagram.html' });
|
|
|
976
1036
|
|
|
977
1037
|
### Nodes
|
|
978
1038
|
|
|
1039
|
+
Nodes can also opt into authored absolute `x`/`y` positioning when their parent or the root diagram uses `layout=absolute`.
|
|
1040
|
+
|
|
979
1041
|
| Feature | Supported | Notes |
|
|
980
1042
|
|---------|-----------|-------|
|
|
981
1043
|
| box | ✅ | Default shape |
|
|
@@ -1018,6 +1080,8 @@ exportHTML(instance.svg, dslSource, { filename: 'diagram.html' });
|
|
|
1018
1080
|
|
|
1019
1081
|
### Groups
|
|
1020
1082
|
|
|
1083
|
+
Groups support `layout=absolute` in addition to flow layouts. In absolute groups, child `x`/`y` coordinates are measured from the group's inner content box.
|
|
1084
|
+
|
|
1021
1085
|
| Feature | Supported | Notes |
|
|
1022
1086
|
|---------|-----------|-------|
|
|
1023
1087
|
| Nested groups | ✅ | Unlimited depth |
|
|
@@ -1101,7 +1165,7 @@ exportHTML(instance.svg, dslSource, { filename: 'diagram.html' });
|
|
|
1101
1165
|
| `end` | Structure | `end` |
|
|
1102
1166
|
| `title` | Meta | `title label="My Diagram"` |
|
|
1103
1167
|
| `description` | Meta | `description "Some text"` |
|
|
1104
|
-
| `layout` | Meta | `layout row` / `layout column` / `layout grid` |
|
|
1168
|
+
| `layout` | Meta | `layout row` / `layout column` / `layout grid` / `layout absolute` |
|
|
1105
1169
|
| `config` | Meta | `config gap=60` |
|
|
1106
1170
|
| `theme` | Styling | `theme primary fill="#e8f4ff" stroke="#0044cc" color="#003399"` |
|
|
1107
1171
|
| `style` | Styling | `style nodeId fill="#ff0" stroke="#000"` |
|
|
@@ -1230,15 +1294,16 @@ end
|
|
|
1230
1294
|
```typescript
|
|
1231
1295
|
render(options: RenderOptions): DiagramInstance
|
|
1232
1296
|
|
|
1233
|
-
interface RenderOptions {
|
|
1234
|
-
container: string | HTMLElement | SVGSVGElement; // CSS selector or element
|
|
1235
|
-
dsl: string; // DSL source text
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1297
|
+
interface RenderOptions {
|
|
1298
|
+
container: string | HTMLElement | SVGSVGElement; // CSS selector or element
|
|
1299
|
+
dsl: string; // DSL source text
|
|
1300
|
+
plugins?: SketchmarkPlugin[]; // optional source/AST plugins
|
|
1301
|
+
renderer?: 'svg' | 'canvas'; // default: 'svg'
|
|
1302
|
+
injectCSS?: boolean; // inject animation CSS (default: true)
|
|
1303
|
+
tts?: boolean; // override diagram TTS config
|
|
1304
|
+
svgOptions?: SVGRendererOptions;
|
|
1305
|
+
canvasOptions?: CanvasRendererOptions;
|
|
1306
|
+
onNodeClick?: (nodeId: string) => void; // click handler
|
|
1242
1307
|
onReady?: (anim, svg?) => void; // callback after render
|
|
1243
1308
|
}
|
|
1244
1309
|
|
|
@@ -1261,6 +1326,12 @@ interface DiagramInstance {
|
|
|
1261
1326
|
exportSVG: (filename?: string) => void;
|
|
1262
1327
|
exportPNG: (filename?: string) => Promise<void>;
|
|
1263
1328
|
}
|
|
1329
|
+
|
|
1330
|
+
interface SketchmarkPlugin {
|
|
1331
|
+
name: string;
|
|
1332
|
+
preprocess?: (source: string) => string;
|
|
1333
|
+
transformAst?: (ast: DiagramAST) => DiagramAST;
|
|
1334
|
+
}
|
|
1264
1335
|
```
|
|
1265
1336
|
|
|
1266
1337
|
---
|
|
@@ -31,6 +31,7 @@ export declare class AnimationController {
|
|
|
31
31
|
readonly drawTargetCharts: Set<string>;
|
|
32
32
|
readonly drawTargetMarkdowns: Set<string>;
|
|
33
33
|
private readonly _drawStepIndexByElementId;
|
|
34
|
+
private readonly _relatedElementIdsByPrimaryId;
|
|
34
35
|
private readonly _parentGroupByElementId;
|
|
35
36
|
private readonly _groupDescendantIds;
|
|
36
37
|
private _captionEl;
|
|
@@ -45,6 +46,7 @@ export declare class AnimationController {
|
|
|
45
46
|
get drawTargets(): Set<string>;
|
|
46
47
|
constructor(svg: SVGSVGElement, steps: ASTStepItem[], _container?: HTMLElement | undefined, _rc?: any | undefined, _config?: Record<string, string | number | boolean> | undefined);
|
|
47
48
|
private _buildDrawStepIndex;
|
|
49
|
+
private _buildRelatedElementIndex;
|
|
48
50
|
private _buildGroupVisibilityIndex;
|
|
49
51
|
private _hideGroupDescendants;
|
|
50
52
|
private _isDeferredForGroupReveal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/animation/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAoB,WAAW,EAAE,MAAM,cAAc,CAAC;AAGlE,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,CAAC;AACpB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;AA+a5D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAQtE;AACD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAOtE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAOvE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAOtE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAOvE;AAsKD,qBAAa,mBAAmB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/animation/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ast/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type NodeShape = 'box' | 'circle' | 'diamond' | 'hexagon' | 'triangle' | 'cylinder' | 'parallelogram' | 'text' | 'image' | 'icon' | 'note' | 'line' | 'path';
|
|
2
2
|
export type EdgeConnector = '->' | '<-' | '<->' | '-->' | '<-->' | '---' | '--';
|
|
3
|
-
export type
|
|
3
|
+
export type EdgeAnchor = 'top' | 'right' | 'bottom' | 'left' | 'center' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
4
|
+
export type LayoutType = 'row' | 'column' | 'grid' | 'absolute';
|
|
4
5
|
export type AlignItems = 'start' | 'center' | 'end';
|
|
5
6
|
export type JustifyContent = 'start' | 'center' | 'end' | 'space-between' | 'space-around';
|
|
6
7
|
export type AnimationAction = 'highlight' | 'fade' | 'unfade' | 'draw' | 'erase' | 'show' | 'hide' | 'pulse' | 'move' | 'color' | 'scale' | 'rotate' | 'narrate' | 'circle' | 'underline' | 'crossout' | 'bracket' | 'tick' | 'strikeoff';
|
|
@@ -65,6 +66,8 @@ export interface ASTNode {
|
|
|
65
66
|
pathData?: string;
|
|
66
67
|
width?: number;
|
|
67
68
|
height?: number;
|
|
69
|
+
x?: number;
|
|
70
|
+
y?: number;
|
|
68
71
|
deg?: number;
|
|
69
72
|
dx?: number;
|
|
70
73
|
dy?: number;
|
|
@@ -80,6 +83,8 @@ export interface ASTEdge {
|
|
|
80
83
|
to: string;
|
|
81
84
|
connector: EdgeConnector;
|
|
82
85
|
label?: string;
|
|
86
|
+
fromAnchor?: EdgeAnchor;
|
|
87
|
+
toAnchor?: EdgeAnchor;
|
|
83
88
|
dashed?: boolean;
|
|
84
89
|
bidirectional?: boolean;
|
|
85
90
|
theme?: string;
|
|
@@ -98,6 +103,8 @@ export interface ASTGroup {
|
|
|
98
103
|
justify?: JustifyContent;
|
|
99
104
|
theme?: string;
|
|
100
105
|
style?: StyleProps;
|
|
106
|
+
x?: number;
|
|
107
|
+
y?: number;
|
|
101
108
|
width?: number;
|
|
102
109
|
height?: number;
|
|
103
110
|
}
|
|
@@ -133,6 +140,8 @@ export interface ASTChart {
|
|
|
133
140
|
data: ASTChartData;
|
|
134
141
|
width?: number;
|
|
135
142
|
height?: number;
|
|
143
|
+
x?: number;
|
|
144
|
+
y?: number;
|
|
136
145
|
theme?: string;
|
|
137
146
|
style?: StyleProps;
|
|
138
147
|
}
|
|
@@ -145,6 +154,8 @@ export interface ASTTable {
|
|
|
145
154
|
id: string;
|
|
146
155
|
label: string;
|
|
147
156
|
rows: ASTTableRow[];
|
|
157
|
+
x?: number;
|
|
158
|
+
y?: number;
|
|
148
159
|
theme?: string;
|
|
149
160
|
style?: StyleProps;
|
|
150
161
|
}
|
|
@@ -154,6 +165,8 @@ export interface ASTMarkdown {
|
|
|
154
165
|
content: string;
|
|
155
166
|
width?: number;
|
|
156
167
|
height?: number;
|
|
168
|
+
x?: number;
|
|
169
|
+
y?: number;
|
|
157
170
|
theme?: string;
|
|
158
171
|
style?: StyleProps;
|
|
159
172
|
}
|
package/dist/ast/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ast/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GACjB,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GACrD,UAAU,GAAG,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GACjE,MAAM,GAAG,MAAM,CAAC;AAEpB,MAAM,MAAM,aAAa,GACrB,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ast/types.ts"],"names":[],"mappings":"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"}
|