@pascal-app/editor 1.0.7 → 1.1.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 (336) hide show
  1. package/package.json +9 -15
  2. package/src/components/editor/action-menu-button.tsx +1 -1
  3. package/src/components/editor/alignment-3d-guide-layer.tsx +1 -1
  4. package/src/components/editor/custom-camera-controls.tsx +101 -45
  5. package/src/components/editor/duplicate-node.ts +2 -1
  6. package/src/components/editor/editor-layout-v2.tsx +1 -1
  7. package/src/components/editor/elevation-3d-guide-layer.tsx +1 -1
  8. package/src/components/editor/first-person-controls.tsx +20 -1983
  9. package/src/components/editor/fit-scene-framing.test.ts +318 -0
  10. package/src/components/editor/fit-scene-framing.ts +142 -0
  11. package/src/components/editor/floating-action-menu.tsx +5 -3
  12. package/src/components/editor/floating-building-action-menu.tsx +1 -1
  13. package/src/components/editor/floor-openings-overlay.tsx +1 -1
  14. package/src/components/editor/floor-region-controls.tsx +8 -4
  15. package/src/components/editor/floorplan-navigation-presentation.test.ts +0 -40
  16. package/src/components/editor/floorplan-navigation-presentation.ts +0 -66
  17. package/src/components/editor/floorplan-panel.tsx +199 -30
  18. package/src/components/editor/floorplan-wall-typing-keys.test.tsx +152 -0
  19. package/src/components/editor/floorplan-wall-typing-keys.ts +79 -0
  20. package/src/components/editor/follow-pascal.test.tsx +1 -2
  21. package/src/components/editor/follow-pascal.tsx +1 -1
  22. package/src/components/editor/footprint-height-handle.tsx +2 -2
  23. package/src/components/editor/group-actions.ts +1 -2
  24. package/src/components/editor/group-floating-action-menu.tsx +1 -1
  25. package/src/components/editor/group-move-3d.ts +1 -2
  26. package/src/components/editor/group-rotate-handle.tsx +1 -2
  27. package/src/components/editor/group-transform-shared.ts +3 -1
  28. package/src/components/editor/handles/use-handle-drag.ts +1 -2
  29. package/src/components/editor/index.tsx +43 -13
  30. package/src/components/editor/inspector-extension-actions.tsx +1 -1
  31. package/src/components/editor/measurement-pill.tsx +1 -1
  32. package/src/components/editor/node-arrow-handles.tsx +2 -2
  33. package/src/components/editor/open-wall-ends-3d-layer.tsx +2 -3
  34. package/src/components/editor/open-wall-ends-hint.tsx +1 -1
  35. package/src/components/editor/opening-guides-3d-layer.tsx +1 -1
  36. package/src/components/editor/quick-measurement-card.tsx +1 -1
  37. package/src/components/editor/room-controls.tsx +10 -6
  38. package/src/components/editor/room-handles-2d.tsx +3 -3
  39. package/src/components/editor/room-handles.tsx +4 -5
  40. package/src/components/editor/room-highlight.tsx +6 -105
  41. package/src/components/editor/room-labels.test.ts +8 -822
  42. package/src/components/editor/room-labels.tsx +41 -1670
  43. package/src/components/editor/room-webgpu-materials.test.ts +1 -1
  44. package/src/components/editor/selection-manager.tsx +5 -3
  45. package/src/components/editor/site-edge-labels.tsx +7 -3
  46. package/src/components/editor/snapshot-capture-overlay.tsx +2 -5
  47. package/src/components/editor/use-floorplan-background-placement.ts +2 -1
  48. package/src/components/editor/views/plugins-view.tsx +1 -1
  49. package/src/components/editor/views/view-bar.tsx +9 -9
  50. package/src/components/editor/wall-measurement-label.tsx +31 -15
  51. package/src/components/editor/wall-move-side-handles.tsx +11 -7
  52. package/src/components/editor/wall-pull-grip.tsx +2 -2
  53. package/src/components/editor/wall-region-handles.tsx +2 -2
  54. package/src/components/editor/wall-snap-beacon-layer.tsx +53 -32
  55. package/src/components/editor-2d/floorplan-group-move.tsx +3 -4
  56. package/src/components/editor-2d/floorplan-measurement-tool-layer.tsx +13 -13
  57. package/src/components/editor-2d/floorplan-open-wall-ends-layer.tsx +2 -3
  58. package/src/components/editor-2d/floorplan-registry-action-menu.tsx +2 -1
  59. package/src/components/editor-2d/floorplan-registry-move-overlay.tsx +23 -6
  60. package/src/components/editor-2d/renderers/floorplan-annotation-layout.test.ts +0 -37
  61. package/src/components/editor-2d/renderers/floorplan-annotation-layout.ts +0 -30
  62. package/src/components/editor-2d/renderers/floorplan-dimension-edit-overlay.tsx +13 -3
  63. package/src/components/editor-2d/renderers/floorplan-draft-measurement.tsx +7 -1
  64. package/src/components/editor-2d/renderers/floorplan-placement-preview-layer.tsx +14 -3
  65. package/src/components/editor-2d/renderers/floorplan-placement-typing-hud.test.tsx +35 -0
  66. package/src/components/editor-2d/renderers/floorplan-placement-typing-hud.tsx +65 -0
  67. package/src/components/editor-2d/renderers/floorplan-registry-layer.test.ts +30 -10
  68. package/src/components/editor-2d/renderers/floorplan-registry-layer.tsx +39 -35
  69. package/src/components/systems/roof/roof-edit-system.test.tsx +15 -1
  70. package/src/components/systems/roof/roof-edit-system.tsx +33 -21
  71. package/src/components/tools/distribution/distribution-run-tool.test.tsx +371 -3
  72. package/src/components/tools/distribution/distribution-run-tool.tsx +151 -33
  73. package/src/components/tools/item/move-tool.tsx +1 -6
  74. package/src/components/tools/item/placement-history.test.tsx +1 -1
  75. package/src/components/tools/item/use-placement-coordinator.tsx +3 -4
  76. package/src/components/tools/paint-region/wall-paint-region-tool.tsx +7 -3
  77. package/src/components/tools/registry/move-registry-node-tool.test.ts +42 -1
  78. package/src/components/tools/registry/move-registry-node-tool.tsx +39 -16
  79. package/src/components/tools/shared/cursor-sphere.tsx +1 -1
  80. package/src/components/tools/shared/draft-measurement-label.tsx +1 -1
  81. package/src/components/tools/shared/placement-box.tsx +2 -6
  82. package/src/components/tools/shared/placement-coordinate-input.tsx +94 -0
  83. package/src/components/tools/shared/placement-dimension-guides.tsx +1 -1
  84. package/src/components/tools/shared/segment-angle.ts +0 -4
  85. package/src/components/tools/site/terrain-brush-cursor.tsx +1 -1
  86. package/src/components/tools/tool-manager.tsx +1 -24
  87. package/src/components/tools/wall/wall-typed-entry.test.ts +99 -0
  88. package/src/components/tools/wall/wall-typed-entry.ts +70 -0
  89. package/src/components/ui/action-menu/camera-actions.tsx +2 -2
  90. package/src/components/ui/action-menu/control-modes.tsx +1 -1
  91. package/src/components/ui/action-menu/follow-pascal-pill.tsx +1 -1
  92. package/src/components/ui/action-menu/index.tsx +3 -3
  93. package/src/components/ui/action-menu/measurement-control.tsx +3 -3
  94. package/src/components/ui/action-menu/placement.ts +0 -18
  95. package/src/components/ui/action-menu/point-ask-button.tsx +1 -1
  96. package/src/components/ui/action-menu/view-toggles.tsx +5 -5
  97. package/src/components/ui/controls/finish-swatch.tsx +1 -1
  98. package/src/components/ui/controls/material-paint-panel.tsx +2 -2
  99. package/src/components/ui/controls/scene-material-list.tsx +2 -2
  100. package/src/components/ui/controls/select-control.tsx +1 -1
  101. package/src/components/ui/controls/slider-control.tsx +18 -6
  102. package/src/components/ui/controls/terrain-sculpt-panel.tsx +1 -1
  103. package/src/components/ui/controls/tool-options-panel.tsx +74 -44
  104. package/src/components/ui/floating-level-selector.tsx +3 -3
  105. package/src/components/ui/helpers/contextual-helper-panel.tsx +1 -1
  106. package/src/components/ui/helpers/helper-manager.test.tsx +54 -1
  107. package/src/components/ui/helpers/helper-manager.tsx +55 -1
  108. package/src/components/ui/level-duplicate-dialog.tsx +1 -1
  109. package/src/components/ui/panels/collections/collections-popover.tsx +2 -2
  110. package/src/components/ui/panels/floor-foundation-panel.tsx +3 -3
  111. package/src/components/ui/panels/floor-opening-panel.tsx +5 -5
  112. package/src/components/ui/panels/mobile-selection-bar.tsx +28 -24
  113. package/src/components/ui/panels/multi-height-mode.tsx +3 -3
  114. package/src/components/ui/panels/multi-selection-panel.tsx +1 -1
  115. package/src/components/ui/panels/node-display.ts +1 -1
  116. package/src/components/ui/panels/panel-manager.tsx +5 -3
  117. package/src/components/ui/panels/panel-wrapper.tsx +42 -19
  118. package/src/components/ui/panels/parametric-inspector.tsx +1 -1
  119. package/src/components/ui/panels/room-construction-rows.tsx +7 -7
  120. package/src/components/ui/panels/room-name-options.ts +1 -5
  121. package/src/components/ui/panels/room-openings-field.tsx +1 -1
  122. package/src/components/ui/panels/room-panel.tsx +7 -9
  123. package/src/components/ui/primitives/color-dot.tsx +2 -2
  124. package/src/components/ui/primitives/opacity-control.tsx +2 -2
  125. package/src/components/ui/primitives/sidebar.tsx +3 -3
  126. package/src/components/ui/right-stack.test.ts +13 -6
  127. package/src/components/ui/right-stack.tsx +22 -11
  128. package/src/components/ui/sidebar/icon-rail.tsx +1 -1
  129. package/src/components/ui/sidebar/panels/items-panel/function-tree-panel.tsx +1 -1
  130. package/src/components/ui/sidebar/panels/settings-panel/audio-settings-dialog.tsx +2 -2
  131. package/src/components/ui/sidebar/panels/settings-panel/construction-animation-setting.tsx +1 -1
  132. package/src/components/ui/sidebar/panels/settings-panel/index.tsx +2 -2
  133. package/src/components/ui/sidebar/panels/settings-panel/keyboard-shortcuts-dialog.tsx +1 -1
  134. package/src/components/ui/sidebar/panels/settings-panel/load-build-dialog.tsx +2 -6
  135. package/src/components/ui/sidebar/panels/settings-panel/print-export-button.tsx +1 -1
  136. package/src/components/ui/sidebar/panels/site-panel/building-tree-node.tsx +1 -1
  137. package/src/components/ui/sidebar/panels/site-panel/ceiling-tree-node.tsx +1 -1
  138. package/src/components/ui/sidebar/panels/site-panel/index.tsx +3 -10
  139. package/src/components/ui/sidebar/panels/site-panel/inline-rename-input.tsx +1 -1
  140. package/src/components/ui/sidebar/panels/site-panel/level-tree-node.tsx +1 -1
  141. package/src/components/ui/sidebar/panels/site-panel/roof-tree-node.tsx +46 -7
  142. package/src/components/ui/sidebar/panels/site-panel/slab-tree-node.tsx +1 -1
  143. package/src/components/ui/sidebar/panels/site-panel/tree-node-actions.tsx +1 -1
  144. package/src/components/ui/sidebar/panels/site-panel/tree-node-drag.tsx +14 -5
  145. package/src/components/ui/sidebar/panels/site-panel/unit-tree-node.tsx +2 -2
  146. package/src/components/ui/sidebar/panels/site-panel/zone-tree-node.tsx +1 -1
  147. package/src/components/ui/sidebar/panels/zone-panel/index.tsx +3 -3
  148. package/src/components/ui/sidebar/tab-bar.tsx +1 -1
  149. package/src/components/ui/wall-type/wall-type-editor-dialog.tsx +2 -2
  150. package/src/components/ui/wall-type/wall-type-menu.tsx +1 -1
  151. package/src/components/viewer-overlay.tsx +1 -2
  152. package/src/hooks/use-auto-frame.ts +1 -2
  153. package/src/hooks/use-keyboard.ts +1 -2
  154. package/src/hooks/use-selected-room.ts +5 -7
  155. package/src/i18n/floor-footprint-name.ts +1 -1
  156. package/src/i18n/locales/en/messages.po +1036 -306
  157. package/src/i18n/locales/en/messages.ts +1 -1
  158. package/src/i18n/locales/en-XA/messages.ts +1 -1
  159. package/src/i18n/locales/es/messages.po +2267 -439
  160. package/src/i18n/locales/fr/messages.po +2267 -439
  161. package/src/i18n/locales/ja/messages.po +2267 -439
  162. package/src/i18n/locales/zh-CN/messages.po +2267 -439
  163. package/src/i18n/locales.test.ts +1 -1
  164. package/src/index.tsx +183 -178
  165. package/src/lib/below-grade.test.tsx +4 -4
  166. package/src/lib/camera-facing.test.ts +1 -1
  167. package/src/lib/camera-facing.ts +2 -3
  168. package/src/lib/contextual-help.ts +6 -0
  169. package/src/lib/editor-level-display.ts +1 -1
  170. package/src/lib/elevation-guides.ts +21 -6
  171. package/src/lib/elevator-support.ts +1 -72
  172. package/src/lib/floor-footprints.test.ts +3 -3
  173. package/src/lib/floor-footprints.ts +1 -9
  174. package/src/lib/floor-foundation-support.test.ts +8 -3
  175. package/src/lib/floor-opening-draft.ts +2 -2
  176. package/src/lib/floor-region-session.ts +1 -1
  177. package/src/lib/floorplan/annotation-visibility.test.ts +1 -1
  178. package/src/lib/floorplan/annotation-visibility.ts +1 -1
  179. package/src/lib/floorplan/floorplan-export.test.ts +1 -1
  180. package/src/lib/floorplan/floorplan-export.tsx +8 -11
  181. package/src/lib/floorplan/floorplan-extension.ts +4 -157
  182. package/src/lib/floorplan/floorplan-mode.ts +2 -1
  183. package/src/lib/floorplan/floorplan-pdfkit-renderer.test.ts +1 -1
  184. package/src/lib/floorplan/floorplan-pdfkit-renderer.ts +8 -6
  185. package/src/lib/floorplan/floorplan-plugin-install.test.tsx +3 -4
  186. package/src/lib/floorplan/geometry.ts +2 -112
  187. package/src/lib/floorplan/index.ts +0 -9
  188. package/src/lib/floorplan/items.ts +2 -1
  189. package/src/lib/floorplan/open-wall-ends.ts +2 -1
  190. package/src/lib/floorplan/schedules.ts +6 -3
  191. package/src/lib/floorplan/sheet-export.ts +7 -3
  192. package/src/lib/floorplan/site-plan/site-parts.ts +7 -1
  193. package/src/lib/floorplan/site-plan/site-plan-layer.tsx +1 -1
  194. package/src/lib/follow-pascal-presentation.ts +1 -1
  195. package/src/lib/gesture-lifecycle.ts +3 -1
  196. package/src/lib/glb-export.ts +1 -1
  197. package/src/lib/interaction/scope.ts +1 -0
  198. package/src/lib/layer-thickness.ts +1 -1
  199. package/src/lib/level-selection.test.ts +18 -2
  200. package/src/lib/level-selection.ts +31 -8
  201. package/src/lib/linear-display.ts +1 -1
  202. package/src/lib/live-gesture-round-trip.test.ts +1 -1
  203. package/src/lib/material-paint.ts +1 -1
  204. package/src/lib/measurement-label.test.ts +1 -1
  205. package/src/lib/measurements.test.ts +7 -5
  206. package/src/lib/mezzanine-selection.test.ts +1 -1
  207. package/src/lib/node-action-movement.test.tsx +115 -0
  208. package/src/lib/node-action-movement.ts +2 -0
  209. package/src/lib/paint-region-mode.ts +1 -1
  210. package/src/lib/placement-metadata.ts +4 -0
  211. package/src/lib/point-ask/describe-target.ts +6 -8
  212. package/src/lib/point-ask/region.ts +1 -1
  213. package/src/lib/point-ask/session.ts +1 -2
  214. package/src/lib/print-shell-compiler.ts +12 -1
  215. package/src/lib/print-wall-solids.test.ts +11 -0
  216. package/src/lib/print-wall-solids.ts +9 -0
  217. package/src/lib/roof-duplication.test.ts +100 -0
  218. package/src/lib/roof-duplication.ts +30 -5
  219. package/src/lib/room-built-on.test.ts +2 -5
  220. package/src/lib/room-built-on.ts +1 -15
  221. package/src/lib/room-construction-commands.ts +3 -2
  222. package/src/lib/room-controls-phase6.test.ts +1 -1
  223. package/src/lib/room-handle-drag.ts +8 -37
  224. package/src/lib/room-name-catalog.test.ts +2 -1
  225. package/src/lib/room-name-messages.test.ts +2 -1
  226. package/src/lib/room-name-messages.ts +1 -118
  227. package/src/lib/room-name-storage.test.ts +2 -1
  228. package/src/lib/room-push-dimensions.test.ts +1 -1
  229. package/src/lib/room-selection-commands.ts +2 -2
  230. package/src/lib/room-selection.test.ts +6 -6
  231. package/src/lib/room-transform-session.ts +1 -2
  232. package/src/lib/room-zone-routing.ts +2 -2
  233. package/src/lib/scene-clipboard.ts +2 -1
  234. package/src/lib/selection-routing.test.ts +0 -28
  235. package/src/lib/selection-routing.ts +1 -40
  236. package/src/lib/sfx-bus.ts +8 -32
  237. package/src/lib/sfx-player.test.ts +72 -1
  238. package/src/lib/sfx-player.ts +49 -337
  239. package/src/lib/snapping-mode.test.ts +23 -1
  240. package/src/lib/viewer-selection.test.ts +38 -10
  241. package/src/lib/wall-pull.test.ts +1 -1
  242. package/src/lib/wall-pull.ts +1 -27
  243. package/src/lib/wall-region-list.ts +3 -1
  244. package/src/lib/window-interaction.test.ts +4 -2
  245. package/src/store/use-editor.tsx +22 -26
  246. package/src/store/use-floorplan-annotation-visibility.ts +5 -5
  247. package/src/store/use-placement-typing.test.ts +165 -0
  248. package/src/store/use-placement-typing.ts +186 -0
  249. package/src/store/use-wall-region-handles-selection.ts +1 -2
  250. package/src/components/editor/__bench__/room-label-placement.bench.ts +0 -108
  251. package/src/components/editor/first-person/build-collider-world.test.ts +0 -596
  252. package/src/components/editor/first-person/build-collider-world.ts +0 -549
  253. package/src/components/editor/first-person/ground-holes.test.ts +0 -128
  254. package/src/components/editor/first-person/ground-holes.ts +0 -130
  255. package/src/components/editor/first-person/mechanism-targets.test.ts +0 -162
  256. package/src/components/editor/first-person/mechanism-targets.ts +0 -88
  257. package/src/components/editor/first-person/terrain-collider.test.ts +0 -132
  258. package/src/components/editor/first-person/terrain-collider.ts +0 -212
  259. package/src/components/editor/floorplan-camera-sync.test.ts +0 -249
  260. package/src/components/editor/floorplan-camera-sync.ts +0 -213
  261. package/src/components/editor/localized-html.tsx +0 -22
  262. package/src/components/editor-2d/renderers/floorplan-dimension-renderer.test.tsx +0 -236
  263. package/src/components/editor-2d/renderers/floorplan-dimension-renderer.tsx +0 -708
  264. package/src/components/editor-2d/renderers/floorplan-geometry-renderer.test.tsx +0 -385
  265. package/src/components/editor-2d/renderers/floorplan-geometry-renderer.tsx +0 -670
  266. package/src/components/editor-2d/renderers/floorplan-label-angle.test.ts +0 -89
  267. package/src/components/editor-2d/renderers/floorplan-label-angle.ts +0 -106
  268. package/src/components/editor-2d/svg-paths.ts +0 -124
  269. package/src/components/tools/elevator/elevator-defaults.ts +0 -8
  270. package/src/components/tools/elevator/elevator-tool.tsx +0 -372
  271. package/src/components/tools/elevator/move-elevator-tool.tsx +0 -262
  272. package/src/components/ui/action-menu/action-button.tsx +0 -89
  273. package/src/components/ui/action-menu/follow-pascal-toggle.tsx +0 -42
  274. package/src/components/ui/primitives/button.tsx +0 -69
  275. package/src/components/ui/primitives/dropdown-menu.tsx +0 -232
  276. package/src/components/ui/primitives/popover.tsx +0 -42
  277. package/src/components/ui/primitives/switch.tsx +0 -29
  278. package/src/components/ui/primitives/tooltip.tsx +0 -57
  279. package/src/components/ui/scene-loader.tsx +0 -73
  280. package/src/components/viewer/floorplan-compass-button.tsx +0 -67
  281. package/src/components/viewer/floorplan-preview-geometry.test.ts +0 -107
  282. package/src/components/viewer/floorplan-preview-geometry.ts +0 -281
  283. package/src/components/viewer/floorplan-preview-navigation.test.ts +0 -43
  284. package/src/components/viewer/floorplan-preview-navigation.ts +0 -62
  285. package/src/components/viewer/floorplan-preview-visibility.test.ts +0 -35
  286. package/src/components/viewer/floorplan-preview-visibility.ts +0 -19
  287. package/src/components/viewer/floorplan-preview.tsx +0 -1065
  288. package/src/components/viewer/render-settings-menu.tsx +0 -294
  289. package/src/components/viewer/sky-control.tsx +0 -710
  290. package/src/components/viewer/use-viewer-camera-navigation-sync.ts +0 -140
  291. package/src/components/viewer/use-viewer-ui-sounds.test.ts +0 -15
  292. package/src/components/viewer/use-viewer-ui-sounds.ts +0 -46
  293. package/src/components/viewer/viewer-controls-bar.tsx +0 -496
  294. package/src/components/viewer/viewer-hover-label.tsx +0 -42
  295. package/src/components/viewer/viewer-rooms.tsx +0 -248
  296. package/src/components/viewer/viewer-scene-header.tsx +0 -286
  297. package/src/components/viewer/viewer-selection-manager.tsx +0 -124
  298. package/src/components/viewer/viewer-stage-modes.test.ts +0 -38
  299. package/src/components/viewer/viewer-stage-modes.ts +0 -49
  300. package/src/components/viewer/viewer-stage-switcher.tsx +0 -97
  301. package/src/components/viewer/viewer-stage.test.tsx +0 -47
  302. package/src/components/viewer/viewer-stage.tsx +0 -221
  303. package/src/components/walkthrough-hud.tsx +0 -193
  304. package/src/hooks/use-mobile.ts +0 -19
  305. package/src/i18n/level-name.ts +0 -39
  306. package/src/i18n/scene-theme-name.ts +0 -16
  307. package/src/lib/below-grade.ts +0 -133
  308. package/src/lib/camera-pose.test.ts +0 -237
  309. package/src/lib/camera-pose.ts +0 -172
  310. package/src/lib/door-interaction.ts +0 -102
  311. package/src/lib/floorplan/floorplan-extension.test.ts +0 -42
  312. package/src/lib/floorplan/floorplan-readonly.test.ts +0 -47
  313. package/src/lib/floorplan/floorplan-readonly.ts +0 -95
  314. package/src/lib/floorplan/marks.test.ts +0 -213
  315. package/src/lib/floorplan/marks.ts +0 -238
  316. package/src/lib/measurement-label.ts +0 -68
  317. package/src/lib/measurements.ts +0 -225
  318. package/src/lib/node-display-label.ts +0 -37
  319. package/src/lib/room-assembly-overlay.test.ts +0 -275
  320. package/src/lib/room-assembly-overlay.ts +0 -265
  321. package/src/lib/room-selection.ts +0 -417
  322. package/src/lib/scene-bounds.test.ts +0 -183
  323. package/src/lib/scene-bounds.ts +0 -169
  324. package/src/lib/typing-target.ts +0 -9
  325. package/src/lib/viewer-selection.ts +0 -595
  326. package/src/lib/window-interaction.ts +0 -142
  327. package/src/lib/zone-content.ts +0 -133
  328. package/src/store/camera-pose-store.test.ts +0 -29
  329. package/src/store/camera-pose-store.ts +0 -27
  330. package/src/store/navigation-sync-pose-store.test.ts +0 -34
  331. package/src/store/navigation-sync-pose-store.ts +0 -27
  332. package/src/store/use-audio.test.ts +0 -146
  333. package/src/store/use-audio.tsx +0 -169
  334. package/src/store/use-first-person-hud.ts +0 -40
  335. package/src/store/use-follow-pascal.test.ts +0 -62
  336. package/src/store/use-follow-pascal.ts +0 -53
