@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,385 +0,0 @@
1
- import { describe, expect, test } from 'bun:test'
2
- import type { FloorplanGeometry } from '@pascal-app/core'
3
- import { renderToStaticMarkup } from 'react-dom/server'
4
- import { floorplanGeometryMetadata } from '../../../lib/floorplan/floorplan-extension'
5
- import { FloorplanGeometryRenderer } from './floorplan-geometry-renderer'
6
-
7
- describe('FloorplanGeometryRenderer static labels', () => {
8
- test('renders a measurement value together with its geometry', () => {
9
- const geometry = {
10
- kind: 'group',
11
- children: [
12
- { kind: 'line', x1: 0, y1: 0, x2: 2, y2: 0, stroke: '#334155' },
13
- {
14
- kind: 'dimension-label',
15
- appearance: 'outlined',
16
- cx: 1,
17
- cy: 0,
18
- text: '2.00m',
19
- angle: 0,
20
- offsetPx: 14,
21
- },
22
- ],
23
- } satisfies FloorplanGeometry
24
-
25
- const markup = renderToStaticMarkup(
26
- <svg>
27
- <FloorplanGeometryRenderer geometry={geometry} />
28
- </svg>,
29
- )
30
-
31
- expect(markup).toContain('<line')
32
- expect(markup).toContain('2.00m')
33
- expect(markup).toContain('translate(0 -0.14)')
34
- })
35
-
36
- test('keeps screen-upright measurement labels readable in rotated exports', () => {
37
- const geometry = {
38
- kind: 'dimension-label',
39
- appearance: 'outlined',
40
- cx: 1,
41
- cy: 2,
42
- text: 'A 6.0m²',
43
- angle: Math.PI / 3,
44
- screenUpright: true,
45
- } satisfies FloorplanGeometry
46
-
47
- const markup = renderToStaticMarkup(
48
- <svg>
49
- <FloorplanGeometryRenderer geometry={geometry} sceneRotationDeg={90} />
50
- </svg>,
51
- )
52
-
53
- expect(markup).toContain('A 6.0m²')
54
- expect(markup).toContain('rotate(-90)')
55
- })
56
-
57
- test('uses paper-point sizing when document scale is provided', () => {
58
- const geometry = {
59
- kind: 'dimension-label',
60
- appearance: 'outlined',
61
- cx: 1,
62
- cy: 2,
63
- text: '2.00m',
64
- angle: 0,
65
- } satisfies FloorplanGeometry
66
-
67
- const markup = renderToStaticMarkup(
68
- <svg>
69
- <FloorplanGeometryRenderer annotationUnitsPerPoint={0.01} geometry={geometry} />
70
- </svg>,
71
- )
72
-
73
- expect(markup).toContain('font-size="0.08"')
74
- })
75
-
76
- test('uses live screen sizing without enabling document annotation styles', () => {
77
- const geometry = {
78
- kind: 'group',
79
- children: [
80
- {
81
- kind: 'text',
82
- x: 0,
83
- y: 0,
84
- text: 'LIVE TEXT',
85
- fontSize: 0.16,
86
- upright: true,
87
- },
88
- {
89
- kind: 'dimension-label',
90
- appearance: 'outlined',
91
- cx: 1,
92
- cy: 2,
93
- text: '2.00m',
94
- angle: 0,
95
- offsetPx: 14,
96
- },
97
- ],
98
- } satisfies FloorplanGeometry
99
-
100
- const markup = renderToStaticMarkup(
101
- <svg>
102
- <FloorplanGeometryRenderer geometry={geometry} screenUnitsPerPixel={0.02} />
103
- </svg>,
104
- )
105
-
106
- expect(markup).toContain('font-size="0.16"')
107
- expect(markup).toContain('font-size="0.24"')
108
- expect(markup).toContain('translate(0 -0.28)')
109
- })
110
-
111
- test('renders outlined measurement labels as PDF-safe dark text on a white plate', () => {
112
- const geometry = {
113
- kind: 'dimension-label',
114
- appearance: 'outlined',
115
- cx: 1,
116
- cy: 2,
117
- text: '2.00m',
118
- angle: 0,
119
- } satisfies FloorplanGeometry
120
-
121
- const markup = renderToStaticMarkup(
122
- <svg>
123
- <FloorplanGeometryRenderer
124
- geometry={geometry}
125
- renderMode="pdf"
126
- screenUnitsPerPixel={0.02}
127
- />
128
- </svg>,
129
- )
130
-
131
- expect(markup).toContain('data-floorplan-dimension-label-plate=""')
132
- expect(markup).toContain('fill="#111827"')
133
- expect(markup).not.toContain('paint-order="stroke"')
134
- expect(markup).not.toContain('fill="#ffffff" font-family=')
135
- })
136
-
137
- test('caps PDF annotation linework without changing live stroke widths', () => {
138
- const geometry = {
139
- kind: 'line',
140
- x1: 0,
141
- y1: 0,
142
- x2: 2,
143
- y2: 0,
144
- stroke: '#334155',
145
- strokeWidth: 2,
146
- vectorEffect: 'non-scaling-stroke',
147
- } satisfies FloorplanGeometry
148
-
149
- const liveMarkup = renderToStaticMarkup(
150
- <svg>
151
- <FloorplanGeometryRenderer geometry={geometry} />
152
- </svg>,
153
- )
154
- const pdfMarkup = renderToStaticMarkup(
155
- <svg>
156
- <FloorplanGeometryRenderer geometry={geometry} renderMode="pdf" />
157
- </svg>,
158
- )
159
-
160
- expect(liveMarkup).toContain('stroke-width="2"')
161
- expect(pdfMarkup).toContain('stroke-width="0.5"')
162
- })
163
-
164
- test('removes unsupported paint-order outlines from generic PDF text', () => {
165
- const geometry = {
166
- kind: 'text',
167
- x: 1,
168
- y: 2,
169
- text: '101',
170
- fontSize: 0.15,
171
- fill: '#ffffff',
172
- stroke: '#334155',
173
- strokeWidth: 0.04,
174
- paintOrder: 'stroke',
175
- } satisfies FloorplanGeometry
176
-
177
- const markup = renderToStaticMarkup(
178
- <svg>
179
- <FloorplanGeometryRenderer geometry={geometry} renderMode="pdf" />
180
- </svg>,
181
- )
182
-
183
- expect(markup).toContain('fill="#334155"')
184
- expect(markup).not.toContain('paint-order')
185
- expect(markup).not.toContain('stroke=')
186
- })
187
-
188
- test('resolves generic annotation text from paper points only in document mode', () => {
189
- const geometry = {
190
- kind: 'text',
191
- x: 2,
192
- y: 3,
193
- text: 'VERIFY DIMENSIONS',
194
- fontSize: 0.16,
195
- upright: true,
196
- } satisfies FloorplanGeometry
197
-
198
- const liveMarkup = renderToStaticMarkup(
199
- <svg>
200
- <FloorplanGeometryRenderer geometry={geometry} />
201
- </svg>,
202
- )
203
- const documentMarkup = renderToStaticMarkup(
204
- <svg>
205
- <FloorplanGeometryRenderer annotationUnitsPerPoint={0.01} geometry={geometry} />
206
- </svg>,
207
- )
208
-
209
- expect(liveMarkup).toContain('font-size="0.16"')
210
- expect(documentMarkup).toContain('font-size="0.08"')
211
- })
212
-
213
- test('uses a room-label paper profile while preserving room label hierarchy', () => {
214
- const geometry = {
215
- kind: 'group',
216
- children: [
217
- {
218
- kind: 'text',
219
- x: 0,
220
- y: 0,
221
- text: 'KITCHEN',
222
- fontSize: 0.2,
223
- metadata: floorplanGeometryMetadata({ annotationRole: 'room-label' }),
224
- upright: true,
225
- },
226
- {
227
- kind: 'text',
228
- x: 0,
229
- y: 0.18,
230
- text: '101',
231
- fontSize: 0.16,
232
- metadata: floorplanGeometryMetadata({ annotationRole: 'room-label' }),
233
- upright: true,
234
- },
235
- {
236
- kind: 'text',
237
- x: 0,
238
- y: 0.36,
239
- text: 'CH: 2700',
240
- fontSize: 0.11,
241
- metadata: floorplanGeometryMetadata({ annotationRole: 'room-label' }),
242
- upright: true,
243
- },
244
- ],
245
- } satisfies FloorplanGeometry
246
-
247
- const markup = renderToStaticMarkup(
248
- <svg>
249
- <FloorplanGeometryRenderer annotationUnitsPerPoint={0.01} geometry={geometry} />
250
- </svg>,
251
- )
252
-
253
- expect(markup).toContain('font-size="0.08"')
254
- expect(markup).toContain('font-size="0.07"')
255
- expect(markup).toContain('font-size="0.055"')
256
- expect(markup).toMatch(/translate\(0 0\.08625/)
257
- expect(markup).toMatch(/translate\(0 0\.18625/)
258
- expect(markup).toMatch(/translate\(0 0\.27375/)
259
- })
260
-
261
- test('uses paper stroke profiles for leaders and opening marks in document mode', () => {
262
- const geometry = {
263
- kind: 'group',
264
- metadata: floorplanGeometryMetadata({ annotationRole: 'opening-mark' }),
265
- children: [
266
- {
267
- kind: 'polyline',
268
- points: [
269
- [0, 0],
270
- [1, 0],
271
- [1.4, 0],
272
- ],
273
- stroke: '#334155',
274
- strokeWidth: 0.9,
275
- vectorEffect: 'non-scaling-stroke',
276
- },
277
- {
278
- kind: 'rect',
279
- x: 2,
280
- y: 2,
281
- width: 0.42,
282
- height: 0.32,
283
- fill: '#ffffff',
284
- stroke: '#334155',
285
- strokeWidth: 0.02,
286
- },
287
- ],
288
- } satisfies FloorplanGeometry
289
-
290
- const markup = renderToStaticMarkup(
291
- <svg>
292
- <FloorplanGeometryRenderer annotationUnitsPerPoint={0.01} geometry={geometry} />
293
- </svg>,
294
- )
295
-
296
- expect(markup).toContain('stroke-width="0.9"')
297
- expect(markup).toContain('vector-effect="non-scaling-stroke"')
298
- expect(markup).toContain('height="0.14"')
299
- expect(markup).toContain('rx="0.07"')
300
- })
301
-
302
- test('registers fixed mark pills as annotation obstacles', () => {
303
- const geometry = {
304
- kind: 'group',
305
- children: [
306
- { kind: 'line', x1: 0, y1: 0, x2: 0, y2: 0.4 },
307
- { kind: 'rect', x: -0.2, y: 0.4, width: 0.4, height: 0.32 },
308
- { kind: 'text', x: 0, y: 0.56, text: '107', fontSize: 0.15, upright: true },
309
- ],
310
- } satisfies FloorplanGeometry
311
-
312
- const markup = renderToStaticMarkup(
313
- <svg>
314
- <FloorplanGeometryRenderer geometry={geometry} />
315
- </svg>,
316
- )
317
-
318
- expect(markup).toContain('data-floorplan-annotation-obstacle=""')
319
- })
320
-
321
- test('registers semantic plan primitives as annotation obstacles', () => {
322
- const markup = renderToStaticMarkup(
323
- <svg>
324
- <FloorplanGeometryRenderer
325
- geometry={{
326
- kind: 'polygon',
327
- points: [
328
- [0, 0],
329
- [4, 0],
330
- [4, 0.2],
331
- ],
332
- metadata: floorplanGeometryMetadata({ annotationObstacle: 'outline' }),
333
- }}
334
- />
335
- </svg>,
336
- )
337
-
338
- expect(markup).toContain('data-floorplan-annotation-obstacle="outline"')
339
- })
340
-
341
- test('registers fixed annotation categories as obstacles', () => {
342
- const roomLabel = {
343
- kind: 'text',
344
- x: 0,
345
- y: 0,
346
- text: 'KITCHEN',
347
- fontSize: 0.18,
348
- metadata: floorplanGeometryMetadata({ annotationRole: 'room-label' }),
349
- } satisfies FloorplanGeometry
350
- const stairArrow = {
351
- kind: 'polyline',
352
- points: [
353
- [0, 0],
354
- [0.5, 0.5],
355
- ],
356
- metadata: floorplanGeometryMetadata({ annotationRole: 'stair-annotation' }),
357
- } satisfies FloorplanGeometry
358
-
359
- const markup = renderToStaticMarkup(
360
- <svg>
361
- <FloorplanGeometryRenderer geometry={roomLabel} />
362
- <FloorplanGeometryRenderer geometry={stairArrow} />
363
- </svg>,
364
- )
365
-
366
- expect(markup).toContain('data-floorplan-annotation-obstacle="bounds"')
367
- expect(markup).toContain('data-floorplan-annotation-obstacle="outline"')
368
- })
369
- test('forwards even-odd fill rules for compound plugin paths', () => {
370
- const geometry = {
371
- kind: 'path',
372
- d: 'M0,0H4V4H0ZM1,1H3V3H1Z',
373
- fill: '#3f6b2f',
374
- fillRule: 'evenodd',
375
- } satisfies FloorplanGeometry
376
-
377
- const markup = renderToStaticMarkup(
378
- <svg>
379
- <FloorplanGeometryRenderer geometry={geometry} />
380
- </svg>,
381
- )
382
-
383
- expect(markup).toContain('fill-rule="evenodd"')
384
- })
385
- })