@ericchen1990/pano-view 0.1.6 → 0.2.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 +272 -8
- package/dist/index.cjs +2383 -645
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +389 -9
- package/dist/index.d.ts +389 -9
- package/dist/index.mjs +2400 -667
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ReactNode, ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
import { ReactNode, CSSProperties, ComponentPropsWithoutRef } from 'react';
|
|
3
3
|
import { Texture, ColorRepresentation, Vector3 } from 'three';
|
|
4
4
|
|
|
5
5
|
declare const MAX_HOTSPOT_PITCH = 90;
|
|
@@ -75,6 +75,51 @@ type PanoramaPointerEvent = {
|
|
|
75
75
|
clientY: number;
|
|
76
76
|
};
|
|
77
77
|
|
|
78
|
+
type KeyboardControlAction = "left" | "right" | "up" | "down" | "zoomIn" | "zoomOut" | "previousScene" | "nextScene" | "reset";
|
|
79
|
+
type KeyboardControlKeys = Partial<Record<KeyboardControlAction, string | readonly string[]>>;
|
|
80
|
+
/** Options for keyboard-driven panorama navigation. */
|
|
81
|
+
type KeyboardControlsProps = {
|
|
82
|
+
/** Whether keyboard handling is active. Defaults to true. */
|
|
83
|
+
enabled?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Custom key bindings. Each action accepts a key, code, or list of either.
|
|
86
|
+
* Matching is case-insensitive for `event.key` and exact for `event.code`.
|
|
87
|
+
*/
|
|
88
|
+
keys?: KeyboardControlKeys;
|
|
89
|
+
/** Yaw/pitch change rate in degrees per second. Defaults to 60. */
|
|
90
|
+
rotateSpeed?: number;
|
|
91
|
+
/** FOV change rate in degrees per second. Defaults to 30. */
|
|
92
|
+
zoomSpeed?: number;
|
|
93
|
+
/** Speed multiplier while Shift is held. Defaults to 3. */
|
|
94
|
+
shiftMultiplier?: number;
|
|
95
|
+
/** Inverts up/down look direction. Defaults to false. */
|
|
96
|
+
invert?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Maximum FOV change rate in degrees per second. When omitted, no extra
|
|
99
|
+
* rate cap is applied. Usually supplied by PanoView from `controls.fovSpeed`.
|
|
100
|
+
*/
|
|
101
|
+
fovSpeed?: number;
|
|
102
|
+
/** Called once when the previous-scene binding is pressed. */
|
|
103
|
+
onPreviousScene?: () => void;
|
|
104
|
+
/** Called once when the next-scene binding is pressed. */
|
|
105
|
+
onNextScene?: () => void;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Returns the scene id `step` positions away from `activeSceneId` in
|
|
109
|
+
* `scenes`, wrapping at both ends. Returns `null` when the list is empty or
|
|
110
|
+
* the active id is missing.
|
|
111
|
+
*/
|
|
112
|
+
declare function cycleSceneId(scenes: readonly {
|
|
113
|
+
id: string;
|
|
114
|
+
}[], activeSceneId: string, step: 1 | -1): string | null;
|
|
115
|
+
/**
|
|
116
|
+
* Adds keyboard navigation to the nearest PanoView. PanoView mounts a default
|
|
117
|
+
* instance; render your own to customize bindings or scene callbacks. Hold
|
|
118
|
+
* movement/zoom keys for continuous motion; scene and reset bindings fire once
|
|
119
|
+
* per key press.
|
|
120
|
+
*/
|
|
121
|
+
declare function KeyboardControls({ enabled, keys, rotateSpeed, zoomSpeed, shiftMultiplier, invert, fovSpeed, onPreviousScene, onNextScene, }: KeyboardControlsProps): null;
|
|
122
|
+
|
|
78
123
|
type PanoViewState = {
|
|
79
124
|
/** Horizontal look angle in degrees. Positive values look right. */
|
|
80
125
|
yaw: number;
|
|
@@ -97,16 +142,74 @@ type PanoViewHandle = {
|
|
|
97
142
|
stopAutoRotate: () => void;
|
|
98
143
|
toggleFullscreen: () => Promise<void>;
|
|
99
144
|
};
|
|
145
|
+
type MouseControlButton = "left" | "middle" | "right";
|
|
146
|
+
/** Options for the default mouse control channel (also MouseControls props). */
|
|
147
|
+
type MouseControlsOptions = {
|
|
148
|
+
/** Whether mouse handling is active. Defaults to true. */
|
|
149
|
+
enabled?: boolean;
|
|
150
|
+
/** Pointer drag multiplier. Defaults to 0.35. */
|
|
151
|
+
rotateSpeed?: number;
|
|
152
|
+
/** Wheel zoom multiplier. Defaults to 0.08. */
|
|
153
|
+
zoomSpeed?: number;
|
|
154
|
+
/** Whether mouse-wheel zoom is enabled. Defaults to true. */
|
|
155
|
+
wheel?: boolean;
|
|
156
|
+
/** Inverts drag direction. Defaults to the all-mode `invert` value. */
|
|
157
|
+
invert?: boolean;
|
|
158
|
+
/** Mouse buttons that may drag the panorama. Defaults to `["left"]`. */
|
|
159
|
+
buttons?: readonly MouseControlButton[];
|
|
160
|
+
};
|
|
161
|
+
/** Options for the default touch control channel (also TouchControls props). */
|
|
162
|
+
type TouchControlsOptions = {
|
|
163
|
+
/** Whether touch handling is active. Defaults to true. */
|
|
164
|
+
enabled?: boolean;
|
|
165
|
+
/** Pointer drag multiplier. Defaults to 0.35. */
|
|
166
|
+
rotateSpeed?: number;
|
|
167
|
+
/** Inverts drag direction. Defaults to the all-mode `invert` value. */
|
|
168
|
+
invert?: boolean;
|
|
169
|
+
/** Whether two-finger pinch zoom is enabled. Defaults to true. */
|
|
170
|
+
pinchZoom?: boolean;
|
|
171
|
+
};
|
|
100
172
|
type PanoramaControlsOptions = {
|
|
173
|
+
/**
|
|
174
|
+
* Master switch for user view controls. Defaults to true. Setting
|
|
175
|
+
* `controls={false}` on PanoView still disables all user input.
|
|
176
|
+
*/
|
|
177
|
+
enabled?: boolean;
|
|
101
178
|
/** Enables drag and zoom inertia. Defaults to true. */
|
|
102
179
|
inertia?: boolean;
|
|
103
180
|
/** @deprecated Render <AutoRotate enabled /> inside PanoView instead. */
|
|
104
181
|
autoRotate?: boolean;
|
|
105
182
|
/** @deprecated Use AutoRotate's speed prop instead. */
|
|
106
183
|
autoRotateSpeed?: number;
|
|
107
|
-
/**
|
|
184
|
+
/**
|
|
185
|
+
* Inverts drag/pan direction for mouse and touch. Defaults to false.
|
|
186
|
+
* Per-channel `invert` on MouseControls / TouchControls overrides this.
|
|
187
|
+
*/
|
|
188
|
+
invert?: boolean;
|
|
189
|
+
/**
|
|
190
|
+
* Allows pitch and FOV to briefly overshoot hard limits while dragging,
|
|
191
|
+
* then spring back on release. Defaults to false.
|
|
192
|
+
*/
|
|
193
|
+
bouncingLimits?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Maximum FOV change rate in degrees per second for wheel and keyboard
|
|
196
|
+
* zoom. When omitted, no extra rate cap is applied.
|
|
197
|
+
*/
|
|
198
|
+
fovSpeed?: number;
|
|
199
|
+
/**
|
|
200
|
+
* Relative factor for stopping inertia. Lower values fade out more
|
|
201
|
+
* smoothly. Defaults to 0.01.
|
|
202
|
+
*/
|
|
203
|
+
frictionStop?: number;
|
|
204
|
+
/**
|
|
205
|
+
* Default pointer drag multiplier for mouse and touch. Defaults to 0.35.
|
|
206
|
+
* Prefer `controls.mouse` / `controls.touch` for per-channel overrides.
|
|
207
|
+
*/
|
|
108
208
|
rotateSpeed?: number;
|
|
109
|
-
/**
|
|
209
|
+
/**
|
|
210
|
+
* Default wheel zoom multiplier for mouse. Defaults to 0.08.
|
|
211
|
+
* Prefer `controls.mouse.zoomSpeed` for overrides.
|
|
212
|
+
*/
|
|
110
213
|
zoomSpeed?: number;
|
|
111
214
|
/**
|
|
112
215
|
* Rotation target-following speed in seconds^-1. Defaults to 14; use 0 for
|
|
@@ -118,16 +221,174 @@ type PanoramaControlsOptions = {
|
|
|
118
221
|
* immediate response. Must be a non-negative finite number.
|
|
119
222
|
*/
|
|
120
223
|
zoomDamping?: number;
|
|
121
|
-
/**
|
|
122
|
-
|
|
224
|
+
/**
|
|
225
|
+
* Mouse channel. `true` / omit mounts defaults; `false` skips the default
|
|
226
|
+
* instance (render a custom MouseControls child); an object merges with
|
|
227
|
+
* defaults and supports `enabled`.
|
|
228
|
+
*/
|
|
229
|
+
mouse?: boolean | MouseControlsOptions;
|
|
230
|
+
/**
|
|
231
|
+
* Touch channel. Same shape as `mouse`.
|
|
232
|
+
*/
|
|
233
|
+
touch?: boolean | TouchControlsOptions;
|
|
234
|
+
/**
|
|
235
|
+
* Keyboard channel. Same shape as `mouse`. Set to false when providing a
|
|
236
|
+
* custom KeyboardControls child.
|
|
237
|
+
*/
|
|
238
|
+
keyboard?: boolean | KeyboardControlsProps;
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
/** Lowest allowed `appearance.opacity` (background only). */
|
|
242
|
+
declare const MIN_PANO_CONTEXT_MENU_BACKGROUND_OPACITY = 0.4;
|
|
243
|
+
type PanoContextMenuSelectContext = {
|
|
244
|
+
position: PanoramaPointerEvent["position"];
|
|
245
|
+
view: PanoViewState;
|
|
246
|
+
nativeEvent: MouseEvent | PointerEvent;
|
|
247
|
+
close: () => void;
|
|
248
|
+
};
|
|
249
|
+
type PanoContextMenuActionItem = {
|
|
250
|
+
type?: "item";
|
|
251
|
+
id: string;
|
|
252
|
+
label: string;
|
|
253
|
+
/** React icon node (inline SVG, icon library component, emoji, etc.). */
|
|
254
|
+
icon?: ReactNode;
|
|
255
|
+
/** Image URL; ignored when `icon` is set. */
|
|
256
|
+
image?: string;
|
|
257
|
+
imageAlt?: string;
|
|
258
|
+
disabled?: boolean;
|
|
259
|
+
hidden?: boolean;
|
|
260
|
+
className?: string;
|
|
261
|
+
style?: CSSProperties;
|
|
262
|
+
onSelect: (context: PanoContextMenuSelectContext) => void;
|
|
263
|
+
};
|
|
264
|
+
type PanoContextMenuSeparatorItem = {
|
|
265
|
+
type: "separator";
|
|
266
|
+
id?: string;
|
|
267
|
+
className?: string;
|
|
268
|
+
style?: CSSProperties;
|
|
269
|
+
};
|
|
270
|
+
type PanoContextMenuItem = PanoContextMenuActionItem | PanoContextMenuSeparatorItem;
|
|
271
|
+
/** Built-in menu entries hosts can reuse without reimplementing behavior. */
|
|
272
|
+
type PanoContextMenuPresetId = "resetView" | "fullscreen" | "separator";
|
|
273
|
+
/**
|
|
274
|
+
* Reference a built-in preset, optionally overriding presentation fields.
|
|
275
|
+
* Action wiring (reset / fullscreen toggle and enter/exit label) stays built-in.
|
|
276
|
+
*/
|
|
277
|
+
type PanoContextMenuPresetRef = {
|
|
278
|
+
preset: PanoContextMenuPresetId;
|
|
279
|
+
id?: string;
|
|
280
|
+
label?: string;
|
|
281
|
+
className?: string;
|
|
282
|
+
style?: CSSProperties;
|
|
283
|
+
disabled?: boolean;
|
|
284
|
+
hidden?: boolean;
|
|
285
|
+
};
|
|
286
|
+
/** A custom action item, a preset id string, or a preset ref with overrides. */
|
|
287
|
+
type PanoContextMenuEntry = PanoContextMenuActionItem | PanoContextMenuPresetId | PanoContextMenuPresetRef;
|
|
288
|
+
type PanoContextMenuAppearance = {
|
|
289
|
+
background?: string;
|
|
290
|
+
color?: string;
|
|
291
|
+
border?: string;
|
|
292
|
+
borderRadius?: number | string;
|
|
293
|
+
shadow?: string;
|
|
294
|
+
/**
|
|
295
|
+
* Background-only opacity from {@link MIN_PANO_CONTEXT_MENU_BACKGROUND_OPACITY}
|
|
296
|
+
* to 1. Defaults to 1. Text and icons stay fully opaque.
|
|
297
|
+
*/
|
|
298
|
+
opacity?: number;
|
|
299
|
+
fontSize?: number | string;
|
|
300
|
+
minWidth?: number | string;
|
|
301
|
+
padding?: number | string;
|
|
302
|
+
iconSize?: number;
|
|
303
|
+
itemPadding?: string;
|
|
304
|
+
itemHoverBackground?: string;
|
|
305
|
+
itemDisabledColor?: string;
|
|
306
|
+
separatorColor?: string;
|
|
307
|
+
separatorMargin?: string;
|
|
308
|
+
};
|
|
309
|
+
type PanoContextMenuRenderProps = {
|
|
310
|
+
event: PanoramaPointerEvent;
|
|
311
|
+
view: PanoViewState;
|
|
312
|
+
close: () => void;
|
|
313
|
+
};
|
|
314
|
+
type PanoContextMenuProps = {
|
|
315
|
+
/**
|
|
316
|
+
* Menu entries. May mix concrete items with built-in presets
|
|
317
|
+
* (`"resetView"`, `"fullscreen"`, `"separator"`). When omitted, the
|
|
318
|
+
* default Reset view / Fullscreen list is used (see also `prepend` /
|
|
319
|
+
* `append`).
|
|
320
|
+
*/
|
|
321
|
+
items?: readonly PanoContextMenuEntry[];
|
|
322
|
+
/**
|
|
323
|
+
* Entries placed before the default menu when `items` is omitted.
|
|
324
|
+
* Ignored when `items` is provided.
|
|
325
|
+
*/
|
|
326
|
+
prepend?: readonly PanoContextMenuEntry[];
|
|
327
|
+
/**
|
|
328
|
+
* Entries placed after the default menu when `items` is omitted.
|
|
329
|
+
* Ignored when `items` is provided.
|
|
330
|
+
*/
|
|
331
|
+
append?: readonly PanoContextMenuEntry[];
|
|
332
|
+
appearance?: PanoContextMenuAppearance;
|
|
333
|
+
className?: string;
|
|
334
|
+
style?: CSSProperties;
|
|
335
|
+
itemClassName?: string;
|
|
336
|
+
separatorClassName?: string;
|
|
337
|
+
/**
|
|
338
|
+
* Fully custom menu content. When provided, takes precedence over `items`.
|
|
339
|
+
* Opening, closing, and positioning remain handled by PanoContextMenu.
|
|
340
|
+
*/
|
|
341
|
+
children?: (props: PanoContextMenuRenderProps) => ReactNode;
|
|
123
342
|
};
|
|
343
|
+
/**
|
|
344
|
+
* Custom panorama context menu. Must render inside PanoView. Prefer
|
|
345
|
+
* PanoView's `contextMenu` prop for the default menu; use this component
|
|
346
|
+
* when replacing the default instance (`contextMenu={false}`).
|
|
347
|
+
*/
|
|
348
|
+
declare function PanoContextMenu({ items, prepend, append, appearance, className, style, itemClassName, separatorClassName, children, }: PanoContextMenuProps): null;
|
|
349
|
+
type PanoContextMenuPresetActions = {
|
|
350
|
+
reset: () => void;
|
|
351
|
+
toggleFullscreen: () => void;
|
|
352
|
+
/** When true, the fullscreen preset shows Exit fullscreen. */
|
|
353
|
+
isFullscreen?: boolean;
|
|
354
|
+
};
|
|
355
|
+
type PanoContextMenuPresets = {
|
|
356
|
+
resetView: PanoContextMenuActionItem;
|
|
357
|
+
fullscreen: PanoContextMenuActionItem;
|
|
358
|
+
separator: (id?: string) => PanoContextMenuSeparatorItem;
|
|
359
|
+
/** Default menu: Reset view, separator, Enter/Exit fullscreen. */
|
|
360
|
+
defaults: PanoContextMenuItem[];
|
|
361
|
+
};
|
|
362
|
+
/**
|
|
363
|
+
* Builds reusable built-in context-menu items. Prefer preset id strings
|
|
364
|
+
* (`"resetView"`, `"fullscreen"`) in `items` / `append` / `prepend` when
|
|
365
|
+
* configuring `PanoView`; use this helper when assembling items manually.
|
|
366
|
+
*/
|
|
367
|
+
declare function createPanoContextMenuPresets(actions: PanoContextMenuPresetActions): PanoContextMenuPresets;
|
|
368
|
+
/** Alias for `createPanoContextMenuPresets(actions).defaults`. */
|
|
369
|
+
declare function createDefaultPanoContextMenuItems(actions: PanoContextMenuPresetActions): PanoContextMenuItem[];
|
|
370
|
+
/**
|
|
371
|
+
* Expands preset ids / refs into concrete menu items using the given presets.
|
|
372
|
+
*/
|
|
373
|
+
declare function resolvePanoContextMenuEntries(entries: readonly PanoContextMenuEntry[], presets: PanoContextMenuPresets): PanoContextMenuItem[];
|
|
374
|
+
/**
|
|
375
|
+
* Resolves `items`, or `prepend` + defaults + `append` when `items` is omitted.
|
|
376
|
+
*/
|
|
377
|
+
declare function composePanoContextMenuItems(props: Pick<PanoContextMenuProps, "items" | "prepend" | "append">, presets: PanoContextMenuPresets): PanoContextMenuItem[];
|
|
124
378
|
|
|
125
|
-
type PanoViewProps = Omit<ComponentPropsWithoutRef<"div">, "children" | "onChange"> & {
|
|
379
|
+
type PanoViewProps = Omit<ComponentPropsWithoutRef<"div">, "children" | "onChange" | "contextMenu"> & {
|
|
126
380
|
children?: ReactNode;
|
|
127
381
|
initialView?: Partial<PanoViewState>;
|
|
128
382
|
minFov?: number;
|
|
129
383
|
maxFov?: number;
|
|
130
384
|
controls?: boolean | PanoramaControlsOptions;
|
|
385
|
+
/**
|
|
386
|
+
* Default context menu. `true` / omit mounts Reset view + Fullscreen;
|
|
387
|
+
* `false` skips the default instance; an object merges appearance and
|
|
388
|
+
* may use `items` (full replace, supports preset ids), or `prepend` /
|
|
389
|
+
* `append` to keep the defaults and add entries.
|
|
390
|
+
*/
|
|
391
|
+
contextMenu?: boolean | PanoContextMenuProps;
|
|
131
392
|
onViewChange?: (view: PanoViewState) => void;
|
|
132
393
|
onPanoramaClick?: (event: PanoramaPointerEvent) => void;
|
|
133
394
|
onPanoramaDoubleClick?: (event: PanoramaPointerEvent) => void;
|
|
@@ -135,12 +396,19 @@ type PanoViewProps = Omit<ComponentPropsWithoutRef<"div">, "children" | "onChang
|
|
|
135
396
|
/** Canvas pixel ratio. Defaults to a capped range of 1–2. */
|
|
136
397
|
dpr?: number | [number, number];
|
|
137
398
|
};
|
|
138
|
-
declare const PanoView: react.ForwardRefExoticComponent<Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, "children" | "onChange"> & {
|
|
399
|
+
declare const PanoView: react.ForwardRefExoticComponent<Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, "children" | "contextMenu" | "onChange"> & {
|
|
139
400
|
children?: ReactNode;
|
|
140
401
|
initialView?: Partial<PanoViewState>;
|
|
141
402
|
minFov?: number;
|
|
142
403
|
maxFov?: number;
|
|
143
404
|
controls?: boolean | PanoramaControlsOptions;
|
|
405
|
+
/**
|
|
406
|
+
* Default context menu. `true` / omit mounts Reset view + Fullscreen;
|
|
407
|
+
* `false` skips the default instance; an object merges appearance and
|
|
408
|
+
* may use `items` (full replace, supports preset ids), or `prepend` /
|
|
409
|
+
* `append` to keep the defaults and add entries.
|
|
410
|
+
*/
|
|
411
|
+
contextMenu?: boolean | PanoContextMenuProps;
|
|
144
412
|
onViewChange?: (view: PanoViewState) => void;
|
|
145
413
|
onPanoramaClick?: (event: PanoramaPointerEvent) => void;
|
|
146
414
|
onPanoramaDoubleClick?: (event: PanoramaPointerEvent) => void;
|
|
@@ -169,6 +437,105 @@ type AutoRotateProps = {
|
|
|
169
437
|
*/
|
|
170
438
|
declare function AutoRotate({ enabled, speed, acceleration, startDelay, }: AutoRotateProps): null;
|
|
171
439
|
|
|
440
|
+
type ViewInteractionSource = "mouse" | "touch" | "keyboard";
|
|
441
|
+
type PanoWheelEvent = {
|
|
442
|
+
/** Signed wheel delta (same sign convention as WheelEvent.deltaY). */
|
|
443
|
+
delta: number;
|
|
444
|
+
nativeEvent: WheelEvent;
|
|
445
|
+
};
|
|
446
|
+
type PanoResizeEvent = {
|
|
447
|
+
width: number;
|
|
448
|
+
height: number;
|
|
449
|
+
};
|
|
450
|
+
type ViewInteractionEvent = {
|
|
451
|
+
source: ViewInteractionSource;
|
|
452
|
+
};
|
|
453
|
+
type PanoEventMap = {
|
|
454
|
+
viewchange: PanoViewState;
|
|
455
|
+
viewsettled: PanoViewState;
|
|
456
|
+
viewinteractionstart: ViewInteractionEvent;
|
|
457
|
+
viewinteractionend: ViewInteractionEvent;
|
|
458
|
+
click: PanoramaPointerEvent;
|
|
459
|
+
doubleclick: PanoramaPointerEvent;
|
|
460
|
+
pointerdown: PanoramaPointerEvent;
|
|
461
|
+
pointerup: PanoramaPointerEvent;
|
|
462
|
+
pointermove: PanoramaPointerEvent;
|
|
463
|
+
contextmenu: PanoramaPointerEvent;
|
|
464
|
+
wheel: PanoWheelEvent;
|
|
465
|
+
idle: undefined;
|
|
466
|
+
idleend: undefined;
|
|
467
|
+
enterfullscreen: undefined;
|
|
468
|
+
exitfullscreen: undefined;
|
|
469
|
+
resize: PanoResizeEvent;
|
|
470
|
+
autorotatestart: undefined;
|
|
471
|
+
autorotatestop: undefined;
|
|
472
|
+
autorotateoneround: undefined;
|
|
473
|
+
};
|
|
474
|
+
type PanoEventType = keyof PanoEventMap;
|
|
475
|
+
type PanoEventListener<T extends PanoEventType> = (payload: PanoEventMap[T]) => void;
|
|
476
|
+
type PanoEventBus = {
|
|
477
|
+
subscribe: <T extends PanoEventType>(type: T, listener: PanoEventListener<T>) => () => void;
|
|
478
|
+
emit: <T extends PanoEventType>(type: T, payload: PanoEventMap[T]) => void;
|
|
479
|
+
};
|
|
480
|
+
|
|
481
|
+
type PanoEventsProps = {
|
|
482
|
+
/**
|
|
483
|
+
* Milliseconds without user interaction before `onIdle`. Defaults to 2000.
|
|
484
|
+
* Each PanoEvents instance tracks idle independently.
|
|
485
|
+
*/
|
|
486
|
+
idleTime?: number;
|
|
487
|
+
onViewChange?: (view: PanoViewState) => void;
|
|
488
|
+
onViewSettled?: (view: PanoViewState) => void;
|
|
489
|
+
onViewInteractionStart?: (event: ViewInteractionEvent) => void;
|
|
490
|
+
onViewInteractionEnd?: (event: ViewInteractionEvent) => void;
|
|
491
|
+
onClick?: (event: PanoramaPointerEvent) => void;
|
|
492
|
+
onDoubleClick?: (event: PanoramaPointerEvent) => void;
|
|
493
|
+
onPointerDown?: (event: PanoramaPointerEvent) => void;
|
|
494
|
+
onPointerUp?: (event: PanoramaPointerEvent) => void;
|
|
495
|
+
onPointerMove?: (event: PanoramaPointerEvent) => void;
|
|
496
|
+
onContextMenu?: (event: PanoramaPointerEvent) => void;
|
|
497
|
+
onWheel?: (event: PanoWheelEvent) => void;
|
|
498
|
+
onIdle?: () => void;
|
|
499
|
+
onIdleEnd?: () => void;
|
|
500
|
+
onEnterFullscreen?: () => void;
|
|
501
|
+
onExitFullscreen?: () => void;
|
|
502
|
+
onResize?: (event: PanoResizeEvent) => void;
|
|
503
|
+
onAutoRotateStart?: () => void;
|
|
504
|
+
onAutoRotateStop?: () => void;
|
|
505
|
+
onAutoRotateOneRound?: () => void;
|
|
506
|
+
};
|
|
507
|
+
/**
|
|
508
|
+
* Subscribes to viewer-level panorama events. Must run inside PanoView.
|
|
509
|
+
* Prefer the {@link PanoEvents} component for declarative usage.
|
|
510
|
+
*/
|
|
511
|
+
declare function usePanoEvents({ idleTime, onViewChange, onViewSettled, onViewInteractionStart, onViewInteractionEnd, onClick, onDoubleClick, onPointerDown, onPointerUp, onPointerMove, onContextMenu, onWheel, onIdle, onIdleEnd, onEnterFullscreen, onExitFullscreen, onResize, onAutoRotateStart, onAutoRotateStop, onAutoRotateOneRound, }: PanoEventsProps): void;
|
|
512
|
+
/**
|
|
513
|
+
* Declarative viewer-level event listeners for the nearest PanoView.
|
|
514
|
+
* Multiple instances may coexist; each tracks its own idle timer.
|
|
515
|
+
*/
|
|
516
|
+
declare function PanoEvents(props: PanoEventsProps): null;
|
|
517
|
+
|
|
518
|
+
type MouseControlsProps = MouseControlsOptions & {
|
|
519
|
+
/**
|
|
520
|
+
* Maximum FOV change rate in degrees per second for wheel zoom. When
|
|
521
|
+
* omitted, no extra rate cap is applied. Usually supplied by PanoView from
|
|
522
|
+
* `controls.fovSpeed`.
|
|
523
|
+
*/
|
|
524
|
+
fovSpeed?: number;
|
|
525
|
+
};
|
|
526
|
+
/**
|
|
527
|
+
* Adds mouse (and pen) drag / wheel navigation to the nearest PanoView.
|
|
528
|
+
* PanoView mounts a default instance; render your own only to override.
|
|
529
|
+
*/
|
|
530
|
+
declare function MouseControls({ enabled, rotateSpeed, zoomSpeed, wheel, invert, buttons, fovSpeed, }: MouseControlsProps): null;
|
|
531
|
+
|
|
532
|
+
type TouchControlsProps = TouchControlsOptions;
|
|
533
|
+
/**
|
|
534
|
+
* Adds touch drag and pinch-zoom navigation to the nearest PanoView.
|
|
535
|
+
* PanoView mounts a default instance; render your own only to override.
|
|
536
|
+
*/
|
|
537
|
+
declare function TouchControls({ enabled, rotateSpeed, invert, pinchZoom, }: TouchControlsProps): null;
|
|
538
|
+
|
|
172
539
|
type SphereProps = {
|
|
173
540
|
src: string;
|
|
174
541
|
/** Horizontal image offset in degrees. */
|
|
@@ -361,8 +728,21 @@ type GraphicPaint = {
|
|
|
361
728
|
type CircleGraphic = GraphicPaint & {
|
|
362
729
|
kind: "circle";
|
|
363
730
|
};
|
|
731
|
+
type TriangleGraphic = GraphicPaint & {
|
|
732
|
+
kind: "triangle";
|
|
733
|
+
};
|
|
734
|
+
type DiamondGraphic = GraphicPaint & {
|
|
735
|
+
kind: "diamond";
|
|
736
|
+
};
|
|
737
|
+
type StarGraphic = GraphicPaint & {
|
|
738
|
+
kind: "star";
|
|
739
|
+
};
|
|
740
|
+
type ArrowGraphic = GraphicPaint & {
|
|
741
|
+
kind: "arrow";
|
|
742
|
+
};
|
|
364
743
|
type RectangleGraphic = GraphicPaint & {
|
|
365
744
|
kind: "rectangle";
|
|
745
|
+
/** Relative radius from 0 (square corners) to 0.5 (maximum rounded corners). */
|
|
366
746
|
cornerRadius?: number;
|
|
367
747
|
};
|
|
368
748
|
type RingGraphic = GraphicPaint & {
|
|
@@ -378,7 +758,7 @@ type SvgPathGraphic = GraphicPaint & {
|
|
|
378
758
|
path: string;
|
|
379
759
|
viewBox: [x: number, y: number, width: number, height: number];
|
|
380
760
|
};
|
|
381
|
-
type GraphicDefinition = CircleGraphic | RectangleGraphic | RingGraphic | SvgGraphic | SvgPathGraphic;
|
|
761
|
+
type GraphicDefinition = CircleGraphic | TriangleGraphic | DiamondGraphic | StarGraphic | ArrowGraphic | RectangleGraphic | RingGraphic | SvgGraphic | SvgPathGraphic;
|
|
382
762
|
type GraphicHotspotProps = HotspotCommonProps & {
|
|
383
763
|
graphic: GraphicDefinition;
|
|
384
764
|
onLoad?: (texture: Texture) => void;
|
|
@@ -524,4 +904,4 @@ type PointHotspotDefinition = ImageHotspotDefinition | GraphicHotspotDefinition
|
|
|
524
904
|
/** A serializable, discriminated hotspot collection item. */
|
|
525
905
|
type HotspotDefinition = PointHotspotDefinition | PolygonHotspotDefinition | PolylineHotspotDefinition;
|
|
526
906
|
|
|
527
|
-
export { AutoRotate, type AutoRotateProps, type CircleGraphic, type CubeFaceCode, type GraphicDefinition, GraphicHotspot, type GraphicHotspotDefinition, type GraphicHotspotProps, type HotspotCommonProps, type HotspotDefinition, type HotspotDefinitionBase, type HotspotDragEvent, type HotspotInputSource, type HotspotInteractionEvent, type HotspotMode, type HotspotPosition, type HotspotScaleMode, ImageHotspot, type ImageHotspotDefinition, type ImageHotspotProps, MAX_HOTSPOT_PITCH, PanoView, type PanoViewHandle, type PanoViewProps, type PanoViewState, type PanoramaControlsOptions, type PanoramaPointerEvent, type PanoramaScene, PanoramaScenes, type PanoramaScenesProps, type PanoramaTransition, type PanoramaTransitionEndEvent, type PanoramaTransitionErrorEvent, type PanoramaTransitionPreset, type PointHotspotDefinition, type PointHotspotDefinitionBase, PolygonHotspot, type PolygonHotspotDefinition, type PolygonHotspotProps, type PolygonValidationCode, type PolygonValidationIssue, type PolygonVerticesChangeEvent, PolylineHotspot, type PolylineHotspotDefinition, type PolylineHotspotProps, type PolylineValidationIssue, type PolylineVerticesChangeEvent, type RectangleGraphic, type RingGraphic, type SequenceFrameDirection, type SequenceFrameEvent, SequenceHotspot, type SequenceHotspotDefinition, type SequenceHotspotErrorEvent, type SequenceHotspotProps, type SequenceLoadProgress, type SequencePlaybackState, type SetPanoViewOptions, Sphere, type SpherePanoramaScene, type SphereProps, type SvgGraphic, type SvgPathGraphic, Tile, type TileAddress, type TileLoadError, type TileLoadProgress, type TileMultiresConfig, type TilePanoramaScene, type TileProps, VideoHotspot, type VideoHotspotDefinition, type VideoHotspotErrorEvent, type VideoHotspotProps, type VideoPlaybackState, clampPanoPitch, normalizePanoPosition, normalizePanoYaw, panoPositionToVector3, unwrapPolygonVertices, validatePolygonVertices, validatePolylineVertices, vector3ToPanoPosition };
|
|
907
|
+
export { type ArrowGraphic, AutoRotate, type AutoRotateProps, type CircleGraphic, type CubeFaceCode, type DiamondGraphic, type GraphicDefinition, GraphicHotspot, type GraphicHotspotDefinition, type GraphicHotspotProps, type HotspotCommonProps, type HotspotDefinition, type HotspotDefinitionBase, type HotspotDragEvent, type HotspotInputSource, type HotspotInteractionEvent, type HotspotMode, type HotspotPosition, type HotspotScaleMode, ImageHotspot, type ImageHotspotDefinition, type ImageHotspotProps, type KeyboardControlAction, type KeyboardControlKeys, KeyboardControls, type KeyboardControlsProps, MAX_HOTSPOT_PITCH, MIN_PANO_CONTEXT_MENU_BACKGROUND_OPACITY, type MouseControlButton, MouseControls, type MouseControlsOptions, type MouseControlsProps, PanoContextMenu, type PanoContextMenuActionItem, type PanoContextMenuAppearance, type PanoContextMenuEntry, type PanoContextMenuItem, type PanoContextMenuPresetActions, type PanoContextMenuPresetId, type PanoContextMenuPresetRef, type PanoContextMenuPresets, type PanoContextMenuProps, type PanoContextMenuRenderProps, type PanoContextMenuSelectContext, type PanoContextMenuSeparatorItem, type PanoEventBus, type PanoEventListener, type PanoEventMap, type PanoEventType, PanoEvents, type PanoEventsProps, type PanoResizeEvent, PanoView, type PanoViewHandle, type PanoViewProps, type PanoViewState, type PanoWheelEvent, type PanoramaControlsOptions, type PanoramaPointerEvent, type PanoramaScene, PanoramaScenes, type PanoramaScenesProps, type PanoramaTransition, type PanoramaTransitionEndEvent, type PanoramaTransitionErrorEvent, type PanoramaTransitionPreset, type PointHotspotDefinition, type PointHotspotDefinitionBase, PolygonHotspot, type PolygonHotspotDefinition, type PolygonHotspotProps, type PolygonValidationCode, type PolygonValidationIssue, type PolygonVerticesChangeEvent, PolylineHotspot, type PolylineHotspotDefinition, type PolylineHotspotProps, type PolylineValidationIssue, type PolylineVerticesChangeEvent, type RectangleGraphic, type RingGraphic, type SequenceFrameDirection, type SequenceFrameEvent, SequenceHotspot, type SequenceHotspotDefinition, type SequenceHotspotErrorEvent, type SequenceHotspotProps, type SequenceLoadProgress, type SequencePlaybackState, type SetPanoViewOptions, Sphere, type SpherePanoramaScene, type SphereProps, type StarGraphic, type SvgGraphic, type SvgPathGraphic, Tile, type TileAddress, type TileLoadError, type TileLoadProgress, type TileMultiresConfig, type TilePanoramaScene, type TileProps, TouchControls, type TouchControlsOptions, type TouchControlsProps, type TriangleGraphic, VideoHotspot, type VideoHotspotDefinition, type VideoHotspotErrorEvent, type VideoHotspotProps, type VideoPlaybackState, type ViewInteractionEvent, type ViewInteractionSource, clampPanoPitch, composePanoContextMenuItems, createDefaultPanoContextMenuItems, createPanoContextMenuPresets, cycleSceneId, normalizePanoPosition, normalizePanoYaw, panoPositionToVector3, resolvePanoContextMenuEntries, unwrapPolygonVertices, usePanoEvents, validatePolygonVertices, validatePolylineVertices, vector3ToPanoPosition };
|