@ubuilder-ai/workspace 0.1.0-alpha.1 → 0.1.0-alpha.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan-navigation-shell.d.ts","sourceRoot":"","sources":["../src/floorplan-navigation-shell.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"floorplan-navigation-shell.d.ts","sourceRoot":"","sources":["../src/floorplan-navigation-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,UAAU,IAAI,eAAe,EAClC,KAAK,SAAS,EACd,KAAK,YAAY,IAAI,iBAAiB,EACtC,KAAK,SAAS,EAOf,MAAM,OAAO,CAAA;AAEd,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,yBAAyB,CAAA;AAKhC,OAAO,EAKL,KAAK,4BAA4B,EAOlC,MAAM,qCAAqC,CAAA;AAC5C,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,8BAA8B,CAAA;AAWrC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAiFD,KAAK,sCAAsC,GAAG;IAC5C,KAAK,EAAE,aAAa,CAAA;IACpB,YAAY,EAAE,aAAa,CAAA;IAC3B,aAAa,EAAE,aAAa,CAAA;IAC5B,UAAU,EAAE,aAAa,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,qCAAqC;kBAEzC,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,qBAAqB,CAAC,YAC1D,sCAAsC;CAanD,CAAA;AA0BD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,eAAe,EAAE,MAAM,GACtB,cAAc,CAahB;AAoCD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAA;IACpC,YAAY,EAAE,MAAM,OAAO,CAAA;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,qBAAqB,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACrD,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,MAAM,OAAO,CAAA;IAClC,qBAAqB,EAAE,CAAC,IAAI,EAAE,4BAA4B,KAAK,IAAI,CAAA;IACnE,uBAAuB,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;IAC1F,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,aAAa,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAC/C,gBAAgB,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACjD,UAAU,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACzC,wBAAwB,EAAE,MAAM,CAAA;IAChC,oBAAoB,EAAE,MAAM,MAAM,CAAA;IAClC,4BAA4B,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,CAAA;IACzF,mBAAmB,EAAE,MAAM,MAAM,CAAA;IACjC,wBAAwB,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC3E,iBAAiB,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,aAAa,CAAC,KAAK,OAAO,CAAA;IACvE,YAAY,EAAE,OAAO,CAAA;IACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,wBAAwB,EAAE,OAAO,CAAA;IACjC,YAAY,EAAE,4BAA4B,CAAA;IAC1C,wBAAwB,EAAE,4BAA4B,CAAA;IACtD,mBAAmB,EAAE,4BAA4B,CAAA;IACjD,QAAQ,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,sBAAsB,EAAE,MAAM,OAAO,CAAA;IACrC,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,MAAM,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACvC,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,4BAA4B,CAAA;IACrC,eAAe,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IACjD,oBAAoB,EAAE,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;CACzE,CAAA;AAED,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,cAAc,GACf,EAAE,6BAA6B,GAAG,6BAA6B,CAowC/D;AAiED,MAAM,WAAW,6BACf,SAAQ,IAAI,CACV,wBAAwB,CAAC,KAAK,CAAC,EAC7B,UAAU,GACV,SAAS,GACT,iBAAiB,GACjB,sBAAsB,GACtB,eAAe,GACf,aAAa,GACb,KAAK,GACL,SAAS,CACZ;IACD,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB,UAAU,EAAE,6BAA6B,CAAA;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IACzD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IACjE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;CAC1E;AAED,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,SAAS,EACT,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,UAAU,EACV,UAAU,EACV,OAAO,EACP,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,KAAK,EACL,GAAG,QAAQ,EACZ,EAAE,6BAA6B,+BAwF/B"}
@@ -1147,18 +1147,48 @@ export function useFloorplanNavigation({ active, activationAzimuth, baselineRota
1147
1147
  };
1148
1148
  }
