sketchmark 1.1.3 → 1.1.5
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 +149 -132
- package/dist/animation/index.d.ts.map +1 -1
- package/dist/index.cjs +366 -71
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +366 -71
- package/dist/index.js.map +1 -1
- package/dist/render.d.ts +1 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/sketchmark.iife.js +366 -71
- package/dist/ui/canvas.d.ts +12 -0
- package/dist/ui/canvas.d.ts.map +1 -1
- package/dist/ui/embed.d.ts +36 -1
- package/dist/ui/embed.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -60,52 +60,59 @@ a --> b label="greets"
|
|
|
60
60
|
end
|
|
61
61
|
`.trim();
|
|
62
62
|
|
|
63
|
-
const instance = render({
|
|
64
|
-
container: document.getElementById('diagram'),
|
|
65
|
-
dsl,
|
|
66
|
-
renderer: 'svg',
|
|
67
|
-
svgOptions: { showTitle: true, theme: 'light', transparent: true },
|
|
68
|
-
});
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Reusable UI Widgets
|
|
72
|
-
|
|
73
|
-
```javascript
|
|
74
|
-
import { SketchmarkCanvas, SketchmarkEditor } from 'sketchmark';
|
|
75
|
-
|
|
76
|
-
const editor = new SketchmarkEditor({
|
|
77
|
-
container: document.getElementById('editor'),
|
|
78
|
-
value: `
|
|
79
|
-
diagram
|
|
80
|
-
box app label="App"
|
|
81
|
-
box api label="API"
|
|
82
|
-
app --> api
|
|
83
|
-
end
|
|
84
|
-
`.trim(),
|
|
85
|
-
});
|
|
86
|
-
|
|
63
|
+
const instance = render({
|
|
64
|
+
container: document.getElementById('diagram'),
|
|
65
|
+
dsl,
|
|
66
|
+
renderer: 'svg',
|
|
67
|
+
svgOptions: { showTitle: true, theme: 'light', transparent: true },
|
|
68
|
+
});
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Reusable UI Widgets
|
|
72
|
+
|
|
73
|
+
```javascript
|
|
74
|
+
import { SketchmarkCanvas, SketchmarkEditor } from 'sketchmark';
|
|
75
|
+
|
|
76
|
+
const editor = new SketchmarkEditor({
|
|
77
|
+
container: document.getElementById('editor'),
|
|
78
|
+
value: `
|
|
79
|
+
diagram
|
|
80
|
+
box app label="App"
|
|
81
|
+
box api label="API"
|
|
82
|
+
app --> api
|
|
83
|
+
end
|
|
84
|
+
`.trim(),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
87
|
const canvas = new SketchmarkCanvas({
|
|
88
88
|
container: document.getElementById('viewport'),
|
|
89
|
+
showCaption: false,
|
|
90
|
+
tts: true,
|
|
89
91
|
});
|
|
90
|
-
|
|
91
|
-
canvas.bindEditor(editor);
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
```javascript
|
|
95
|
-
import { SketchmarkEmbed } from 'sketchmark';
|
|
96
|
-
|
|
92
|
+
|
|
93
|
+
canvas.bindEditor(editor);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
import { SketchmarkEmbed } from 'sketchmark';
|
|
98
|
+
|
|
97
99
|
const embed = new SketchmarkEmbed({
|
|
98
100
|
container: document.getElementById('article-embed'),
|
|
99
101
|
dsl,
|
|
100
102
|
width: 960,
|
|
101
103
|
height: 540,
|
|
102
104
|
playStepDelay: 700,
|
|
105
|
+
showCaption: false,
|
|
106
|
+
tts: true,
|
|
107
|
+
fitPadding: 24,
|
|
108
|
+
zoomMin: 0.08,
|
|
109
|
+
zoomMax: 4,
|
|
103
110
|
});
|
|
104
111
|
```
|
|
105
112
|
|
|
106
|
-
Use `SketchmarkCanvas` for the full playground-style surface, and `SketchmarkEmbed` for fixed-size embeds that clip overflow and
|
|
107
|
-
|
|
108
|
-
---
|
|
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.
|
|
114
|
+
|
|
115
|
+
---
|
|
109
116
|
|
|
110
117
|
## Framework Setup
|
|
111
118
|
|
|
@@ -114,10 +121,6 @@ Use `SketchmarkCanvas` for the full playground-style surface, and `SketchmarkEmb
|
|
|
114
121
|
```html
|
|
115
122
|
<!DOCTYPE html>
|
|
116
123
|
<html>
|
|
117
|
-
<head>
|
|
118
|
-
<!-- rough.js MUST load before sketchmark -->
|
|
119
|
-
<script src="https://unpkg.com/roughjs@4.6.6/bundled/rough.js"></script>
|
|
120
|
-
</head>
|
|
121
124
|
<body>
|
|
122
125
|
<div id="diagram"></div>
|
|
123
126
|
|
|
@@ -400,34 +403,34 @@ a --> b label="HTTPS" stroke="#cc0000" stroke-width=2 color="#aa0000" font-size=
|
|
|
400
403
|
|
|
401
404
|
---
|
|
402
405
|
|
|
403
|
-
## Groups
|
|
404
|
-
|
|
405
|
-
Groups visually contain one or more nodes, tables, charts, markdown blocks,
|
|
406
|
-
or other groups by referencing their ids with `items=[...]`.
|
|
407
|
-
|
|
408
|
-
```
|
|
409
|
-
box a label="Node A"
|
|
410
|
-
box b label="Node B"
|
|
411
|
-
box c label="Node C"
|
|
412
|
-
|
|
413
|
-
group inner label="Inner Group" layout=row items=[c]
|
|
414
|
-
group outer label="Outer Group" layout=column items=[a,b,inner]
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
General form:
|
|
418
|
-
|
|
419
|
-
```
|
|
420
|
-
group <id> [label="..."] [layout=row|column|grid] [gap=N] [padding=N]
|
|
421
|
-
[columns=N] [align=start|center|end]
|
|
422
|
-
[justify=start|center|end|space-between|space-around]
|
|
423
|
-
[theme=...] [fill="..."] [stroke="..."] [width=N] [height=N]
|
|
424
|
-
[items=[id1,id2,...]]
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
- Groups are always declared at the top level.
|
|
428
|
-
- `items` order is the visual child order.
|
|
429
|
-
- Nested groups are created by referencing another group id from `items=[...]`.
|
|
430
|
-
- All authored nodes, groups, tables, charts, and markdown blocks must have explicit ids.
|
|
406
|
+
## Groups
|
|
407
|
+
|
|
408
|
+
Groups visually contain one or more nodes, tables, charts, markdown blocks,
|
|
409
|
+
or other groups by referencing their ids with `items=[...]`.
|
|
410
|
+
|
|
411
|
+
```
|
|
412
|
+
box a label="Node A"
|
|
413
|
+
box b label="Node B"
|
|
414
|
+
box c label="Node C"
|
|
415
|
+
|
|
416
|
+
group inner label="Inner Group" layout=row items=[c]
|
|
417
|
+
group outer label="Outer Group" layout=column items=[a,b,inner]
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
General form:
|
|
421
|
+
|
|
422
|
+
```
|
|
423
|
+
group <id> [label="..."] [layout=row|column|grid] [gap=N] [padding=N]
|
|
424
|
+
[columns=N] [align=start|center|end]
|
|
425
|
+
[justify=start|center|end|space-between|space-around]
|
|
426
|
+
[theme=...] [fill="..."] [stroke="..."] [width=N] [height=N]
|
|
427
|
+
[items=[id1,id2,...]]
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
- Groups are always declared at the top level.
|
|
431
|
+
- `items` order is the visual child order.
|
|
432
|
+
- Nested groups are created by referencing another group id from `items=[...]`.
|
|
433
|
+
- All authored nodes, groups, tables, charts, and markdown blocks must have explicit ids.
|
|
431
434
|
|
|
432
435
|
### Group Properties
|
|
433
436
|
|
|
@@ -449,13 +452,13 @@ group <id> [label="..."] [layout=row|column|grid] [gap=N] [padding=N]
|
|
|
449
452
|
|
|
450
453
|
#### `bare` keyword
|
|
451
454
|
|
|
452
|
-
`bare` is an alias for a group with no visible border or fill:
|
|
453
|
-
|
|
454
|
-
```
|
|
455
|
-
box a label="Floating A"
|
|
456
|
-
box b label="Floating B"
|
|
457
|
-
bare myContainer layout=row items=[a,b]
|
|
458
|
-
```
|
|
455
|
+
`bare` is an alias for a group with no visible border or fill:
|
|
456
|
+
|
|
457
|
+
```
|
|
458
|
+
box a label="Floating A"
|
|
459
|
+
box b label="Floating B"
|
|
460
|
+
bare myContainer layout=row items=[a,b]
|
|
461
|
+
```
|
|
459
462
|
|
|
460
463
|
---
|
|
461
464
|
|
|
@@ -582,9 +585,9 @@ theme muted fill="#f5f5f5" stroke="#999999" color="#444444"
|
|
|
582
585
|
|
|
583
586
|
box client label="Client" theme=primary
|
|
584
587
|
box server label="Server" theme=warning
|
|
585
|
-
cylinder db label="DB" theme=success
|
|
586
|
-
group services label="Services" theme=muted items=[client,server,db]
|
|
587
|
-
```
|
|
588
|
+
cylinder db label="DB" theme=success
|
|
589
|
+
group services label="Services" theme=muted items=[client,server,db]
|
|
590
|
+
```
|
|
588
591
|
|
|
589
592
|
---
|
|
590
593
|
|
|
@@ -635,7 +638,7 @@ step <action> <target> [options]
|
|
|
635
638
|
| Action | Target | Options | Description |
|
|
636
639
|
|--------|--------|---------|-------------|
|
|
637
640
|
| `highlight` | node/edge/group | — | Pulsing glow highlight (only one element at a time) |
|
|
638
|
-
| `draw` | node/edge/group/table/chart/markdown | `duration=N` | Animated reveal; drawing a group also reveals its subtree unless descendants have their own later draw step |
|
|
641
|
+
| `draw` | node/edge/group/table/chart/markdown | `duration=N` | Animated reveal; drawing a group also reveals its subtree unless descendants have their own later draw step |
|
|
639
642
|
| `fade` | node/edge/group | — | Fade to 22% opacity |
|
|
640
643
|
| `unfade` | node/edge/group | — | Restore from fade |
|
|
641
644
|
| `erase` | node/edge/group | `duration=N` | Fade to invisible (opacity 0) |
|
|
@@ -662,9 +665,11 @@ step narrate "Plants need sunlight to make food"
|
|
|
662
665
|
step narrate "This is the most important step" pace=slow
|
|
663
666
|
```
|
|
664
667
|
|
|
665
|
-
- Caption is rendered as a fixed-position `<div>` on `document.body` (independent of diagram pan/zoom).
|
|
666
|
-
- Access via `anim.captionElement` to reparent it anywhere.
|
|
667
|
-
-
|
|
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)).
|
|
668
673
|
|
|
669
674
|
### Annotations
|
|
670
675
|
|
|
@@ -677,8 +682,6 @@ step crossout wrong # X through "wrong" node
|
|
|
677
682
|
step bracket sun leaf # curly brace spanning "sun" and "leaf"
|
|
678
683
|
```
|
|
679
684
|
|
|
680
|
-
Annotations require rough.js to be loaded. They are drawn into a dedicated SVG layer on top of the diagram.
|
|
681
|
-
|
|
682
685
|
### Parallel Steps (Beat)
|
|
683
686
|
|
|
684
687
|
Fire multiple steps simultaneously with `beat { }`:
|
|
@@ -802,10 +805,14 @@ anim.destroy() // remove caption, annotations, pointer from DOM
|
|
|
802
805
|
|
|
803
806
|
// Toggle TTS programmatically
|
|
804
807
|
anim.tts = true; // enable browser speech
|
|
805
|
-
anim.tts = false; // disable (stops current speech)
|
|
806
|
-
|
|
807
|
-
// Reparent the narration caption to a custom container
|
|
808
|
-
myDiv.appendChild(anim.captionElement);
|
|
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);
|
|
809
816
|
|
|
810
817
|
// Event listener
|
|
811
818
|
const unsub = anim.on((event) => {
|
|
@@ -817,22 +824,31 @@ const unsub = anim.on((event) => {
|
|
|
817
824
|
unsub(); // unsubscribe
|
|
818
825
|
```
|
|
819
826
|
|
|
820
|
-
### Text-to-Speech
|
|
821
|
-
|
|
822
|
-
Enable browser-native speech synthesis for narrate steps
|
|
823
|
-
|
|
824
|
-
```
|
|
825
|
-
# In DSL
|
|
826
|
-
config tts=on
|
|
827
|
-
```
|
|
828
|
-
|
|
829
|
-
```javascript
|
|
830
|
-
//
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
//
|
|
834
|
-
|
|
835
|
-
|
|
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) => {
|
|
836
852
|
if (e.step?.kind === 'step' && e.step.action === 'narrate') {
|
|
837
853
|
myTTSService.speak(e.step.value);
|
|
838
854
|
}
|
|
@@ -853,25 +869,25 @@ config pointer=hand # hand cursor
|
|
|
853
869
|
|
|
854
870
|
The pointer only appears during annotation steps — it follows the guide path as the annotation draws in, then fades out.
|
|
855
871
|
|
|
856
|
-
### Pre-hidden Elements (Draw Targets)
|
|
857
|
-
|
|
858
|
-
Any element targeted by a `step draw` action starts **hidden** and only appears when that step fires. Elements NOT targeted by `draw` are always visible.
|
|
859
|
-
|
|
860
|
-
For groups, this applies to the whole subtree:
|
|
861
|
-
|
|
862
|
-
- `step draw group1` pre-hides the group and all descendant nodes, nested groups, tables, charts, notes, and markdown blocks.
|
|
863
|
-
- When the group step fires, descendants without their own later `draw` step are revealed immediately.
|
|
864
|
-
- Descendants with an explicit later `draw` step stay hidden until that later step.
|
|
865
|
-
- Edges are still independent; a group draw does not automatically reveal connected edges.
|
|
866
|
-
|
|
867
|
-
For group targets, these actions also apply recursively to the same subtree:
|
|
868
|
-
|
|
869
|
-
- `fade` / `unfade`
|
|
870
|
-
- `show` / `hide`
|
|
871
|
-
- `erase`
|
|
872
|
-
- Edges still remain explicit for these actions too.
|
|
873
|
-
|
|
874
|
-
---
|
|
872
|
+
### Pre-hidden Elements (Draw Targets)
|
|
873
|
+
|
|
874
|
+
Any element targeted by a `step draw` action starts **hidden** and only appears when that step fires. Elements NOT targeted by `draw` are always visible.
|
|
875
|
+
|
|
876
|
+
For groups, this applies to the whole subtree:
|
|
877
|
+
|
|
878
|
+
- `step draw group1` pre-hides the group and all descendant nodes, nested groups, tables, charts, notes, and markdown blocks.
|
|
879
|
+
- When the group step fires, descendants without their own later `draw` step are revealed immediately.
|
|
880
|
+
- Descendants with an explicit later `draw` step stay hidden until that later step.
|
|
881
|
+
- Edges are still independent; a group draw does not automatically reveal connected edges.
|
|
882
|
+
|
|
883
|
+
For group targets, these actions also apply recursively to the same subtree:
|
|
884
|
+
|
|
885
|
+
- `fade` / `unfade`
|
|
886
|
+
- `show` / `hide`
|
|
887
|
+
- `erase`
|
|
888
|
+
- Edges still remain explicit for these actions too.
|
|
889
|
+
|
|
890
|
+
---
|
|
875
891
|
|
|
876
892
|
## Config Options
|
|
877
893
|
|
|
@@ -1110,8 +1126,8 @@ exportHTML(instance.svg, dslSource, { filename: 'diagram.html' });
|
|
|
1110
1126
|
| `<-->` | Edge | `a <--> b` |
|
|
1111
1127
|
| `--` | Edge | `a -- b` |
|
|
1112
1128
|
| `---` | Edge | `a --- b` |
|
|
1113
|
-
| `group` | Group | `group myGroup label="Services" layout=column items=[api,db]` |
|
|
1114
|
-
| `bare` | Group | `bare myWrap layout=row items=[a,b]` |
|
|
1129
|
+
| `group` | Group | `group myGroup label="Services" layout=column items=[api,db]` |
|
|
1130
|
+
| `bare` | Group | `bare myWrap layout=row items=[a,b]` |
|
|
1115
1131
|
| `table` | Table | `table myTable label="Users" { header Name Age }` |
|
|
1116
1132
|
| `bar-chart` | Chart | `bar-chart sales label="Sales" data [...]` |
|
|
1117
1133
|
| `line-chart` | Chart | `line-chart trend data [...]` |
|
|
@@ -1214,14 +1230,15 @@ end
|
|
|
1214
1230
|
```typescript
|
|
1215
1231
|
render(options: RenderOptions): DiagramInstance
|
|
1216
1232
|
|
|
1217
|
-
interface RenderOptions {
|
|
1218
|
-
container: string | HTMLElement | SVGSVGElement; // CSS selector or element
|
|
1219
|
-
dsl: string; // DSL source text
|
|
1220
|
-
renderer?: 'svg' | 'canvas'; // default: 'svg'
|
|
1221
|
-
injectCSS?: boolean; // inject animation CSS (default: true)
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1233
|
+
interface RenderOptions {
|
|
1234
|
+
container: string | HTMLElement | SVGSVGElement; // CSS selector or element
|
|
1235
|
+
dsl: string; // DSL source text
|
|
1236
|
+
renderer?: 'svg' | 'canvas'; // default: 'svg'
|
|
1237
|
+
injectCSS?: boolean; // inject animation CSS (default: true)
|
|
1238
|
+
tts?: boolean; // override diagram TTS config
|
|
1239
|
+
svgOptions?: SVGRendererOptions;
|
|
1240
|
+
canvasOptions?: CanvasRendererOptions;
|
|
1241
|
+
onNodeClick?: (nodeId: string) => void; // click handler
|
|
1225
1242
|
onReady?: (anim, svg?) => void; // callback after render
|
|
1226
1243
|
}
|
|
1227
1244
|
|
|
@@ -1255,4 +1272,4 @@ interface DiagramInstance {
|
|
|
1255
1272
|
3. **Animation only works with SVG renderer** — the canvas renderer does not support animated steps.
|
|
1256
1273
|
4. **`step draw` makes elements start hidden** — any element you intend to `draw` will be invisible until its step fires.
|
|
1257
1274
|
5. **Node IDs must be unique** — duplicate IDs are silently deduplicated (only first definition kept).
|
|
1258
|
-
6. **Group children inherit group's coordinate space** — edges can connect across group boundaries using the node/group ID directly.
|
|
1275
|
+
6. **Group children inherit group's coordinate space** — edges can connect across group boundaries using the node/group ID directly.
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/animation/index.ts"],"names":[],"mappings":"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"}
|