@pascal-app/nodes 1.1.0 → 1.1.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.
Files changed (277) hide show
  1. package/README.md +3 -2
  2. package/dist/beam/definition.edit.d.ts.map +1 -1
  3. package/dist/beam/definition.edit.js +0 -2
  4. package/dist/beam/definition.render.d.ts.map +1 -1
  5. package/dist/beam/definition.render.js +2 -0
  6. package/dist/beam/floorplan.d.ts.map +1 -1
  7. package/dist/beam/floorplan.js +1 -2
  8. package/dist/block/definition.edit.d.ts.map +1 -1
  9. package/dist/block/definition.edit.js +0 -2
  10. package/dist/block/definition.render.d.ts.map +1 -1
  11. package/dist/block/definition.render.js +2 -0
  12. package/dist/block/floorplan.d.ts.map +1 -1
  13. package/dist/block/floorplan.js +1 -2
  14. package/dist/box-vent/definition.edit.d.ts.map +1 -1
  15. package/dist/box-vent/definition.edit.js +0 -2
  16. package/dist/box-vent/definition.render.d.ts.map +1 -1
  17. package/dist/box-vent/definition.render.js +2 -0
  18. package/dist/builtin-definitions.d.ts +57 -57
  19. package/dist/builtin-edit-contributions.d.ts +1 -1
  20. package/dist/cabinet/definition.edit.d.ts.map +1 -1
  21. package/dist/cabinet/definition.edit.js +0 -3
  22. package/dist/cabinet/definition.render.d.ts.map +1 -1
  23. package/dist/cabinet/definition.render.js +3 -0
  24. package/dist/cabinet/floorplan.js +1 -1
  25. package/dist/ceiling/definition.edit.d.ts.map +1 -1
  26. package/dist/ceiling/definition.edit.js +0 -2
  27. package/dist/ceiling/definition.render.d.ts.map +1 -1
  28. package/dist/ceiling/definition.render.js +2 -0
  29. package/dist/chimney/definition.edit.d.ts.map +1 -1
  30. package/dist/chimney/definition.edit.js +0 -2
  31. package/dist/chimney/definition.render.d.ts.map +1 -1
  32. package/dist/chimney/definition.render.js +2 -0
  33. package/dist/chimney/panel.js +1 -1
  34. package/dist/column/definition.edit.d.ts.map +1 -1
  35. package/dist/column/definition.edit.js +0 -3
  36. package/dist/column/definition.render.d.ts.map +1 -1
  37. package/dist/column/definition.render.js +3 -0
  38. package/dist/column/floorplan.d.ts.map +1 -1
  39. package/dist/column/floorplan.js +1 -2
  40. package/dist/column/renderer.d.ts.map +1 -1
  41. package/dist/column/renderer.js +1 -1
  42. package/dist/construction-dimension/definition.edit.d.ts.map +1 -1
  43. package/dist/construction-dimension/definition.edit.js +0 -2
  44. package/dist/construction-dimension/definition.render.d.ts.map +1 -1
  45. package/dist/construction-dimension/definition.render.js +2 -0
  46. package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -1
  47. package/dist/construction-dimension/floorplan-tool.js +2 -2
  48. package/dist/construction-dimension/floorplan.d.ts.map +1 -1
  49. package/dist/construction-dimension/floorplan.js +1 -2
  50. package/dist/cupola/definition.edit.d.ts.map +1 -1
  51. package/dist/cupola/definition.edit.js +0 -2
  52. package/dist/cupola/definition.render.d.ts.map +1 -1
  53. package/dist/cupola/definition.render.js +2 -0
  54. package/dist/definition-contributions.d.ts +1 -1
  55. package/dist/definition-contributions.d.ts.map +1 -1
  56. package/dist/door/definition.edit.d.ts.map +1 -1
  57. package/dist/door/definition.edit.js +1 -6
  58. package/dist/door/definition.render.d.ts.map +1 -1
  59. package/dist/door/definition.render.js +6 -0
  60. package/dist/door/floorplan.d.ts.map +1 -1
  61. package/dist/door/floorplan.js +1 -2
  62. package/dist/dormer/definition.edit.d.ts.map +1 -1
  63. package/dist/dormer/definition.edit.js +0 -2
  64. package/dist/dormer/definition.render.d.ts.map +1 -1
  65. package/dist/dormer/definition.render.js +2 -0
  66. package/dist/dormer/panel-position-section.js +1 -1
  67. package/dist/duct-fitting/definition.edit.d.ts.map +1 -1
  68. package/dist/duct-fitting/definition.edit.js +0 -2
  69. package/dist/duct-fitting/definition.render.d.ts.map +1 -1
  70. package/dist/duct-fitting/definition.render.js +2 -0
  71. package/dist/duct-segment/continuation-handle.d.ts +8 -0
  72. package/dist/duct-segment/continuation-handle.d.ts.map +1 -0
  73. package/dist/duct-segment/continuation-handle.js +36 -0
  74. package/dist/duct-segment/continuation.d.ts +1 -5
  75. package/dist/duct-segment/continuation.d.ts.map +1 -1
  76. package/dist/duct-segment/continuation.js +2 -36
  77. package/dist/duct-segment/definition.edit.d.ts.map +1 -1
  78. package/dist/duct-segment/definition.edit.js +0 -2
  79. package/dist/duct-segment/definition.render.d.ts.map +1 -1
  80. package/dist/duct-segment/definition.render.js +2 -0
  81. package/dist/duct-segment/floorplan.js +1 -1
  82. package/dist/duct-segment/selection.d.ts.map +1 -1
  83. package/dist/duct-segment/selection.js +2 -1
  84. package/dist/duct-segment/tool.d.ts.map +1 -1
  85. package/dist/duct-segment/tool.js +2 -1
  86. package/dist/duct-terminal/definition.edit.d.ts.map +1 -1
  87. package/dist/duct-terminal/definition.edit.js +0 -2
  88. package/dist/duct-terminal/definition.render.d.ts.map +1 -1
  89. package/dist/duct-terminal/definition.render.js +2 -0
  90. package/dist/elevator/definition.edit.d.ts.map +1 -1
  91. package/dist/elevator/definition.edit.js +0 -10
  92. package/dist/elevator/definition.render.d.ts.map +1 -1
  93. package/dist/elevator/definition.render.js +10 -0
  94. package/dist/eyebrow-vent/definition.edit.d.ts.map +1 -1
  95. package/dist/eyebrow-vent/definition.edit.js +0 -2
  96. package/dist/eyebrow-vent/definition.render.d.ts.map +1 -1
  97. package/dist/eyebrow-vent/definition.render.js +2 -0
  98. package/dist/fence/definition.edit.d.ts.map +1 -1
  99. package/dist/fence/definition.edit.js +0 -6
  100. package/dist/fence/definition.render.d.ts.map +1 -1
  101. package/dist/fence/definition.render.js +2 -0
  102. package/dist/fence-feature/definition.edit.d.ts.map +1 -1
  103. package/dist/fence-feature/definition.edit.js +0 -3
  104. package/dist/fence-feature/definition.render.d.ts.map +1 -1
  105. package/dist/fence-feature/definition.render.js +3 -0
  106. package/dist/floor-opening/definition.edit.d.ts.map +1 -1
  107. package/dist/floor-opening/definition.edit.js +1 -3
  108. package/dist/floor-opening/definition.render.d.ts.map +1 -1
  109. package/dist/floor-opening/definition.render.js +3 -0
  110. package/dist/floor-opening/floorplan-affordances.d.ts +150 -0
  111. package/dist/floor-opening/floorplan-affordances.d.ts.map +1 -0
  112. package/dist/floor-opening/floorplan-affordances.js +67 -0
  113. package/dist/floor-opening/floorplan.d.ts +2 -151
  114. package/dist/floor-opening/floorplan.d.ts.map +1 -1
  115. package/dist/floor-opening/floorplan.js +0 -66
  116. package/dist/gutter/definition.edit.d.ts.map +1 -1
  117. package/dist/gutter/definition.edit.js +0 -2
  118. package/dist/gutter/definition.render.d.ts.map +1 -1
  119. package/dist/gutter/definition.render.js +2 -0
  120. package/dist/hvac-equipment/definition.edit.d.ts.map +1 -1
  121. package/dist/hvac-equipment/definition.edit.js +0 -2
  122. package/dist/hvac-equipment/definition.render.d.ts.map +1 -1
  123. package/dist/hvac-equipment/definition.render.js +2 -0
  124. package/dist/imported-mesh/definition.edit.d.ts.map +1 -1
  125. package/dist/imported-mesh/definition.edit.js +0 -2
  126. package/dist/imported-mesh/definition.render.d.ts.map +1 -1
  127. package/dist/imported-mesh/definition.render.js +2 -0
  128. package/dist/item/definition.edit.d.ts.map +1 -1
  129. package/dist/item/definition.edit.js +1 -4
  130. package/dist/item/definition.render.d.ts.map +1 -1
  131. package/dist/item/definition.render.js +4 -0
  132. package/dist/item/floorplan.d.ts.map +1 -1
  133. package/dist/item/floorplan.js +1 -2
  134. package/dist/item/plan-symbols.js +1 -1
  135. package/dist/lean-to-extension/definition.edit.d.ts.map +1 -1
  136. package/dist/lean-to-extension/definition.edit.js +0 -2
  137. package/dist/lean-to-extension/definition.render.d.ts.map +1 -1
  138. package/dist/lean-to-extension/definition.render.js +2 -0
  139. package/dist/lineset/definition.edit.d.ts.map +1 -1
  140. package/dist/lineset/definition.edit.js +0 -2
  141. package/dist/lineset/definition.render.d.ts.map +1 -1
  142. package/dist/lineset/definition.render.js +2 -0
  143. package/dist/liquid-line/definition.edit.d.ts.map +1 -1
  144. package/dist/liquid-line/definition.edit.js +0 -2
  145. package/dist/liquid-line/definition.render.d.ts.map +1 -1
  146. package/dist/liquid-line/definition.render.js +2 -0
  147. package/dist/measurement/definition.edit.d.ts.map +1 -1
  148. package/dist/measurement/definition.edit.js +0 -2
  149. package/dist/measurement/definition.render.d.ts.map +1 -1
  150. package/dist/measurement/definition.render.js +2 -0
  151. package/dist/measurement/floorplan.d.ts.map +1 -1
  152. package/dist/measurement/floorplan.js +2 -3
  153. package/dist/pipe-fitting/definition.edit.d.ts.map +1 -1
  154. package/dist/pipe-fitting/definition.edit.js +0 -2
  155. package/dist/pipe-fitting/definition.render.d.ts.map +1 -1
  156. package/dist/pipe-fitting/definition.render.js +2 -0
  157. package/dist/pipe-segment/continuation-handle.d.ts +9 -0
  158. package/dist/pipe-segment/continuation-handle.d.ts.map +1 -0
  159. package/dist/pipe-segment/continuation-handle.js +35 -0
  160. package/dist/pipe-segment/continuation.d.ts +1 -5
  161. package/dist/pipe-segment/continuation.d.ts.map +1 -1
  162. package/dist/pipe-segment/continuation.js +2 -35
  163. package/dist/pipe-segment/definition.edit.d.ts.map +1 -1
  164. package/dist/pipe-segment/definition.edit.js +0 -2
  165. package/dist/pipe-segment/definition.render.d.ts.map +1 -1
  166. package/dist/pipe-segment/definition.render.js +2 -0
  167. package/dist/pipe-segment/floorplan.js +1 -1
  168. package/dist/pipe-segment/selection.d.ts.map +1 -1
  169. package/dist/pipe-segment/selection.js +2 -1
  170. package/dist/pipe-segment/tool.d.ts.map +1 -1
  171. package/dist/pipe-segment/tool.js +2 -1
  172. package/dist/pipe-trap/definition.edit.d.ts.map +1 -1
  173. package/dist/pipe-trap/definition.edit.js +0 -2
  174. package/dist/pipe-trap/definition.render.d.ts.map +1 -1
  175. package/dist/pipe-trap/definition.render.js +2 -0
  176. package/dist/procedural-item/definition.edit.d.ts.map +1 -1
  177. package/dist/procedural-item/definition.edit.js +1 -54
  178. package/dist/procedural-item/definition.render.d.ts.map +1 -1
  179. package/dist/procedural-item/definition.render.js +55 -2
  180. package/dist/ridge-vent/definition.edit.d.ts.map +1 -1
  181. package/dist/ridge-vent/definition.edit.js +0 -2
  182. package/dist/ridge-vent/definition.render.d.ts.map +1 -1
  183. package/dist/ridge-vent/definition.render.js +2 -0
  184. package/dist/roof/definition.d.ts +1 -1
  185. package/dist/roof/definition.edit.d.ts.map +1 -1
  186. package/dist/roof/definition.edit.js +0 -2
  187. package/dist/roof/definition.render.d.ts.map +1 -1
  188. package/dist/roof/definition.render.js +16 -5
  189. package/dist/roof/floorplan.d.ts.map +1 -1
  190. package/dist/roof/floorplan.js +1 -2
  191. package/dist/roof/renderer.d.ts.map +1 -1
  192. package/dist/roof/renderer.js +10 -5
  193. package/dist/roof-segment/definition.edit.d.ts.map +1 -1
  194. package/dist/roof-segment/definition.edit.js +0 -2
  195. package/dist/roof-segment/definition.render.d.ts.map +1 -1
  196. package/dist/roof-segment/definition.render.js +2 -0
  197. package/dist/separator/definition.edit.d.ts.map +1 -1
  198. package/dist/separator/definition.edit.js +0 -2
  199. package/dist/separator/definition.render.d.ts.map +1 -1
  200. package/dist/separator/definition.render.js +2 -0
  201. package/dist/separator/floorplan.js +1 -1
  202. package/dist/shared/opening-documentation.d.ts +1 -1
  203. package/dist/shared/opening-documentation.d.ts.map +1 -1
  204. package/dist/shared/opening-documentation.js +1 -2
  205. package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
  206. package/dist/shared/opening-placement-dimensions.js +1 -2
  207. package/dist/shared/scripted-opening.d.ts +8 -1
  208. package/dist/shared/scripted-opening.d.ts.map +1 -1
  209. package/dist/shared/scripted-opening.js +6 -8
  210. package/dist/shelf/definition.edit.d.ts.map +1 -1
  211. package/dist/shelf/definition.edit.js +0 -2
  212. package/dist/shelf/definition.render.d.ts.map +1 -1
  213. package/dist/shelf/definition.render.js +2 -0
  214. package/dist/skylight/definition.edit.d.ts.map +1 -1
  215. package/dist/skylight/definition.edit.js +0 -2
  216. package/dist/skylight/definition.render.d.ts.map +1 -1
  217. package/dist/skylight/definition.render.js +2 -0
  218. package/dist/skylight/panel.js +1 -1
  219. package/dist/slab/definition.edit.d.ts.map +1 -1
  220. package/dist/slab/definition.edit.js +0 -4
  221. package/dist/slab/definition.render.d.ts.map +1 -1
  222. package/dist/slab/definition.render.js +4 -0
  223. package/dist/slab/floorplan.d.ts.map +1 -1
  224. package/dist/slab/floorplan.js +1 -2
  225. package/dist/solar-panel/definition.edit.d.ts.map +1 -1
  226. package/dist/solar-panel/definition.edit.js +0 -2
  227. package/dist/solar-panel/definition.render.d.ts.map +1 -1
  228. package/dist/solar-panel/definition.render.js +2 -0
  229. package/dist/spawn/definition.edit.d.ts.map +1 -1
  230. package/dist/spawn/definition.edit.js +0 -9
  231. package/dist/spawn/definition.render.d.ts.map +1 -1
  232. package/dist/spawn/definition.render.js +2 -0
  233. package/dist/stair/definition.edit.d.ts.map +1 -1
  234. package/dist/stair/definition.edit.js +0 -13
  235. package/dist/stair/definition.render.d.ts.map +1 -1
  236. package/dist/stair/definition.render.js +10 -0
  237. package/dist/stair/documentation.d.ts.map +1 -1
  238. package/dist/stair/documentation.js +1 -2
  239. package/dist/stair/floorplan.d.ts.map +1 -1
  240. package/dist/stair/floorplan.js +1 -2
  241. package/dist/stair/plan-entry.d.ts.map +1 -1
  242. package/dist/stair/plan-entry.js +1 -2
  243. package/dist/structural-grid/definition.edit.d.ts.map +1 -1
  244. package/dist/structural-grid/definition.edit.js +0 -2
  245. package/dist/structural-grid/definition.render.d.ts.map +1 -1
  246. package/dist/structural-grid/definition.render.js +2 -0
  247. package/dist/structural-grid/floorplan.js +1 -1
  248. package/dist/turbine-vent/definition.edit.d.ts.map +1 -1
  249. package/dist/turbine-vent/definition.edit.js +0 -2
  250. package/dist/turbine-vent/definition.render.d.ts.map +1 -1
  251. package/dist/turbine-vent/definition.render.js +2 -0
  252. package/dist/wall/contextual-dimensions.d.ts.map +1 -1
  253. package/dist/wall/contextual-dimensions.js +1 -2
  254. package/dist/wall/definition.edit.d.ts.map +1 -1
  255. package/dist/wall/definition.edit.js +0 -5
  256. package/dist/wall/definition.render.d.ts.map +1 -1
  257. package/dist/wall/definition.render.js +5 -0
  258. package/dist/wall/floorplan.d.ts.map +1 -1
  259. package/dist/wall/floorplan.js +1 -2
  260. package/dist/window/definition.edit.d.ts.map +1 -1
  261. package/dist/window/definition.edit.js +1 -6
  262. package/dist/window/definition.render.d.ts.map +1 -1
  263. package/dist/window/definition.render.js +6 -0
  264. package/dist/window/floorplan.d.ts.map +1 -1
  265. package/dist/window/floorplan.js +1 -2
  266. package/dist/zone/definition.edit.d.ts.map +1 -1
  267. package/dist/zone/definition.edit.js +0 -2
  268. package/dist/zone/definition.render.d.ts.map +1 -1
  269. package/dist/zone/definition.render.js +2 -0
  270. package/dist/zone/floorplan.d.ts.map +1 -1
  271. package/dist/zone/floorplan.js +1 -2
  272. package/dist/zone/room-clear-dimensions.d.ts.map +1 -1
  273. package/dist/zone/room-clear-dimensions.js +1 -2
  274. package/dist/zone/room-documentation.d.ts +1 -2
  275. package/dist/zone/room-documentation.d.ts.map +1 -1
  276. package/dist/zone/room-documentation.js +1 -1
  277. package/package.json +8 -8