1149
1149
  function FloorplanCompassButton({ label, navigation, }) {
1150
- return (_jsx("button", { "aria-label": label, className: "group absolute bottom-3 left-3 z-30 flex h-8 w-8 items-center justify-center rounded-full border border-black/10 bg-white/85 shadow-sm backdrop-blur-md transition hover:bg-white hover:shadow-md dark:border-white/10 dark:bg-neutral-900/85 dark:hover:bg-neutral-900", onClick: (event) => {
1150
+ return (_jsx("button", { "aria-label": label, style: {
1151
+ position: 'absolute',
1152
+ bottom: 12,
1153
+ left: 12,
1154
+ zIndex: 30,
1155
+ width: 32,
1156
+ height: 32,
1157
+ padding: 0,
1158
+ margin: 0,
1159
+ display: 'flex',
1160
+ alignItems: 'center',
1161
+ justifyContent: 'center',
1162
+ borderRadius: '50%',
1163
+ }, className: "group absolute bottom-3 left-3 z-30 flex h-8 w-8 items-center justify-center rounded-full border border-black/10 bg-white/85 shadow-sm backdrop-blur-md transition hover:bg-white hover:shadow-md dark:border-white/10 dark:bg-neutral-900/85 dark:hover:bg-neutral-900", onClick: (event) => {
1151
1164
  event.preventDefault();
1152
1165
  event.stopPropagation();
1153
1166
  navigation.alignToNorth();
1154
- }, onPointerDown: (event) => event.stopPropagation(), type: "button", children: _jsx("span", { className: "relative flex h-6 w-6 items-center justify-center rounded-full bg-[#b8b8b8] shadow-inner dark:bg-neutral-700", children: _jsxs("svg", { "aria-hidden": "true", className: "h-6 w-6", ref: navigation.compassNeedleRef, style: { transform: `rotate(${navigation.floorplanUserRotationDeg}deg)` }, viewBox: "0 0 48 48", children: [_jsx("path", { d: "M24 4.5 31.5 25 24 21.5 16.5 25Z", fill: "#f15b5b" }), _jsx("path", { d: "M24 43.5 16.5 23 24 26.5 31.5 23Z", fill: "#ffffff" })] }) }) }));
1167
+ }, onPointerDown: (event) => event.stopPropagation(), type: "button", children: _jsx("span", { style: {
1168
+ position: 'relative',
1169
+ display: 'flex',
1170
+ width: 24,
1171
+ height: 24,
1172
+ alignItems: 'center',
1173
+ justifyContent: 'center',
1174
+ }, className: "relative flex h-6 w-6 items-center justify-center rounded-full bg-[#b8b8b8] shadow-inner dark:bg-neutral-700", children: _jsxs("svg", { "aria-hidden": "true", className: "h-6 w-6", ref: navigation.compassNeedleRef, style: {
1175
+ width: 24,
1176
+ height: 24,
1177
+ transform: `rotate(${navigation.floorplanUserRotationDeg}deg)`,
1178
+ }, viewBox: "0 0 48 48", children: [_jsx("path", { d: "M24 4.5 31.5 25 24 21.5 16.5 25Z", fill: "#f15b5b" }), _jsx("path", { d: "M24 43.5 16.5 23 24 26.5 31.5 23Z", fill: "#ffffff" })] }) }) }));
1155
1179
  }