@@ -1,6 +1,6 @@
1
1
  import { afterEach, expect, test } from 'bun:test'
2
2
  import { createI18n, setLocale, translate } from '@pascal-app/core'
3
- import { authoredLevelName, localizedLevelName } from './level-name'
3
+ import { authoredLevelName, localizedLevelName } from '@pascal-app/viewer/ui'
4
4
  import { registerBundledLocales } from './locales'
5
5
 
6
6
  afterEach(() => setLocale('en'))
package/src/index.tsx CHANGED
@@ -15,8 +15,17 @@ export {
15
15
  acquireSceneReadOnlyLease,
16
16
  applyScenePatch,
17
17
  applySceneSnapshot,
18
+ buildMeasurementAngleArcPoints,
19
+ buildSvgAnnularSectorPath,
20
+ buildSvgArcPath,
21
+ buildSvgArrowHeadPoints,
18
22
  type CompiledTranslationMessages,
23
+ clampPlanValue,
24
+ closeDoorOpenState,
25
+ closeWindowOpenState,
26
+ createFloorplanContextExtensions,
19
27
  createI18n,
28
+ cubicMetersToVolumeUnit,
20
29
  DEFAULT_CURVED_STAIR_INNER_RADIUS,
21
30
  DEFAULT_CURVED_STAIR_SWEEP_ANGLE,
22
31
  DEFAULT_SPIRAL_SHOW_CENTER_COLUMN,
@@ -33,15 +42,59 @@ export {
33
42
  DEFAULT_STAIR_TYPE,
34
43
  DEFAULT_STAIR_WIDTH,
35
44
  defaultI18n,
45
+ FLOORPLAN_CONTEXT_EXTENSION_KEY,
46
+ FLOORPLAN_GEOMETRY_METADATA_KEY,
47
+ type FloorplanAnnotationRole,
48
+ type FloorplanMetricNotation,
49
+ type FloorplanRenderPurpose,
50
+ type FloorplanSchedule,
51
+ type FloorplanWallDimensionFaces,
52
+ floorplanGeometryMetadata,
53
+ formatAngleRadians,
54
+ formatAreaLabel,
36
55
  formatLength,
56
+ formatLinearMeasurement,
37
57
  formatNumber,
58
+ formatVolumeLabel,
59
+ getArcPlanPoint,
60
+ getAreaUnitLabel,
61
+ getDisplayedDoorValue,
62
+ getDisplayedWindowShutterValue,
63
+ getDisplayedWindowValue,
64
+ getLinearUnitLabel,
38
65
  getLocale,
66
+ getPlanPointDistance,
67
+ getThickPlanLinePolygon,
68
+ getVolumeUnitLabel,
69
+ interpolatePlanPoint,
70
+ isOperableWindowType,
71
+ type LinearUnit,
72
+ linearControlValueToMeters,
73
+ linearUnitToMeters,
74
+ type MarkResolution,
75
+ metersToLinearUnit,
76
+ movePlanPointTowards,
39
77
  normalizeDecimalInput,
78
+ type OpeningMarkKind,
79
+ openDoorOpenState,
80
+ openWindowOpenState,
81
+ orderedOpenings,
40
82
  type PascalI18n,
41
83
  PascalI18nProvider,
84
+ parseLinearMeasurementInput,
42
85
  parseLocalizedNumber,
86
+ persistResolvedMarks,
87
+ readFloorplanContext,
88
+ readFloorplanGeometryMetadata,
89
+ readFloorplanMetricNotationOverride,
43
90
  registerCompiledMessages,
44
91
  registerMessages,
92
+ resolveElevatorNodeSupportY,
93
+ resolveElevatorSupportLevelId,
94
+ resolveElevatorSupportY,
95
+ resolveMarkDetail,
96
+ resolveMarks,
97
+ rotatePlanVector,
45
98
  type SceneCommit,
46
99
  type SceneCommitListener,
47
100
  type SceneCommitOrigin,
@@ -49,7 +102,10 @@ export {
49
102
  type SceneNodePatch,
50
103
  type ScenePatch,
51
104
  type SceneSnapshot,
105
+ separatorFloorElevation,
52
106
  setLocale,
107
+ setWindowShuttersOpenState,
108
+ squareMetersToAreaUnit,
53
109
  subscribe,
54
110
  subscribeSceneCommits,
55
111
  type TranslationMessage,
@@ -59,8 +115,98 @@ export {
59
115
  useLocale,
60
116
  usePascalI18n,
61
117
  useScene,
118
+ WALL_PULL_AFFORDANCE,
119
+ WALL_PULL_GRIP_TITLE,
120
+ WALL_PUSH_AFFORDANCE,
121
+ type WallPullGripPayload,
122
+ type WallPushArrowPayload,
123
+ type WindowOpenAnimationOptions,
124
+ type WindowShutterField,
125
+ wallPullSeed,
126
+ withFloorplanGeometryMetadata,
62
127
  } from '@pascal-app/core'
63
- export { useViewer } from '@pascal-app/viewer'
128
+ export {
129
+ isTypingTarget,
130
+ MEASUREMENT_ACTIVE_COLOR,
131
+ MEASUREMENT_DANGLING_COLOR,
132
+ MEASUREMENT_FLOORPLAN_COLOR,
133
+ MEASUREMENT_PERSISTENT_COLOR,
134
+ measurementFloorplanPresentationColor,
135
+ measurementPolygonLabelAnchor,
136
+ measurementPresentationColor,
137
+ triangulateMeasurementPolygon,
138
+ useViewer,
139
+ } from '@pascal-app/viewer'
140
+ export { useAudioSettings as useAudio, useViewerUiSounds } from '@pascal-app/viewer/sfx'
141
+ export type { ActionMenuPlacement, RoomKey, RoomSelectionRecord } from '@pascal-app/viewer/ui'
142
+ export {
143
+ applyViewerClick,
144
+ applyViewerHover,
145
+ DaylightMenu,
146
+ DroneHud,
147
+ DropdownMenu,
148
+ DropdownMenuContent,
149
+ DropdownMenuGroup,
150
+ DropdownMenuItem,
151
+ DropdownMenuLabel,
152
+ DropdownMenuSeparator,
153
+ DropdownMenuSub,
154
+ DropdownMenuSubContent,
155
+ DropdownMenuSubTrigger,
156
+ DropdownMenuTrigger,
157
+ displayRoomName,
158
+ EdgesToggleItem,
159
+ type FirstPersonHudState,
160
+ FloorplanCompassButton,
161
+ type FloorplanCompassButtonProps,
162
+ FloorplanDimensionRenderer,
163
+ FloorplanGeometryRenderer,
164
+ FloorplanPreview,
165
+ type FloorplanPreviewProps,
166
+ type FloorplanPreviewScene,
167
+ framedLookAt,
168
+ frameViewerCamera,
169
+ frameViewerNode,
170
+ LocalizedHtml,
171
+ localizedLevelName,
172
+ normalizeViewerStageModes,
173
+ openSkyPanel,
174
+ ParametricViewerRooms,
175
+ QualityMenu,
176
+ resolveMobileViewerStageMode,
177
+ resolveViewerStageMode,
178
+ SceneLoader,
179
+ SkyControl,
180
+ sceneThemeName,
181
+ subscribeCameraPose,
182
+ Tooltip,
183
+ TooltipContent,
184
+ TooltipTrigger,
185
+ useFirstPersonHud,
186
+ useFollowPascal,
187
+ useSkyPanel,
188
+ useViewerCameraNavigationSync,
189
+ useViewerFloorDisplay,
190
+ VIEWER_STAGE_MODES,
191
+ ViewerControlsBar,
192
+ type ViewerControlsBarProps,
193
+ ViewerHoverLabel,
194
+ type ViewerPick,
195
+ ViewerRooms,
196
+ ViewerSceneHeader,
197
+ type ViewerSceneHeaderProps,
198
+ ViewerSelectionManager,
199
+ type ViewerSource,
200
+ ViewerStage,
201
+ type ViewerStageMode,
202
+ type ViewerStageProps,
203
+ ViewerStageSwitcher,
204
+ type ViewerStageSwitcherProps,
205
+ viewerStageIncludes3D,
206
+ WalkthroughHud,
207
+ type WalkthroughHudProps,
208
+ type WalkthroughInteract,
209
+ } from '@pascal-app/viewer/ui'
64
210
  export type { EditorProps } from './components/editor'
65
211
  export { default as Editor } from './components/editor'
66
212
  export { ActionMenuButton } from './components/editor/action-menu-button'
@@ -96,7 +242,6 @@ export { FloatingActionMenu as FloatingMenu } from './components/editor/floating
96
242
  // flags. Tools place onto `useViewer.selection.levelId`, so the host must set a
97
243
  // building + level selection first.
98
244
  export { EDITOR_GRID_INPUT_NAME, Grid } from './components/editor/grid'
99
- export { Html as LocalizedHtml } from './components/editor/localized-html'
100
245
  export {
101
246
  DimensionPill,
102
247
  type DimensionPillPart,
@@ -137,12 +282,10 @@ export { WallMoveSideHandles } from './components/editor/wall-move-side-handles'
137
282
  export { WallPushArrow } from './components/editor/wall-push-arrow'
138
283
  export { useWallsBelowSetting } from './components/editor-2d/floorplan-adjacent-walls-layer'
139
284
  export { useFloorplanRender } from './components/editor-2d/floorplan-render-context'
140
- export { FloorplanDimensionRenderer } from './components/editor-2d/renderers/floorplan-dimension-renderer'
141
285
  export {
142
286
  type DraftMeasurement,
143
287
  FloorplanDraftMeasurement,
144
288
  } from './components/editor-2d/renderers/floorplan-draft-measurement'
145
- export { FloorplanGeometryRenderer } from './components/editor-2d/renderers/floorplan-geometry-renderer'
146
289
  export {
147
290
  FloorplanNodePreview,
148
291
  type FloorplanNodePreviewProps,
@@ -150,12 +293,6 @@ export {
150
293
  // SVG path builders for arc / annular-sector / arrow-head shapes —
151
294
  // inlined into `kind: 'path'` / `kind: 'polygon'` primitives by curved
152
295
  // stair rendering in `nodes/src/stair/floorplan.ts`.
153
- export {
154
- buildSvgAnnularSectorPath,
155
- buildSvgArcPath,
156
- buildSvgArrowHeadPoints,
157
- getArcPlanPoint,
158
- } from './components/editor-2d/svg-paths'
159
296
  export { useCeilingsSetting } from './components/systems/ceiling/ceiling-system'
160
297
  export type {
161
298
  SelectionAffordanceHistoryApi,
@@ -188,6 +325,7 @@ export {
188
325
  } from './components/tools/item/use-placement-coordinator'
189
326
  export { MoveRegistryNodeTool } from './components/tools/registry/move-registry-node-tool'
190
327
  export {
328
+ type RegistryToolContextValue,
191
329
  RegistryToolProvider,
192
330
  useRegistryToolContext,
193
331
  } from './components/tools/registry-tool-context'
@@ -207,6 +345,7 @@ export {
207
345
  resolveLevelConstructionPlane,
208
346
  } from './components/tools/shared/horizontal-construction-plane'
209
347
  export { PlacementBox } from './components/tools/shared/placement-box'
348
+ export { PlacementCoordinateInput } from './components/tools/shared/placement-coordinate-input'
210
349
  export { PlacementDimensionGuides } from './components/tools/shared/placement-dimension-guides'
211
350
  // Pointer-decided support surface (deck top vs floor underneath) — the
212
351
  // draw tools (wall / fence) ride their grid plane and commit cap on it.
@@ -222,7 +361,6 @@ export {
222
361
  type PolygonEditorProps,
223
362
  } from './components/tools/shared/polygon-editor'
224
363
  export {
225
- formatAngleRadians,
226
364
  getAngleArcToSegmentReference,
227
365
  getAngleToSegmentReference,
228
366
  getSegmentAngleReferenceAtPoint,
@@ -264,6 +402,11 @@ export {
264
402
  type WallPullSnapRadii,
265
403
  type WallPullSnapResult,
266
404
  } from './components/tools/wall/wall-pull-snap'
405
+ export {
406
+ formatWallDraftHeading,
407
+ resolveTypedWallEnd,
408
+ wallDraftHeadingDegrees,
409
+ } from './components/tools/wall/wall-typed-entry'
267
410
  // `ToolbarLeft` / `ToolbarRight` alias `ViewerToolbarLeft` / `ViewerToolbarRight`
268
411
  // (same components) under the names headless hosts compose their toolbars with.
269
412
  export {
@@ -271,7 +414,6 @@ export {
271
414
  CameraActions as ViewerToolbarRight,
272
415
  } from './components/ui/action-menu/camera-actions'
273
416
  export { furnishTools } from './components/ui/action-menu/furnish-tools'
274
- export type { ActionMenuPlacement } from './components/ui/action-menu/placement'
275
417
  export {
276
418
  ViewToggles as ToolbarLeft,
277
419
  ViewToggles as ViewerToolbarLeft,
@@ -334,26 +476,12 @@ export { ScriptedFinishRow } from './components/ui/panels/room-panel'
334
476
  export { ShapeChoice } from './components/ui/panels/shape-choice'
335
477
  export { WallPaintRegionList } from './components/ui/panels/wall-region-list'
336
478
  export { PALETTE_COLORS } from './components/ui/primitives/color-dot'
337
- export {
338
- DropdownMenu,
339
- DropdownMenuContent,
340
- DropdownMenuGroup,
341
- DropdownMenuItem,
342
- DropdownMenuLabel,
343
- DropdownMenuSeparator,
344
- DropdownMenuSub,
345
- DropdownMenuSubContent,
346
- DropdownMenuSubTrigger,
347
- DropdownMenuTrigger,
348
- } from './components/ui/primitives/dropdown-menu'
349
479
  export {
350
480
  ShortcutToken,
351
481
  shortcutDisplayValue,
352
482
  } from './components/ui/primitives/shortcut-token'
353
483
  export { useSidebarStore } from './components/ui/primitives/sidebar'
354
484
  export { Slider } from './components/ui/primitives/slider'
355
- export { Tooltip, TooltipContent, TooltipTrigger } from './components/ui/primitives/tooltip'
356
- export { SceneLoader } from './components/ui/scene-loader'
357
485
  export type { ExtraPanel } from './components/ui/sidebar/icon-rail'
358
486
  export { ItemsPanel } from './components/ui/sidebar/panels/items-panel'
359
487
  export type { FunctionTreeNode } from './components/ui/sidebar/panels/items-panel/function-tree-panel'
@@ -376,53 +504,6 @@ export {
376
504
  } from './components/ui/snap-target-badge'
377
505
  // A wall's project wall types: new, edit, duplicate (the wall panel's Assembly).
378
506
  export { WallTypeMenu } from './components/ui/wall-type/wall-type-menu'
379
- export {
380
- FloorplanCompassButton,
381
- type FloorplanCompassButtonProps,
382
- } from './components/viewer/floorplan-compass-button'
383
- export {
384
- FloorplanPreview,
385
- type FloorplanPreviewProps,
386
- type FloorplanPreviewScene,
387
- } from './components/viewer/floorplan-preview'
388
- export {
389
- DaylightMenu,
390
- EdgesToggleItem,
391
- QualityMenu,
392
- } from './components/viewer/render-settings-menu'
393
- export { openSkyPanel, SkyControl, useSkyPanel } from './components/viewer/sky-control'
394
- export { useViewerCameraNavigationSync } from './components/viewer/use-viewer-camera-navigation-sync'
395
- export { useViewerUiSounds } from './components/viewer/use-viewer-ui-sounds'
396
- export {
397
- ViewerControlsBar,
398
- type ViewerControlsBarProps,
399
- } from './components/viewer/viewer-controls-bar'
400
- export { ViewerHoverLabel } from './components/viewer/viewer-hover-label'
401
- export { ParametricViewerRooms, ViewerRooms } from './components/viewer/viewer-rooms'
402
- export {
403
- ViewerSceneHeader,
404
- type ViewerSceneHeaderProps,
405
- } from './components/viewer/viewer-scene-header'
406
- export { ViewerSelectionManager } from './components/viewer/viewer-selection-manager'
407
- export { ViewerStage, type ViewerStageProps } from './components/viewer/viewer-stage'
408
- export {
409
- normalizeViewerStageModes,
410
- resolveMobileViewerStageMode,
411
- resolveViewerStageMode,
412
- VIEWER_STAGE_MODES,
413
- viewerStageIncludes3D,
414
- } from './components/viewer/viewer-stage-modes'
415
- export {
416
- type ViewerStageMode,
417
- ViewerStageSwitcher,
418
- type ViewerStageSwitcherProps,
419
- } from './components/viewer/viewer-stage-switcher'
420
- export {
421
- DroneHud,
422
- WalkthroughHud,
423
- type WalkthroughHudProps,
424
- type WalkthroughInteract,
425
- } from './components/walkthrough-hud'
426
507
  export type { SaveStatus } from './hooks/use-auto-save'
427
508
  // useDragAction is the React-side glue for the registry's DragAction
428
509
  // primitive. Public so registry-driven kinds (Phase 5+ Stage D ports)
@@ -434,7 +515,6 @@ export { usePlacementNotice } from './hooks/use-placement-notice'
434
515
  export { useReducedMotion } from './hooks/use-reduced-motion'
435
516
  export { useSelectedRoom } from './hooks/use-selected-room'
436
517
  export { type Selection, useSelection } from './hooks/use-selection'
437
- export { localizedLevelName } from './i18n/level-name'
438
518
  export {
439
519
  messageSlug,
440
520
  nodeDescriptionDescriptor,
@@ -445,7 +525,6 @@ export {
445
525
  toolHintKey,
446
526
  toolHintLabel,
447
527
  } from './i18n/node-messages'
448
- export { sceneThemeName } from './i18n/scene-theme-name'
449
528
  export {
450
529
  clearPlacementSurface,
451
530
  getPlacementSurface,
@@ -476,7 +555,12 @@ export {
476
555
  resolveCeilingPlanPointSnap,
477
556
  } from './lib/ceiling-plan-snap'
478
557
  export { EDITOR_LAYER } from './lib/constants'
479
- export type { ContextualShortcutHint } from './lib/contextual-help'
558
+ export {
559
+ AXIS_MOVE_DRAG_LABEL,
560
+ type ContextualShortcutHint,
561
+ PATH_POINT_DRAG_LABEL,
562
+ ROTATE_HANDLE_DRAG_LABEL,
563
+ } from './lib/contextual-help'
480
564
  export {
481
565
  CONTEXTUAL_HELP_NODE_EXTENSION_KEY,
482
566
  type ContextualHelpNodeExtension,
@@ -491,11 +575,6 @@ export {
491
575
  nextContinuation,
492
576
  } from './lib/continuation'
493
577
  export { canDirectMoveNode } from './lib/direct-manipulation'
494
- export {
495
- closeDoorOpenState,
496
- getDisplayedDoorValue,
497
- openDoorOpenState,
498
- } from './lib/door-interaction'
499
578
  export { downloadProjectFile } from './lib/download-project-file'
500
579
  export { createEditorApi } from './lib/editor-api'
501
580
  export {
@@ -517,28 +596,17 @@ export {
517
596
  resolveElevationSnapMatch,
518
597
  resolveStructuralElevationSnap,
519
598
  } from './lib/elevation-guides'
520
- export {
521
- resolveCurrentBuildingId,
522
- resolveElevatorNodeSupportY,
523
- resolveElevatorSupportLevelId,
524
- resolveElevatorSupportY,
525
- } from './lib/elevator-support'
599
+ export { resolveCurrentBuildingId } from './lib/elevator-support'
526
600
  export type { ExportTextureUtils } from './lib/export-texture-utils'
527
601
  export { getFloatingMenuScale } from './lib/floating-menu-scale'
528
602
  export { startOpeningDraft } from './lib/floor-opening-draft'
529
603
  export {
530
604
  alignFloorplanDraftPoint,
531
605
  applyFloorplanAlignment,
532
- clampPlanValue,
533
606
  FLOORPLAN_ALIGNMENT_THRESHOLD_M,
534
607
  FLOORPLAN_DRAFT_ALIGN_ID,
535
608
  type FloorplanAlignmentResult,
536
609
  getFloorplanWallThickness,
537
- getPlanPointDistance,
538
- getThickPlanLinePolygon,
539
- interpolatePlanPoint,
540
- movePlanPointTowards,
541
- rotatePlanVector,
542
610
  } from './lib/floorplan'
543
611
  export type {
544
612
  FloorplanAnnotationCategory,
@@ -560,24 +628,11 @@ export {
560
628
  type FloorplanExportScope,
561
629
  } from './lib/floorplan/floorplan-export'
562
630
  export {
563
- createFloorplanContextExtensions,
564
- FLOORPLAN_CONTEXT_EXTENSION_KEY,
565
- FLOORPLAN_GEOMETRY_METADATA_KEY,
566
631
  FLOORPLAN_NODE_EXTENSION_KEY,
567
- type FloorplanAnnotationRole,
568
- type FloorplanMetricNotation,
569
632
  type FloorplanNodeExtension,
570
- type FloorplanRenderPurpose,
571
- type FloorplanSchedule,
572
633
  type FloorplanToolContext,
573
634
  type FloorplanToolMode,
574
- type FloorplanWallDimensionFaces,
575
- floorplanGeometryMetadata,
576
635
  getFloorplanNodeExtension,
577
- readFloorplanContext,
578
- readFloorplanGeometryMetadata,
579
- readFloorplanMetricNotationOverride,
580
- withFloorplanGeometryMetadata,
581
636
  } from './lib/floorplan/floorplan-extension'
582
637
  export {
583
638
  DEFAULT_FLOORPLAN_MODE,
@@ -585,14 +640,6 @@ export {
585
640
  type FloorplanMode,
586
641
  isFloorplanToolAvailableInMode,
587
642
  } from './lib/floorplan/floorplan-mode'
588
- export {
589
- type MarkResolution,
590
- type OpeningMarkKind,
591
- orderedOpenings,
592
- persistResolvedMarks,
593
- resolveMarkDetail,
594
- resolveMarks,
595
- } from './lib/floorplan/marks'
596
643
  export { clientToPlan } from './lib/floorplan/plan-coords'
597
644
  export {
598
645
  doorSchedule,
@@ -665,6 +712,11 @@ export {
665
712
  editorFinishScriptHost,
666
713
  finishScriptCode,
667
714
  } from './lib/geometry-script/finish-scripts'
715
+ export {
716
+ beginGesture,
717
+ type GestureCancelReason,
718
+ type GestureHandle,
719
+ } from './lib/gesture-lifecycle'
668
720
  export { exportSceneToGlb, type GlbExportOptions } from './lib/glb-export'
669
721
  export {
670
722
  type EditorGridEvent,
@@ -750,10 +802,6 @@ export {
750
802
  isCreatableMeasurementKind,
751
803
  normalizeCreatableMeasurementKind,
752
804
  } from './lib/measurement-kind'
753
- export {
754
- measurementPolygonLabelAnchor,
755
- triangulateMeasurementPolygon,
756
- } from './lib/measurement-label'
757
805
  export {
758
806
  type LingoUnitSpec,
759
807
  lingoUnitSpec,
@@ -762,28 +810,6 @@ export {
762
810
  type ParseMeasurementOptions,
763
811
  parseMeasurement,
764
812
  } from './lib/measurement-parser'
765
- export {
766
- buildMeasurementAngleArcPoints,
767
- cubicMetersToVolumeUnit,
768
- formatAreaLabel,
769
- formatLinearMeasurement,
770
- formatVolumeLabel,
771
- getAreaUnitLabel,
772
- getLinearUnitLabel,
773
- getVolumeUnitLabel,
774
- type LinearUnit,
775
- linearControlValueToMeters,
776
- linearUnitToMeters,
777
- MEASUREMENT_ACTIVE_COLOR,
778
- MEASUREMENT_DANGLING_COLOR,
779
- MEASUREMENT_FLOORPLAN_COLOR,
780
- MEASUREMENT_PERSISTENT_COLOR,
781
- measurementFloorplanPresentationColor,
782
- measurementPresentationColor,
783
- metersToLinearUnit,
784
- parseLinearMeasurementInput,
785
- squareMetersToAreaUnit,
786
- } from './lib/measurements'
787
813
  export type {
788
814
  ModelExport,
789
815
  ModelExportArtifact,
@@ -861,15 +887,7 @@ export { clearRoofDuplicateMetadata, duplicateRoofSubtree } from './lib/roof-dup
861
887
  // kind-owned door / window tools in `@pascal-app/nodes` and the item
862
888
  // placement coordinator's roof-wall strategy.
863
889
  export { hasRoofFaceChildOverlap, type RoofWallHit, resolveRoofWallHit } from './lib/roof-wall-hit'
864
- export {
865
- selectedWallDimensions,
866
- separatorFloorElevation,
867
- separatorPushHandles,
868
- WALL_PUSH_AFFORDANCE,
869
- type WallPushArrowPayload,
870
- } from './lib/room-handle-drag'
871
- export { displayRoomName } from './lib/room-name-messages'
872
- export type { RoomKey, RoomSelectionRecord } from './lib/room-selection'
890
+ export { selectedWallDimensions, separatorPushHandles } from './lib/room-handle-drag'
873
891
  export { popRoomSelection, selectRoom } from './lib/room-selection-commands'
874
892
  export {
875
893
  captureElementActionOrigin,
@@ -949,7 +967,6 @@ export {
949
967
  terrainPointInsideSite,
950
968
  } from './lib/terrain-sculpt'
951
969
  export { withToolShortcut } from './lib/tool-shortcuts'
952
- export { isTypingTarget } from './lib/typing-target'
953
970
  export { enterUnitFocus } from './lib/units'
954
971
  export { exportSceneToUsdz, type UsdzExportOptions } from './lib/usdz-export'
955
972
  export { useLinearDisplay } from './lib/use-linear-display'
@@ -957,16 +974,6 @@ export { useLinearDisplay } from './lib/use-linear-display'
957
974
  // nodes` so they don't need their own copy / their own tailwind-merge
958
975
  // dependency.
959
976
  export { cn } from './lib/utils'
960
- export {
961
- applyViewerClick,
962
- applyViewerHover,
963
- framedLookAt,
964
- frameViewerCamera,
965
- frameViewerNode,
966
- useViewerFloorDisplay,
967
- type ViewerPick,
968
- type ViewerSource,
969
- } from './lib/viewer-selection'
970
977
  export {
971
978
  getWallDrawVariant,
972
979
  getWallLineKind,
@@ -1007,12 +1014,8 @@ export {
1007
1014
  releaseWallPullDrag,
1008
1015
  startWallPull,
1009
1016
  useWallPullRun,
1010
- WALL_PULL_AFFORDANCE,
1011
- WALL_PULL_GRIP_TITLE,
1012
- type WallPullGripPayload,
1013
1017
  type WallPullRun,
1014
1018
  wallDraftIsRun,
1015
- wallPullSeed,
1016
1019
  wallPullTypePatch,
1017
1020
  } from './lib/wall-pull'
1018
1021
  export {
@@ -1029,16 +1032,6 @@ export {
1029
1032
  wallTypePlacementOf,
1030
1033
  } from './lib/wall-type'
1031
1034
  export { writeWindowChanges } from './lib/window-changes'
1032
- export {
1033
- closeWindowOpenState,
1034
- getDisplayedWindowShutterValue,
1035
- getDisplayedWindowValue,
1036
- isOperableWindowType,
1037
- openWindowOpenState,
1038
- setWindowShuttersOpenState,
1039
- type WindowOpenAnimationOptions,
1040
- type WindowShutterField,
1041
- } from './lib/window-interaction'
1042
1035
  export {
1043
1036
  getActiveBuildingPose,
1044
1037
  projectAlignmentGuidesWorldToActiveBuildingLocal,
@@ -1047,13 +1040,11 @@ export {
1047
1040
  snapBuildingLocalToWorldGrid,
1048
1041
  snapWorldXZForActiveBuilding,
1049
1042
  } from './lib/world-grid-snap'
1050
- export { subscribeCameraPose } from './store/camera-pose-store'
1051
1043
  export {
1052
1044
  type DraftGuideLine,
1053
1045
  type DraftGuides,
1054
1046
  default as useAlignmentGuides,
1055
1047
  } from './store/use-alignment-guides'
1056
- export { default as useAudio } from './store/use-audio'
1057
1048
  export { type CameraHintAction, useCameraHintFocus } from './store/use-camera-hint-focus'
1058
1049
  export { type CommandAction, useCommandRegistry } from './store/use-command-registry'
1059
1050
  export {
@@ -1108,11 +1099,9 @@ export {
1108
1099
  } from './store/use-editor'
1109
1100
  export { default as useFacingPose, type FacingPose } from './store/use-facing-pose'
1110
1101
  export { default as useFenceCurveDraft } from './store/use-fence-curve-draft'
1111
- export { type FirstPersonHudState, useFirstPersonHud } from './store/use-first-person-hud'
1112
1102
  export { default as useFloorplanAnnotationVisibility } from './store/use-floorplan-annotation-visibility'
1113
1103
  export { useFloorplanDraftPreview } from './store/use-floorplan-draft-preview'
1114
1104
  export { default as useFloorplanMode } from './store/use-floorplan-mode'
1115
- export { default as useFollowPascal } from './store/use-follow-pascal'
1116
1105
  export {
1117
1106
  default as useInteractionScope,
1118
1107
  getEditingHole,
@@ -1161,6 +1150,22 @@ export {
1161
1150
  default as usePlacementPreview,
1162
1151
  type PlacementPreviewDimension,
1163
1152
  } from './store/use-placement-preview'
1153
+ export {
1154
+ isPlacementTypingKey,
1155
+ isPlacementTypingStartKey,
1156
+ PLACEMENT_TYPING_DISTANCE_OFFSET,
1157
+ PLACEMENT_TYPING_LENGTH_ANGLE,
1158
+ type PlacementTypingField,
1159
+ type PlacementTypingKeyOptions,
1160
+ type PlacementTypingKeyOutcome,
1161
+ type PlacementTypingProjection,
1162
+ type PlacementTypingSession,
1163
+ type PlacementTypingState,
1164
+ type PlacementTypingValues,
1165
+ placementTypingLengthOptions,
1166
+ routePlacementTypingKey,
1167
+ usePlacementTyping,
1168
+ } from './store/use-placement-typing'
1164
1169
  export { usePointAsk } from './store/use-point-ask'
1165
1170
  export {
1166
1171
  activateQuickMeasurementHudSource,
@@ -10,16 +10,16 @@ import {
10
10
  } from '@pascal-app/core'
11
11
  import { buildGroundLevelChanges } from '@pascal-app/core/building'
12
12
  import { useViewer } from '@pascal-app/viewer'
13
- import { act, create } from '@react-three/test-renderer'
14
- import useEditor from '../store/use-editor'
15
- import villaAurelia from './__fixtures__/owner-villa-aurelia-basement.json'
16
13
  import {
17
14
  belowGradeShown,
18
15
  followBelowGrade,
19
16
  followGroundWindowBox,
20
17
  gradeStandingShown,
21
18
  groundWindowBoxShown,
22
- } from './below-grade'
19
+ } from '@pascal-app/viewer/ui'
20
+ import { act, create } from '@react-three/test-renderer'
21
+ import useEditor from '../store/use-editor'
22
+ import villaAurelia from './__fixtures__/owner-villa-aurelia-basement.json'
23
23
  import { useEditorLevelDisplay } from './editor-level-display'
24
24
 
25
25
  // The owner's villa (13 Oct), trimmed: its Lower Ground lies 3.35 m under the lawn.
@@ -1,5 +1,5 @@
1
1
  import { afterEach, expect, test } from 'bun:test'
2
- import { cameraPoseStore, publishCameraPose } from '../store/camera-pose-store'
2
+ import { cameraPoseStore, publishCameraPose } from '@pascal-app/viewer/ui'
3
3
  import { cameraFacingYaw } from './camera-facing'
4
4
 
5
5
  afterEach(() => cameraPoseStore.setState({ pose: null }))
@@ -1,5 +1,4 @@
1
- import { cameraPoseStore } from '../store/camera-pose-store'
2
- import useEditor from '../store/use-editor'
1
+ import { cameraPoseStore, navigationSyncPoseStore } from '@pascal-app/viewer/ui'
3
2
  import { getActiveBuildingPose } from './world-grid-snap'
4
3
 
5
4
  const QUARTER_TURN = Math.PI / 2
@@ -12,7 +11,7 @@ const QUARTER_TURN = Math.PI / 2
12
11
  */
13
12
  export function cameraFacingYaw(): number {
14
13
  const pose = cameraPoseStore.getState().pose
15
- let azimuth = useEditor.getState().navigationSyncPose?.azimuth ?? 0
14
+ let azimuth = navigationSyncPoseStore.getState().pose?.azimuth ?? 0
16
15
  if (pose) {
17
16
  const dx = pose.position[0] - pose.target[0]
18
17
  const dz = pose.position[2] - pose.target[2]
@@ -31,6 +31,12 @@ export const RESIZE_HANDLE_DRAG_LABEL = 'resize-handle'
31
31
  export const GROUP_MOVE_DRAG_LABEL = 'group-move-handle'
32
32
  export const GROUP_ROTATE_DRAG_LABEL = 'group-rotate-handle'
33
33
 
34
+ // `activeHandleDrag.label`s for the MEP handles, in 3D and on the plan: one
35
+ // point of a run, where Alt detaches the joint, and a fitting, a run or one
36
+ // run segment slid along an axis. Their snap context is the kind's own.
37
+ export const PATH_POINT_DRAG_LABEL = 'path-point'
38
+ export const AXIS_MOVE_DRAG_LABEL = 'axis-move'
39
+
34
40
  export function resolveRotateHandleHelpHints(altPressed: boolean): ContextualShortcutHint[] {
35
41
  return [
36
42
  {