@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/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
- /** Pointer drag multiplier. Defaults to 0.35. */
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
- /** Wheel zoom multiplier. Defaults to 0.08. */
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
- /** Enables focusable keyboard controls. Defaults to true. */
122
- keyboard?: boolean;
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 };