sketchmark 0.2.8 → 1.0.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 CHANGED
@@ -25,6 +25,12 @@
25
25
  11. [Themes](#themes)
26
26
  12. [Fonts](#fonts)
27
27
  13. [Animation System](#animation-system)
28
+ - [Narration](#narration)
29
+ - [Annotations](#annotations)
30
+ - [Parallel Steps (Beat)](#parallel-steps-beat)
31
+ - [Pace](#pace)
32
+ - [Text-to-Speech](#text-to-speech)
33
+ - [Pointer / Cursor](#pointer--cursor)
28
34
  14. [Config Options](#config-options)
29
35
  15. [Export](#export)
30
36
  16. [Supported vs Unsupported Features](#supported-vs-unsupported-features)
@@ -581,7 +587,7 @@ step <action> <target> [options]
581
587
  | Action | Target | Options | Description |
582
588
  |--------|--------|---------|-------------|
583
589
  | `highlight` | node/edge/group | — | Pulsing glow highlight (only one element at a time) |
584
- | `draw` | node/edge/group/table/chart/markdown | `duration=N` | Animated stroke-drawing reveal |
590
+ | `draw` | node/edge/group/table/chart/markdown | `duration=N` | Animated stroke-drawing reveal with text writing effect |
585
591
  | `fade` | node/edge/group | — | Fade to 22% opacity |
586
592
  | `unfade` | node/edge/group | — | Restore from fade |
587
593
  | `erase` | node/edge/group | `duration=N` | Fade to invisible (opacity 0) |
@@ -592,6 +598,69 @@ step <action> <target> [options]
592
598
  | `scale` | node | `factor=N duration=N` | Scale to factor (absolute) |
593
599
  | `rotate` | node | `deg=N duration=N` | Rotate by deg (cumulative) |
594
600
  | `color` | node/edge | `fill="#..."` or `color="#..."` | Change fill/stroke color |
601
+ | `narrate` | — | `"text"` | Show a caption with typing effect |
602
+ | `circle` | node | — | Draw a rough circle annotation around element |
603
+ | `underline` | node | — | Draw a rough underline below element |
604
+ | `crossout` | node | — | Draw rough diagonal cross-out lines |
605
+ | `bracket` | node node | — | Draw a rough curly brace spanning two elements |
606
+
607
+ ### Narration
608
+
609
+ Show captions like a teacher explaining on a blackboard. The caption appears as a floating bar at the bottom center of the viewport with a typing effect.
610
+
611
+ ```
612
+ step narrate "Plants need sunlight to make food"
613
+ step narrate "This is the most important step" pace=slow
614
+ ```
615
+
616
+ - Caption is rendered as a fixed-position `<div>` on `document.body` (independent of diagram pan/zoom).
617
+ - Access via `anim.captionElement` to reparent it anywhere.
618
+ - Supports built-in browser text-to-speech (see [TTS](#text-to-speech)).
619
+
620
+ ### Annotations
621
+
622
+ Hand-drawn annotation marks powered by rough.js. A clean guide path draws in first, then the rough sketch fades in. If `config pointer=chalk|dot|hand` is set, a pointer follows the annotation stroke.
623
+
624
+ ```
625
+ step circle leaf # circle around "leaf" node
626
+ step underline sun # underline below "sun" node
627
+ step crossout wrong # X through "wrong" node
628
+ step bracket sun leaf # curly brace spanning "sun" and "leaf"
629
+ ```
630
+
631
+ Annotations require rough.js to be loaded. They are drawn into a dedicated SVG layer on top of the diagram.
632
+
633
+ ### Parallel Steps (Beat)
634
+
635
+ Fire multiple steps simultaneously with `beat { }`:
636
+
637
+ ```
638
+ beat {
639
+ step draw sun
640
+ step draw co2
641
+ step narrate "Both appear at once"
642
+ }
643
+ ```
644
+
645
+ - All children fire at the same time.
646
+ - Playback waits for the longest child to finish before advancing.
647
+ - Beats can contain any step action including `narrate` and annotations.
648
+
649
+ ### Pace
650
+
651
+ Control timing per step with `pace=slow|fast|pause`:
652
+
653
+ ```
654
+ step draw sun pace=slow # 2× slower
655
+ step draw leaf pace=fast # 2× faster
656
+ step narrate "Key point" pace=pause # extra 1.5s hold after step
657
+ ```
658
+
659
+ | Pace | Effect |
660
+ |------|--------|
661
+ | `slow` | Duration × 2.0 |
662
+ | `fast` | Duration × 0.5 |
663
+ | `pause` | Adds 1500ms hold |
595
664
 
596
665
  ### Step Options
597
666
 
@@ -599,6 +668,7 @@ step <action> <target> [options]
599
668
  |--------|-------------|---------|
600
669
  | `duration=N` | Animation duration in ms | varies by type |
601
670
  | `delay=N` | Delay before this step fires (ms) | 0 |
671
+ | `pace=slow\|fast\|pause` | Timing modifier | — |
602
672
  | `dx=N` | X translation for `move` | 0 |
603
673
  | `dy=N` | Y translation for `move` | 0 |
604
674
  | `factor=N` | Scale factor for `scale` | 1 |
@@ -615,6 +685,22 @@ step highlight server
615
685
  step draw server-->db
616
686
  step highlight db
617
687
 
688
+ # Narration with pacing
689
+ step narrate "The client sends a request" pace=slow
690
+ step draw client-->server
691
+ step narrate "The server processes it"
692
+
693
+ # Annotations
694
+ step circle server
695
+ step underline db
696
+ step bracket server db
697
+
698
+ # Parallel steps
699
+ beat {
700
+ step draw sun
701
+ step draw moon
702
+ }
703
+
618
704
  # Move a node
619
705
  step move myBox dx=100 dy=0 duration=500
620
706
 
@@ -649,11 +735,13 @@ step highlight server delay=500
649
735
  const { anim } = render({ ... });
650
736
 
651
737
  // Properties
652
- anim.total // number of steps
653
- anim.currentStep // current step index (-1 = before start)
654
- anim.canNext // boolean
655
- anim.canPrev // boolean
656
- anim.atEnd // boolean
738
+ anim.total // number of steps
739
+ anim.currentStep // current step index (-1 = before start)
740
+ anim.canNext // boolean
741
+ anim.canPrev // boolean
742
+ anim.atEnd // boolean
743
+ anim.captionElement // HTMLDivElement | null — the narration caption element
744
+ anim.tts // boolean — text-to-speech enabled/disabled
657
745
 
658
746
  // Methods
659
747
  anim.next() // advance one step (returns bool)
@@ -661,17 +749,61 @@ anim.prev() // go back one step (returns bool)
661
749
  anim.reset() // reset to before step 0
662
750
  anim.goTo(index) // jump to step N
663
751
  await anim.play(700) // play all remaining steps (700ms between)
752
+ anim.destroy() // remove caption, annotations, pointer from DOM
753
+
754
+ // Toggle TTS programmatically
755
+ anim.tts = true; // enable browser speech
756
+ anim.tts = false; // disable (stops current speech)
757
+
758
+ // Reparent the narration caption to a custom container
759
+ myDiv.appendChild(anim.captionElement);
664
760
 
665
761
  // Event listener
666
762
  const unsub = anim.on((event) => {
667
763
  console.log(event.type); // 'step-change' | 'animation-start' | 'animation-end' | 'animation-reset'
668
764
  console.log(event.stepIndex); // number
669
- console.log(event.step); // ASTStep object
765
+ console.log(event.step); // ASTStepItem (ASTStep | ASTBeat)
670
766
  console.log(event.total); // total steps
671
767
  });
672
768
  unsub(); // unsubscribe
673
769
  ```
674
770
 
771
+ ### Text-to-Speech
772
+
773
+ Enable browser-native speech synthesis for narrate steps:
774
+
775
+ ```
776
+ # In DSL
777
+ config tts=on
778
+ ```
779
+
780
+ ```javascript
781
+ // Or via API
782
+ anim.tts = true;
783
+
784
+ // Custom TTS (e.g. ElevenLabs) via event listener
785
+ anim.tts = false; // disable built-in
786
+ anim.on((e) => {
787
+ if (e.step?.kind === 'step' && e.step.action === 'narrate') {
788
+ myTTSService.speak(e.step.value);
789
+ }
790
+ });
791
+ ```
792
+
793
+ Speech cancels automatically on `reset()`, `prev()`, `destroy()`, or when a new narrate step fires.
794
+
795
+ ### Pointer / Cursor
796
+
797
+ Show a pointer that follows annotation strokes (circle, underline, crossout, bracket):
798
+
799
+ ```
800
+ config pointer=chalk # white dot with outline
801
+ config pointer=dot # colored dot
802
+ config pointer=hand # hand cursor
803
+ ```
804
+
805
+ The pointer only appears during annotation steps — it follows the guide path as the annotation draws in, then fades out.
806
+
675
807
  ### Pre-hidden Elements (Draw Targets)
676
808
 
677
809
  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.
@@ -692,6 +824,8 @@ Set in DSL with `config key=value`:
692
824
  | `title-color` | Diagram title text color | palette default |
693
825
  | `title-size` | Diagram title font size | `18` |
694
826
  | `title-weight` | Diagram title font weight | `600` |
827
+ | `pointer` | Annotation pointer type | `none` |
828
+ | `tts` | Enable browser text-to-speech | `off` |
695
829
 
696
830
  ```
697
831
  diagram
@@ -701,6 +835,8 @@ config gap=60
701
835
  config margin=40
702
836
  config theme=ocean
703
837
  config font=caveat
838
+ config pointer=chalk
839
+ config tts=on
704
840
  config title-size=24
705
841
  config title-color="#001f5b"
706
842
  ```
@@ -836,7 +972,7 @@ exportHTML(instance.svg, dslSource, { filename: 'diagram.html' });
836
972
  | Feature | Supported | Notes |
837
973
  |---------|-----------|-------|
838
974
  | highlight | ✅ | Pulsing glow |
839
- | draw (nodes) | ✅ | Stroke-path reveal |
975
+ | draw (nodes) | ✅ | Guide-path stroke reveal + text writing effect |
840
976
  | draw (edges) | ✅ | Animated line draw |
841
977
  | draw (groups) | ✅ | |
842
978
  | draw (tables) | ✅ | |
@@ -850,11 +986,20 @@ exportHTML(instance.svg, dslSource, { filename: 'diagram.html' });
850
986
  | scale | ✅ | CSS transform scale |
851
987
  | rotate | ✅ | CSS transform rotate |
852
988
  | color | ✅ | Dynamic fill/stroke color change |
989
+ | narrate | ✅ | Typing-effect captions |
990
+ | circle annotation | ✅ | Rough circle around element |
991
+ | underline annotation | ✅ | Rough underline below element |
992
+ | crossout annotation | ✅ | Rough X through element |
993
+ | bracket annotation | ✅ | Rough curly brace spanning two elements |
994
+ | pace (slow/fast/pause) | ✅ | Per-step timing control |
995
+ | parallel steps (beat) | ✅ | `beat { }` fires children simultaneously |
996
+ | pointer / cursor | ✅ | Follows annotation strokes (chalk/dot/hand) |
997
+ | text-to-speech | ✅ | Browser `speechSynthesis` API |
998
+ | text writing animation | ✅ | Left-to-right clipPath reveal on draw |
853
999
  | delay per step | ✅ | `delay=N` ms |
854
1000
  | custom duration | ✅ | `duration=N` ms |
855
1001
  | Canvas renderer animation | ❌ | SVG renderer only |
856
1002
  | Click-triggered steps | ❌ | Parsed but not implemented |
857
- | Parallel steps | ❌ | Sequential only |
858
1003
 
859
1004
  ### Export
860
1005
 
@@ -924,20 +1069,27 @@ exportHTML(instance.svg, dslSource, { filename: 'diagram.html' });
924
1069
  | `step scale` | Animation | `step scale nodeId factor=1.5 duration=300` |
925
1070
  | `step rotate` | Animation | `step rotate nodeId deg=90 duration=400` |
926
1071
  | `step color` | Animation | `step color nodeId fill="#ff0000"` |
1072
+ | `step narrate` | Animation | `step narrate "Caption text" pace=slow` |
1073
+ | `step circle` | Animation | `step circle nodeId` |
1074
+ | `step underline` | Animation | `step underline nodeId` |
1075
+ | `step crossout` | Animation | `step crossout nodeId` |
1076
+ | `step bracket` | Animation | `step bracket nodeId1 nodeId2` |
1077
+ | `beat` | Animation | `beat { step draw a \n step draw b }` |
1078
+ | `pace` | Animation | `step draw nodeId pace=slow\|fast\|pause` |
927
1079
 
928
1080
  ---
929
1081
 
930
1082
  ## Complete Example
931
1083
 
932
- This example demonstrates most features in a single diagram:
1084
+ This example demonstrates most features including narration, annotations, beats, pacing, and pointer:
933
1085
 
934
1086
  ```
935
1087
  diagram
936
- title label="Full Stack Architecture"
1088
+ title label="How the Internet Delivers a Webpage"
937
1089
  layout row
938
1090
  config gap=50
939
- config theme=light
940
- config font=system
1091
+ config pointer=chalk
1092
+ config tts=on
941
1093
 
942
1094
  # Define named themes
943
1095
  theme primary fill="#e8f4ff" stroke="#0044cc" color="#003399"
@@ -945,48 +1097,50 @@ theme success fill="#e8ffe8" stroke="#007700" color="#004400"
945
1097
  theme warning fill="#fff9e6" stroke="#f0a500" color="#7a5000"
946
1098
  theme muted fill="#f5f5f5" stroke="#999999" color="#444444"
947
1099
 
948
- # Standalone node
949
- box client label="Browser" theme=primary width=120 height=50
950
-
951
- # Group of services
952
- group backend label="Backend" layout=column gap=12 padding=24 theme=muted
953
- {
954
- box api label="REST API" theme=warning width=130 height=48
955
- box auth label="Auth" theme=primary width=130 height=48
1100
+ box you label="You" theme=warning width=120 height=50
1101
+ box browser label="Browser" theme=primary width=120 height=50
1102
+ box dns label="DNS\nServer" theme=muted width=120 height=55
1103
+ box server label="Web\nServer" theme=success width=120 height=55
1104
+ box html label="HTML\nCSS JS" theme=primary width=120 height=55
1105
+ box screen label="Rendered\nPage" theme=warning width=120 height=55
1106
+
1107
+ you --> browser label="types URL"
1108
+ browser --> dns label="lookup"
1109
+ dns --> browser label="IP address"
1110
+ browser --> server label="request"
1111
+ server --> html label="responds"
1112
+ html --> screen label="renders"
1113
+
1114
+ # Animation with narration, annotations, beats, and pacing
1115
+ step narrate "You type a website address into your browser" pace=slow
1116
+ step draw you
1117
+ step draw browser
1118
+ step draw you-->browser
1119
+ step underline you
1120
+ step narrate "The browser asks a DNS server — the internet's phone book"
1121
+ step draw dns
1122
+ step draw browser-->dns
1123
+ step circle dns
1124
+ step narrate "DNS translates the domain name into an IP address"
1125
+ step draw dns-->browser
1126
+ step narrate "Now the browser knows WHERE to go" pace=slow
1127
+ beat {
1128
+ step draw server
1129
+ step draw browser-->server
956
1130
  }
957
-
958
- # Database
959
- cylinder db label="PostgreSQL" theme=success width=130 height=65
960
-
961
- # Edges
962
- client --> api label="HTTPS"
963
- api --> auth
964
- api --> db label="SQL"
965
- auth --> db label="SQL"
966
-
967
- # Inline table
968
- table users label="Users Table"
969
- {
970
- header ID Name Email
971
- row "1" "Alice" "alice@example.com"
972
- row "2" "Bob" "bob@example.com"
1131
+ step narrate "It sends a request to the web server at that address"
1132
+ step underline server
1133
+ step narrate "The server responds with HTML, CSS, and JavaScript" pace=slow
1134
+ beat {
1135
+ step draw html
1136
+ step draw server-->html
973
1137
  }
974
-
975
- # A chart
976
- bar-chart traffic label="Daily Traffic" width=300 height=200
977
- data
978
- [["Day", "Requests"],
979
- ["Mon", 1200],
980
- ["Tue", 1500],
981
- ["Wed", 900]]
982
-
983
- # Animation sequence
984
- step highlight client
985
- step draw client-->api
986
- step highlight api
987
- step draw api-->auth
988
- step draw api-->db
989
- step highlight db
1138
+ step circle html
1139
+ step narrate "The browser assembles everything into the page you see"
1140
+ step draw html-->screen
1141
+ step draw screen pace=slow
1142
+ step bracket html screen
1143
+ step narrate "All of this happens in under a second!" pace=pause
990
1144
  end
991
1145
  ```
992
1146
 
@@ -1,20 +1,23 @@
1
- import type { ASTStep } from "../ast/types";
1
+ import type { ASTStepItem } from "../ast/types";
2
2
  export type AnimationEventType = "step-change" | "step-complete" | "animation-reset" | "animation-start" | "animation-end";
3
3
  export interface AnimationEvent {
4
4
  type: AnimationEventType;
5
5
  stepIndex: number;
6
- step?: ASTStep;
6
+ step?: ASTStepItem;
7
7
  total: number;
8
8
  }
9
9
  export type AnimationListener = (e: AnimationEvent) => void;
10
- export declare function getDrawTargetEdgeIds(steps: ASTStep[]): Set<string>;
11
- export declare function getDrawTargetNodeIds(steps: ASTStep[]): Set<string>;
12
- export declare function getDrawTargetTableIds(steps: ASTStep[]): Set<string>;
13
- export declare function getDrawTargetNoteIds(steps: ASTStep[]): Set<string>;
14
- export declare function getDrawTargetChartIds(steps: ASTStep[]): Set<string>;
10
+ export declare function getDrawTargetEdgeIds(steps: ASTStepItem[]): Set<string>;
11
+ export declare function getDrawTargetNodeIds(steps: ASTStepItem[]): Set<string>;
12
+ export declare function getDrawTargetTableIds(steps: ASTStepItem[]): Set<string>;
13
+ export declare function getDrawTargetNoteIds(steps: ASTStepItem[]): Set<string>;
14
+ export declare function getDrawTargetChartIds(steps: ASTStepItem[]): Set<string>;
15
15
  export declare class AnimationController {
16
16
  private svg;
17
- readonly steps: ASTStep[];
17
+ readonly steps: ASTStepItem[];
18
+ private _container?;
19
+ private _rc?;
20
+ private _config?;
18
21
  private _step;
19
22
  private _pendingStepTimers;
20
23
  private _transforms;
@@ -26,8 +29,20 @@ export declare class AnimationController {
26
29
  readonly drawTargetNotes: Set<string>;
27
30
  readonly drawTargetCharts: Set<string>;
28
31
  readonly drawTargetMarkdowns: Set<string>;
32
+ private _captionEl;
33
+ private _captionTextEl;
34
+ private _annotationLayer;
35
+ private _annotations;
36
+ private _pointerEl;
37
+ private _pointerType;
38
+ private _tts;
29
39
  get drawTargets(): Set<string>;
30
- constructor(svg: SVGSVGElement, steps: ASTStep[]);
40
+ constructor(svg: SVGSVGElement, steps: ASTStepItem[], _container?: HTMLElement | undefined, _rc?: any | undefined, _config?: Record<string, string | number | boolean> | undefined);
41
+ /** The narration caption element — mount it anywhere via `yourContainer.appendChild(anim.captionElement)` */
42
+ get captionElement(): HTMLDivElement | null;
43
+ /** Enable/disable browser text-to-speech for narrate steps */
44
+ get tts(): boolean;
45
+ set tts(on: boolean);
31
46
  get currentStep(): number;
32
47
  get total(): number;
33
48
  get canNext(): boolean;
@@ -36,15 +51,19 @@ export declare class AnimationController {
36
51
  on(listener: AnimationListener): () => void;
37
52
  private emit;
38
53
  reset(): void;
54
+ /** Remove caption and annotation layer from the DOM */
55
+ destroy(): void;
39
56
  next(): boolean;
40
57
  prev(): boolean;
41
58
  play(msPerStep?: number): Promise<void>;
42
59
  goTo(index: number): void;
43
60
  private _clearPendingStepTimers;
44
61
  private _scheduleStep;
62
+ private _stepWaitMs;
45
63
  private _playbackWaitMs;
46
64
  private _clearAll;
47
65
  private _applyStep;
66
+ private _runStepItem;
48
67
  private _runStep;
49
68
  private _doHighlight;
50
69
  private _doFade;
@@ -57,6 +76,26 @@ export declare class AnimationController {
57
76
  private _doShowHide;
58
77
  private _doPulse;
59
78
  private _doColor;
79
+ private _initCaption;
80
+ private _doNarrate;
81
+ private _speak;
82
+ private _cancelSpeech;
83
+ /** Pre-warm the speech engine with a silent utterance to eliminate cold-start delay */
84
+ private _warmUpSpeech;
85
+ private _nodeMetrics;
86
+ /**
87
+ * Animate an annotation using the same guide-path approach as node draw:
88
+ * 1. Hide the rough.js element (opacity=0)
89
+ * 2. Create a clean single guide path and animate it with stroke-dashoffset
90
+ * 3. Pointer follows the guide path
91
+ * 4. After guide finishes → fade in rough.js element, remove guide
92
+ */
93
+ private _animateAnnotation;
94
+ private _doAnnotationCircle;
95
+ private _doAnnotationUnderline;
96
+ private _doAnnotationCrossout;
97
+ private _doAnnotationBracket;
98
+ private _initPointer;
60
99
  }
61
- export declare const ANIMATION_CSS = "\n.ng, .gg, .tg, .ntg, .cg, .eg, .mdg {\n transform-box: fill-box;\n transform-origin: center;\n transition: filter 0.3s, opacity 0.35s;\n}\n\n/* highlight */\n.ng.hl path, .ng.hl rect, .ng.hl ellipse, .ng.hl polygon,\n.tg.hl path, .tg.hl rect,\n.ntg.hl path, .ntg.hl polygon,\n.cg.hl path, .cg.hl rect,\n.mdg.hl text,\n.eg.hl path, .eg.hl line, .eg.hl polygon { stroke-width: 2.8 !important; }\n\n.ng.hl, .tg.hl, .ntg.hl, .cg.hl, .mdg.hl, .eg.hl {\n animation: ng-pulse 1.4s ease-in-out infinite;\n}\n@keyframes ng-pulse {\n 0%, 100% { filter: drop-shadow(0 0 7px rgba(200,84,40,.6)); }\n 50% { filter: drop-shadow(0 0 14px rgba(200,84,40,.9)); }\n}\n\n/* fade */\n.ng.faded, .gg.faded, .tg.faded, .ntg.faded,\n.cg.faded, .eg.faded, .mdg.faded { opacity: 0.22; }\n\n.ng.hidden { opacity: 0; pointer-events: none; }\n.gg.gg-hidden { opacity: 0; }\n.tg.gg-hidden { opacity: 0; }\n.ntg.gg-hidden { opacity: 0; }\n.cg.gg-hidden { opacity: 0; }\n.mdg.gg-hidden { opacity: 0; }\n";
100
+ export declare const ANIMATION_CSS = "\n.ng, .gg, .tg, .ntg, .cg, .eg, .mdg {\n transform-box: fill-box;\n transform-origin: center;\n transition: filter 0.3s, opacity 0.35s;\n}\n\n/* highlight */\n.ng.hl path, .ng.hl rect, .ng.hl ellipse, .ng.hl polygon,\n.tg.hl path, .tg.hl rect,\n.ntg.hl path, .ntg.hl polygon,\n.cg.hl path, .cg.hl rect,\n.mdg.hl text,\n.eg.hl path, .eg.hl line, .eg.hl polygon { stroke-width: 2.8 !important; }\n\n.ng.hl, .tg.hl, .ntg.hl, .cg.hl, .mdg.hl, .eg.hl {\n animation: ng-pulse 1.4s ease-in-out infinite;\n}\n@keyframes ng-pulse {\n 0%, 100% { filter: drop-shadow(0 0 7px rgba(200,84,40,.6)); }\n 50% { filter: drop-shadow(0 0 14px rgba(200,84,40,.9)); }\n}\n\n/* fade */\n.ng.faded, .gg.faded, .tg.faded, .ntg.faded,\n.cg.faded, .eg.faded, .mdg.faded { opacity: 0.22; }\n\n.ng.hidden { opacity: 0; pointer-events: none; }\n.gg.gg-hidden { opacity: 0; }\n.tg.gg-hidden { opacity: 0; }\n.ntg.gg-hidden { opacity: 0; }\n.cg.gg-hidden { opacity: 0; }\n.mdg.gg-hidden { opacity: 0; }\n\n/* narration caption */\n.skm-caption { pointer-events: none; user-select: none; }\n";
62
101
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/animation/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/animation/index.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,9 @@ export type EdgeConnector = '->' | '<-' | '<->' | '-->' | '<-->' | '---' | '--';
3
3
  export type LayoutType = 'row' | 'column' | 'grid';
4
4
  export type AlignItems = 'start' | 'center' | 'end';
5
5
  export type JustifyContent = 'start' | 'center' | 'end' | 'space-between' | 'space-around';
6
- export type AnimationAction = 'highlight' | 'fade' | 'unfade' | 'draw' | 'erase' | 'show' | 'hide' | 'pulse' | 'move' | 'color' | 'scale' | 'rotate';
6
+ export type AnimationAction = 'highlight' | 'fade' | 'unfade' | 'draw' | 'erase' | 'show' | 'hide' | 'pulse' | 'move' | 'color' | 'scale' | 'rotate' | 'narrate' | 'circle' | 'underline' | 'crossout' | 'bracket';
7
7
  export type AnimationTrigger = 'on-click';
8
+ export type StepPace = 'slow' | 'fast' | 'pause';
8
9
  export interface StyleProps {
9
10
  fill?: string;
10
11
  stroke?: string;
@@ -112,7 +113,14 @@ export interface ASTStep {
112
113
  dy?: number;
113
114
  factor?: number;
114
115
  deg?: number;
116
+ pace?: StepPace;
117
+ target2?: string;
115
118
  }
119
+ export interface ASTBeat {
120
+ kind: 'beat';
121
+ children: ASTStep[];
122
+ }
123
+ export type ASTStepItem = ASTStep | ASTBeat;
116
124
  export interface ASTChartData {
117
125
  headers: string[];
118
126
  rows: (string | number)[][];
@@ -158,7 +166,7 @@ export interface DiagramAST {
158
166
  edges: ASTEdge[];
159
167
  groups: ASTGroup[];
160
168
  tables: ASTTable[];
161
- steps: ASTStep[];
169
+ steps: ASTStepItem[];
162
170
  charts: ASTChart[];
163
171
  markdowns: ASTMarkdown[];
164
172
  styles: Record<string, StyleProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ast/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ast/types.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -137,6 +137,18 @@ export declare const ANIMATION: {
137
137
  readonly fillFadeOffset: -60;
138
138
  readonly textDelay: 80;
139
139
  readonly chartFade: 500;
140
+ readonly paceSlowMul: 2;
141
+ readonly paceFastMul: 0.5;
142
+ readonly pauseHoldMs: 1500;
143
+ readonly narrationFadeMs: 300;
144
+ readonly narrationTypeMs: 30;
145
+ readonly textRevealMs: 400;
146
+ readonly annotationStrokeDur: 300;
147
+ readonly annotationColor: "#c85428";
148
+ readonly annotationStrokeW: 2.5;
149
+ readonly pointerMoveMs: 350;
150
+ readonly pointerPreStepMs: 120;
151
+ readonly pointerSize: 8;
140
152
  };
141
153
  export declare const EXPORT: {
142
154
  readonly pngScale: 2;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,MAAM;;;;;;CAMT,CAAC;AAGX,eAAO,MAAM,IAAI;;;;;;CAMP,CAAC;AAGX,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMT,CAAC;AAGX,eAAO,MAAM,KAAK;;;;;;;CAOR,CAAC;AAGX,eAAO,MAAM,IAAI;;;;;;;CAOP,CAAC;AAGX,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAGX,eAAO,MAAM,KAAK;;;;CAIR,CAAC;AAGX,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAGX,eAAO,MAAM,IAAI;;;;;;0BAMS,SAAS,MAAM,EAAE;CACjC,CAAC;AAGX,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;CAKX,CAAC;AAGX,eAAO,MAAM,KAAK;;;;CAIR,CAAC;AAGX,eAAO,MAAM,KAAK;;;;;;;;;CASR,CAAC;AAGX,eAAO,MAAM,SAAS;;;;;;;;;;;;;;CAmBZ,CAAC;AAGX,eAAO,MAAM,MAAM;;;;;;;CAOT,CAAC;AAGX,eAAO,MAAM,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,MAAM;;;;;;CAMT,CAAC;AAGX,eAAO,MAAM,IAAI;;;;;;CAMP,CAAC;AAGX,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMT,CAAC;AAGX,eAAO,MAAM,KAAK;;;;;;;CAOR,CAAC;AAGX,eAAO,MAAM,IAAI;;;;;;;CAOP,CAAC;AAGX,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAGX,eAAO,MAAM,KAAK;;;;CAIR,CAAC;AAGX,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAGX,eAAO,MAAM,IAAI;;;;;;0BAMS,SAAS,MAAM,EAAE;CACjC,CAAC;AAGX,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;CAKX,CAAC;AAGX,eAAO,MAAM,KAAK;;;;CAIR,CAAC;AAGX,eAAO,MAAM,KAAK;;;;;;;;;CASR,CAAC;AAGX,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCZ,CAAC;AAGX,eAAO,MAAM,MAAM;;;;;;;CAOT,CAAC;AAGX,eAAO,MAAM,MAAM,+BAA+B,CAAC"}