@ubuilder-ai/workspace 0.0.1

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.
Files changed (74) hide show
  1. package/README.md +7 -0
  2. package/dist/floorplan-annotation-obstacles.d.ts +4 -0
  3. package/dist/floorplan-annotation-obstacles.d.ts.map +1 -0
  4. package/dist/floorplan-annotation-obstacles.js +25 -0
  5. package/dist/floorplan-camera-sync.d.ts +24 -0
  6. package/dist/floorplan-camera-sync.d.ts.map +1 -0
  7. package/dist/floorplan-camera-sync.js +187 -0
  8. package/dist/floorplan-coordinates.d.ts +10 -0
  9. package/dist/floorplan-coordinates.d.ts.map +1 -0
  10. package/dist/floorplan-coordinates.js +25 -0
  11. package/dist/floorplan-dimension-renderer.d.ts +42 -0
  12. package/dist/floorplan-dimension-renderer.d.ts.map +1 -0
  13. package/dist/floorplan-dimension-renderer.js +245 -0
  14. package/dist/floorplan-geometry-renderer.d.ts +56 -0
  15. package/dist/floorplan-geometry-renderer.d.ts.map +1 -0
  16. package/dist/floorplan-geometry-renderer.js +319 -0
  17. package/dist/floorplan-initial-view.d.ts +29 -0
  18. package/dist/floorplan-initial-view.d.ts.map +1 -0
  19. package/dist/floorplan-initial-view.js +30 -0
  20. package/dist/floorplan-label-angle.d.ts +24 -0
  21. package/dist/floorplan-label-angle.d.ts.map +1 -0
  22. package/dist/floorplan-label-angle.js +60 -0
  23. package/dist/floorplan-navigation-presentation.d.ts +57 -0
  24. package/dist/floorplan-navigation-presentation.d.ts.map +1 -0
  25. package/dist/floorplan-navigation-presentation.js +81 -0
  26. package/dist/floorplan-navigation-shell.d.ts +87 -0
  27. package/dist/floorplan-navigation-shell.d.ts.map +1 -0
  28. package/dist/floorplan-navigation-shell.js +1212 -0
  29. package/dist/floorplan-navigation-types.d.ts +10 -0
  30. package/dist/floorplan-navigation-types.d.ts.map +1 -0
  31. package/dist/floorplan-navigation-types.js +1 -0
  32. package/dist/floorplan-registry-projection.d.ts +84 -0
  33. package/dist/floorplan-registry-projection.d.ts.map +1 -0
  34. package/dist/floorplan-registry-projection.js +260 -0
  35. package/dist/floorplan-render-context.d.ts +56 -0
  36. package/dist/floorplan-render-context.d.ts.map +1 -0
  37. package/dist/floorplan-render-context.js +75 -0
  38. package/dist/index.d.ts +21 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +19 -0
  41. package/dist/marquee-geometry.d.ts +22 -0
  42. package/dist/marquee-geometry.d.ts.map +1 -0
  43. package/dist/marquee-geometry.js +151 -0
  44. package/dist/spatial-workspace-camera-action-control.d.ts +18 -0
  45. package/dist/spatial-workspace-camera-action-control.d.ts.map +1 -0
  46. package/dist/spatial-workspace-camera-action-control.js +13 -0
  47. package/dist/spatial-workspace-display-control.d.ts +64 -0
  48. package/dist/spatial-workspace-display-control.d.ts.map +1 -0
  49. package/dist/spatial-workspace-display-control.js +81 -0
  50. package/dist/spatial-workspace-gis-control.d.ts +58 -0
  51. package/dist/spatial-workspace-gis-control.d.ts.map +1 -0
  52. package/dist/spatial-workspace-gis-control.js +38 -0
  53. package/dist/spatial-workspace-instance.d.ts +2 -0
  54. package/dist/spatial-workspace-instance.d.ts.map +1 -0
  55. package/dist/spatial-workspace-instance.js +14 -0
  56. package/dist/spatial-workspace-level-selector.d.ts +25 -0
  57. package/dist/spatial-workspace-level-selector.d.ts.map +1 -0
  58. package/dist/spatial-workspace-level-selector.js +18 -0
  59. package/dist/spatial-workspace-level-wall-control.d.ts +38 -0
  60. package/dist/spatial-workspace-level-wall-control.d.ts.map +1 -0
  61. package/dist/spatial-workspace-level-wall-control.js +43 -0
  62. package/dist/spatial-workspace-mode.d.ts +11 -0
  63. package/dist/spatial-workspace-mode.d.ts.map +1 -0
  64. package/dist/spatial-workspace-mode.js +29 -0
  65. package/dist/spatial-workspace-styles.d.ts +3 -0
  66. package/dist/spatial-workspace-styles.d.ts.map +1 -0
  67. package/dist/spatial-workspace-styles.js +72 -0
  68. package/dist/spatial-workspace-view-mode-control.d.ts +19 -0
  69. package/dist/spatial-workspace-view-mode-control.d.ts.map +1 -0
  70. package/dist/spatial-workspace-view-mode-control.js +14 -0
  71. package/dist/spatial-workspace-viewport.d.ts +25 -0
  72. package/dist/spatial-workspace-viewport.d.ts.map +1 -0
  73. package/dist/spatial-workspace-viewport.js +106 -0
  74. package/package.json +47 -0