@@ -0,0 +1,150 @@
1
+ import { type FloorplanAffordance } from '@pascal-app/core';
2
+ export declare const floorOpeningMoveVertexAffordance: FloorplanAffordance<{
3
+ object: "node";
4
+ name?: string | undefined;
5
+ parentId: string | null;
6
+ visible: boolean;
7
+ camera?: {
8
+ position: [number, number, number];
9
+ target: [number, number, number];
10
+ mode: "orthographic" | "perspective";
11
+ fov?: number | undefined;
12
+ zoom?: number | undefined;
13
+ } | undefined;
14
+ metadata: Record<string, unknown>;
15
+ provenance?: {
16
+ refs: {
17
+ ns?: string | undefined;
18
+ id: string;
19
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
20
+ }[];
21
+ lineage?: {
22
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
23
+ fromIds: string[];
24
+ } | undefined;
25
+ } | undefined;
26
+ id: `floor-opening_${string}`;
27
+ type: "floor-opening";
28
+ polygon: [number, number][];
29
+ hostZoneId?: string | undefined;
30
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
31
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
32
+ source: string;
33
+ ownerId?: string | undefined;
34
+ surfaceId?: string | undefined;
35
+ drawnOn: "ceiling" | "floor";
36
+ cutsPrimary: boolean;
37
+ cutsAdjacent: boolean;
38
+ }>;
39
+ export declare const floorOpeningAddVertexAffordance: FloorplanAffordance<{
40
+ object: "node";
41
+ name?: string | undefined;
42
+ parentId: string | null;
43
+ visible: boolean;
44
+ camera?: {
45
+ position: [number, number, number];
46
+ target: [number, number, number];
47
+ mode: "orthographic" | "perspective";
48
+ fov?: number | undefined;
49
+ zoom?: number | undefined;
50
+ } | undefined;
51
+ metadata: Record<string, unknown>;
52
+ provenance?: {
53
+ refs: {
54
+ ns?: string | undefined;
55
+ id: string;
56
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
57
+ }[];
58
+ lineage?: {
59
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
60
+ fromIds: string[];
61
+ } | undefined;
62
+ } | undefined;
63
+ id: `floor-opening_${string}`;
64
+ type: "floor-opening";
65
+ polygon: [number, number][];
66
+ hostZoneId?: string | undefined;
67
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
68
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
69
+ source: string;
70
+ ownerId?: string | undefined;
71
+ surfaceId?: string | undefined;
72
+ drawnOn: "ceiling" | "floor";
73
+ cutsPrimary: boolean;
74
+ cutsAdjacent: boolean;
75
+ }>;
76
+ export declare const floorOpeningMoveEdgeAffordance: FloorplanAffordance<{
77
+ object: "node";
78
+ name?: string | undefined;
79
+ parentId: string | null;
80
+ visible: boolean;
81
+ camera?: {
82
+ position: [number, number, number];
83
+ target: [number, number, number];
84
+ mode: "orthographic" | "perspective";
85
+ fov?: number | undefined;
86
+ zoom?: number | undefined;
87
+ } | undefined;
88
+ metadata: Record<string, unknown>;
89
+ provenance?: {
90
+ refs: {
91
+ ns?: string | undefined;
92
+ id: string;
93
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
94
+ }[];
95
+ lineage?: {
96
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
97
+ fromIds: string[];
98
+ } | undefined;
99
+ } | undefined;
100
+ id: `floor-opening_${string}`;
101
+ type: "floor-opening";
102
+ polygon: [number, number][];
103
+ hostZoneId?: string | undefined;
104
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
105
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
106
+ source: string;
107
+ ownerId?: string | undefined;
108
+ surfaceId?: string | undefined;
109
+ drawnOn: "ceiling" | "floor";
110
+ cutsPrimary: boolean;
111
+ cutsAdjacent: boolean;
112
+ }>;
113
+ export declare const floorOpeningDeleteVertexAffordance: FloorplanAffordance<{
114
+ object: "node";
115
+ name?: string | undefined;
116
+ parentId: string | null;
117
+ visible: boolean;
118
+ camera?: {
119
+ position: [number, number, number];
120
+ target: [number, number, number];
121
+ mode: "orthographic" | "perspective";
122
+ fov?: number | undefined;
123
+ zoom?: number | undefined;
124
+ } | undefined;
125
+ metadata: Record<string, unknown>;
126
+ provenance?: {
127
+ refs: {
128
+ ns?: string | undefined;
129
+ id: string;
130
+ role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
131
+ }[];
132
+ lineage?: {
133
+ op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
134
+ fromIds: string[];
135
+ } | undefined;
136
+ } | undefined;
137
+ id: `floor-opening_${string}`;
138
+ type: "floor-opening";
139
+ polygon: [number, number][];
140
+ hostZoneId?: string | undefined;
141
+ legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
142
+ legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
143
+ source: string;
144
+ ownerId?: string | undefined;
145
+ surfaceId?: string | undefined;
146
+ drawnOn: "ceiling" | "floor";
147
+ cutsPrimary: boolean;
148
+ cutsAdjacent: boolean;
149
+ }>;
150
+ //# sourceMappingURL=floorplan-affordances.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floorplan-affordances.d.ts","sourceRoot":"","sources":["../../src/floor-opening/floorplan-affordances.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,mBAAmB,EAIzB,MAAM,kBAAkB,CAAA;AAyEzB,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASuB,CAAA;AACpE,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG3C,CAAA;AACD,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB2B,CAAA;AACtE,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG9C,CAAA"}
@@ -0,0 +1,67 @@
1
+ import { authorStairOpeningPatches, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
2
+ import { getSegmentGridStep, snapPointToGrid, snapScalarToGrid } from '@pascal-app/editor';
3
+ import { createPolygonAddVertexAffordance, createPolygonDeleteVertexAffordance, createPolygonMoveEdgeAffordance, createPolygonVertexAffordance, } from '../shared/polygon-vertex-affordance.js';
4
+ import { isOwnedOpening, moveRectangleEdge, openingRectangle, resizeRectangleCorner, } from './floorplan.js';
5
+ /** Every write for `ring` on a stair's opening: its floor and ceiling cuts take it as drawn. */
6
+ function ownedOpeningUpdates(id, ring) {
7
+ const authored = authorStairOpeningPatches(useScene.getState().nodes, id, ring);
8
+ return authored.length ? authored : [{ id, data: { polygon: ring } }];
9
+ }
10
+ function ownedOpeningSession(node, next) {
11
+ const rectangle = openingRectangle(node.polygon);
12
+ const affectedIds = [
13
+ ...new Set([
14
+ node.id,
15
+ ...authorStairOpeningPatches(useScene.getState().nodes, node.id, rectangle).map((patch) => patch.id),
16
+ ]),
17
+ ];
18
+ let ring = null;
19
+ // The drag previews through live overrides; the scene is written once, on release.
20
+ return {
21
+ affectedIds,
22
+ apply({ planPoint }) {
23
+ ring = next(rectangle, planPoint);
24
+ useLiveNodeOverrides
25
+ .getState()
26
+ .setMany(ownedOpeningUpdates(node.id, ring).map(({ id, data }) => [id, data]));
27
+ },
28
+ canCommit: () => ring !== null,
29
+ commit() {
30
+ const overrides = useLiveNodeOverrides.getState();
31
+ if (ring)
32
+ useScene.getState().updateNodes(ownedOpeningUpdates(node.id, ring));
33
+ for (const id of affectedIds)
34
+ overrides.clear(id);
35
+ },
36
+ };
37
+ }
38
+ /** Owned openings resize as a box; every other opening keeps the free polygon handles. */
39
+ function ownedOr(owned, free) {
40
+ return { start: (args) => (isOwnedOpening(args.node) ? owned(args) : free.start(args)) };
41
+ }
42
+ const inert = (node) => ({
43
+ affectedIds: [node.id],
44
+ apply() { },
45
+ canCommit: () => false,
46
+ });
47
+ export const floorOpeningMoveVertexAffordance = ownedOr(({ node, payload }) => {
48
+ const { vertexIndex } = payload;
49
+ return ownedOpeningSession(node, (rectangle, planPoint) => resizeRectangleCorner(rectangle, vertexIndex % 4, snapPointToGrid([planPoint[0], planPoint[1]], getSegmentGridStep())));
50
+ }, createPolygonVertexAffordance('floor-opening'));
51
+ export const floorOpeningAddVertexAffordance = ownedOr(({ node }) => inert(node), createPolygonAddVertexAffordance('floor-opening'));
52
+ export const floorOpeningMoveEdgeAffordance = ownedOr(({ node, payload, initialPlanPoint }) => {
53
+ const { edgeIndex } = payload;
54
+ return ownedOpeningSession(node, (rectangle, planPoint) => {
55
+ const start = rectangle[edgeIndex % 4];
56
+ const end = rectangle[(edgeIndex + 1) % 4];
57
+ const opposite = rectangle[(edgeIndex + 2) % 4];
58
+ const length = Math.hypot(end[0] - start[0], end[1] - start[1]) || 1;
59
+ let normal = [-(end[1] - start[1]) / length, (end[0] - start[0]) / length];
60
+ if ((opposite[0] - start[0]) * normal[0] + (opposite[1] - start[1]) * normal[1] > 0)
61
+ normal = [-normal[0], -normal[1]];
62
+ const distance = snapScalarToGrid((planPoint[0] - initialPlanPoint[0]) * normal[0] +
63
+ (planPoint[1] - initialPlanPoint[1]) * normal[1], getSegmentGridStep());
64
+ return moveRectangleEdge(rectangle, edgeIndex % 4, distance);
65
+ });
66
+ }, createPolygonMoveEdgeAffordance('floor-opening'));
67
+ export const floorOpeningDeleteVertexAffordance = ownedOr(({ node }) => inert(node), createPolygonDeleteVertexAffordance('floor-opening'));
@@ -1,5 +1,5 @@
1
- import { type FloorOpeningNode, type FloorplanAffordance, type FloorplanGeometry, type GeometryContext } from '@pascal-app/core';
2
- type Ring = [number, number][];
1
+ import type { FloorOpeningNode, FloorplanGeometry, GeometryContext } from '@pascal-app/core';
2
+ export type Ring = [number, number][];
3
3
  /**
4
4
  * A stair's opening: a box its stair cut, resized as a box. An elevator's opening keeps the free
5
5
  * polygon handles: its cut comes from the car, so a drawn shape would not stick.
@@ -27,153 +27,4 @@ export declare function moveRectangleEdge(rectangle: Ring, edgeIndex: number, di
27
27
  * midpoint handles to add a vertex.
28
28
  */
29
29
  export declare function buildFloorOpeningFloorplan(node: FloorOpeningNode, ctx: GeometryContext): FloorplanGeometry | null;
30
- export declare const floorOpeningMoveVertexAffordance: FloorplanAffordance<{
31
- object: "node";
32
- name?: string | undefined;
33
- parentId: string | null;
34
- visible: boolean;
35
- camera?: {
36
- position: [number, number, number];
37
- target: [number, number, number];
38
- mode: "orthographic" | "perspective";
39
- fov?: number | undefined;
40
- zoom?: number | undefined;
41
- } | undefined;
42
- metadata: Record<string, unknown>;
43
- provenance?: {
44
- refs: {
45
- ns?: string | undefined;
46
- id: string;
47
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
48
- }[];
49
- lineage?: {
50
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
51
- fromIds: string[];
52
- } | undefined;
53
- } | undefined;
54
- id: `floor-opening_${string}`;
55
- type: "floor-opening";
56
- polygon: [number, number][];
57
- hostZoneId?: string | undefined;
58
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
59
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
60
- source: string;
61
- ownerId?: string | undefined;
62
- surfaceId?: string | undefined;
63
- drawnOn: "ceiling" | "floor";
64
- cutsPrimary: boolean;
65
- cutsAdjacent: boolean;
66
- }>;
67
- export declare const floorOpeningAddVertexAffordance: FloorplanAffordance<{
68
- object: "node";
69
- name?: string | undefined;
70
- parentId: string | null;
71
- visible: boolean;
72
- camera?: {
73
- position: [number, number, number];
74
- target: [number, number, number];
75
- mode: "orthographic" | "perspective";
76
- fov?: number | undefined;
77
- zoom?: number | undefined;
78
- } | undefined;
79
- metadata: Record<string, unknown>;
80
- provenance?: {
81
- refs: {
82
- ns?: string | undefined;
83
- id: string;
84
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
85
- }[];
86
- lineage?: {
87
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
88
- fromIds: string[];
89
- } | undefined;
90
- } | undefined;
91
- id: `floor-opening_${string}`;
92
- type: "floor-opening";
93
- polygon: [number, number][];
94
- hostZoneId?: string | undefined;
95
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
96
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
97
- source: string;
98
- ownerId?: string | undefined;
99
- surfaceId?: string | undefined;
100
- drawnOn: "ceiling" | "floor";
101
- cutsPrimary: boolean;
102
- cutsAdjacent: boolean;
103
- }>;
104
- export declare const floorOpeningMoveEdgeAffordance: FloorplanAffordance<{
105
- object: "node";
106
- name?: string | undefined;
107
- parentId: string | null;
108
- visible: boolean;
109
- camera?: {
110
- position: [number, number, number];
111
- target: [number, number, number];
112
- mode: "orthographic" | "perspective";
113
- fov?: number | undefined;
114
- zoom?: number | undefined;
115
- } | undefined;
116
- metadata: Record<string, unknown>;
117
- provenance?: {
118
- refs: {
119
- ns?: string | undefined;
120
- id: string;
121
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
122
- }[];
123
- lineage?: {
124
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
125
- fromIds: string[];
126
- } | undefined;
127
- } | undefined;
128
- id: `floor-opening_${string}`;
129
- type: "floor-opening";
130
- polygon: [number, number][];
131
- hostZoneId?: string | undefined;
132
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
133
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
134
- source: string;
135
- ownerId?: string | undefined;
136
- surfaceId?: string | undefined;
137
- drawnOn: "ceiling" | "floor";
138
- cutsPrimary: boolean;
139
- cutsAdjacent: boolean;
140
- }>;
141
- export declare const floorOpeningDeleteVertexAffordance: FloorplanAffordance<{
142
- object: "node";
143
- name?: string | undefined;
144
- parentId: string | null;
145
- visible: boolean;
146
- camera?: {
147
- position: [number, number, number];
148
- target: [number, number, number];
149
- mode: "orthographic" | "perspective";
150
- fov?: number | undefined;
151
- zoom?: number | undefined;
152
- } | undefined;
153
- metadata: Record<string, unknown>;
154
- provenance?: {
155
- refs: {
156
- ns?: string | undefined;
157
- id: string;
158
- role?: "absorbed" | "alias" | "derived" | "piece" | "primary" | undefined;
159
- }[];
160
- lineage?: {
161
- op: "attach" | "convert" | "duplicate" | "import" | "make-independent" | "merge" | "promote" | "split";
162
- fromIds: string[];
163
- } | undefined;
164
- } | undefined;
165
- id: `floor-opening_${string}`;
166
- type: "floor-opening";
167
- polygon: [number, number][];
168
- hostZoneId?: string | undefined;
169
- legacyPlateCuts?: Record<string, [number, number][][]> | undefined;
170
- legacyCeilingCuts?: Record<string, [number, number][][]> | undefined;
171
- source: string;
172
- ownerId?: string | undefined;
173
- surfaceId?: string | undefined;
174
- drawnOn: "ceiling" | "floor";
175
- cutsPrimary: boolean;
176
- cutsAdjacent: boolean;
177
- }>;
178
- export {};
179
30
  //# sourceMappingURL=floorplan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/floor-opening/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAExB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAGrB,MAAM,kBAAkB,CAAA;AAazB,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;AAE9B;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CA0BxF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,IAAI,CAoBN;AAED,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAgB5F;AA2DD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAgE1B;AAED,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASuB,CAAA;AACpE,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG3C,CAAA;AACD,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB2B,CAAA;AACtE,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG9C,CAAA"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/floor-opening/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAM5F,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;AAErC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CA0BxF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,IAAI,CAoBN;AAED,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAgB5F;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAgE1B"}
@@ -1,6 +1,3 @@
1
- import { authorStairOpeningPatches, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
2
- import { getSegmentGridStep, snapPointToGrid, snapScalarToGrid } from '@pascal-app/editor';
3
- import { createPolygonAddVertexAffordance, createPolygonDeleteVertexAffordance, createPolygonMoveEdgeAffordance, createPolygonVertexAffordance, } from '../shared/polygon-vertex-affordance.js';
4
1
  const COLOR = '#f59e0b';
5
2
  /** A side of a stair opening never shrinks below this (metres). */
6
3
  const MIN_OPENING_SIDE = 0.2;
@@ -84,48 +81,6 @@ export function moveRectangleEdge(rectangle, edgeIndex, distance) {
84
81
  ? [point[0] + normal[0] * travel, point[1] + normal[1] * travel]
85
82
  : point);
86
83
  }
87
- /** Every write for `ring` on a stair's opening: its floor and ceiling cuts take it as drawn. */
88
- function ownedOpeningUpdates(id, ring) {
89
- const authored = authorStairOpeningPatches(useScene.getState().nodes, id, ring);
90
- return authored.length ? authored : [{ id, data: { polygon: ring } }];
91
- }
92
- function ownedOpeningSession(node, next) {
93
- const rectangle = openingRectangle(node.polygon);
94
- const affectedIds = [
95
- ...new Set([
96
- node.id,
97
- ...authorStairOpeningPatches(useScene.getState().nodes, node.id, rectangle).map((patch) => patch.id),
98
- ]),
99
- ];
100
- let ring = null;
101
- // The drag previews through live overrides; the scene is written once, on release.
102
- return {
103
- affectedIds,
104
- apply({ planPoint }) {
105
- ring = next(rectangle, planPoint);
106
- useLiveNodeOverrides
107
- .getState()
108
- .setMany(ownedOpeningUpdates(node.id, ring).map(({ id, data }) => [id, data]));
109
- },
110
- canCommit: () => ring !== null,
111
- commit() {
112
- const overrides = useLiveNodeOverrides.getState();
113
- if (ring)
114
- useScene.getState().updateNodes(ownedOpeningUpdates(node.id, ring));
115
- for (const id of affectedIds)
116
- overrides.clear(id);
117
- },
118
- };
119
- }
120
- /** Owned openings resize as a box; every other opening keeps the free polygon handles. */
121
- function ownedOr(owned, free) {
122
- return { start: (args) => (isOwnedOpening(args.node) ? owned(args) : free.start(args)) };
123
- }
124
- const inert = (node) => ({
125
- affectedIds: [node.id],
126
- apply() { },
127
- canCommit: () => false,
128
- });
129
84
  /**
130
85
  * A floor opening on the plan: a dashed amber outline (the void the surfaces
131
86
  * around it show), and — while selected — the same corner, midpoint and edge
@@ -198,24 +153,3 @@ export function buildFloorOpeningFloorplan(node, ctx) {
198
153
  }
199
154
  return { kind: 'group', children };
200
155
  }
201
- export const floorOpeningMoveVertexAffordance = ownedOr(({ node, payload }) => {
202
- const { vertexIndex } = payload;
203
- return ownedOpeningSession(node, (rectangle, planPoint) => resizeRectangleCorner(rectangle, vertexIndex % 4, snapPointToGrid([planPoint[0], planPoint[1]], getSegmentGridStep())));
204
- }, createPolygonVertexAffordance('floor-opening'));
205
- export const floorOpeningAddVertexAffordance = ownedOr(({ node }) => inert(node), createPolygonAddVertexAffordance('floor-opening'));
206
- export const floorOpeningMoveEdgeAffordance = ownedOr(({ node, payload, initialPlanPoint }) => {
207
- const { edgeIndex } = payload;
208
- return ownedOpeningSession(node, (rectangle, planPoint) => {
209
- const start = rectangle[edgeIndex % 4];
210
- const end = rectangle[(edgeIndex + 1) % 4];
211
- const opposite = rectangle[(edgeIndex + 2) % 4];
212
- const length = Math.hypot(end[0] - start[0], end[1] - start[1]) || 1;
213
- let normal = [-(end[1] - start[1]) / length, (end[0] - start[0]) / length];
214
- if ((opposite[0] - start[0]) * normal[0] + (opposite[1] - start[1]) * normal[1] > 0)
215
- normal = [-normal[0], -normal[1]];
216
- const distance = snapScalarToGrid((planPoint[0] - initialPlanPoint[0]) * normal[0] +
217
- (planPoint[1] - initialPlanPoint[1]) * normal[1], getSegmentGridStep());
218
- return moveRectangleEdge(rectangle, edgeIndex % 4, distance);
219
- });
220
- }, createPolygonMoveEdgeAffordance('floor-opening'));
221
- export const floorOpeningDeleteVertexAffordance = ownedOr(({ node }) => inert(node), createPolygonDeleteVertexAffordance('floor-opening'));
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/gutter/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAuH1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAkB1E,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/gutter/definition.edit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAuH1C,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAiB1E,CAAA"}
@@ -1,4 +1,3 @@
1
- import { buildGutterFloorplan } from './floorplan.js';
2
1
  import { snapLengthToCorner } from './length-snap.js';
3
2
  import { gutterPaint } from './paint.js';
4
3
  import { gutterParametrics } from './parametrics.js';
@@ -107,7 +106,6 @@ export const gutterEditContribution = {
107
106
  },
108
107
  parametrics: gutterParametrics,
109
108
  handles: gutterHandles,
110
- floorplan: buildGutterFloorplan,
111
109
  floorplanDependsOnSiblings: true,
112
110
  preview: () => import('./preview.js'),
113
111
  tool: () => import('./tool.js'),
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/gutter/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CA2C5F,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/gutter/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,eAAO,MAAM,sBAAsB,EAAE,oBAAoB,CAAC,OAAO,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CA4C5F,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { GutterNode as GutterNodeSchema, gutterSlots } from '@pascal-app/core';
2
+ import { buildGutterFloorplan } from './floorplan.js';
2
3
  import { GutterNode } from './schema.js';
3
4
  export const gutterRenderDefinition = {
4
5
  kind: 'gutter',
@@ -31,6 +32,7 @@ export const gutterRenderDefinition = {
31
32
  kind: 'parametric',
32
33
  module: () => import('./renderer.js'),
33
34
  },
35
+ floorplan: buildGutterFloorplan,
34
36
  presentation: {
35
37
  label: 'Gutter',
36
38
  description: 'Rain-water channel running along the eave of a roof segment.',
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/hvac-equipment/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEjD,eAAO,MAAM,6BAA6B,EAAE,oBAAoB,CAAC,OAAO,iBAAiB,CAUxF,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/hvac-equipment/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEjD,eAAO,MAAM,6BAA6B,EAAE,oBAAoB,CAAC,OAAO,iBAAiB,CASxF,CAAA"}
@@ -1,9 +1,7 @@
1
- import { buildHvacEquipmentFloorplan } from './floorplan.js';
2
1
  import { hvacEquipmentParametrics } from './parametrics.js';
3
2
  export const hvacEquipmentEditContribution = {
4
3
  snapProfile: 'item',
5
4
  parametrics: hvacEquipmentParametrics,
6
- floorplan: buildHvacEquipmentFloorplan,
7
5
  tool: () => import('./tool.js'),
8
6
  toolHints: [
9
7
  { key: 'Click', label: 'Place unit' },
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/hvac-equipment/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE5C,eAAO,MAAM,6BAA6B,EAAE,oBAAoB,CAAC,OAAO,iBAAiB,CAAC,GAAG;IAC3F,IAAI,EAAE,gBAAgB,CAAA;CAwEvB,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/hvac-equipment/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE5C,eAAO,MAAM,6BAA6B,EAAE,oBAAoB,CAAC,OAAO,iBAAiB,CAAC,GAAG;IAC3F,IAAI,EAAE,gBAAgB,CAAA;CAyEvB,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { buildHvacEquipmentFloorplan } from './floorplan.js';
1
2
  import { buildHvacEquipmentGeometry } from './geometry.js';
2
3
  import { getHvacEquipmentPorts } from './ports.js';
3
4
  import { HvacEquipmentNode } from './schema.js';
@@ -59,6 +60,7 @@ export const hvacEquipmentRenderDefinition = {
59
60
  n.returnHeight,
60
61
  ]),
61
62
  ports: getHvacEquipmentPorts,
63
+ floorplan: buildHvacEquipmentFloorplan,
62
64
  presentation: {
63
65
  label: 'HVAC Unit',
64
66
  description: 'Furnace, air handler, or condenser — duct runs connect to its supply/return collars.',
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAAC,OAAO,gBAAgB,CAGtF,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/definition.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAAC,OAAO,gBAAgB,CAEtF,CAAA"}
@@ -1,5 +1,3 @@
1
- import { buildImportedMeshFloorplan } from './floorplan.js';
2
1
  export const importedMeshEditContribution = {
3
2
  snapProfile: 'item',
4
- floorplan: buildImportedMeshFloorplan,
5
3
  };
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAGvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAAC,OAAO,gBAAgB,CAAC,GAAG;IACzF,IAAI,EAAE,eAAe,CAAA;CAiCtB,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/definition.render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,CAAC,OAAO,gBAAgB,CAAC,GAAG;IACzF,IAAI,EAAE,eAAe,CAAA;CAkCtB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { perNodeGeometryBatchable } from '../shared/node-batch/batchable.js';
2
+ import { buildImportedMeshFloorplan } from './floorplan.js';
2
3
  import { buildImportedMeshGeometry } from './geometry.js';
3
4
  import { ImportedMeshNode } from './schema.js';
4
5
  export const importedMeshRenderDefinition = {
@@ -24,6 +25,7 @@ export const importedMeshRenderDefinition = {
24
25
  },
25
26
  geometryKey: (node) => `${node.id}:${node.primitives.length}`,
26
27
  geometry: buildImportedMeshGeometry,
28
+ floorplan: buildImportedMeshFloorplan,
27
29
  presentation: {
28
30
  label: 'Imported Mesh',
29
31
  description: 'Geometry preserved from an imported model when no native Pascal shape exists.',
@@ -1 +1 @@
1
- {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/item/definition.edit.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAQvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAkIxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAiFtE,CAAA"}
1
+ {"version":3,"file":"definition.edit.d.ts","sourceRoot":"","sources":["../../src/item/definition.edit.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAQvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAkIxC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CA8EtE,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { getEffectiveCutterNode, getScaledDimensions, resolveCutterHost, toggleMechanism, } from '@pascal-app/core';
2
2
  import { itemHasLights, itemMechanism, toggleItemLights } from '../shared/item-interactions.js';
3
3
  import { restingFloorplanAffectedIds } from '../shared/resting-surface-plan.js';
4
- import { buildItemContextualDimensions, buildItemFloorplan } from './floorplan.js';
4
+ import { buildItemContextualDimensions } from './floorplan.js';
5
5
  import { itemFloorplanMoveTarget } from './floorplan-move.js';
6
6
  import { itemPaint } from './paint.js';
7
7
  import { itemParametrics } from './parametrics.js';
@@ -166,9 +166,6 @@ export const itemEditContribution = {
166
166
  affordanceTools: {
167
167
  move: () => import('./move-tool.js'),
168
168
  },
169
- // Stage C: floor-plan polygon. ctx.resolve walks the parent chain
170
- // (wall / nested item / level) to compute the world-space transform.
171
- floorplan: buildItemFloorplan,
172
169
  floorplanAffectedIds: (args) => {
173
170
  const ids = [...restingFloorplanAffectedIds(args)];
174
171
  for (const node of [args.node, getEffectiveCutterNode(args.node)]) {
@@ -1 +1 @@
1
- {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/item/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAIvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CA+HxF,CAAA"}
1
+ {"version":3,"file":"definition.render.d.ts","sourceRoot":"","sources":["../../src/item/definition.render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,eAAO,MAAM,oBAAoB,EAAE,oBAAoB,CAAC,OAAO,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAkIxF,CAAA"}
@@ -2,6 +2,7 @@ import { getScaledDimensions } from '@pascal-app/core';
2
2
  import { itemMechanism } from '../shared/item-interactions.js';
3
3
  import { itemBatchable } from '../shared/node-batch/batchable.js';
4
4
  import { authoredItemFaceHost } from './authored-face-host.js';
5
+ import { buildItemFloorplan } from './floorplan.js';
5
6
  import { ItemNode } from './schema.js';
6
7
  export const itemRenderDefinition = {
7
8
  kind: 'item',
@@ -115,6 +116,9 @@ export const itemRenderDefinition = {
115
116
  // Same priority as the legacy ItemSystem.
116
117
  priority: 2,
117
118
  },
119
+ // Stage C: floor-plan polygon. ctx.resolve walks the parent chain
120
+ // (wall / nested item / level) to compute the world-space transform.
121
+ floorplan: buildItemFloorplan,
118
122
  presentation: {
119
123
  label: 'Item',
120
124
  description: 'A catalog-backed item (furniture, fixtures, decorations).',
@@ -1 +1 @@
1
- {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/item/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EAGtB,KAAK,eAAe,EAOpB,KAAK,QAAQ,EAKd,MAAM,kBAAkB,CAAA;AAKzB;;;;;;;;;;;;;;GAcG;AACH,KAAK,SAAS,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AA2D3D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,EACpB,KAAK,sxCAAyC,GAC7C,SAAS,GAAG,IAAI,CAyKlB;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CA+C1B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CA+HjG"}
1
+ {"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/item/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EAGtB,KAAK,eAAe,EAOpB,KAAK,QAAQ,EAOd,MAAM,kBAAkB,CAAA;AAIzB;;;;;;;;;;;;;;GAcG;AACH,KAAK,SAAS,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AA2D3D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,EACpB,KAAK,sxCAAyC,GAC7C,SAAS,GAAG,IAAI,CAyKlB;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CA+C1B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,IAAI,CA+HjG"}
@@ -1,5 +1,4 @@
1
- import { formatLinearMeasurement, getBlockFaceFrame, getEffectiveNode, getRoofWallFaceFrame, getScaledDimensions, getWallBodyCenterOffset, getWallLocalFaceZ, roofFacePointToSegment, scriptImages, useLiveTransforms, } from '@pascal-app/core';
2
- import { readFloorplanContext, readFloorplanMetricNotationOverride } from '@pascal-app/editor';
1
+ import { formatLinearMeasurement, getBlockFaceFrame, getEffectiveNode, getRoofWallFaceFrame, getScaledDimensions, getWallBodyCenterOffset, getWallLocalFaceZ, readFloorplanContext, readFloorplanMetricNotationOverride, roofFacePointToSegment, scriptImages, useLiveTransforms, } from '@pascal-app/core';
3
2
  import { restingNodePlanFrame } from '../shared/resting-surface-plan.js';
4
3
  import { buildPlanItemSymbol, classifyPlanItem, PLAN_SYMBOL_METADATA_KEY } from './plan-symbols.js';
5
4
  // Plan-space rotation convention used by the legacy `rotatePlanVector`
@@ -1,4 +1,4 @@
1
- import { floorplanGeometryMetadata } from '@pascal-app/editor';
1
+ import { floorplanGeometryMetadata } from '@pascal-app/core';
2
2
  /**
3
3
  * PERMIT-SET PLAN SYMBOLS for items — what a sheet draws instead of the
4
4
  * asset's raster sprite: real fixtures (sinks …) with fixture labels, as a