@kerros/editor 0.0.0-stage → 0.1.0-rc.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 (345) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +35 -2
  3. package/dist/SitePlanner.js +1189 -0
  4. package/dist/SitePlanner.js.map +1 -0
  5. package/dist/adapters/basemap.js +11 -0
  6. package/dist/adapters/basemap.js.map +1 -0
  7. package/dist/adapters/persistence.js +121 -0
  8. package/dist/adapters/persistence.js.map +1 -0
  9. package/dist/adapters/status.js +11 -0
  10. package/dist/adapters/status.js.map +1 -0
  11. package/dist/adapters/useProjectPersistence.js +56 -0
  12. package/dist/adapters/useProjectPersistence.js.map +1 -0
  13. package/dist/components/AiImportPanel.js +635 -0
  14. package/dist/components/AiImportPanel.js.map +1 -0
  15. package/dist/components/AnalysisPreview.js +179 -0
  16. package/dist/components/AnalysisPreview.js.map +1 -0
  17. package/dist/components/ElevatorPanel.js +120 -0
  18. package/dist/components/ElevatorPanel.js.map +1 -0
  19. package/dist/components/Icons.js +57 -0
  20. package/dist/components/Icons.js.map +1 -0
  21. package/dist/components/ImportDialog.js +467 -0
  22. package/dist/components/ImportDialog.js.map +1 -0
  23. package/dist/components/Inspector.js +1184 -0
  24. package/dist/components/Inspector.js.map +1 -0
  25. package/dist/components/NavigatePanel.js +301 -0
  26. package/dist/components/NavigatePanel.js.map +1 -0
  27. package/dist/components/NavigationGraph.js +234 -0
  28. package/dist/components/NavigationGraph.js.map +1 -0
  29. package/dist/components/StructureExplorer.js +510 -0
  30. package/dist/components/StructureExplorer.js.map +1 -0
  31. package/dist/components/StructureView.js +286 -0
  32. package/dist/components/StructureView.js.map +1 -0
  33. package/dist/components/controls.js +209 -0
  34. package/dist/components/controls.js.map +1 -0
  35. package/dist/components/graphLayout.js +27 -0
  36. package/dist/components/graphLayout.js.map +1 -0
  37. package/dist/host.js +175 -0
  38. package/dist/host.js.map +1 -0
  39. package/dist/i18n.js +88 -0
  40. package/dist/i18n.js.map +1 -0
  41. package/dist/import/analysisPreview.js +41 -0
  42. package/dist/import/analysisPreview.js.map +1 -0
  43. package/dist/import/brief.js +29 -0
  44. package/dist/import/brief.js.map +1 -0
  45. package/dist/import/checkpoint.js +50 -0
  46. package/dist/import/checkpoint.js.map +1 -0
  47. package/dist/import/detect.js +120 -0
  48. package/dist/import/detect.js.map +1 -0
  49. package/dist/import/documentSvg.js +49 -0
  50. package/dist/import/documentSvg.js.map +1 -0
  51. package/dist/import/instructions.js +20 -0
  52. package/dist/import/instructions.js.map +1 -0
  53. package/dist/import/openings.js +61 -0
  54. package/dist/import/openings.js.map +1 -0
  55. package/dist/import/planImport.js +233 -0
  56. package/dist/import/planImport.js.map +1 -0
  57. package/dist/import/register.js +47 -0
  58. package/dist/import/register.js.map +1 -0
  59. package/dist/import/runs.js +67 -0
  60. package/dist/import/runs.js.map +1 -0
  61. package/dist/import/session.js +23 -0
  62. package/dist/import/session.js.map +1 -0
  63. package/dist/import/types.js +13 -0
  64. package/dist/import/types.js.map +1 -0
  65. package/dist/import/usage.js +29 -0
  66. package/dist/import/usage.js.map +1 -0
  67. package/dist/import/walls.js +112 -0
  68. package/dist/import/walls.js.map +1 -0
  69. package/dist/index.js +178 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/map/CabinMaterials.js +81 -0
  72. package/dist/map/CabinMaterials.js.map +1 -0
  73. package/dist/map/CabinMirror.js +43 -0
  74. package/dist/map/CabinMirror.js.map +1 -0
  75. package/dist/map/Doors.js +80 -0
  76. package/dist/map/Doors.js.map +1 -0
  77. package/dist/map/ElevatorCabin.js +93 -0
  78. package/dist/map/ElevatorCabin.js.map +1 -0
  79. package/dist/map/FixtureLights.js +117 -0
  80. package/dist/map/FixtureLights.js.map +1 -0
  81. package/dist/map/MapCanvas.js +2161 -0
  82. package/dist/map/MapCanvas.js.map +1 -0
  83. package/dist/map/Passenger.js +69 -0
  84. package/dist/map/Passenger.js.map +1 -0
  85. package/dist/map/SceneLayer.js +1534 -0
  86. package/dist/map/SceneLayer.js.map +1 -0
  87. package/dist/map/UndergroundContext.js +153 -0
  88. package/dist/map/UndergroundContext.js.map +1 -0
  89. package/dist/map/ambience.js +194 -0
  90. package/dist/map/ambience.js.map +1 -0
  91. package/dist/map/architecture.js +305 -0
  92. package/dist/map/architecture.js.map +1 -0
  93. package/dist/map/bathMusic.js +92 -0
  94. package/dist/map/bathMusic.js.map +1 -0
  95. package/dist/map/cameraAim.js +33 -0
  96. package/dist/map/cameraAim.js.map +1 -0
  97. package/dist/map/elevators.js +56 -0
  98. package/dist/map/elevators.js.map +1 -0
  99. package/dist/map/excavation.js +52 -0
  100. package/dist/map/excavation.js.map +1 -0
  101. package/dist/map/exteriors.js +25 -0
  102. package/dist/map/exteriors.js.map +1 -0
  103. package/dist/map/features.js +218 -0
  104. package/dist/map/features.js.map +1 -0
  105. package/dist/map/fences.js +29 -0
  106. package/dist/map/fences.js.map +1 -0
  107. package/dist/map/journey.js +112 -0
  108. package/dist/map/journey.js.map +1 -0
  109. package/dist/map/levels.js +6 -0
  110. package/dist/map/levels.js.map +1 -0
  111. package/dist/map/lighting.js +143 -0
  112. package/dist/map/lighting.js.map +1 -0
  113. package/dist/map/loadBasemap.js +26 -0
  114. package/dist/map/loadBasemap.js.map +1 -0
  115. package/dist/map/materials.js +183 -0
  116. package/dist/map/materials.js.map +1 -0
  117. package/dist/map/poolLighting.js +39 -0
  118. package/dist/map/poolLighting.js.map +1 -0
  119. package/dist/map/projection.js +24 -0
  120. package/dist/map/projection.js.map +1 -0
  121. package/dist/map/rampGeometry.js +38 -0
  122. package/dist/map/rampGeometry.js.map +1 -0
  123. package/dist/map/route.js +107 -0
  124. package/dist/map/route.js.map +1 -0
  125. package/dist/map/stairSurfaces.js +115 -0
  126. package/dist/map/stairSurfaces.js.map +1 -0
  127. package/dist/map/surfaces.js +136 -0
  128. package/dist/map/surfaces.js.map +1 -0
  129. package/dist/map/textures.js +95 -0
  130. package/dist/map/textures.js.map +1 -0
  131. package/dist/map/underground.js +34 -0
  132. package/dist/map/underground.js.map +1 -0
  133. package/dist/map/walk.js +433 -0
  134. package/dist/map/walk.js.map +1 -0
  135. package/dist/map/walkContext.js +46 -0
  136. package/dist/map/walkContext.js.map +1 -0
  137. package/dist/map/walkDimensions.js +7 -0
  138. package/dist/map/walkDimensions.js.map +1 -0
  139. package/dist/map/walkJourney.js +85 -0
  140. package/dist/map/walkJourney.js.map +1 -0
  141. package/dist/map/walkSurfaces.js +106 -0
  142. package/dist/map/walkSurfaces.js.map +1 -0
  143. package/dist/map/wallJoins.js +70 -0
  144. package/dist/map/wallJoins.js.map +1 -0
  145. package/dist/map/water.js +274 -0
  146. package/dist/map/water.js.map +1 -0
  147. package/dist/model/authoring.js +99 -0
  148. package/dist/model/authoring.js.map +1 -0
  149. package/dist/model/boundaries.js +548 -0
  150. package/dist/model/boundaries.js.map +1 -0
  151. package/dist/model/coverage.js +30 -0
  152. package/dist/model/coverage.js.map +1 -0
  153. package/dist/model/document.js +52 -0
  154. package/dist/model/document.js.map +1 -0
  155. package/dist/model/doors.js +47 -0
  156. package/dist/model/doors.js.map +1 -0
  157. package/dist/model/factory.js +56 -0
  158. package/dist/model/factory.js.map +1 -0
  159. package/dist/model/geometry.js +454 -0
  160. package/dist/model/geometry.js.map +1 -0
  161. package/dist/model/history.js +29 -0
  162. package/dist/model/history.js.map +1 -0
  163. package/dist/model/imports.js +45 -0
  164. package/dist/model/imports.js.map +1 -0
  165. package/dist/model/inference.js +182 -0
  166. package/dist/model/inference.js.map +1 -0
  167. package/dist/model/materials.js +11 -0
  168. package/dist/model/materials.js.map +1 -0
  169. package/dist/model/mutations.js +157 -0
  170. package/dist/model/mutations.js.map +1 -0
  171. package/dist/model/navigation.js +275 -0
  172. package/dist/model/navigation.js.map +1 -0
  173. package/dist/model/ontology.js +109 -0
  174. package/dist/model/ontology.js.map +1 -0
  175. package/dist/model/passages.js +5 -0
  176. package/dist/model/passages.js.map +1 -0
  177. package/dist/model/portals.js +42 -0
  178. package/dist/model/portals.js.map +1 -0
  179. package/dist/model/precision.js +11 -0
  180. package/dist/model/precision.js.map +1 -0
  181. package/dist/model/project.js +31 -0
  182. package/dist/model/project.js.map +1 -0
  183. package/dist/model/ramps.js +10 -0
  184. package/dist/model/ramps.js.map +1 -0
  185. package/dist/model/roomNavigation.js +87 -0
  186. package/dist/model/roomNavigation.js.map +1 -0
  187. package/dist/model/routeClearance.js +72 -0
  188. package/dist/model/routeClearance.js.map +1 -0
  189. package/dist/model/spaces.js +104 -0
  190. package/dist/model/spaces.js.map +1 -0
  191. package/dist/model/stairGeometry.js +40 -0
  192. package/dist/model/stairGeometry.js.map +1 -0
  193. package/dist/model/stairTraversal.js +48 -0
  194. package/dist/model/stairTraversal.js.map +1 -0
  195. package/dist/model/topology.js +63 -0
  196. package/dist/model/topology.js.map +1 -0
  197. package/dist/model/types.js +35 -0
  198. package/dist/model/types.js.map +1 -0
  199. package/dist/model/validate.js +240 -0
  200. package/dist/model/validate.js.map +1 -0
  201. package/dist/model/vertical.js +129 -0
  202. package/dist/model/vertical.js.map +1 -0
  203. package/dist/model/walls.js +261 -0
  204. package/dist/model/walls.js.map +1 -0
  205. package/dist/planner/DrawingDock.js +231 -0
  206. package/dist/planner/DrawingDock.js.map +1 -0
  207. package/dist/planner/FloorControls.js +93 -0
  208. package/dist/planner/FloorControls.js.map +1 -0
  209. package/dist/planner/MapSettings.js +143 -0
  210. package/dist/planner/MapSettings.js.map +1 -0
  211. package/dist/planner/PlannerHelp.js +57 -0
  212. package/dist/planner/PlannerHelp.js.map +1 -0
  213. package/dist/planner/ProjectSidebar.js +246 -0
  214. package/dist/planner/ProjectSidebar.js.map +1 -0
  215. package/dist/planner/floors.js +18 -0
  216. package/dist/planner/floors.js.map +1 -0
  217. package/dist/planner/useDrawingTools.js +341 -0
  218. package/dist/planner/useDrawingTools.js.map +1 -0
  219. package/dist/planner/useMapDisplay.js +51 -0
  220. package/dist/planner/useMapDisplay.js.map +1 -0
  221. package/dist/planner/usePlannerKeyboard.js +138 -0
  222. package/dist/planner/usePlannerKeyboard.js.map +1 -0
  223. package/dist/planner/useReferenceAlignment.js +50 -0
  224. package/dist/planner/useReferenceAlignment.js.map +1 -0
  225. package/dist/styles.css +4931 -0
  226. package/dist/theme/index.js +34 -0
  227. package/dist/theme/index.js.map +1 -0
  228. package/dist/types/SitePlanner.d.ts +5 -0
  229. package/dist/types/adapters/basemap.d.ts +2 -0
  230. package/dist/types/adapters/persistence.d.ts +29 -0
  231. package/dist/types/adapters/status.d.ts +4 -0
  232. package/dist/types/adapters/useProjectPersistence.d.ts +13 -0
  233. package/dist/types/components/AiImportPanel.d.ts +9 -0
  234. package/dist/types/components/AnalysisPreview.d.ts +4 -0
  235. package/dist/types/components/ElevatorPanel.d.ts +18 -0
  236. package/dist/types/components/Icons.d.ts +8 -0
  237. package/dist/types/components/ImportDialog.d.ts +42 -0
  238. package/dist/types/components/Inspector.d.ts +38 -0
  239. package/dist/types/components/NavigatePanel.d.ts +27 -0
  240. package/dist/types/components/NavigationGraph.d.ts +10 -0
  241. package/dist/types/components/StructureExplorer.d.ts +8 -0
  242. package/dist/types/components/StructureView.d.ts +22 -0
  243. package/dist/types/components/controls.d.ts +52 -0
  244. package/dist/types/components/graphLayout.d.ts +9 -0
  245. package/dist/types/editor/host.d.ts +9 -0
  246. package/dist/types/editor/index.d.ts +2 -0
  247. package/dist/types/i18n.d.ts +85 -0
  248. package/dist/types/import/analysisPreview.d.ts +27 -0
  249. package/dist/types/import/brief.d.ts +22 -0
  250. package/dist/types/import/checkpoint.d.ts +49 -0
  251. package/dist/types/import/detect.d.ts +34 -0
  252. package/dist/types/import/documentSvg.d.ts +2 -0
  253. package/dist/types/import/index.d.ts +10 -0
  254. package/dist/types/import/instructions.d.ts +7 -0
  255. package/dist/types/import/openings.d.ts +22 -0
  256. package/dist/types/import/planImport.d.ts +22 -0
  257. package/dist/types/import/register.d.ts +25 -0
  258. package/dist/types/import/runs.d.ts +31 -0
  259. package/dist/types/import/session.d.ts +33 -0
  260. package/dist/types/import/types.d.ts +56 -0
  261. package/dist/types/import/usage.d.ts +10 -0
  262. package/dist/types/import/walls.d.ts +37 -0
  263. package/dist/types/map/CabinMaterials.d.ts +18 -0
  264. package/dist/types/map/CabinMirror.d.ts +13 -0
  265. package/dist/types/map/Doors.d.ts +11 -0
  266. package/dist/types/map/ElevatorCabin.d.ts +20 -0
  267. package/dist/types/map/FixtureLights.d.ts +35 -0
  268. package/dist/types/map/MapCanvas.d.ts +87 -0
  269. package/dist/types/map/Passenger.d.ts +18 -0
  270. package/dist/types/map/SceneLayer.d.ts +306 -0
  271. package/dist/types/map/UndergroundContext.d.ts +18 -0
  272. package/dist/types/map/ambience.d.ts +29 -0
  273. package/dist/types/map/architecture.d.ts +8 -0
  274. package/dist/types/map/bathMusic.d.ts +14 -0
  275. package/dist/types/map/cameraAim.d.ts +20 -0
  276. package/dist/types/map/elevators.d.ts +16 -0
  277. package/dist/types/map/excavation.d.ts +9 -0
  278. package/dist/types/map/exteriors.d.ts +3 -0
  279. package/dist/types/map/features.d.ts +33 -0
  280. package/dist/types/map/fences.d.ts +4 -0
  281. package/dist/types/map/journey.d.ts +36 -0
  282. package/dist/types/map/levels.d.ts +4 -0
  283. package/dist/types/map/lighting.d.ts +103 -0
  284. package/dist/types/map/loadBasemap.d.ts +4 -0
  285. package/dist/types/map/materials.d.ts +38 -0
  286. package/dist/types/map/poolLighting.d.ts +11 -0
  287. package/dist/types/map/projection.d.ts +9 -0
  288. package/dist/types/map/rampGeometry.d.ts +8 -0
  289. package/dist/types/map/route.d.ts +59 -0
  290. package/dist/types/map/stairSurfaces.d.ts +29 -0
  291. package/dist/types/map/surfaces.d.ts +36 -0
  292. package/dist/types/map/textures.d.ts +8 -0
  293. package/dist/types/map/underground.d.ts +30 -0
  294. package/dist/types/map/walk.d.ts +232 -0
  295. package/dist/types/map/walkContext.d.ts +11 -0
  296. package/dist/types/map/walkDimensions.d.ts +5 -0
  297. package/dist/types/map/walkJourney.d.ts +33 -0
  298. package/dist/types/map/walkSurfaces.d.ts +27 -0
  299. package/dist/types/map/wallJoins.d.ts +6 -0
  300. package/dist/types/map/water.d.ts +12 -0
  301. package/dist/types/model/authoring.d.ts +38 -0
  302. package/dist/types/model/boundaries.d.ts +41 -0
  303. package/dist/types/model/coverage.d.ts +8 -0
  304. package/dist/types/model/document.d.ts +9 -0
  305. package/dist/types/model/doors.d.ts +19 -0
  306. package/dist/types/model/factory.d.ts +5 -0
  307. package/dist/types/model/geometry.d.ts +99 -0
  308. package/dist/types/model/history.d.ts +10 -0
  309. package/dist/types/model/host.d.ts +154 -0
  310. package/dist/types/model/imports.d.ts +7 -0
  311. package/dist/types/model/inference.d.ts +46 -0
  312. package/dist/types/model/live.d.ts +60 -0
  313. package/dist/types/model/materials.d.ts +28 -0
  314. package/dist/types/model/mutations.d.ts +178 -0
  315. package/dist/types/model/navigation.d.ts +70 -0
  316. package/dist/types/model/ontology.d.ts +43 -0
  317. package/dist/types/model/passages.d.ts +2 -0
  318. package/dist/types/model/portals.d.ts +9 -0
  319. package/dist/types/model/precision.d.ts +11 -0
  320. package/dist/types/model/project.d.ts +8 -0
  321. package/dist/types/model/ramps.d.ts +7 -0
  322. package/dist/types/model/roomNavigation.d.ts +15 -0
  323. package/dist/types/model/routeClearance.d.ts +11 -0
  324. package/dist/types/model/spaces.d.ts +46 -0
  325. package/dist/types/model/stairGeometry.d.ts +27 -0
  326. package/dist/types/model/stairTraversal.d.ts +8 -0
  327. package/dist/types/model/topology.d.ts +14 -0
  328. package/dist/types/model/types.d.ts +369 -0
  329. package/dist/types/model/validate.d.ts +38 -0
  330. package/dist/types/model/vertical.d.ts +145 -0
  331. package/dist/types/model/walls.d.ts +71 -0
  332. package/dist/types/planner/DrawingDock.d.ts +16 -0
  333. package/dist/types/planner/FloorControls.d.ts +17 -0
  334. package/dist/types/planner/MapSettings.d.ts +16 -0
  335. package/dist/types/planner/PlannerHelp.d.ts +3 -0
  336. package/dist/types/planner/ProjectSidebar.d.ts +32 -0
  337. package/dist/types/planner/floors.d.ts +3 -0
  338. package/dist/types/planner/types.d.ts +3 -0
  339. package/dist/types/planner/useDrawingTools.d.ts +52 -0
  340. package/dist/types/planner/useMapDisplay.d.ts +29 -0
  341. package/dist/types/planner/usePlannerKeyboard.d.ts +18 -0
  342. package/dist/types/planner/useReferenceAlignment.d.ts +30 -0
  343. package/dist/types/schema/index.d.ts +25 -0
  344. package/dist/types/theme/index.d.ts +55 -0
  345. package/package.json +52 -4
