@staticcanvas/typeflow 0.34.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/LICENSE +21 -0
- package/README.md +637 -0
- package/branding/dist/ico/typeflow-logo-16x16.ico +0 -0
- package/branding/dist/ico/typeflow-logo-256x256.ico +0 -0
- package/branding/dist/ico/typeflow-logo-32x32.ico +0 -0
- package/branding/dist/ico/typeflow-logo-48x48.ico +0 -0
- package/branding/dist/png/typeflow-logo-1024x1024.png +0 -0
- package/branding/dist/png/typeflow-logo-128x128.png +0 -0
- package/branding/dist/png/typeflow-logo-16x16.png +0 -0
- package/branding/dist/png/typeflow-logo-256x256.png +0 -0
- package/branding/dist/png/typeflow-logo-512x512.png +0 -0
- package/branding/dist/png/typeflow-logo-64x64.png +0 -0
- package/branding/dist/webp/typeflow-logo-1024x1024.webp +0 -0
- package/branding/dist/webp/typeflow-logo-128x128.webp +0 -0
- package/branding/dist/webp/typeflow-logo-16x16.webp +0 -0
- package/branding/dist/webp/typeflow-logo-256x256.webp +0 -0
- package/branding/dist/webp/typeflow-logo-32x32.webp +0 -0
- package/branding/dist/webp/typeflow-logo-48x48.webp +0 -0
- package/branding/dist/webp/typeflow-logo-512x512.webp +0 -0
- package/branding/dist/webp/typeflow-logo-64x64.webp +0 -0
- package/branding/gen-logo.ps1 +14 -0
- package/branding/typeflow-logo.svg +162 -0
- package/dist/typeflow/LICENSE +21 -0
- package/dist/typeflow/README.md +231 -0
- package/dist/typeflow/branding/dist/ico/typeflow-logo-16x16.ico +0 -0
- package/dist/typeflow/branding/dist/ico/typeflow-logo-256x256.ico +0 -0
- package/dist/typeflow/branding/dist/ico/typeflow-logo-32x32.ico +0 -0
- package/dist/typeflow/branding/dist/ico/typeflow-logo-48x48.ico +0 -0
- package/dist/typeflow/branding/dist/png/typeflow-logo-1024x1024.png +0 -0
- package/dist/typeflow/branding/dist/png/typeflow-logo-128x128.png +0 -0
- package/dist/typeflow/branding/dist/png/typeflow-logo-16x16.png +0 -0
- package/dist/typeflow/branding/dist/png/typeflow-logo-256x256.png +0 -0
- package/dist/typeflow/branding/dist/png/typeflow-logo-512x512.png +0 -0
- package/dist/typeflow/branding/dist/png/typeflow-logo-64x64.png +0 -0
- package/dist/typeflow/branding/dist/webp/typeflow-logo-1024x1024.webp +0 -0
- package/dist/typeflow/branding/dist/webp/typeflow-logo-128x128.webp +0 -0
- package/dist/typeflow/branding/dist/webp/typeflow-logo-16x16.webp +0 -0
- package/dist/typeflow/branding/dist/webp/typeflow-logo-256x256.webp +0 -0
- package/dist/typeflow/branding/dist/webp/typeflow-logo-32x32.webp +0 -0
- package/dist/typeflow/branding/dist/webp/typeflow-logo-48x48.webp +0 -0
- package/dist/typeflow/branding/dist/webp/typeflow-logo-512x512.webp +0 -0
- package/dist/typeflow/branding/dist/webp/typeflow-logo-64x64.webp +0 -0
- package/dist/typeflow/branding/gen-logo.ps1 +14 -0
- package/dist/typeflow/branding/typeflow-logo.svg +162 -0
- package/dist/typeflow/dist/typeflow-caret.cjs +47 -0
- package/dist/typeflow/dist/typeflow-caret.cjs.map +1 -0
- package/dist/typeflow/dist/typeflow-caret.esm.js +47 -0
- package/dist/typeflow/dist/typeflow-caret.esm.js.map +1 -0
- package/dist/typeflow/dist/typeflow-caret.esm.min.js +2 -0
- package/dist/typeflow/dist/typeflow-caret.esm.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-caret.js +47 -0
- package/dist/typeflow/dist/typeflow-caret.js.map +1 -0
- package/dist/typeflow/dist/typeflow-caret.min.js +2 -0
- package/dist/typeflow/dist/typeflow-caret.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-caret.mjs +47 -0
- package/dist/typeflow/dist/typeflow-caret.mjs.map +1 -0
- package/dist/typeflow/dist/typeflow-debug.cjs +109 -0
- package/dist/typeflow/dist/typeflow-debug.cjs.map +1 -0
- package/dist/typeflow/dist/typeflow-debug.esm.js +109 -0
- package/dist/typeflow/dist/typeflow-debug.esm.js.map +1 -0
- package/dist/typeflow/dist/typeflow-debug.esm.min.js +2 -0
- package/dist/typeflow/dist/typeflow-debug.esm.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-debug.js +109 -0
- package/dist/typeflow/dist/typeflow-debug.js.map +1 -0
- package/dist/typeflow/dist/typeflow-debug.min.js +2 -0
- package/dist/typeflow/dist/typeflow-debug.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-debug.mjs +109 -0
- package/dist/typeflow/dist/typeflow-debug.mjs.map +1 -0
- package/dist/typeflow/dist/typeflow-extchars.cjs +66 -0
- package/dist/typeflow/dist/typeflow-extchars.cjs.map +1 -0
- package/dist/typeflow/dist/typeflow-extchars.esm.js +66 -0
- package/dist/typeflow/dist/typeflow-extchars.esm.js.map +1 -0
- package/dist/typeflow/dist/typeflow-extchars.esm.min.js +2 -0
- package/dist/typeflow/dist/typeflow-extchars.esm.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-extchars.js +66 -0
- package/dist/typeflow/dist/typeflow-extchars.js.map +1 -0
- package/dist/typeflow/dist/typeflow-extchars.min.js +2 -0
- package/dist/typeflow/dist/typeflow-extchars.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-extchars.mjs +66 -0
- package/dist/typeflow/dist/typeflow-extchars.mjs.map +1 -0
- package/dist/typeflow/dist/typeflow-keystroke.cjs +47 -0
- package/dist/typeflow/dist/typeflow-keystroke.cjs.map +1 -0
- package/dist/typeflow/dist/typeflow-keystroke.esm.js +47 -0
- package/dist/typeflow/dist/typeflow-keystroke.esm.js.map +1 -0
- package/dist/typeflow/dist/typeflow-keystroke.esm.min.js +2 -0
- package/dist/typeflow/dist/typeflow-keystroke.esm.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-keystroke.js +47 -0
- package/dist/typeflow/dist/typeflow-keystroke.js.map +1 -0
- package/dist/typeflow/dist/typeflow-keystroke.min.js +2 -0
- package/dist/typeflow/dist/typeflow-keystroke.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-keystroke.mjs +47 -0
- package/dist/typeflow/dist/typeflow-keystroke.mjs.map +1 -0
- package/dist/typeflow/dist/typeflow-metrics.cjs +76 -0
- package/dist/typeflow/dist/typeflow-metrics.cjs.map +1 -0
- package/dist/typeflow/dist/typeflow-metrics.esm.js +76 -0
- package/dist/typeflow/dist/typeflow-metrics.esm.js.map +1 -0
- package/dist/typeflow/dist/typeflow-metrics.esm.min.js +2 -0
- package/dist/typeflow/dist/typeflow-metrics.esm.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-metrics.js +76 -0
- package/dist/typeflow/dist/typeflow-metrics.js.map +1 -0
- package/dist/typeflow/dist/typeflow-metrics.min.js +2 -0
- package/dist/typeflow/dist/typeflow-metrics.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-metrics.mjs +76 -0
- package/dist/typeflow/dist/typeflow-metrics.mjs.map +1 -0
- package/dist/typeflow/dist/typeflow-parallel.cjs +3 -0
- package/dist/typeflow/dist/typeflow-parallel.cjs.map +1 -0
- package/dist/typeflow/dist/typeflow-parallel.esm.js +3 -0
- package/dist/typeflow/dist/typeflow-parallel.esm.js.map +1 -0
- package/dist/typeflow/dist/typeflow-parallel.esm.min.js +2 -0
- package/dist/typeflow/dist/typeflow-parallel.esm.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-parallel.js +3 -0
- package/dist/typeflow/dist/typeflow-parallel.js.map +1 -0
- package/dist/typeflow/dist/typeflow-parallel.min.js +2 -0
- package/dist/typeflow/dist/typeflow-parallel.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-parallel.mjs +3 -0
- package/dist/typeflow/dist/typeflow-parallel.mjs.map +1 -0
- package/dist/typeflow/dist/typeflow-webaudio.cjs +81 -0
- package/dist/typeflow/dist/typeflow-webaudio.cjs.map +1 -0
- package/dist/typeflow/dist/typeflow-webaudio.esm.js +81 -0
- package/dist/typeflow/dist/typeflow-webaudio.esm.js.map +1 -0
- package/dist/typeflow/dist/typeflow-webaudio.esm.min.js +2 -0
- package/dist/typeflow/dist/typeflow-webaudio.esm.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-webaudio.js +81 -0
- package/dist/typeflow/dist/typeflow-webaudio.js.map +1 -0
- package/dist/typeflow/dist/typeflow-webaudio.min.js +2 -0
- package/dist/typeflow/dist/typeflow-webaudio.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow-webaudio.mjs +81 -0
- package/dist/typeflow/dist/typeflow-webaudio.mjs.map +1 -0
- package/dist/typeflow/dist/typeflow.cjs +277 -0
- package/dist/typeflow/dist/typeflow.cjs.map +1 -0
- package/dist/typeflow/dist/typeflow.esm.js +277 -0
- package/dist/typeflow/dist/typeflow.esm.js.map +1 -0
- package/dist/typeflow/dist/typeflow.esm.min.js +2 -0
- package/dist/typeflow/dist/typeflow.esm.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow.js +277 -0
- package/dist/typeflow/dist/typeflow.js.map +1 -0
- package/dist/typeflow/dist/typeflow.min.js +2 -0
- package/dist/typeflow/dist/typeflow.min.js.map +1 -0
- package/dist/typeflow/dist/typeflow.mjs +277 -0
- package/dist/typeflow/dist/typeflow.mjs.map +1 -0
- package/dist/typeflow/jsr.jsonc +27 -0
- package/dist/typeflow/package.json +79 -0
- package/dist/typeflow/src/typeflow-audio-presets.js +137 -0
- package/dist/typeflow/src/typeflow-caret.d.ts +65 -0
- package/dist/typeflow/src/typeflow-caret.js +303 -0
- package/dist/typeflow/src/typeflow-debug.d.ts +34 -0
- package/dist/typeflow/src/typeflow-debug.js +223 -0
- package/dist/typeflow/src/typeflow-extchars.d.ts +28 -0
- package/dist/typeflow/src/typeflow-extchars.js +132 -0
- package/dist/typeflow/src/typeflow-keystroke.d.ts +28 -0
- package/dist/typeflow/src/typeflow-keystroke.js +220 -0
- package/dist/typeflow/src/typeflow-metrics.d.ts +38 -0
- package/dist/typeflow/src/typeflow-metrics.js +556 -0
- package/dist/typeflow/src/typeflow-parallel.d.ts +36 -0
- package/dist/typeflow/src/typeflow-parallel.js +157 -0
- package/dist/typeflow/src/typeflow-webaudio.d.ts +83 -0
- package/dist/typeflow/src/typeflow-webaudio.js +517 -0
- package/dist/typeflow/src/typeflow.d.ts +328 -0
- package/dist/typeflow/src/typeflow.js +2119 -0
- package/jsr.jsonc +27 -0
- package/package.json +133 -0
- package/src/typeflow-audio-presets.js +137 -0
- package/src/typeflow-caret.d.ts +65 -0
- package/src/typeflow-caret.js +303 -0
- package/src/typeflow-debug.d.ts +34 -0
- package/src/typeflow-debug.js +223 -0
- package/src/typeflow-extchars.d.ts +28 -0
- package/src/typeflow-extchars.js +132 -0
- package/src/typeflow-keystroke.d.ts +28 -0
- package/src/typeflow-keystroke.js +220 -0
- package/src/typeflow-metrics.d.ts +38 -0
- package/src/typeflow-metrics.js +556 -0
- package/src/typeflow-parallel.d.ts +36 -0
- package/src/typeflow-parallel.js +157 -0
- package/src/typeflow-webaudio.d.ts +83 -0
- package/src/typeflow-webaudio.js +517 -0
- package/src/typeflow.d.ts +328 -0
- package/src/typeflow.js +2119 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeFlow - TypeScript definitions
|
|
3
|
+
* @version 2.3.0
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface TypeFlowConfig {
|
|
8
|
+
/** Ms per character/word. Default: 50 (type) / 25 (erase) */
|
|
9
|
+
speed?: number;
|
|
10
|
+
/** Ms before the animation starts. Default: 0 */
|
|
11
|
+
delay?: number;
|
|
12
|
+
/** +/- ms randomization per character/word for a more natural feel. Default: 0 */
|
|
13
|
+
speedVariance?: number;
|
|
14
|
+
/** Automatically add micro-pauses at punctuation (. , ! ?) and word boundaries. Default: false */
|
|
15
|
+
naturalCadence?: boolean;
|
|
16
|
+
/** Granularity of typing and erasing. Default: 'grapheme' */
|
|
17
|
+
granularity?: 'grapheme' | 'word';
|
|
18
|
+
/** Cursor character. Empty string disables it. Default: '|' */
|
|
19
|
+
cursor?: string;
|
|
20
|
+
/** Blink the cursor once typing completes. Default: true. (Ignored by erase.) */
|
|
21
|
+
cursorBlink?: boolean;
|
|
22
|
+
/** Interpret `text` as sanitized HTML instead of plain text. Default: false */
|
|
23
|
+
html?: boolean;
|
|
24
|
+
/** 'replace' clears the target first; 'append' types after existing content. Default: 'replace' */
|
|
25
|
+
mode?: 'replace' | 'append';
|
|
26
|
+
/** Reveal direction for typing: 'left' (standard LTR), 'right' (RTL), 'center' (middle-outward expand). Default: 'left' */
|
|
27
|
+
direction?: 'left' | 'right' | 'center';
|
|
28
|
+
/**
|
|
29
|
+
* Reveal style for typing. Default: 'char'
|
|
30
|
+
* - 'word-fade' renders the final layout, then fades words into place
|
|
31
|
+
* - 'float-in-top' words fade in while sliding down from above
|
|
32
|
+
* - 'float-in-bottom' words fade in while sliding up from below
|
|
33
|
+
* - 'float-in-left' words fade in while sliding in from the left
|
|
34
|
+
* - 'float-in-right' words fade in while sliding in from the right
|
|
35
|
+
* - 'zoom-in-space' words fade in while scaling up from depth (perspective transform)
|
|
36
|
+
*/
|
|
37
|
+
typeStyle?:
|
|
38
|
+
| 'char'
|
|
39
|
+
| 'word'
|
|
40
|
+
| 'scramble'
|
|
41
|
+
| 'fade-trail'
|
|
42
|
+
| 'word-fade'
|
|
43
|
+
| 'float-in-top'
|
|
44
|
+
| 'float-in-bottom'
|
|
45
|
+
| 'float-in-left'
|
|
46
|
+
| 'float-in-right'
|
|
47
|
+
| 'zoom-in-space';
|
|
48
|
+
/** Word reveal/erase order used by `word-fade` and the spatial word-motion styles. Default: 'left-to-right'. */
|
|
49
|
+
wordOrder?: 'left-to-right' | 'right-to-left' | 'random';
|
|
50
|
+
/** Stable-layout strategy used by `word-fade` and the spatial word-motion styles. Default: 'opacity'. */
|
|
51
|
+
wordLayout?: 'opacity' | 'placeholder';
|
|
52
|
+
/** Opacity/transform transition duration for each word in milliseconds. Default: 280. */
|
|
53
|
+
wordFadeDuration?: number;
|
|
54
|
+
/** Delay between consecutive word transitions in milliseconds. Defaults to `speed`. */
|
|
55
|
+
wordStagger?: number;
|
|
56
|
+
/** Optional seed for reproducible random word ordering. */
|
|
57
|
+
wordSeed?: string | number;
|
|
58
|
+
/** Translate distance in pixels for `float-in-*` word-motion styles. Default: 24. */
|
|
59
|
+
wordMotionDistance?: number;
|
|
60
|
+
/** translateZ depth in pixels for the `zoom-in-space` word-motion style. Default: 160. */
|
|
61
|
+
wordMotionDepth?: number;
|
|
62
|
+
/** Starting scale (0-1) for the `zoom-in-space` word-motion style. Default: 0.82. */
|
|
63
|
+
wordMotionScale?: number;
|
|
64
|
+
/** CSS perspective in pixels applied to the target element for `zoom-in-space`. Default: 600. */
|
|
65
|
+
wordMotionPerspective?: number;
|
|
66
|
+
/** CSS timing function for `float-in-*` and `zoom-in-space` word transitions. Default: 'ease'. */
|
|
67
|
+
wordMotionEasing?: string;
|
|
68
|
+
/** Soft trailing opacity gradient length in characters (e.g. 3) or boolean during reveal/erase. */
|
|
69
|
+
trailFade?: number | boolean;
|
|
70
|
+
/** Lowest opacity used by trailing fade characters. Default: 0.18. */
|
|
71
|
+
trailMinOpacity?: number;
|
|
72
|
+
/** Built-in scramble charset preset name. */
|
|
73
|
+
scrambleCharset?:
|
|
74
|
+
| 'matrix'
|
|
75
|
+
| 'ascii'
|
|
76
|
+
| 'ascii-extended'
|
|
77
|
+
| 'blocks'
|
|
78
|
+
| 'binary'
|
|
79
|
+
| 'hex'
|
|
80
|
+
| 'braille'
|
|
81
|
+
| 'runic'
|
|
82
|
+
| 'cyber';
|
|
83
|
+
/** Custom scramble glyph characters when typeStyle or eraseStyle is 'scramble'. */
|
|
84
|
+
scrambleGlyphs?: string;
|
|
85
|
+
/** Number of scramble iterations per unit before settling. Default: 2 */
|
|
86
|
+
scrambleRounds?: number;
|
|
87
|
+
/** CSS color applied to the active scramble glyph. */
|
|
88
|
+
scrambleColor?: string;
|
|
89
|
+
/** CSS gradient applied to the active scramble glyph. Overrides scrambleColor. */
|
|
90
|
+
scrambleGradient?: string;
|
|
91
|
+
/** Zero-dependency Web Audio synthesizer sound effect or custom audio callback. */
|
|
92
|
+
audio?: 'mechanical' | 'beep' | 'synth' | boolean | (() => void);
|
|
93
|
+
/** Extra tags allowed in html mode, merged with the safe default list. */
|
|
94
|
+
allowedTags?: string[];
|
|
95
|
+
/** Extra attributes allowed per tag, merged with the safe default map. */
|
|
96
|
+
allowedAttributes?: Record<string, string[]>;
|
|
97
|
+
/** Custom sanitizer. Receives raw HTML, must return safe HTML. Overrides the built-in sanitizer. */
|
|
98
|
+
sanitizer?: (html: string) => string;
|
|
99
|
+
/** Instantly complete instead of animating if the user prefers reduced motion. Default: true */
|
|
100
|
+
respectReducedMotion?: boolean;
|
|
101
|
+
/** aria-live region setting applied to the target for the duration of typing. */
|
|
102
|
+
ariaLive?: 'off' | 'polite' | 'assertive';
|
|
103
|
+
/**
|
|
104
|
+
* Erase-only: which direction/technique to erase with. Default: 'end'
|
|
105
|
+
* - 'end' backspace-style, removes from the right
|
|
106
|
+
* - 'start' removes from the left, tail stays until the end
|
|
107
|
+
* - 'center' shrinks inward toward center
|
|
108
|
+
* - 'scramble' scrambles characters into glyphs before clearing
|
|
109
|
+
* - 'fade-trail' dissolves trailing characters with a soft opacity ramp
|
|
110
|
+
* - 'instant' clears immediately, no animation
|
|
111
|
+
* - 'fade' CSS opacity fade-out, then clears
|
|
112
|
+
* - 'word-fade' fades words without changing their layout positions
|
|
113
|
+
* - 'float-in-*' fades words out while sliding them top/bottom/left/right
|
|
114
|
+
* - 'zoom-in-space' fades words out while shrinking them back into depth
|
|
115
|
+
*/
|
|
116
|
+
eraseStyle?:
|
|
117
|
+
| 'end'
|
|
118
|
+
| 'start'
|
|
119
|
+
| 'center'
|
|
120
|
+
| 'scramble'
|
|
121
|
+
| 'fade-trail'
|
|
122
|
+
| 'instant'
|
|
123
|
+
| 'fade'
|
|
124
|
+
| 'word-fade'
|
|
125
|
+
| 'float-in-top'
|
|
126
|
+
| 'float-in-bottom'
|
|
127
|
+
| 'float-in-left'
|
|
128
|
+
| 'float-in-right'
|
|
129
|
+
| 'zoom-in-space';
|
|
130
|
+
/** Erase-only: duration in ms for eraseStyle 'fade'. Default: 250 */
|
|
131
|
+
duration?: number;
|
|
132
|
+
/**
|
|
133
|
+
* Erase-only: if the target was built with mode: 'append', preserve that
|
|
134
|
+
* original prefix and only erase what was typed after it. Default: true
|
|
135
|
+
*/
|
|
136
|
+
preserveBaseline?: boolean;
|
|
137
|
+
onStart?: () => void;
|
|
138
|
+
onComplete?: (text: string) => void;
|
|
139
|
+
onInterrupt?: () => void;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface TypeFlowResult {
|
|
143
|
+
/** false if stop() was called before the animation finished. */
|
|
144
|
+
completed: boolean;
|
|
145
|
+
text: string;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export interface TypeFlowController {
|
|
149
|
+
/** Stop the animation immediately, leaving whatever has been typed/erased so far. */
|
|
150
|
+
stop: () => void;
|
|
151
|
+
/** Always resolves — check `completed` to distinguish finish vs. interruption. Never rejects on interrupt. */
|
|
152
|
+
promise: Promise<TypeFlowResult>;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface TypeFlowStreamController {
|
|
156
|
+
/** Pushes a new chunk / token into the sequential typing buffer. */
|
|
157
|
+
push: (chunk: string) => void;
|
|
158
|
+
/** Halts streaming and active typing immediately. */
|
|
159
|
+
stop: () => void;
|
|
160
|
+
/** Halts streaming and clears element text content. */
|
|
161
|
+
clear: () => void;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export type TypeFlowStep =
|
|
165
|
+
| { kind: 'type'; target?: HTMLElement | string; text: string; config?: TypeFlowConfig }
|
|
166
|
+
| { kind: 'erase'; target?: HTMLElement | string; config?: TypeFlowConfig }
|
|
167
|
+
| { kind: 'pause'; duration: number }
|
|
168
|
+
| { kind: 'visible'; target?: HTMLElement | string; threshold?: number }
|
|
169
|
+
| { kind: 'call'; fn: () => void | Promise<void> };
|
|
170
|
+
|
|
171
|
+
export interface TypeFlowSequenceConfig {
|
|
172
|
+
/** Number of times to run the sequence. Use Infinity to loop forever. Default: 1 */
|
|
173
|
+
repeat?: number;
|
|
174
|
+
/**
|
|
175
|
+
* Default target used by any step that omits its own `target` — handy
|
|
176
|
+
* when a sequence types/erases on a single element. Steps can still
|
|
177
|
+
* override this individually for multi-element sequences.
|
|
178
|
+
*/
|
|
179
|
+
target?: HTMLElement | string;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export interface TypeFlowRotateConfig {
|
|
183
|
+
typeConfig?: TypeFlowConfig;
|
|
184
|
+
eraseConfig?: TypeFlowConfig;
|
|
185
|
+
/** Ms to hold each word before erasing it. Default: 1200 */
|
|
186
|
+
holdDuration?: number;
|
|
187
|
+
/** Ms to wait between erasing one word and typing the next. Default: 200 */
|
|
188
|
+
pauseBetween?: number;
|
|
189
|
+
/** Default: Infinity */
|
|
190
|
+
repeat?: number;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export declare class TypeFlowEngine {
|
|
194
|
+
/** Types text or sanitized HTML into target element. */
|
|
195
|
+
type(target: HTMLElement | string, text: string, config?: TypeFlowConfig): TypeFlowController;
|
|
196
|
+
/** Erases the target's current content. */
|
|
197
|
+
erase(target: HTMLElement | string, config?: TypeFlowConfig): TypeFlowController;
|
|
198
|
+
/** Smart Diff Morphing: calculates common prefix, erases mismatched suffix, and types new text. */
|
|
199
|
+
morph(
|
|
200
|
+
target: HTMLElement | string,
|
|
201
|
+
nextText: string,
|
|
202
|
+
options?: TypeFlowConfig
|
|
203
|
+
): TypeFlowController;
|
|
204
|
+
/** Creates a real-time streaming chunk ingestion controller for LLM/SSE token streams. */
|
|
205
|
+
stream(
|
|
206
|
+
target: HTMLElement | string,
|
|
207
|
+
options?: TypeFlowConfig & { onChunk?: (chunk: string, fullText: string) => void }
|
|
208
|
+
): TypeFlowStreamController;
|
|
209
|
+
/** Returns a complete configuration object for an animation preset profile. */
|
|
210
|
+
preset(
|
|
211
|
+
name: 'cyberpunk' | 'terminal' | 'writer' | 'matrix' | 'blocks' | 'subtle',
|
|
212
|
+
overrides?: TypeFlowConfig
|
|
213
|
+
): TypeFlowConfig;
|
|
214
|
+
/** Runs type / erase / pause / visible / call steps in order. */
|
|
215
|
+
sequence(steps: TypeFlowStep[], seqConfig?: TypeFlowSequenceConfig): TypeFlowController;
|
|
216
|
+
/** QoL shortcut for the rotating text pattern. */
|
|
217
|
+
rotate(
|
|
218
|
+
target: HTMLElement | string,
|
|
219
|
+
words: string[],
|
|
220
|
+
config?: TypeFlowRotateConfig
|
|
221
|
+
): TypeFlowController;
|
|
222
|
+
/** Staggers typing across multiple DOM elements with an offset delay between each item. */
|
|
223
|
+
stagger(
|
|
224
|
+
targets: HTMLElement[] | NodeList | string,
|
|
225
|
+
textOrTexts?: string | string[] | ((el: HTMLElement, index: number) => string),
|
|
226
|
+
config?: TypeFlowConfig & { stagger?: number }
|
|
227
|
+
): TypeFlowController;
|
|
228
|
+
/** Observes dynamically added DOM elements matching childSelector. */
|
|
229
|
+
watch(
|
|
230
|
+
container: HTMLElement | string,
|
|
231
|
+
childSelector: string,
|
|
232
|
+
callback: (el: HTMLElement) => void
|
|
233
|
+
): { disconnect: () => void };
|
|
234
|
+
/** Measures candidate phrases and locks target dimensions to prevent layout shift. */
|
|
235
|
+
fit(target: HTMLElement | string, candidates: string[]): void;
|
|
236
|
+
/** Stops the active animation for target element. */
|
|
237
|
+
stop(target: HTMLElement | string): void;
|
|
238
|
+
/** Stops all active TypeFlow animations. */
|
|
239
|
+
stopAll(): void;
|
|
240
|
+
/** Returns true if target element currently has an active animation. */
|
|
241
|
+
isTyping(target: HTMLElement | string): boolean;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export declare const TypeFlow: TypeFlowEngine;
|
|
245
|
+
export default TypeFlow;
|
|
246
|
+
|
|
247
|
+
export declare const seq: {
|
|
248
|
+
type: (target?: HTMLElement | string, text?: string, config?: TypeFlowConfig) => TypeFlowStep;
|
|
249
|
+
erase: (target?: HTMLElement | string, config?: TypeFlowConfig) => TypeFlowStep;
|
|
250
|
+
pause: (duration: number) => TypeFlowStep;
|
|
251
|
+
visible: (target?: HTMLElement | string, threshold?: number) => TypeFlowStep;
|
|
252
|
+
call: (fn: () => void | Promise<void>) => TypeFlowStep;
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
export interface ReactLike {
|
|
256
|
+
useRef: <T>(initial: T | null) => { current: T | null };
|
|
257
|
+
useEffect: (fn: () => void | (() => void), deps: unknown[]) => void;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export declare function createTypeFlowReact(
|
|
261
|
+
React: ReactLike
|
|
262
|
+
): <T extends HTMLElement = HTMLElement>(
|
|
263
|
+
text: string,
|
|
264
|
+
config?: TypeFlowConfig
|
|
265
|
+
) => { current: T | null };
|
|
266
|
+
|
|
267
|
+
export declare function createTypeFlowSequenceReact(
|
|
268
|
+
React: ReactLike
|
|
269
|
+
): (buildSteps: () => TypeFlowStep[], deps: unknown[]) => void;
|
|
270
|
+
|
|
271
|
+
export interface VueLike {
|
|
272
|
+
ref: <T>(initial: T | null) => { value: T | null };
|
|
273
|
+
watch: (source: unknown, cb: () => void, opts?: { immediate?: boolean }) => void;
|
|
274
|
+
onBeforeUnmount: (cb: () => void) => void;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export declare function createTypeFlowVue(
|
|
278
|
+
Vue: VueLike
|
|
279
|
+
): <T extends HTMLElement = HTMLElement>(
|
|
280
|
+
getText: () => string,
|
|
281
|
+
config?: TypeFlowConfig
|
|
282
|
+
) => { value: T | null };
|
|
283
|
+
|
|
284
|
+
export declare function createTypeFlowSequenceVue(
|
|
285
|
+
Vue: VueLike
|
|
286
|
+
): (buildSteps: () => TypeFlowStep[]) => () => void;
|
|
287
|
+
|
|
288
|
+
export declare function createTypeFlowSvelte(): (
|
|
289
|
+
node: HTMLElement,
|
|
290
|
+
params: { text: string; config?: TypeFlowConfig } | string
|
|
291
|
+
) => {
|
|
292
|
+
update: (newParams: { text: string; config?: TypeFlowConfig } | string) => void;
|
|
293
|
+
destroy: () => void;
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
export interface SolidLike {
|
|
297
|
+
createSignal: <T>(value: T) => [() => T, (v: T) => T];
|
|
298
|
+
createEffect: (fn: () => void) => void;
|
|
299
|
+
onCleanup: (fn: () => void) => void;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export declare function createTypeFlowSolid(
|
|
303
|
+
Solid: SolidLike
|
|
304
|
+
): <T extends HTMLElement = HTMLElement>(
|
|
305
|
+
getText: () => string,
|
|
306
|
+
config?: TypeFlowConfig
|
|
307
|
+
) => (element: T) => void;
|
|
308
|
+
|
|
309
|
+
export interface AlpineLike {
|
|
310
|
+
directive: (
|
|
311
|
+
name: string,
|
|
312
|
+
handler: (
|
|
313
|
+
el: HTMLElement,
|
|
314
|
+
directive: { expression: string; modifiers: string[] },
|
|
315
|
+
utilities: {
|
|
316
|
+
evaluateLater: <T>(exp: string) => (callback: (val: T) => void) => void;
|
|
317
|
+
effect: (fn: () => void) => void;
|
|
318
|
+
cleanup: (fn: () => void) => void;
|
|
319
|
+
}
|
|
320
|
+
) => void
|
|
321
|
+
) => void;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export declare function createTypeFlowAlpine(Alpine: AlpineLike): void;
|
|
325
|
+
|
|
326
|
+
export declare function defineTypeFlowElement(
|
|
327
|
+
customElementsRegistry?: CustomElementRegistry | null
|
|
328
|
+
): void;
|