manim-web 0.30.0 → 0.31.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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/integrations/notebook.js +11 -11
- package/dist/integrations/react.js +17 -17
- package/dist/integrations/vue.js +16 -16
- package/dist/interaction/KeyboardInput.d.ts +210 -0
- package/dist/interaction/KeyboardInput.d.ts.map +1 -0
- package/dist/interaction/index.d.ts +1 -0
- package/dist/interaction/index.d.ts.map +1 -1
- package/dist/manim-web.browser.js +700 -572
- package/dist/{src-BGT84Qli.js → src-DegxZDnn.js} +685 -557
- package/package.json +1 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KeyboardInput — a general-purpose keyboard controller for interactive apps
|
|
3
|
+
* and games.
|
|
4
|
+
*
|
|
5
|
+
* manim-web already has pointer interaction (`Clickable` / `Draggable` /
|
|
6
|
+
* `Hoverable`) and a `StateMachine`, but no general keyboard primitive. This
|
|
7
|
+
* controller tracks held keys, exposes per-frame edge queries (`wasPressed` /
|
|
8
|
+
* `wasReleased`), derives a movement vector from arrow keys and WASD, and binds
|
|
9
|
+
* a key to a `StateMachine` input or a `ValueTracker`. It makes the kind of
|
|
10
|
+
* interactive software and games that plain Manim cannot do first-class in the
|
|
11
|
+
* browser.
|
|
12
|
+
*
|
|
13
|
+
* All DOM access is feature-detected, so the controller is safe to construct
|
|
14
|
+
* in Node, jsdom, or a headless render. Without a window the reads return
|
|
15
|
+
* `false` or zero and never throw.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const keys = new KeyboardInput({ preventDefault: true });
|
|
20
|
+
* // In the render loop, each frame:
|
|
21
|
+
* function frame(dt: number): void {
|
|
22
|
+
* const [dx, dy] = keys.getDirectionVector();
|
|
23
|
+
* player.shift([dx * speed * dt, dy * speed * dt, 0]);
|
|
24
|
+
* if (keys.wasPressed('Space')) player.jump();
|
|
25
|
+
* keys.endFrame(); // clear the per-frame pressed/released edges
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
/** A per-key or wildcard callback. `key` is the normalized key name. */
|
|
30
|
+
export type KeyCallback = (key: string, event: KeyboardEvent) => void;
|
|
31
|
+
/** Unsubscribe from a callback registration. */
|
|
32
|
+
export type Unsubscribe = () => void;
|
|
33
|
+
/**
|
|
34
|
+
* Minimal view of a `StateMachine` for binding. Both `StateMachine.setInput`
|
|
35
|
+
* and `StateMachine.fire` match this, so no import of the class is needed.
|
|
36
|
+
*/
|
|
37
|
+
export interface StateMachineInputSink {
|
|
38
|
+
setInput(name: string, value: boolean | number): unknown;
|
|
39
|
+
fire(name: string): unknown;
|
|
40
|
+
}
|
|
41
|
+
/** Minimal view of a `ValueTracker` for binding. */
|
|
42
|
+
export interface ValueSink {
|
|
43
|
+
setValue(value: number): unknown;
|
|
44
|
+
}
|
|
45
|
+
/** Options for a {@link KeyboardInput}. */
|
|
46
|
+
export interface KeyboardInputOptions {
|
|
47
|
+
/**
|
|
48
|
+
* Call `preventDefault()` on handled key events. `true` applies to every
|
|
49
|
+
* key; an array restricts it to the listed (normalized) keys. Use it so game
|
|
50
|
+
* keys such as the arrows and Space do not scroll the page. Default `false`.
|
|
51
|
+
*/
|
|
52
|
+
preventDefault?: boolean | string[];
|
|
53
|
+
/**
|
|
54
|
+
* Attach the listeners immediately on construction. Set `false` to attach
|
|
55
|
+
* later with {@link KeyboardInput.enable}. Default `true`.
|
|
56
|
+
*/
|
|
57
|
+
autoEnable?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/** Options for {@link KeyboardInput.bindValue}. */
|
|
60
|
+
export interface BindValueOptions {
|
|
61
|
+
/** Value written to the tracker while the key is held. */
|
|
62
|
+
heldValue: number;
|
|
63
|
+
/** Value written when the key is released. Default `0`. */
|
|
64
|
+
releasedValue?: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Normalize a raw `KeyboardEvent.key` or a user query to a canonical,
|
|
68
|
+
* lowercase name. `'ArrowUp'`, `'W'`, and `' '` become `'arrowup'`, `'w'`, and
|
|
69
|
+
* `'space'`, so a held key reads back under any common spelling.
|
|
70
|
+
* @param key - A raw key name.
|
|
71
|
+
* @returns The canonical key name.
|
|
72
|
+
*/
|
|
73
|
+
export declare function normalizeKey(key: string): string;
|
|
74
|
+
/**
|
|
75
|
+
* Tracks keyboard state for interactive apps and games. Mirrors the
|
|
76
|
+
* `Clickable` / `OrbitControls` lifecycle: construct, then
|
|
77
|
+
* {@link enable} / {@link disable} / {@link dispose}.
|
|
78
|
+
*/
|
|
79
|
+
export declare class KeyboardInput {
|
|
80
|
+
private readonly _target;
|
|
81
|
+
private readonly _preventDefault;
|
|
82
|
+
private readonly _down;
|
|
83
|
+
private readonly _pressed;
|
|
84
|
+
private readonly _released;
|
|
85
|
+
private readonly _downCallbacks;
|
|
86
|
+
private readonly _upCallbacks;
|
|
87
|
+
private _enabled;
|
|
88
|
+
private readonly _onKeyDown;
|
|
89
|
+
private readonly _onKeyUp;
|
|
90
|
+
/**
|
|
91
|
+
* Create a KeyboardInput.
|
|
92
|
+
* @param options - Behavior options.
|
|
93
|
+
* @param domTarget - Event target for key events. Defaults to `window` (or
|
|
94
|
+
* `document`), or `null` when no DOM is present.
|
|
95
|
+
*/
|
|
96
|
+
constructor(options?: KeyboardInputOptions, domTarget?: EventTarget | null);
|
|
97
|
+
/** Whether the listeners are attached. */
|
|
98
|
+
get isEnabled(): boolean;
|
|
99
|
+
/** Whether a DOM target is available. `false` in a headless environment. */
|
|
100
|
+
get hasTarget(): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Attach the key listeners. A no-op when already enabled or headless.
|
|
103
|
+
*/
|
|
104
|
+
enable(): void;
|
|
105
|
+
/**
|
|
106
|
+
* Detach the key listeners and clear all held and edge state, so no key stays
|
|
107
|
+
* stuck. Reads return defaults until {@link enable} is called again.
|
|
108
|
+
*/
|
|
109
|
+
disable(): void;
|
|
110
|
+
/**
|
|
111
|
+
* Detach listeners and drop every registered callback. Use when the
|
|
112
|
+
* controller is no longer needed.
|
|
113
|
+
*/
|
|
114
|
+
dispose(): void;
|
|
115
|
+
/** Clear held keys and both per-frame edge sets. */
|
|
116
|
+
clear(): void;
|
|
117
|
+
/**
|
|
118
|
+
* Whether the key is held right now.
|
|
119
|
+
* @param key - A key name in any common spelling (`'ArrowUp'`, `'w'`, `' '`).
|
|
120
|
+
*/
|
|
121
|
+
isKeyDown(key: string): boolean;
|
|
122
|
+
/** Whether any key is held right now. */
|
|
123
|
+
anyKeyDown(): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Whether the key went down during the current frame. Cleared by
|
|
126
|
+
* {@link update} / {@link endFrame}. Key auto-repeat does not re-fire it.
|
|
127
|
+
* @param key - A key name in any common spelling.
|
|
128
|
+
*/
|
|
129
|
+
wasPressed(key: string): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Whether the key came up during the current frame. Cleared by
|
|
132
|
+
* {@link update} / {@link endFrame}.
|
|
133
|
+
* @param key - A key name in any common spelling.
|
|
134
|
+
*/
|
|
135
|
+
wasReleased(key: string): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* The raw movement axes from the arrow keys and WASD, each component in
|
|
138
|
+
* `{-1, 0, 1}`. Up is +y and right is +x; opposite keys cancel.
|
|
139
|
+
* @returns `[x, y]`.
|
|
140
|
+
*/
|
|
141
|
+
getAxis(): [number, number];
|
|
142
|
+
/**
|
|
143
|
+
* The movement vector from {@link getAxis}, normalized to unit length so a
|
|
144
|
+
* diagonal is not faster than a straight line. A zero axis stays `[0, 0]`.
|
|
145
|
+
* @returns `[x, y]`.
|
|
146
|
+
*/
|
|
147
|
+
getDirectionVector(): [number, number];
|
|
148
|
+
/**
|
|
149
|
+
* Register a key-down callback. Repeated auto-repeat events do not re-fire it.
|
|
150
|
+
* @param key - A key name, or `'any'` for every key.
|
|
151
|
+
* @param callback - Called with the normalized key and the event.
|
|
152
|
+
* @returns An unsubscribe function.
|
|
153
|
+
*/
|
|
154
|
+
onKeyDown(key: string, callback: KeyCallback): Unsubscribe;
|
|
155
|
+
/**
|
|
156
|
+
* Register a key-up callback.
|
|
157
|
+
* @param key - A key name, or `'any'` for every key.
|
|
158
|
+
* @param callback - Called with the normalized key and the event.
|
|
159
|
+
* @returns An unsubscribe function.
|
|
160
|
+
*/
|
|
161
|
+
onKeyUp(key: string, callback: KeyCallback): Unsubscribe;
|
|
162
|
+
/**
|
|
163
|
+
* Hold a `StateMachine` bool input to match a key: `true` while held, `false`
|
|
164
|
+
* on release.
|
|
165
|
+
* @param machine - The `StateMachine` (or any {@link StateMachineInputSink}).
|
|
166
|
+
* @param inputName - The bool input name.
|
|
167
|
+
* @param key - The key to track.
|
|
168
|
+
* @returns An unsubscribe function.
|
|
169
|
+
*/
|
|
170
|
+
bindBool(machine: StateMachineInputSink, inputName: string, key: string): Unsubscribe;
|
|
171
|
+
/**
|
|
172
|
+
* Fire a `StateMachine` trigger input on each key-down.
|
|
173
|
+
* @param machine - The `StateMachine` (or any {@link StateMachineInputSink}).
|
|
174
|
+
* @param triggerName - The trigger input name.
|
|
175
|
+
* @param key - The key to track.
|
|
176
|
+
* @returns An unsubscribe function.
|
|
177
|
+
*/
|
|
178
|
+
bindTrigger(machine: StateMachineInputSink, triggerName: string, key: string): Unsubscribe;
|
|
179
|
+
/**
|
|
180
|
+
* Drive a `ValueTracker` from a key: `heldValue` while held, `releasedValue`
|
|
181
|
+
* on release.
|
|
182
|
+
* @param tracker - The `ValueTracker` (or any {@link ValueSink}).
|
|
183
|
+
* @param key - The key to track.
|
|
184
|
+
* @param options - The held and released values.
|
|
185
|
+
* @returns An unsubscribe function.
|
|
186
|
+
*/
|
|
187
|
+
bindValue(tracker: ValueSink, key: string, options: BindValueOptions): Unsubscribe;
|
|
188
|
+
/**
|
|
189
|
+
* Clear the per-frame pressed and released edge sets. Call once per frame
|
|
190
|
+
* after reading {@link wasPressed} / {@link wasReleased}.
|
|
191
|
+
* @param _dt - Delta time (seconds), accepted for render-loop compatibility.
|
|
192
|
+
*/
|
|
193
|
+
update(_dt?: number): void;
|
|
194
|
+
/** Alias of {@link update} that clears the per-frame edge sets. */
|
|
195
|
+
endFrame(): void;
|
|
196
|
+
private _anyDown;
|
|
197
|
+
private _handleKeyDown;
|
|
198
|
+
private _handleKeyUp;
|
|
199
|
+
private _maybePreventDefault;
|
|
200
|
+
private _addCallback;
|
|
201
|
+
private _emit;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Factory for a {@link KeyboardInput}.
|
|
205
|
+
* @param options - Behavior options.
|
|
206
|
+
* @param domTarget - Event target for key events.
|
|
207
|
+
* @returns A new KeyboardInput.
|
|
208
|
+
*/
|
|
209
|
+
export declare function makeKeyboardInput(options?: KeyboardInputOptions, domTarget?: EventTarget | null): KeyboardInput;
|
|
210
|
+
//# sourceMappingURL=KeyboardInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyboardInput.d.ts","sourceRoot":"","sources":["../../src/interaction/KeyboardInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export { Slider, makeSlider, type SliderOptions } from './Slider';
|
|
|
12
12
|
export { MatrixTracker, makeMatrixTracker, applyMatrixLive, type Matrix2x2, type MatrixSource, type BasisVectorSource, type DependentPoint, type DynamicMatrixOptions, type LiveMatrixBinding, } from './DynamicMatrix';
|
|
13
13
|
export { SelectionManager, type SelectionManagerOptions } from './SelectionManager';
|
|
14
14
|
export { StateMachine, GuardBuilder, when, allOf, anyOf, type InputValue, type InputKind, type InputsSnapshot, type Guard, type StateContext, type StateAction, type StateConfig, type TransitionConfig, type StateMachineOptions, } from './StateMachine';
|
|
15
|
+
export { KeyboardInput, makeKeyboardInput, normalizeKey, type KeyboardInputOptions, type KeyCallback, type Unsubscribe, type StateMachineInputSink, type ValueSink, type BindValueOptions, } from './KeyboardInput';
|
|
15
16
|
export { OrbitControls, type OrbitControlsOptions } from './OrbitControls';
|
|
16
17
|
export { PanZoomControls, makePanZoomControls, type PanZoomControlsOptions, type PanZoomCamera, type PanZoomBounds, } from './PanZoomControls';
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interaction/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG9E,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGpF,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interaction/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG9E,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGpF,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,mBAAmB,CAAC"}
|