@lancercomet/zoom-pan 0.1.1 → 0.1.3

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.
@@ -0,0 +1,212 @@
1
+ import type { LayerManagerBase } from '../layer/layer-manager.base';
2
+ import type { Plugin } from '../plugins/types';
3
+ type RenderFn = (view: ViewManager) => void;
4
+ type UpdateCallback = (dt: number) => void;
5
+ type RenderCallback = (ctx: CanvasRenderingContext2D) => void;
6
+ interface ViewManagerOption {
7
+ minZoom?: number;
8
+ maxZoom?: number;
9
+ approachKZoom?: number;
10
+ approachKPan?: number;
11
+ autoResize?: boolean;
12
+ background?: string | null;
13
+ }
14
+ declare class ViewManager {
15
+ readonly canvas: HTMLCanvasElement;
16
+ readonly context: CanvasRenderingContext2D;
17
+ readonly contentCanvas: HTMLCanvasElement;
18
+ readonly contentContext: CanvasRenderingContext2D;
19
+ readonly topScreenCanvas: HTMLCanvasElement;
20
+ readonly topScreenContext: CanvasRenderingContext2D;
21
+ private readonly _render;
22
+ private readonly _options;
23
+ private readonly _resizeObserver?;
24
+ private _layerManagers;
25
+ private _plugins;
26
+ private _isResetting;
27
+ private _isResizing;
28
+ private _resizeReleaseTimer;
29
+ private _needsRender;
30
+ private _raf;
31
+ private _lastFrameTs;
32
+ private _tx;
33
+ private _ty;
34
+ private _anchorX;
35
+ private _anchorY;
36
+ private _currentLogZ;
37
+ private _targetLogZ;
38
+ private LOG_MIN;
39
+ private LOG_MAX;
40
+ private _updateCallbacks;
41
+ private _beforeRenderCallbacks;
42
+ private _afterRenderCallbacks;
43
+ get zoom(): number;
44
+ get minZoom(): number;
45
+ get maxZoom(): number;
46
+ private _dpr;
47
+ get dpr(): number;
48
+ /**
49
+ * Install a plugin.
50
+ */
51
+ use<T extends Plugin>(plugin: T): T;
52
+ /**
53
+ * Uninstall a plugin by name.
54
+ */
55
+ unuse(name: string): void;
56
+ /**
57
+ * Get an installed plugin by name.
58
+ */
59
+ getPlugin<T extends Plugin>(name: string): T | undefined;
60
+ /**
61
+ * Register a callback to be called every frame with delta time.
62
+ */
63
+ onUpdate(callback: UpdateCallback): void;
64
+ /**
65
+ * Unregister an update callback.
66
+ */
67
+ offUpdate(callback: UpdateCallback): void;
68
+ /**
69
+ * Register a callback to be called before rendering (with world transform applied).
70
+ */
71
+ onBeforeRender(callback: RenderCallback): void;
72
+ /**
73
+ * Unregister a before-render callback.
74
+ */
75
+ offBeforeRender(callback: RenderCallback): void;
76
+ /**
77
+ * Register a callback to be called after rendering.
78
+ */
79
+ onAfterRender(callback: RenderCallback): void;
80
+ /**
81
+ * Unregister an after-render callback.
82
+ */
83
+ offAfterRender(callback: RenderCallback): void;
84
+ /**
85
+ * Request a render on the next frame.
86
+ * Call this when content changes and needs to be redrawn.
87
+ */
88
+ requestRender(): void;
89
+ /**
90
+ * Clamp target zoom (log space) to range.
91
+ */
92
+ private _clampLog;
93
+ /**
94
+ * Set target zoom at screen anchor point, with smooth transition.
95
+ */
96
+ private _setTargetLogZoomAtScreen;
97
+ /**
98
+ * Zoom to absolute zoom level at screen point, with smooth transition.
99
+ */
100
+ zoomToAtScreen(anchorX: number, anchorY: number, zoom: number): void;
101
+ /**
102
+ * Zoom to absolute zoom level at screen point, instantly (no animation).
103
+ */
104
+ zoomToAtScreenRaw(anchorX: number, anchorY: number, zoom: number): void;
105
+ /**
106
+ * Zoom to absolute zoom level at world point, with smooth transition.
107
+ */
108
+ zoomToAtWorld(wx: number, wy: number, zoom: number): void;
109
+ /**
110
+ * Zoom by multiplicative factor at screen point, with smooth transition.
111
+ */
112
+ zoomByFactorAtScreen(anchorX: number, anchorY: number, factor: number): void;
113
+ /**
114
+ * Zoom by log step at screen point. Used by interaction plugin.
115
+ */
116
+ zoomByLogAtScreen(anchorX: number, anchorY: number, stepLog: number): void;
117
+ /**
118
+ * Zoom by multiplicative factor at world point, with smooth transition.
119
+ */
120
+ zoomByFactorAtWorld(wx: number, wy: number, factor: number): void;
121
+ /**
122
+ * Pan by delta (CSS px).
123
+ */
124
+ panBy(dx: number, dy: number): void;
125
+ /**
126
+ * Set pan position (CSS px).
127
+ */
128
+ setPan(tx: number, ty: number): void;
129
+ /**
130
+ * Set full transform: zoom and pan.
131
+ */
132
+ setTransform(zoom: number, tx: number, ty: number): void;
133
+ private _ensureOffscreenSizeLike;
134
+ private _loop;
135
+ applyWorldTransform(ctx: CanvasRenderingContext2D): void;
136
+ applyScreenTransform(ctx: CanvasRenderingContext2D): void;
137
+ getPixelColorAtScreen(sx: number, sy: number): {
138
+ r: number;
139
+ g: number;
140
+ b: number;
141
+ a: number;
142
+ rgba: string;
143
+ hex: string;
144
+ };
145
+ getPixelColorAtWorld(wx: number, wy: number): {
146
+ r: number;
147
+ g: number;
148
+ b: number;
149
+ a: number;
150
+ rgba: string;
151
+ hex: string;
152
+ };
153
+ registerLayerManager(manager: LayerManagerBase): void;
154
+ unregisterLayerManager(manager: LayerManagerBase): void;
155
+ getLayerManagers(): LayerManagerBase[];
156
+ /**
157
+ * Smoothly reset to zoom=1, pan=(0,0).
158
+ */
159
+ resetSmooth(): void;
160
+ /**
161
+ * Instantly reset (no animation).
162
+ */
163
+ resetInstant(): void;
164
+ /**
165
+ * Convert screen (canvas client) -> world.
166
+ */
167
+ toWorld(x: number, y: number): {
168
+ wx: number;
169
+ wy: number;
170
+ };
171
+ /**
172
+ * Convert world -> screen (canvas client).
173
+ */
174
+ toScreen(wx: number, wy: number): {
175
+ x: number;
176
+ y: number;
177
+ };
178
+ /**
179
+ * Get current transform.
180
+ */
181
+ getTransform(): {
182
+ zoom: number;
183
+ tx: number;
184
+ ty: number;
185
+ };
186
+ /**
187
+ * Get viewport bounds in world coordinates.
188
+ */
189
+ getViewportBounds(): {
190
+ left: number;
191
+ top: number;
192
+ right: number;
193
+ bottom: number;
194
+ width: number;
195
+ height: number;
196
+ };
197
+ /**
198
+ * Set zoom range.
199
+ */
200
+ setZoomRange(minZoom: number, maxZoom: number): void;
201
+ /**
202
+ * Resize canvas to match parent size and DPR.
203
+ */
204
+ resizeToParent(): void;
205
+ /**
206
+ * Destroy and cleanup.
207
+ */
208
+ destroy(): void;
209
+ constructor(canvas: HTMLCanvasElement, render: RenderFn, options?: ViewManagerOption);
210
+ }
211
+ export { ViewManager };
212
+ export type { ViewManagerOption, RenderFn, UpdateCallback, RenderCallback };