1156
1180
  export function FloorplanNavigationShell({ active, available, backgroundFill, children, compassHost, compassLabel, definitions, emptyState, navigation, onClick, onPointerMove, overlays, renderCompassTooltip, style, ...svgProps }) {
1157
1181
  const compassButton = _jsx(FloorplanCompassButton, { label: compassLabel, navigation: navigation });
1158
1182
  const compass = renderCompassTooltip
1159
1183
  ? renderCompassTooltip(compassButton, compassLabel)
1160
1184
  : compassButton;
1161
- return (_jsxs("div", { className: "relative min-h-0 flex-1 bg-white", ref: navigation.viewportHostRef, children: [overlays, available && (compassHost ? createPortal(compass, compassHost) : compass), !available ? (emptyState) : active ? (_jsxs("svg", { ...svgProps, className: "h-full w-full touch-none", "data-pascal-floorplan-2d": "", onClick: (event) => {
1185
+ return (_jsxs("div", { className: "relative min-h-0 flex-1 bg-white", style: {
1186
+ position: 'relative',
1187
+ minHeight: 0,
1188
+ width: '100%',
1189
+ height: '100%',
1190
+ overflow: 'hidden',
1191
+ }, ref: navigation.viewportHostRef, children: [overlays, available && (compassHost ? createPortal(compass, compassHost) : compass), !available ? (emptyState) : active ? (_jsxs("svg", { ...svgProps, className: "h-full w-full touch-none", "data-pascal-floorplan-2d": "", onClick: (event) => {
1162
1192
  if (navigation.consumeSuppressedClick()) {
1163
1193
  event.preventDefault();
1164
1194
  event.stopPropagation();
@@ -1169,6 +1199,10 @@ export function FloorplanNavigationShell({ active, available, backgroundFill, ch
1169
1199
  if (!navigation.handlePointerMove(event))
1170
1200
  onPointerMove?.(event);
1171
1201
  }, onPointerUp: navigation.endPointerNavigation, ref: navigation.svgRef, style: {
1202
+ display: 'block',
1203
+ width: '100%',
1204
+ height: '100%',
1205
+ touchAction: 'none',
1172
1206
  ...style,
1173
1207
  cursor: navigation.navigationCursor ?? style?.cursor,
1174
1208
  overflow: 'visible',
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { type FloorplanNavigationController, FloorplanNavigationShell, type Floo
8
8
  export type { FloorplanNavigationPose, FloorplanNavigationPoseInput, FloorplanNavigationSource, } from './floorplan-navigation-types';
9
9
  export * from './floorplan-registry-projection';
10
10
  export * from './floorplan-render-context';
11
+ export * from './marquee-geometry';
11
12
  export * from './spatial-workspace-camera-action-control';
12
13
  export * from './spatial-workspace-display-control';
13
14
  export * from './spatial-workspace-gis-control';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA;AAChD,OAAO,EACL,mCAAmC,EACnC,sCAAsC,EACtC,+BAA+B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,yBAAyB,EAC9B,mCAAmC,EACnC,6CAA6C,GAC9C,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,KAAK,cAAc,EACnB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,yBAAyB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,OAAO,EACL,KAAK,6BAA6B,EAClC,wBAAwB,EACxB,KAAK,6BAA6B,EAClC,KAAK,iBAAiB,EACtB,oBAAoB,EACpB,KAAK,6BAA6B,EAClC,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2CAA2C,CAAA;AACzD,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oCAAoC,CAAA;AAClD,cAAc,wCAAwC,CAAA;AACtD,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uCAAuC,CAAA;AACrD,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,8BAA8B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA;AAChD,OAAO,EACL,mCAAmC,EACnC,sCAAsC,EACtC,+BAA+B,EAC/B,KAAK,gCAAgC,EACrC,KAAK,yBAAyB,EAC9B,mCAAmC,EACnC,6CAA6C,GAC9C,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,KAAK,cAAc,EACnB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,yBAAyB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,OAAO,EACL,KAAK,6BAA6B,EAClC,wBAAwB,EACxB,KAAK,6BAA6B,EAClC,KAAK,iBAAiB,EACtB,oBAAoB,EACpB,KAAK,6BAA6B,EAClC,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,2CAA2C,CAAA;AACzD,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oCAAoC,CAAA;AAClD,cAAc,wCAAwC,CAAA;AACtD,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uCAAuC,CAAA;AACrD,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,wBAAwB,EAC7B,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,8BAA8B,CAAA"}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ export * from './floorplan-label-angle';
7
7
  export { FloorplanNavigationShell, rotateFloorplanPoint, useFloorplanNavigation, } from './floorplan-navigation-shell';
8
8
  export * from './floorplan-registry-projection';
9
9
  export * from './floorplan-render-context';
10
+ export * from './marquee-geometry';
10
11
  export * from './spatial-workspace-camera-action-control';
11
12
  export * from './spatial-workspace-display-control';
12
13
  export * from './spatial-workspace-gis-control';
@@ -0,0 +1,22 @@
1
+ export type ScreenRect = {
2
+ minX: number;
3
+ minY: number;
4
+ maxX: number;
5
+ maxY: number;
6
+ };
7
+ export type Point2 = [number, number];
8
+ /** Andrew monotone-chain convex hull. Returns CCW hull without the closing
9
+ * point; degenerate inputs (0–2 points, collinear sets) pass through. */
10
+ export declare function convexHull2D(points: readonly Point2[]): Point2[];
11
+ /** Segment vs polygon (general, possibly concave): endpoint containment or
12
+ * any edge crossing. */
13
+ export declare function segmentIntersectsPolygon(a: Point2, b: Point2, polygon: readonly Point2[]): boolean;
14
+ /** Polygon vs polygon (general): containment either way or any edge crossing. */
15
+ export declare function polygonsIntersect(a: readonly Point2[], b: readonly Point2[]): boolean;
16
+ /**
17
+ * Does the axis-aligned marquee rect intersect the (convex) hull polygon?
18
+ * Covers all cases: hull vertex inside the rect, rect fully inside the hull,
19
+ * and pure edge crossings.
20
+ */
21
+ export declare function rectIntersectsHull(rect: ScreenRect, hull: readonly Point2[]): boolean;
22
+ //# sourceMappingURL=marquee-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marquee-geometry.d.ts","sourceRoot":"","sources":["../src/marquee-geometry.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAMrC;0EAC0E;AAC1E,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAsBhE;AAgDD;yBACyB;AACzB,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,CAQT;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAYrF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CA2BrF"}
@@ -0,0 +1,151 @@
1
+ // Pure 2D geometry for the screen-rect marquee's membership test. The
2
+ // marquee intersects each node's ORIENTED bounding box projected to screen —
3
+ // a convex hull — instead of a screen-space AABB of the world AABB, whose
4
+ // double inflation (world AABB around rotated geometry, then a 2D AABB
5
+ // around its projection) selected objects visually far from the cursor.
6
+ function cross(o, a, b) {
7
+ return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);
8
+ }
9
+ /** Andrew monotone-chain convex hull. Returns CCW hull without the closing
10
+ * point; degenerate inputs (0–2 points, collinear sets) pass through. */
11
+ export function convexHull2D(points) {
12
+ if (points.length <= 2)
13
+ return [...points];
14
+ const sorted = [...points].sort((a, b) => a[0] - b[0] || a[1] - b[1]);
15
+ const lower = [];
16
+ for (const p of sorted) {
17
+ while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], p) <= 0) {
18
+ lower.pop();
19
+ }
20
+ lower.push(p);
21
+ }
22
+ const upper = [];
23
+ for (let i = sorted.length - 1; i >= 0; i--) {
24
+ const p = sorted[i];
25
+ while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], p) <= 0) {
26
+ upper.pop();
27
+ }
28
+ upper.push(p);
29
+ }
30
+ lower.pop();
31
+ upper.pop();
32
+ const hull = [...lower, ...upper];
33
+ return hull.length > 0 ? hull : [sorted[0]];
34
+ }
35
+ function pointInRect(p, rect) {
36
+ return p[0] >= rect.minX && p[0] <= rect.maxX && p[1] >= rect.minY && p[1] <= rect.maxY;
37
+ }
38
+ /** Ray-crossing point-in-polygon — works for convex and degenerate hulls. */
39
+ function pointInPolygon(p, polygon) {
40
+ let inside = false;
41
+ for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
42
+ const [xi, yi] = polygon[i];
43
+ const [xj, yj] = polygon[j];
44
+ if (yi > p[1] !== yj > p[1] && p[0] < ((xj - xi) * (p[1] - yi)) / (yj - yi) + xi) {
45
+ inside = !inside;
46
+ }
47
+ }
48
+ return inside;
49
+ }
50
+ function orientation(a, b, c) {
51
+ const v = cross(a, b, c);
52
+ if (v > 0)
53
+ return 1;
54
+ if (v < 0)
55
+ return -1;
56
+ return 0;
57
+ }
58
+ function onSegment(a, b, p) {
59
+ return (Math.min(a[0], b[0]) <= p[0] &&
60
+ p[0] <= Math.max(a[0], b[0]) &&
61
+ Math.min(a[1], b[1]) <= p[1] &&
62
+ p[1] <= Math.max(a[1], b[1]));
63
+ }
64
+ function segmentsIntersect(a1, a2, b1, b2) {
65
+ const o1 = orientation(a1, a2, b1);
66
+ const o2 = orientation(a1, a2, b2);
67
+ const o3 = orientation(b1, b2, a1);
68
+ const o4 = orientation(b1, b2, a2);
69
+ if (o1 !== o2 && o3 !== o4)
70
+ return true;
71
+ if (o1 === 0 && onSegment(a1, a2, b1))
72
+ return true;
73
+ if (o2 === 0 && onSegment(a1, a2, b2))
74
+ return true;
75
+ if (o3 === 0 && onSegment(b1, b2, a1))
76
+ return true;
77
+ if (o4 === 0 && onSegment(b1, b2, a2))
78
+ return true;
79
+ return false;
80
+ }
81
+ /** Segment vs polygon (general, possibly concave): endpoint containment or
82
+ * any edge crossing. */
83
+ export function segmentIntersectsPolygon(a, b, polygon) {
84
+ if (polygon.length === 0)
85
+ return false;
86
+ if (polygon.length === 1)
87
+ return false;
88
+ if (polygon.length >= 3 && (pointInPolygon(a, polygon) || pointInPolygon(b, polygon)))
89
+ return true;
90
+ for (let i = 0; i < polygon.length; i++) {
91
+ if (segmentsIntersect(a, b, polygon[i], polygon[(i + 1) % polygon.length]))
92
+ return true;
93
+ }
94
+ return false;
95
+ }
96
+ /** Polygon vs polygon (general): containment either way or any edge crossing. */
97
+ export function polygonsIntersect(a, b) {
98
+ if (a.length === 0 || b.length === 0)
99
+ return false;
100
+ if (a.length >= 3 && b.some((p) => pointInPolygon(p, a)))
101
+ return true;
102
+ if (b.length >= 3 && a.some((p) => pointInPolygon(p, b)))
103
+ return true;
104
+ for (let i = 0; i < a.length; i++) {
105
+ const a1 = a[i];
106
+ const a2 = a[(i + 1) % a.length];
107
+ for (let j = 0; j < b.length; j++) {
108
+ if (segmentsIntersect(a1, a2, b[j], b[(j + 1) % b.length]))
109
+ return true;
110
+ }
111
+ }
112
+ return false;
113
+ }
114
+ /**
115
+ * Does the axis-aligned marquee rect intersect the (convex) hull polygon?
116
+ * Covers all cases: hull vertex inside the rect, rect fully inside the hull,
117
+ * and pure edge crossings.
118
+ */
119
+ export function rectIntersectsHull(rect, hull) {
120
+ if (hull.length === 0)
121
+ return false;
122
+ for (const p of hull) {
123
+ if (pointInRect(p, rect))
124
+ return true;
125
+ }
126
+ if (hull.length === 1)
127
+ return false;
128
+ const rectCorners = [
129
+ [rect.minX, rect.minY],
130
+ [rect.maxX, rect.minY],
131
+ [rect.maxX, rect.maxY],
132
+ [rect.minX, rect.maxY],
133
+ ];
134
+ if (hull.length >= 3) {
135
+ for (const c of rectCorners) {
136
+ if (pointInPolygon(c, hull))
137
+ return true;
138
+ }
139
+ }
140
+ for (let i = 0; i < hull.length; i++) {
141
+ const h1 = hull[i];
142
+ const h2 = hull[(i + 1) % hull.length];
143
+ for (let j = 0; j < 4; j++) {
144
+ const r1 = rectCorners[j];
145
+ const r2 = rectCorners[(j + 1) % 4];
146
+ if (segmentsIntersect(h1, h2, r1, r2))
147
+ return true;
148
+ }
149
+ }
150
+ return false;
151
+ }
@@ -20,6 +20,6 @@ export declare function resolveSpatialWorkspacePaneVisibility(viewMode: SpatialW
20
20
  show2d: boolean;
21
21
  show3d: boolean;
22
22
  };
23
- export declare function SpatialWorkspaceViewport({ children, className, floorplan, floorplanPaneRatio, onFloorplanPaneRatioChange, viewMode, viewer, ...rootProps }: SpatialWorkspaceViewportProps): import("react").JSX.Element;
23
+ export declare function SpatialWorkspaceViewport({ children, className, floorplan, floorplanPaneRatio, onFloorplanPaneRatioChange, viewMode, viewer, style, ...rootProps }: SpatialWorkspaceViewportProps): import("react").JSX.Element;
24
24
  export {};
25
25
  //# sourceMappingURL=spatial-workspace-viewport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spatial-workspace-viewport.d.ts","sourceRoot":"","sources":["../src/spatial-workspace-viewport.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,SAAS,EACd,KAAK,SAAS,EAKf,MAAM,OAAO,CAAA;AAId,MAAM,MAAM,wBAAwB,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAA;AAE5D,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,aAAa,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAC/C,gBAAgB,EAAE,cAAc,GAAG,IAAI,CAAA;CACxC,CAAA;AAED,KAAK,uBAAuB,GAAG,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,6BAA6B,KAAK,SAAS,CAAC,CAAA;AAElG,MAAM,WAAW,6BACf,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACzD,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,uBAAuB,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,0BAA0B,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,QAAQ,EAAE,wBAAwB,CAAA;IAClC,MAAM,EAAE,uBAAuB,CAAA;CAChC;AAKD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,wBAAwB;;;EAKvF;AASD,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,0BAA0B,EAC1B,QAAQ,EACR,MAAM,EACN,GAAG,SAAS,EACb,EAAE,6BAA6B,+BAoG/B"}
1
+ {"version":3,"file":"spatial-workspace-viewport.d.ts","sourceRoot":"","sources":["../src/spatial-workspace-viewport.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,SAAS,EACd,KAAK,SAAS,EAKf,MAAM,OAAO,CAAA;AAId,MAAM,MAAM,wBAAwB,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAA;AAE5D,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,aAAa,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAC/C,gBAAgB,EAAE,cAAc,GAAG,IAAI,CAAA;CACxC,CAAA;AAED,KAAK,uBAAuB,GAAG,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,6BAA6B,KAAK,SAAS,CAAC,CAAA;AAElG,MAAM,WAAW,6BACf,SAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACzD,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,uBAAuB,CAAA;IAClC,kBAAkB,EAAE,MAAM,CAAA;IAC1B,0BAA0B,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,QAAQ,EAAE,wBAAwB,CAAA;IAClC,MAAM,EAAE,uBAAuB,CAAA;CAChC;AAKD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,wBAAwB;;;EAKvF;AASD,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,0BAA0B,EAC1B,QAAQ,EACR,MAAM,EACN,KAAK,EACL,GAAG,SAAS,EACb,EAAE,6BAA6B,+BAyI/B"}
@@ -17,7 +17,7 @@ export function resolveSpatialWorkspacePaneVisibility(viewMode) {
17
17
  function renderSurface(surface, context) {
18
18
  return typeof surface === 'function' ? surface(context) : surface;
19
19
  }
20
- export function SpatialWorkspaceViewport({ children, className, floorplan, floorplanPaneRatio, onFloorplanPaneRatioChange, viewMode, viewer, ...rootProps }) {
20
+ export function SpatialWorkspaceViewport({ children, className, floorplan, floorplanPaneRatio, onFloorplanPaneRatioChange, viewMode, viewer, style, ...rootProps }) {
21
21
  const workspaceRef = useRef(null);
22
22
  const viewerPaneRef = useRef(null);
23
23
  const [workspaceElement, setWorkspaceElement] = useState(null);
@@ -61,15 +61,46 @@ export function SpatialWorkspaceViewport({ children, className, floorplan, floor
61
61
  }, [onFloorplanPaneRatioChange, stopFloorplanResize]);
62
62
  const { show2d, show3d } = resolveSpatialWorkspacePaneVisibility(viewMode);
63
63
  const renderContext = { show2d, show3d, viewerPaneRef, workspaceElement };
64
- return (_jsxs("div", { ...rootProps, className: `relative flex h-full${className ? ` ${className}` : ''}`, "data-pascal-spatial-workspace": "", ref: setWorkspaceNode, children: [_jsx(SpatialWorkspaceStyles, {}), children, _jsxs("div", { className: "relative h-full flex-shrink-0", "data-pascal-workspace-pane": "2d", style: {
64
+ return (_jsxs("div", { ...rootProps, style: {
65
+ position: 'relative',
66
+ display: 'flex',
67
+ width: '100%',
68
+ height: '100%',
69
+ minWidth: 0,
70
+ minHeight: 0,
71
+ overflow: 'hidden',
72
+ ...style,
73
+ }, className: `relative flex h-full${className ? ` ${className}` : ''}`, "data-pascal-spatial-workspace": "", ref: setWorkspaceNode, children: [_jsx(SpatialWorkspaceStyles, {}), children, _jsxs("div", { className: "relative h-full flex-shrink-0", "data-pascal-workspace-pane": "2d", style: {
74
+ position: 'relative',
75
+ flexShrink: 0,
76
+ height: '100%',
77
+ minHeight: 0,
65
78
  width: viewMode === '2d' ? '100%' : `${floorplanPaneRatio * 100}%`,
66
79
  display: show2d ? undefined : 'none',
67
- }, children: [_jsx("div", { className: "h-full w-full overflow-hidden", children: renderSurface(floorplan, renderContext) }), viewMode === 'split' ? (_jsx("div", { className: "absolute inset-y-0 -right-3 z-10 flex w-6 cursor-col-resize items-center justify-center", "data-pascal-workspace-divider": "", onPointerDown: handleFloorplanDividerDown, children: _jsx("div", { className: "h-8 w-1 rounded-full bg-neutral-400" }) })) : null] }), _jsx("div", { "aria-hidden": !show3d || undefined, className: "relative min-w-0 flex-1 overflow-hidden", "data-pascal-workspace-pane": "3d", "data-viewer-3d-pane": "", ref: viewerPaneRef, style: show3d
68
- ? undefined
69
- : {
70
- inset: 0,
71
- pointerEvents: 'none',
72
- position: 'absolute',
73
- visibility: 'hidden',
74
- }, children: renderSurface(viewer, renderContext) })] }));
80
+ }, children: [_jsx("div", { className: "h-full w-full overflow-hidden", style: { height: '100%', width: '100%', overflow: 'hidden' }, children: renderSurface(floorplan, renderContext) }), viewMode === 'split' ? (_jsx("div", { className: "absolute inset-y-0 -right-3 z-10 flex w-6 cursor-col-resize items-center justify-center", "data-pascal-workspace-divider": "", style: {
81
+ position: 'absolute',
82
+ top: 0,
83
+ bottom: 0,
84
+ right: -12,
85
+ zIndex: 10,
86
+ width: 24,
87
+ display: 'flex',
88
+ cursor: 'col-resize',
89
+ alignItems: 'center',
90
+ justifyContent: 'center',
91
+ }, onPointerDown: handleFloorplanDividerDown, children: _jsx("div", { className: "h-8 w-1 rounded-full bg-neutral-400", style: { width: 4, height: 32, borderRadius: 4, background: '#a3a3a3' } }) })) : null] }), _jsx("div", { "aria-hidden": !show3d || undefined, className: "relative min-w-0 flex-1 overflow-hidden", "data-pascal-workspace-pane": "3d", "data-viewer-3d-pane": "", ref: viewerPaneRef, style: {
92
+ position: 'relative',
93
+ flex: 1,
94
+ minWidth: 0,
95
+ height: '100%',
96
+ overflow: 'hidden',
97
+ ...(!show3d
98
+ ? {
99
+ inset: 0,
100
+ pointerEvents: 'none',
101
+ position: 'absolute',
102
+ visibility: 'hidden',
103
+ }
104
+ : {}),
105
+ }, children: renderSurface(viewer, renderContext) })] }));
75
106
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubuilder-ai/workspace",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.2",
4
4
  "description": "Shared read-only spatial workbench for uBuilder-AI Building and Site experiences",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,15 +23,15 @@
23
23
  "prepublishOnly": "bun run build && bun test"
24
24
  },
25
25
  "peerDependencies": {
26
- "@ubuilder-ai/core": "0.1.0-alpha.1",
26
+ "@ubuilder-ai/core": "0.1.0-alpha.2",
27
27
  "react": "^18 || ^19",
28
28
  "react-dom": "^18 || ^19"
29
29
  },
30
30
  "dependencies": {
31
- "@ubuilder-ai/floorplan-contract": "0.1.0-alpha.1"
31
+ "@ubuilder-ai/floorplan-contract": "0.1.0-alpha.2"
32
32
  },
33
33
  "devDependencies": {
34
- "@ubuilder-ai/core": "0.1.0-alpha.1",
34
+ "@ubuilder-ai/core": "0.1.0-alpha.2",
35
35
  "@ubuilder-ai/typescript-config": "*",
36
36
  "@types/bun": "^1.3.0",
37
37
  "@types/react": "19.2.2",