@@ -0,0 +1,16 @@
1
+ import type { BasemapConfig } from '../model/host';
2
+ import type { ProjectDocument } from '../model/types';
3
+ import type { CommitProject } from './types';
4
+ import type { useMapDisplay } from './useMapDisplay';
5
+ interface MapSettingsProps {
6
+ display: ReturnType<typeof useMapDisplay>;
7
+ project: ProjectDocument;
8
+ floorId: string | null;
9
+ editing: boolean;
10
+ hostBasemap?: BasemapConfig;
11
+ commit: CommitProject;
12
+ snapping: boolean;
13
+ setSnapping: (enabled: boolean) => void;
14
+ }
15
+ export declare function MapSettings({ display, project, floorId, editing, hostBasemap, commit, snapping, setSnapping, }: MapSettingsProps): import("react").JSX.Element;
16
+ export {};
@@ -0,0 +1,3 @@
1
+ export declare function PlannerHelp({ onClose }: {
2
+ onClose: () => void;
3
+ }): import("react").JSX.Element;
@@ -0,0 +1,32 @@
1
+ import type { PlannerMode } from '../model/host';
2
+ import type { StatusReading } from '../model/live';
3
+ import type { ProjectDocument } from '../model/types';
4
+ interface ProjectSidebarProps {
5
+ state: ReturnType<typeof useProjectSidebar>;
6
+ project: ProjectDocument;
7
+ floorId: string | null;
8
+ selected: string | null;
9
+ mode: PlannerMode;
10
+ editing: boolean;
11
+ readOnly: boolean;
12
+ statuses: Map<string, StatusReading>;
13
+ alarmFloors: Set<string | null>;
14
+ activeTab: 'structure' | 'objects';
15
+ setActiveTab: (tab: 'structure' | 'objects') => void;
16
+ leave: () => void;
17
+ select: (id: string | null, focus?: boolean) => void;
18
+ changeFloor: (id: string | null) => void;
19
+ onAnchor: () => void;
20
+ onAddFloor: () => void;
21
+ onDuplicateFloor: () => void;
22
+ onImportReference: () => void;
23
+ }
24
+ export declare function useProjectSidebar(): {
25
+ search: string;
26
+ setSearch: import("react").Dispatch<import("react").SetStateAction<string>>;
27
+ collapsedBuildings: Set<string>;
28
+ setCollapsedBuildings: import("react").Dispatch<import("react").SetStateAction<Set<string>>>;
29
+ };
30
+ /** Project browsing chrome, with search and collapsed groups local to the sidebar. */
31
+ export declare function ProjectSidebar({ state, project, floorId, selected, mode, editing, readOnly, statuses, alarmFloors, activeTab, setActiveTab, leave, select, changeFloor, onAnchor, onAddFloor, onDuplicateFloor, onImportReference, }: ProjectSidebarProps): import("react").JSX.Element;
32
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { Floor, ProjectDocument } from '../model/types';
2
+ export declare function floorCode(project: ProjectDocument, f: Floor): string;
3
+ export declare function floorBand(project: ProjectDocument, floorId: string | null): Floor[];
@@ -0,0 +1,3 @@
1
+ import type { ProjectDocument } from '../model/types';
2
+ /** The single validated, undoable mutation path shared by planner features. */
3
+ export type CommitProject = (change: (draft: ProjectDocument) => void) => boolean;
@@ -0,0 +1,52 @@
1
+ import { type GeometryDrag } from '../model/authoring';
2
+ import type { Point, ProjectDocument, SiteObject, Tool } from '../model/types';
3
+ import { type WallProposal } from '../model/walls';
4
+ import type { CommitProject } from './types';
5
+ interface DrawingToolsOptions {
6
+ project: ProjectDocument;
7
+ floorId: string | null;
8
+ selected: string | null;
9
+ editing: boolean;
10
+ threeD: boolean;
11
+ commit: CommitProject;
12
+ notify: (message: string) => void;
13
+ setSelected: (id: string | null) => void;
14
+ onSelect: (id: string | null) => void;
15
+ onFloorChange: (id: string | null) => void;
16
+ onChooseTool: () => void;
17
+ }
18
+ /**
19
+ * Owns in-progress drawing and handle gestures. Previews only calculate geometry;
20
+ * completed edits go through the planner's validated history transaction.
21
+ */
22
+ export declare function useDrawingTools({ project, floorId, selected, editing, threeD, commit, notify, setSelected, onSelect, onFloorChange, onChooseTool, }: DrawingToolsOptions): {
23
+ tool: Tool;
24
+ setTool: import("react").Dispatch<import("react").SetStateAction<Tool>>;
25
+ draft: Point[];
26
+ setDraft: import("react").Dispatch<import("react").SetStateAction<Point[]>>;
27
+ hover: Point | null;
28
+ proposal: WallProposal | null;
29
+ snapLabel: string;
30
+ snapping: boolean;
31
+ setSnapping: import("react").Dispatch<import("react").SetStateAction<boolean>>;
32
+ routeAnchor: string | null;
33
+ setRouteAnchor: import("react").Dispatch<import("react").SetStateAction<string | null>>;
34
+ chooseTool: (next: Tool) => void;
35
+ finish: () => void;
36
+ mapClick: (raw: Point, id: string | null) => void;
37
+ adoptBuilding: ({ rings, sourceId, storeys, name, }: {
38
+ rings: Point[][];
39
+ sourceId: string | number;
40
+ storeys: number;
41
+ name: string;
42
+ }) => void;
43
+ onHover: (point: Point, tolerance: number) => void;
44
+ guides: {
45
+ line: [Point, Point];
46
+ role: "guide" | "proposal";
47
+ }[];
48
+ geometryPreview: (kind: GeometryDrag["kind"], id: string, raw: Point, free?: boolean, ringIndex?: number, index?: number) => Point;
49
+ vertexMove: (kind: "junction" | "ring" | "object" | "barrier" | "node" | "opening" | "rotate" | "coverage", id: string, raw: Point, ringIndex?: number, index?: number, free?: boolean) => void;
50
+ updateObject: (id: string, patch: Partial<SiteObject>) => void;
51
+ };
52
+ export {};
@@ -0,0 +1,29 @@
1
+ import type { BasemapConfig, ViewState } from '../model/host';
2
+ import type { ProjectDocument } from '../model/types';
3
+ /** Display preferences survive switching between the map, graph, viewer and editor. */
4
+ export declare function useMapDisplay(project: ProjectDocument, hostBasemap?: BasemapConfig, initialView?: ViewState): {
5
+ coverage: boolean;
6
+ setCoverage: import("react").Dispatch<import("react").SetStateAction<boolean>>;
7
+ showLabels: boolean;
8
+ setShowLabels: import("react").Dispatch<import("react").SetStateAction<boolean>>;
9
+ basemapMode: "plan" | "host";
10
+ setBasemapMode: import("react").Dispatch<import("react").SetStateAction<"plan" | "host">>;
11
+ settings: boolean;
12
+ setSettings: import("react").Dispatch<import("react").SetStateAction<boolean>>;
13
+ showPlan: boolean;
14
+ setShowPlan: import("react").Dispatch<import("react").SetStateAction<boolean>>;
15
+ lighting: "auto" | "day" | "evening";
16
+ setLighting: import("react").Dispatch<import("react").SetStateAction<"auto" | "day" | "evening">>;
17
+ excavation: boolean;
18
+ setExcavation: import("react").Dispatch<import("react").SetStateAction<boolean>>;
19
+ cityBuildings: boolean;
20
+ setCityBuildings: import("react").Dispatch<import("react").SetStateAction<boolean>>;
21
+ cadastre: boolean;
22
+ setCadastre: import("react").Dispatch<import("react").SetStateAction<boolean>>;
23
+ sun: import("../map/lighting").Sun;
24
+ sunNote: string;
25
+ basemap: BasemapConfig;
26
+ surveyed: boolean;
27
+ canAdopt: boolean;
28
+ hasCadastre: boolean;
29
+ };
@@ -0,0 +1,18 @@
1
+ import type { Map as GLMap } from 'maplibre-gl';
2
+ import { type RefObject } from 'react';
3
+ import type { Tool } from '../model/types';
4
+ interface PlannerKeyboardOptions {
5
+ graphView: boolean;
6
+ editing: boolean;
7
+ threeD: boolean;
8
+ walk: boolean;
9
+ hasDraft: boolean;
10
+ hasSelection: boolean;
11
+ mapRef: RefObject<GLMap | null>;
12
+ chooseTool: (tool: Tool) => void;
13
+ stepFloor: (direction: 1 | -1) => void;
14
+ commands: Record<'undo' | 'redo' | 'undoPoint' | 'export' | 'cancel' | 'finish' | 'help' | 'view' | 'edit' | 'walk' | 'live' | 'cycleView' | 'toggleStack' | 'toggleSidebar' | 'toggleInspector' | 'toggleFullscreen' | 'toggleNavigation' | 'toggleTheme' | 'deleteSelection' | 'duplicate', () => void>;
15
+ }
16
+ /** Routes chrome shortcuts without taking movement keys from the map or walker. */
17
+ export declare function usePlannerKeyboard({ graphView, editing, threeD, walk, hasDraft, hasSelection, mapRef, chooseTool, stepFloor, commands, }: PlannerKeyboardOptions): boolean;
18
+ export {};
@@ -0,0 +1,30 @@
1
+ import { type PreparedDrawing } from '../components/ImportDialog';
2
+ import type { AssetRepository, Drawing, Point, ProjectDocument } from '../model/types';
3
+ import type { CommitProject } from './types';
4
+ interface Alignment {
5
+ prepared: PreparedDrawing;
6
+ imagePoints: Point[];
7
+ mapPoints: Point[];
8
+ drawing: Drawing;
9
+ preview: boolean;
10
+ }
11
+ interface ReferenceAlignmentOptions {
12
+ project: ProjectDocument;
13
+ floorId: string | null;
14
+ assets: AssetRepository;
15
+ commit: CommitProject;
16
+ notify: (message: string) => void;
17
+ setSelected: (id: string | null) => void;
18
+ onStart: () => void;
19
+ }
20
+ /** A reference drawing stays provisional until its alignment or scale is accepted. */
21
+ export declare function useReferenceAlignment({ project, floorId, assets, commit, notify, setSelected, onStart, }: ReferenceAlignmentOptions): {
22
+ alignment: Alignment | null;
23
+ setAlignment: import("react").Dispatch<import("react").SetStateAction<Alignment | null>>;
24
+ startAlignment: (prepared: PreparedDrawing) => Promise<void>;
25
+ previewAlignment: () => void;
26
+ confirmAlignment: () => void;
27
+ calibrate: (metres: number) => void;
28
+ displayProject: ProjectDocument;
29
+ };
30
+ export {};
@@ -0,0 +1,25 @@
1
+ export type { ProjectDocument, ProjectSummary, Building, BuildingRoof, RoofSection, Floor, InteriorLight, LightFixture, Junction, VirtualBoundary, BoundaryUse, SpaceGeometry, Barrier, SiteObject, Drawing, Origin, Point, Ring, ObjectKind, Slope, MaterialKind, ModelKind, AssetRepository, NavNode, NavEdge, NavEdgeKind, Zone, Portal, PortalGroup, } from '../model/types';
2
+ export { spaces, spaceAt, spacePoint, inSpace } from '../model/spaces';
3
+ export { entryInto, perimeter, captive, zoneSpaces, addZone, removeZone, setZoneMembers, nestZone, addPortalGroup, removePortalGroup, setPortalGroupMembers, pruneOntology, } from '../model/ontology';
4
+ export { inferPortals, inferOpenBoundaries, refreshPortals, divideSpaces, spacesDividedBy, spacesRejoinedBy, mergeSpaces, } from '../model/inference';
5
+ export { derivedGraph } from '../model/topology';
6
+ export { sharedBoundaryPortals, effectivePortals } from '../model/portals';
7
+ export { isArea, isDevice, isOpening, isSpace, uid, OBJECT_KINDS } from '../model/types';
8
+ export { createObject, emptyProject } from '../model/factory';
9
+ export { enclosedRegion, enclosedRegions, refitEnclosedRooms } from '../model/spaces';
10
+ export { boundaryEdges, boundaryRegions, boundaryRegionAt, boundaryRings, derivedSpaceRings, bindSpaceToRegion, followsBoundaries, connectSpace, disconnectSpace, addVirtualBoundary, drawVirtualBoundary, addBoundaryHole, normalizeBoundaries, refreshBoundarySpaces, } from '../model/boundaries';
11
+ export type { BoundaryEdge, BoundaryRegion } from '../model/boundaries';
12
+ export { coverageOf, DEFAULT_RANGE, DEFAULT_FOV } from '../model/coverage';
13
+ export { copyProject, openingFloorId } from '../model/project';
14
+ export { MIN_SEGMENT, OPENING_MIN_SEGMENT, geoOrigin, moveOrigin, segmentsCross, toLngLat, toLocal, addBarrier, duplicateFloor, removeFloor, rectangle, rotate, centroid, distance, footprint, closeRing, openRing, ringArea, objectArea, pointInRing, objectPosition, objectRotation, barrierEnds, segmentProjection, slopeElevation, } from '../model/geometry';
15
+ export { exportProject, importProject, parseExport, blobDataUrl } from '../model/document';
16
+ export { validateProject, validateRelationships, validateRings, validateNavigation, transact, freezeProject, COORD_LIMIT, } from '../model/validate';
17
+ export type { TransactResult } from '../model/validate';
18
+ export { applyMutation, applyMutations } from '../model/mutations';
19
+ export type { Mutation, MutationOutcome, MutationResult } from '../model/mutations';
20
+ export { findRoute, navNodes, navEdges, HERE, routeSteps, routeAnchors, floorPhrase, addNavNode, addNavEdge, navPath, chainVertical, edgeCost, edgeLength, ELEVATOR_BASE, ELEVATOR_PER_METRE, STAIR_CLIMB_FACTOR, DOOR_COST, NAV_WELD, } from '../model/navigation';
21
+ export type { Route, RouteStep, RouteLeg, RouteOptions, RouteEnd, RoutePlace } from '../model/navigation';
22
+ export { EXTERIOR_PRESETS, type ExteriorPreset } from '../model/materials';
23
+ export { flights, flightsAt, isVertical, passesThrough, PITCH, pitchOf, primaryShafts, reaches, runFor, servedFloors, shaftKey, shaftVoids, span, type Flight, } from '../model/vertical';
24
+ export { buildRoomNavigation } from '../model/roomNavigation';
25
+ export type { RoomAccess, RoomNavigationGraph } from '../model/roomNavigation';
@@ -0,0 +1,55 @@
1
+ import { type ComponentType, type ReactNode } from 'react';
2
+ import type { SiteObject } from '../model/types';
3
+ import type { StatusTone } from '../model/live';
4
+ import { type En } from '../i18n';
5
+ type DeepPartial<T> = {
6
+ [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
7
+ };
8
+ /** App-wide dark mode: a `dark` class on the root element, remembered per browser. */
9
+ export declare function useDarkMode(): [boolean, () => void];
10
+ export interface ConfirmOptions {
11
+ title: string;
12
+ body?: string;
13
+ danger?: boolean;
14
+ confirmLabel?: string;
15
+ }
16
+ /** Plan/route/device rendering colours, per deployment ("operation model"). Basemap is separate (BasemapConfig). */
17
+ export interface MapStyleOptions {
18
+ /** Plan area fill and wall colour (top-down 2D). */
19
+ room?: string;
20
+ wall?: string;
21
+ route?: string;
22
+ routeActive?: string;
23
+ /** Selection/hover/draft highlight colours, applied on both the 2D plan and the 3D scene. */
24
+ selection?: string;
25
+ /** Soft (translucent) selection fill for areas; defaults to a light tint of the selection colour. */
26
+ selectionFill?: string;
27
+ hover?: string;
28
+ draft?: string;
29
+ statusTones?: Partial<Record<StatusTone, string>>;
30
+ /** Last-word override for any area/object fill and marker accent; return undefined to fall through. */
31
+ objectColor?: (object: SiteObject) => string | undefined;
32
+ }
33
+ export interface KerrosTheme {
34
+ /** CSS custom-property overrides (e.g. { '--accent': '#e8562f' }); applied to the theme wrapper. */
35
+ tokens?: Record<string, string>;
36
+ /** Per kind/tool/POI-symbol icon overrides; keys match EntityIcon's `kind`/`symbol`. */
37
+ icons?: Record<string, ComponentType<{
38
+ size?: number;
39
+ }>>;
40
+ /** Show a transient notification. Unset → the built-in toast. */
41
+ notify?: (message: string, tone?: 'info' | 'error') => void;
42
+ /** Ask the user to confirm a destructive action. Unset → the built-in dialog. */
43
+ confirm?: (options: ConfirmOptions) => Promise<boolean>;
44
+ /** Plan/route/device rendering colours. */
45
+ mapStyle?: MapStyleOptions;
46
+ /** Override any library UI strings (deep-merged over the built-in English); read via useStrings(). */
47
+ strings?: DeepPartial<En>;
48
+ }
49
+ export declare function KerrosThemeProvider({ theme, children }: {
50
+ theme?: KerrosTheme;
51
+ children: ReactNode;
52
+ }): import("react").JSX.Element;
53
+ export declare const useKerrosTheme: () => KerrosTheme;
54
+ export declare function useStrings(): En;
55
+ export {};
package/package.json CHANGED
@@ -1,6 +1,54 @@
1
1
  {
2
2
  "name": "@kerros/editor",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0-rc.1",
4
+ "description": "Kerros React floor-plan editor, browser-safe CAD conversion, SVG output and host adapters for persistence, maps and server-backed drawing imports.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/kherrala/kerros.git",
10
+ "directory": "packages/editor"
11
+ },
12
+ "homepage": "https://github.com/kherrala/kerros#readme",
13
+ "bugs": "https://github.com/kherrala/kerros/issues",
14
+ "keywords": ["floor-plan", "indoor-mapping", "maplibre", "react", "editor"],
15
+ "module": "./dist/index.js",
16
+ "types": "./dist/types/editor/index.d.ts",
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/types/editor/index.d.ts",
25
+ "import": "./dist/index.js"
26
+ },
27
+ "./host": {
28
+ "types": "./dist/types/editor/host.d.ts",
29
+ "import": "./dist/host.js"
30
+ },
31
+ "./styles.css": "./dist/styles.css"
32
+ },
33
+ "scripts": {
34
+ "build": "vite build && tsc -p tsconfig.dts.json && cat ../../node_modules/maplibre-gl/dist/maplibre-gl.css ../../src/styles.css > dist/styles.css",
35
+ "prepack": "npm run build"
36
+ },
37
+ "sideEffects": [
38
+ "*.css"
39
+ ],
40
+ "peerDependencies": {
41
+ "react": "^19.0.0",
42
+ "react-dom": "^19.0.0",
43
+ "maplibre-gl": "^6.4.1",
44
+ "three": ">=0.170.0 <1.0.0"
45
+ },
46
+ "dependencies": {
47
+ "lucide-react": "^0.468.0",
48
+ "polygon-clipping": "^0.15.7"
49
+ },
50
+ "publishConfig": {
51
+ "access": "public",
52
+ "registry": "https://registry.npmjs.org/"
53
+ }
54
+ }