@@ -0,0 +1,81 @@
1
+ export function setFloorplanCompassRotation(compass, rotationDeg) {
2
+ if (compass) {
3
+ compass.style.transform = `rotate(${rotationDeg}deg)`;
4
+ }
5
+ }
6
+ export function queueFloorplanRotationPresentationRestore(pending, presentation) {
7
+ pending.current = presentation;
8
+ }
9
+ export function flushFloorplanRotationPresentationRestore(pending) {
10
+ const presentation = pending.current;
11
+ if (!presentation)
12
+ return;
13
+ presentation.svg.style.transform = presentation.svgStyle.transform;
14
+ presentation.svg.style.transformOrigin = presentation.svgStyle.transformOrigin;
15
+ presentation.svg.style.willChange = presentation.svgStyle.willChange;
16
+ pending.current = null;
17
+ }
18
+ export function getFloorplanRotationOverscanViewBox(viewBox) {
19
+ const size = Math.hypot(viewBox.width, viewBox.height);
20
+ const centerX = viewBox.minX + viewBox.width / 2;
21
+ const centerY = viewBox.minY + viewBox.height / 2;
22
+ return {
23
+ minX: centerX - size / 2,
24
+ minY: centerY - size / 2,
25
+ width: size,
26
+ height: size,
27
+ };
28
+ }
29
+ export function resolveFloorplanPresentationViewBox(reactViewBox, imperativeViewBox, interactionInProgress) {
30
+ return interactionInProgress && imperativeViewBox ? imperativeViewBox : reactViewBox;
31
+ }
32
+ export function canZoomFloorplanDuringNavigation(rotationInProgress) {
33
+ return !rotationInProgress;
34
+ }
35
+ export function canApplyFloorplanNavigationSync(interactionInProgress) {
36
+ return !interactionInProgress;
37
+ }
38
+ export function createFloorplanNavigationSyncScheduler({ applyPresentation, commit, settleMs = 120, schedule = globalThis.setTimeout, cancel = globalThis.clearTimeout, }) {
39
+ let latestPose = null;
40
+ let settleTimer = null;
41
+ const clearSettleTimer = () => {
42
+ if (settleTimer === null)
43
+ return;
44
+ cancel(settleTimer);
45
+ settleTimer = null;
46
+ };
47
+ const flush = () => {
48
+ clearSettleTimer();
49
+ if (latestPose === null)
50
+ return;
51
+ const pose = latestPose;
52
+ latestPose = null;
53
+ commit(pose);
54
+ };
55
+ const update = (pose) => {
56
+ latestPose = pose;
57
+ applyPresentation(pose);
58
+ clearSettleTimer();
59
+ settleTimer = schedule(() => {
60
+ settleTimer = null;
61
+ if (latestPose === null)
62
+ return;
63
+ const settledPose = latestPose;
64
+ latestPose = null;
65
+ commit(settledPose);
66
+ }, settleMs);
67
+ };
68
+ const discard = () => {
69
+ clearSettleTimer();
70
+ latestPose = null;
71
+ };
72
+ return { update, flush, discard };
73
+ }
74
+ export function finalizeFloorplanNavigation({ zoomPending, panActive, rotationState, commitZoom, commitPan, commitRotation, }) {
75
+ if (zoomPending)
76
+ commitZoom();
77
+ if (panActive)
78
+ commitPan();
79
+ if (rotationState)
80
+ commitRotation(rotationState);
81
+ }
@@ -0,0 +1,87 @@
1
+ import { type ComponentPropsWithoutRef, type ReactElement, type MouseEvent as ReactMouseEvent, type ReactNode, type PointerEvent as ReactPointerEvent, type RefObject } from 'react';
2
+ import { type FloorplanPoint } from './floorplan-coordinates';
3
+ import { type FloorplanPresentationViewBox } from './floorplan-navigation-presentation';
4
+ import type { FloorplanNavigationPose, FloorplanNavigationPoseInput } from './floorplan-navigation-types';
5
+ export type FloorplanViewport = {
6
+ centerX: number;
7
+ centerY: number;
8
+ width: number;
9
+ };
10
+ type FloorplanNavigationNativeEventHandlers = {
11
+ wheel: EventListener;
12
+ gesturestart: EventListener;
13
+ gesturechange: EventListener;
14
+ gestureend: EventListener;
15
+ };
16
+ export declare const __testFloorplanNavigationNativeEvents: {
17
+ register(svg: Pick<SVGSVGElement, "addEventListener" | "removeEventListener">, handlers: FloorplanNavigationNativeEventHandlers): () => void;
18
+ };
19
+ export declare function rotateFloorplanPoint(point: FloorplanPoint, rotationDegrees: number): FloorplanPoint;
20
+ export type UseFloorplanNavigationOptions = {
21
+ active: boolean;
22
+ activationAzimuth: number | null;
23
+ baselineRotationDeg: number;
24
+ contentKey: string | null;
25
+ fitPoints: readonly FloorplanPoint[];
26
+ fitSuspended: () => boolean;
27
+ hasContent: boolean;
28
+ initialNavigationPose: FloorplanNavigationPose | null;
29
+ onNavigationStart?: () => void;
30
+ planeWorldY: number;
31
+ publishContinuously: () => boolean;
32
+ publishNavigationPose: (pose: FloorplanNavigationPoseInput) => void;
33
+ subscribeNavigationPose: (listener: (pose: FloorplanNavigationPose) => void) => () => void;
34
+ worldOrigin: readonly [number, number, number];
35
+ worldRotationY: number;
36
+ };
37
+ export type FloorplanNavigationController = {
38
+ active: boolean;
39
+ alignToNorth: () => void;
40
+ averageUnitsPerPixel: number;
41
+ backgroundRef: RefObject<SVGRectElement | null>;
42
+ compassNeedleRef: RefObject<SVGSVGElement | null>;
43
+ contentRef: RefObject<SVGGElement | null>;
44
+ floorplanUserRotationDeg: number;
45
+ getLiveUnitsPerPixel: () => number;
46
+ getScenePointFromClientPoint: (clientX: number, clientY: number) => FloorplanPoint | null;
47
+ getSceneRotationDeg: () => number;
48
+ handlePointerDownCapture: (event: ReactPointerEvent<SVGSVGElement>) => void;
49
+ handlePointerMove: (event: ReactPointerEvent<SVGSVGElement>) => boolean;
50
+ isNavigating: boolean;
51
+ navigationCursor: string | null;
52
+ navigationOverlayVisible: boolean;
53
+ paintViewBox: FloorplanPresentationViewBox;
54
+ presentationPaintViewBox: FloorplanPresentationViewBox;
55
+ presentationViewBox: FloorplanPresentationViewBox;
56
+ sceneRef: RefObject<SVGGElement | null>;
57
+ sceneRotationDeg: number;
58
+ consumeSuppressedClick: () => boolean;
59
+ surfaceSize: {
60
+ width: number;
61
+ height: number;
62
+ };
63
+ svgRef: RefObject<SVGSVGElement | null>;
64
+ unitsPerPixel: number;
65
+ viewBox: FloorplanPresentationViewBox;
66
+ viewportHostRef: RefObject<HTMLDivElement | null>;
67
+ endPointerNavigation: (event?: ReactPointerEvent<SVGSVGElement>) => void;
68
+ };
69
+ export declare function useFloorplanNavigation({ active, activationAzimuth, baselineRotationDeg, contentKey, fitPoints, fitSuspended, hasContent, initialNavigationPose, onNavigationStart, planeWorldY, publishContinuously, publishNavigationPose, subscribeNavigationPose, worldOrigin, worldRotationY, }: UseFloorplanNavigationOptions): FloorplanNavigationController;
70
+ export interface FloorplanNavigationShellProps extends Omit<ComponentPropsWithoutRef<'svg'>, 'children' | 'onClick' | 'onPointerCancel' | 'onPointerDownCapture' | 'onPointerMove' | 'onPointerUp' | 'ref' | 'viewBox'> {
71
+ active: boolean;
72
+ available: boolean;
73
+ backgroundFill: string;
74
+ children?: ReactNode;
75
+ compassHost?: HTMLElement | null;
76
+ compassLabel: string;
77
+ definitions?: ReactNode;
78
+ emptyState?: ReactNode;
79
+ navigation: FloorplanNavigationController;
80
+ onClick?: (event: ReactMouseEvent<SVGSVGElement>) => void;
81
+ onPointerMove?: (event: ReactPointerEvent<SVGSVGElement>) => void;
82
+ overlays?: ReactNode;
83
+ renderCompassTooltip?: (button: ReactElement, label: string) => ReactNode;
84
+ }
85
+ export declare function FloorplanNavigationShell({ active, available, backgroundFill, children, compassHost, compassLabel, definitions, emptyState, navigation, onClick, onPointerMove, overlays, renderCompassTooltip, style, ...svgProps }: FloorplanNavigationShellProps): import("react").JSX.Element;
86
+ export {};
87
+ //# sourceMappingURL=floorplan-navigation-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floorplan-navigation-shell.d.ts","sourceRoot":"","sources":["../src/floorplan-navigation-shell.tsx"],"names":[],"mappings":"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"}