@ahrowe/ui 0.28.0 → 0.29.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 (656) hide show
  1. package/dist/esm/common/accordion/accordion.mjs.map +1 -1
  2. package/dist/esm/common/accordion/accordion.module.mjs +1 -1
  3. package/dist/esm/common/accordion/accordion.module.mjs.map +1 -1
  4. package/dist/esm/common/accordion/accordion.plain.module.mjs +1 -1
  5. package/dist/esm/common/accordion/accordion.plain.module.mjs.map +1 -1
  6. package/dist/esm/common/accordion/accordion.primary.module.mjs +1 -1
  7. package/dist/esm/common/accordion/accordion.primary.module.mjs.map +1 -1
  8. package/dist/esm/common/actionButtons/actionButtons.mjs.map +1 -1
  9. package/dist/esm/common/actionButtons/actionButtons.module.mjs +1 -1
  10. package/dist/esm/common/actionButtons/actionButtons.module.mjs.map +1 -1
  11. package/dist/esm/common/actionIcon/actionIcon.mjs.map +1 -1
  12. package/dist/esm/common/actionIcon/actionIcon.module.mjs +1 -1
  13. package/dist/esm/common/actionIcon/actionIcon.module.mjs.map +1 -1
  14. package/dist/esm/common/alert/alert.mjs.map +1 -1
  15. package/dist/esm/common/alert/alert.module.mjs +1 -1
  16. package/dist/esm/common/animatedIcon/animatedIcon.mjs.map +1 -1
  17. package/dist/esm/common/animatedIcon/animatedIcon.module.mjs +1 -1
  18. package/dist/esm/common/animatedIcon/animatedIcon.module.mjs.map +1 -1
  19. package/dist/esm/common/animatedLogo/animatedLogo.mjs.map +1 -1
  20. package/dist/esm/common/animatedLogo/animatedLogo.module.mjs +1 -1
  21. package/dist/esm/common/animatedText/animatedText.mjs +1 -1
  22. package/dist/esm/common/animatedText/animatedText.mjs.map +1 -1
  23. package/dist/esm/common/animatedText/animatedText.module.mjs +1 -1
  24. package/dist/esm/common/animatedText/animatedText.module.mjs.map +1 -1
  25. package/dist/esm/common/avatar/avatar.mjs.map +1 -1
  26. package/dist/esm/common/avatar/avatar.module.mjs +1 -1
  27. package/dist/esm/common/avatar/avatar.module.mjs.map +1 -1
  28. package/dist/esm/common/avatar/avatarGroup.mjs.map +1 -1
  29. package/dist/esm/common/badge/badge.mjs.map +1 -1
  30. package/dist/esm/common/badge/badge.module.mjs +1 -1
  31. package/dist/esm/common/badge/badge.module.mjs.map +1 -1
  32. package/dist/esm/common/breadcrumb/breadcrumb.mjs.map +1 -1
  33. package/dist/esm/common/breadcrumb/breadcrumb.module.mjs +1 -1
  34. package/dist/esm/common/button/button.mjs.map +1 -1
  35. package/dist/esm/common/button/button.module.mjs +1 -1
  36. package/dist/esm/common/button/button.module.mjs.map +1 -1
  37. package/dist/esm/common/buttonGroup/buttonGroup.mjs.map +1 -1
  38. package/dist/esm/common/buttonGroup/buttonGroup.module.mjs +1 -1
  39. package/dist/esm/common/buttonGroup/buttonGroup.module.mjs.map +1 -1
  40. package/dist/esm/common/card/Card.mjs +1 -1
  41. package/dist/esm/common/card/Card.mjs.map +1 -1
  42. package/dist/esm/common/card/CardActions.mjs.map +1 -1
  43. package/dist/esm/common/card/CardHeader.mjs.map +1 -1
  44. package/dist/esm/common/card/card.module.mjs +1 -1
  45. package/dist/esm/common/card/card.module.mjs.map +1 -1
  46. package/dist/esm/common/carousel/carousel.mjs +1 -1
  47. package/dist/esm/common/carousel/carousel.mjs.map +1 -1
  48. package/dist/esm/common/carousel/carousel.module.mjs +1 -1
  49. package/dist/esm/common/carousel/carousel.module.mjs.map +1 -1
  50. package/dist/esm/common/checkbox/checkbox.mjs.map +1 -1
  51. package/dist/esm/common/checkbox/checkbox.module.mjs +1 -1
  52. package/dist/esm/common/checkbox/checkbox.module.mjs.map +1 -1
  53. package/dist/esm/common/chip/chip.mjs +1 -1
  54. package/dist/esm/common/chip/chip.mjs.map +1 -1
  55. package/dist/esm/common/chip/chip.module.mjs +1 -1
  56. package/dist/esm/common/chip/chip.module.mjs.map +1 -1
  57. package/dist/esm/common/colorPicker/colorPicker.mjs.map +1 -1
  58. package/dist/esm/common/colorPicker/colorPicker.module.mjs +1 -1
  59. package/dist/esm/common/colorPicker/colorPicker.module.mjs.map +1 -1
  60. package/dist/esm/common/configProvider/configProvider.mjs.map +1 -1
  61. package/dist/esm/common/configProvider/useComponentDefaults.mjs.map +1 -1
  62. package/dist/esm/common/confirmModal/confirmModal.mjs.map +1 -1
  63. package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.mjs.map +1 -1
  64. package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.module.mjs +1 -1
  65. package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.module.mjs.map +1 -1
  66. package/dist/esm/common/datePicker/dateFunctions.mjs.map +1 -1
  67. package/dist/esm/common/datePicker/datePicker.mjs +1 -1
  68. package/dist/esm/common/datePicker/datePicker.mjs.map +1 -1
  69. package/dist/esm/common/datePicker/datePicker.module.mjs +1 -1
  70. package/dist/esm/common/divider/divider.mjs.map +1 -1
  71. package/dist/esm/common/divider/divider.module.mjs +1 -1
  72. package/dist/esm/common/drawer/drawer.mjs.map +1 -1
  73. package/dist/esm/common/drawer/drawer.module.mjs +1 -1
  74. package/dist/esm/common/drawer/drawer.module.mjs.map +1 -1
  75. package/dist/esm/common/dropZone/dropZone.mjs +1 -1
  76. package/dist/esm/common/dropZone/dropZone.mjs.map +1 -1
  77. package/dist/esm/common/dropZone/dropZone.module.mjs +1 -1
  78. package/dist/esm/common/dropZone/dropZone.module.mjs.map +1 -1
  79. package/dist/esm/common/dropdown/dropdown.mjs +1 -1
  80. package/dist/esm/common/dropdown/dropdown.mjs.map +1 -1
  81. package/dist/esm/common/dropdown/dropdown.module.mjs +1 -1
  82. package/dist/esm/common/dropdown/dropdown.module.mjs.map +1 -1
  83. package/dist/esm/common/emptyState/emptyState.mjs.map +1 -1
  84. package/dist/esm/common/emptyState/emptyState.module.mjs +1 -1
  85. package/dist/esm/common/errorBoundary/errorBoundary.mjs.map +1 -1
  86. package/dist/esm/common/errorBoundary/errorBoundary.module.mjs +1 -1
  87. package/dist/esm/common/errorBoundary/errorBoundary.module.mjs.map +1 -1
  88. package/dist/esm/common/fab/components/fabBase/fabBase.mjs.map +1 -1
  89. package/dist/esm/common/fab/components/fabBase/fabBase.module.mjs +1 -1
  90. package/dist/esm/common/fab/fab.mjs.map +1 -1
  91. package/dist/esm/common/fab/fab.module.mjs +1 -1
  92. package/dist/esm/common/fab/fab.module.mjs.map +1 -1
  93. package/dist/esm/common/flip/flip.mjs +1 -1
  94. package/dist/esm/common/flip/flip.mjs.map +1 -1
  95. package/dist/esm/common/flip/flip.module.mjs +1 -1
  96. package/dist/esm/common/floatingMenu/floatingMenu.mjs +1 -1
  97. package/dist/esm/common/floatingMenu/floatingMenu.mjs.map +1 -1
  98. package/dist/esm/common/floatingMenu/floatingMenu.module.mjs +1 -1
  99. package/dist/esm/common/floatingMenu/floatingMenu.module.mjs.map +1 -1
  100. package/dist/esm/common/floatingMenu/floatingMenu.types.mjs.map +1 -1
  101. package/dist/esm/common/floatingMenu/useFloatingPosition.mjs.map +1 -1
  102. package/dist/esm/common/floorPlan/floorPlan.faces.mjs.map +1 -1
  103. package/dist/esm/common/floorPlan/floorPlan.geometry.mjs.map +1 -1
  104. package/dist/esm/common/floorPlan/floorPlan.graph.mjs +1 -1
  105. package/dist/esm/common/floorPlan/floorPlan.graph.mjs.map +1 -1
  106. package/dist/esm/common/floorPlan/floorPlan.hit.mjs.map +1 -1
  107. package/dist/esm/common/floorPlan/floorPlan.json.mjs +1 -1
  108. package/dist/esm/common/floorPlan/floorPlan.json.mjs.map +1 -1
  109. package/dist/esm/common/floorPlan/floorPlan.mesh.mjs.map +1 -1
  110. package/dist/esm/common/floorPlan/floorPlan.path.mjs.map +1 -1
  111. package/dist/esm/common/floorPlan/floorPlan.plan.mjs +1 -1
  112. package/dist/esm/common/floorPlan/floorPlan.plan.mjs.map +1 -1
  113. package/dist/esm/common/floorPlan/floorPlan.rooms.mjs +1 -1
  114. package/dist/esm/common/floorPlan/floorPlan.rooms.mjs.map +1 -1
  115. package/dist/esm/common/floorPlan/floorPlan.snap.mjs.map +1 -1
  116. package/dist/esm/common/floorPlan/floorPlan.triangulate.mjs +1 -1
  117. package/dist/esm/common/floorPlan/floorPlan.triangulate.mjs.map +1 -1
  118. package/dist/esm/common/floorPlan/legacySvg.mjs.map +1 -1
  119. package/dist/esm/common/hooks/useAnchorTracking.mjs +1 -1
  120. package/dist/esm/common/hooks/useAnchorTracking.mjs.map +1 -1
  121. package/dist/esm/common/hooks/useCoarsePointer.mjs +1 -1
  122. package/dist/esm/common/hooks/useFocusBoundary.mjs.map +1 -1
  123. package/dist/esm/common/hooks/useMediaQuery.mjs +1 -1
  124. package/dist/esm/common/hooks/useMediaQuery.mjs.map +1 -1
  125. package/dist/esm/common/hooks/useOverlay.mjs.map +1 -1
  126. package/dist/esm/common/hooks/useSheet.mjs +1 -1
  127. package/dist/esm/common/hooks/useSheet.mjs.map +1 -1
  128. package/dist/esm/common/hooks/useSwipeDismiss.mjs +1 -1
  129. package/dist/esm/common/hooks/useSwipeDismiss.mjs.map +1 -1
  130. package/dist/esm/common/iconPicker/iconPicker.mjs +1 -1
  131. package/dist/esm/common/iconPicker/iconPicker.mjs.map +1 -1
  132. package/dist/esm/common/iconPicker/iconPicker.module.mjs +1 -1
  133. package/dist/esm/common/idleManager/idleManager.mjs.map +1 -1
  134. package/dist/esm/common/infiniteBlock/infiniteBlock.mjs.map +1 -1
  135. package/dist/esm/common/infiniteBlock/infiniteBlock.module.mjs +1 -1
  136. package/dist/esm/common/input/input.mjs +1 -1
  137. package/dist/esm/common/input/input.mjs.map +1 -1
  138. package/dist/esm/common/input/input.module.mjs +1 -1
  139. package/dist/esm/common/input/input.module.mjs.map +1 -1
  140. package/dist/esm/common/input/input.types.mjs.map +1 -1
  141. package/dist/esm/common/inputDropdown/inputDropdown.mjs +1 -1
  142. package/dist/esm/common/inputDropdown/inputDropdown.mjs.map +1 -1
  143. package/dist/esm/common/inputDropdown/inputDropdown.module.mjs +1 -1
  144. package/dist/esm/common/inputDropdown/inputDropdown.module.mjs.map +1 -1
  145. package/dist/esm/common/interactableDiv/interactableDiv.mjs +1 -1
  146. package/dist/esm/common/interactableDiv/interactableDiv.mjs.map +1 -1
  147. package/dist/esm/common/interactableDiv/interactableDiv.module.mjs +1 -1
  148. package/dist/esm/common/kanbanBoard/KanbanBoard.mjs +1 -1
  149. package/dist/esm/common/kanbanBoard/KanbanBoard.mjs.map +1 -1
  150. package/dist/esm/common/kanbanBoard/KanbanColumn.mjs +1 -1
  151. package/dist/esm/common/kanbanBoard/KanbanColumn.mjs.map +1 -1
  152. package/dist/esm/common/kanbanBoard/KanbanItem.mjs.map +1 -1
  153. package/dist/esm/common/kanbanBoard/kanbanBoard.module.mjs +1 -1
  154. package/dist/esm/common/kanbanBoard/kanbanBoard.module.mjs.map +1 -1
  155. package/dist/esm/common/kanbanBoard/kanbanBoard.utils.mjs +1 -1
  156. package/dist/esm/common/kanbanBoard/kanbanBoard.utils.mjs.map +1 -1
  157. package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.mjs.map +1 -1
  158. package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.module.mjs +1 -1
  159. package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.module.mjs.map +1 -1
  160. package/dist/esm/common/klipyPicker/components/gifView/gifView.mjs.map +1 -1
  161. package/dist/esm/common/klipyPicker/components/gifView/gifView.module.mjs +1 -1
  162. package/dist/esm/common/klipyPicker/components/gifView/gifView.module.mjs.map +1 -1
  163. package/dist/esm/common/klipyPicker/klipyPicker.mjs.map +1 -1
  164. package/dist/esm/common/klipyPicker/klipyPicker.module.mjs +1 -1
  165. package/dist/esm/common/loading/iconLoading/iconLoading.mjs.map +1 -1
  166. package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs +1 -1
  167. package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs.map +1 -1
  168. package/dist/esm/common/loading/spinnerLoading/spinnerLoading.mjs.map +1 -1
  169. package/dist/esm/common/loading/spinnerLoading/spinnerLoading.module.mjs +1 -1
  170. package/dist/esm/common/modal/modal.mjs.map +1 -1
  171. package/dist/esm/common/modal/modal.module.mjs +1 -1
  172. package/dist/esm/common/modal/modal.module.mjs.map +1 -1
  173. package/dist/esm/common/multiSelect/multiSelect.mjs +1 -1
  174. package/dist/esm/common/multiSelect/multiSelect.mjs.map +1 -1
  175. package/dist/esm/common/multiSelect/multiSelect.module.mjs +1 -1
  176. package/dist/esm/common/multiSelect/multiSelect.module.mjs.map +1 -1
  177. package/dist/esm/common/numberInput/numberInput.mjs +1 -1
  178. package/dist/esm/common/numberInput/numberInput.mjs.map +1 -1
  179. package/dist/esm/common/numberInput/numberInput.module.mjs +1 -1
  180. package/dist/esm/common/numberInput/numberInput.module.mjs.map +1 -1
  181. package/dist/esm/common/numberInput/useStepRepeat.mjs +1 -1
  182. package/dist/esm/common/numberInput/useStepRepeat.mjs.map +1 -1
  183. package/dist/esm/common/optionPicker/optionPicker.mjs +1 -1
  184. package/dist/esm/common/optionPicker/optionPicker.mjs.map +1 -1
  185. package/dist/esm/common/optionPicker/optionPicker.module.mjs +1 -1
  186. package/dist/esm/common/optionPicker/optionPicker.module.mjs.map +1 -1
  187. package/dist/esm/common/otpInput/otpInput.mjs.map +1 -1
  188. package/dist/esm/common/otpInput/otpInput.module.mjs +1 -1
  189. package/dist/esm/common/otpInput/otpInput.module.mjs.map +1 -1
  190. package/dist/esm/common/overscroll/overscroll.mjs.map +1 -1
  191. package/dist/esm/common/overscroll/overscroll.module.mjs +1 -1
  192. package/dist/esm/common/pagination/pagination.mjs.map +1 -1
  193. package/dist/esm/common/pagination/pagination.module.mjs +1 -1
  194. package/dist/esm/common/pagination/pagination.module.mjs.map +1 -1
  195. package/dist/esm/common/planCanvas/planCanvas.mjs +1 -1
  196. package/dist/esm/common/planCanvas/planCanvas.mjs.map +1 -1
  197. package/dist/esm/common/planCanvas/planCanvas.module.mjs +1 -1
  198. package/dist/esm/common/planCanvas/planCanvas.module.mjs.map +1 -1
  199. package/dist/esm/common/popover/popover.mjs +1 -1
  200. package/dist/esm/common/popover/popover.mjs.map +1 -1
  201. package/dist/esm/common/popover/popover.module.mjs +1 -1
  202. package/dist/esm/common/popover/popover.module.mjs.map +1 -1
  203. package/dist/esm/common/popover/usePopoverPosition.mjs.map +1 -1
  204. package/dist/esm/common/progressBar/progressBar.mjs +1 -1
  205. package/dist/esm/common/progressBar/progressBar.mjs.map +1 -1
  206. package/dist/esm/common/progressBar/progressBar.module.mjs +1 -1
  207. package/dist/esm/common/progressBar/progressBar.module.mjs.map +1 -1
  208. package/dist/esm/common/radioGroup/radioGroup.mjs +1 -1
  209. package/dist/esm/common/radioGroup/radioGroup.mjs.map +1 -1
  210. package/dist/esm/common/radioGroup/radioGroup.module.mjs +1 -1
  211. package/dist/esm/common/radioGroup/radioGroup.module.mjs.map +1 -1
  212. package/dist/esm/common/rating/rating.mjs +1 -1
  213. package/dist/esm/common/rating/rating.mjs.map +1 -1
  214. package/dist/esm/common/rating/rating.module.mjs +1 -1
  215. package/dist/esm/common/revealLens/revealLens.mjs.map +1 -1
  216. package/dist/esm/common/revealLens/revealLens.module.mjs +1 -1
  217. package/dist/esm/common/revealLens/revealLens.module.mjs.map +1 -1
  218. package/dist/esm/common/ripple/ripple.mjs.map +1 -1
  219. package/dist/esm/common/ripple/ripple.module.mjs +1 -1
  220. package/dist/esm/common/ripple/ripple.module.mjs.map +1 -1
  221. package/dist/esm/common/roomDrawer/roomDrawer.mjs +1 -1
  222. package/dist/esm/common/roomDrawer/roomDrawer.mjs.map +1 -1
  223. package/dist/esm/common/roomDrawer/roomDrawer.module.mjs +1 -1
  224. package/dist/esm/common/roomDrawer/roomDrawer.module.mjs.map +1 -1
  225. package/dist/esm/common/roomDrawer/usePlanHistory.mjs.map +1 -1
  226. package/dist/esm/common/roomViewer/roomViewer.mjs +1 -1
  227. package/dist/esm/common/roomViewer/roomViewer.mjs.map +1 -1
  228. package/dist/esm/common/roomViewer/roomViewer.module.mjs +1 -1
  229. package/dist/esm/common/scrollbarProvider/scrollbarProvider.mjs.map +1 -1
  230. package/dist/esm/common/scrollbarProvider/scrollbarProvider.module.mjs +1 -1
  231. package/dist/esm/common/scrollbarProvider/scrollbarProvider.module.mjs.map +1 -1
  232. package/dist/esm/common/searchInput/searchInput.mjs.map +1 -1
  233. package/dist/esm/common/searchInput/searchInput.module.mjs +1 -1
  234. package/dist/esm/common/sectionHeader/sectionHeader.mjs.map +1 -1
  235. package/dist/esm/common/sectionHeader/sectionHeader.module.mjs +1 -1
  236. package/dist/esm/common/sectionHeader/sectionHeader.module.mjs.map +1 -1
  237. package/dist/esm/common/skeleton/skeleton.mjs.map +1 -1
  238. package/dist/esm/common/skeleton/skeleton.module.mjs +1 -1
  239. package/dist/esm/common/slider/slider.mjs +1 -1
  240. package/dist/esm/common/slider/slider.mjs.map +1 -1
  241. package/dist/esm/common/slider/slider.module.mjs +1 -1
  242. package/dist/esm/common/slider/slider.module.mjs.map +1 -1
  243. package/dist/esm/common/splitButton/splitButton.mjs.map +1 -1
  244. package/dist/esm/common/splitButton/splitButton.module.mjs +1 -1
  245. package/dist/esm/common/stepper/stepper.mjs.map +1 -1
  246. package/dist/esm/common/stepper/stepper.module.mjs +1 -1
  247. package/dist/esm/common/stepper/stepper.module.mjs.map +1 -1
  248. package/dist/esm/common/sticky/sticky.mjs.map +1 -1
  249. package/dist/esm/common/sticky/sticky.module.mjs +1 -1
  250. package/dist/esm/common/sticky/stickyStack.mjs.map +1 -1
  251. package/dist/esm/common/styles/sheet.module.mjs +1 -1
  252. package/dist/esm/common/styles/sheet.module.mjs.map +1 -1
  253. package/dist/esm/common/switch/switch.mjs.map +1 -1
  254. package/dist/esm/common/switch/switch.module.mjs +1 -1
  255. package/dist/esm/common/tabHeader/tabHeader.mjs.map +1 -1
  256. package/dist/esm/common/tabHeader/tabHeader.module.mjs +1 -1
  257. package/dist/esm/common/tabHeader/tabHeader.module.mjs.map +1 -1
  258. package/dist/esm/common/themeProvider/defaultTheme.mjs.map +1 -1
  259. package/dist/esm/common/themeProvider/theme.module.mjs +1 -1
  260. package/dist/esm/common/themeProvider/themeProvider.mjs +1 -1
  261. package/dist/esm/common/themeProvider/themeProvider.mjs.map +1 -1
  262. package/dist/esm/common/themeProvider/useTheme.mjs.map +1 -1
  263. package/dist/esm/common/tilt/tilt.mjs.map +1 -1
  264. package/dist/esm/common/tilt/tilt.module.mjs +1 -1
  265. package/dist/esm/common/tiltGroup/tiltGroup.mjs.map +1 -1
  266. package/dist/esm/common/timeInput/components/clockDial/clockDial.mjs +1 -1
  267. package/dist/esm/common/timeInput/components/clockDial/clockDial.mjs.map +1 -1
  268. package/dist/esm/common/timeInput/components/clockDial/clockDial.module.mjs +1 -1
  269. package/dist/esm/common/timeInput/components/clockDial/clockDial.module.mjs.map +1 -1
  270. package/dist/esm/common/timeInput/timeFunctions.mjs +1 -1
  271. package/dist/esm/common/timeInput/timeFunctions.mjs.map +1 -1
  272. package/dist/esm/common/timeInput/timeInput.mjs +1 -1
  273. package/dist/esm/common/timeInput/timeInput.mjs.map +1 -1
  274. package/dist/esm/common/timeInput/timeInput.module.mjs +1 -1
  275. package/dist/esm/common/timeInput/timeInput.module.mjs.map +1 -1
  276. package/dist/esm/common/timeline/timeline.mjs.map +1 -1
  277. package/dist/esm/common/timeline/timeline.module.mjs +1 -1
  278. package/dist/esm/common/timeline/timeline.module.mjs.map +1 -1
  279. package/dist/esm/common/timer/timer.chime.mjs.map +1 -1
  280. package/dist/esm/common/timer/timer.mjs +1 -1
  281. package/dist/esm/common/timer/timer.mjs.map +1 -1
  282. package/dist/esm/common/timer/timer.module.mjs +1 -1
  283. package/dist/esm/common/timer/timer.module.mjs.map +1 -1
  284. package/dist/esm/common/toast/toast.mjs.map +1 -1
  285. package/dist/esm/common/toast/toast.module.mjs +1 -1
  286. package/dist/esm/common/toast/toast.module.mjs.map +1 -1
  287. package/dist/esm/common/toast/toastProvider.mjs.map +1 -1
  288. package/dist/esm/common/tooltip/tooltip.mjs.map +1 -1
  289. package/dist/esm/common/tooltip/tooltip.module.mjs +1 -1
  290. package/dist/esm/common/tooltip/tooltip.module.mjs.map +1 -1
  291. package/dist/esm/common/tree/flattenTree.mjs.map +1 -1
  292. package/dist/esm/common/tree/tree.mjs +1 -1
  293. package/dist/esm/common/tree/tree.mjs.map +1 -1
  294. package/dist/esm/common/tree/tree.module.mjs +1 -1
  295. package/dist/esm/common/utils/activationKey.mjs +2 -0
  296. package/dist/esm/common/utils/activationKey.mjs.map +1 -0
  297. package/dist/esm/common/utils/renderIcon.mjs +1 -1
  298. package/dist/esm/common/utils/renderIcon.mjs.map +1 -1
  299. package/dist/esm/common/virtualList/useColumns.mjs +1 -1
  300. package/dist/esm/common/virtualList/useColumns.mjs.map +1 -1
  301. package/dist/esm/common/virtualList/useRowDrag.mjs +1 -1
  302. package/dist/esm/common/virtualList/useRowDrag.mjs.map +1 -1
  303. package/dist/esm/common/virtualList/useSelection.mjs.map +1 -1
  304. package/dist/esm/common/virtualList/useVirtualWindow.mjs +1 -1
  305. package/dist/esm/common/virtualList/useVirtualWindow.mjs.map +1 -1
  306. package/dist/esm/common/virtualList/virtualList.mjs.map +1 -1
  307. package/dist/esm/common/virtualList/virtualList.module.mjs +1 -1
  308. package/dist/esm/common/virtualList/virtualList.module.mjs.map +1 -1
  309. package/dist/esm/common/virtualList/virtualList.utils.mjs.map +1 -1
  310. package/dist/esm/common/virtualList/virtualRow.mjs +1 -1
  311. package/dist/esm/common/virtualList/virtualRow.mjs.map +1 -1
  312. package/dist/esm/common/wizard/wizard.mjs +1 -1
  313. package/dist/esm/common/wizard/wizard.mjs.map +1 -1
  314. package/dist/esm/common/wizard/wizard.module.mjs +1 -1
  315. package/dist/esm/services/formValidation/FormValidatorGroupWithForm.mjs.map +1 -1
  316. package/dist/esm/services/formValidation/index.mjs +1 -1
  317. package/dist/esm/services/formValidation/useFormValidatorGroup.mjs.map +1 -1
  318. package/dist/esm/services/formValidation/validatableComponent.mjs.map +1 -1
  319. package/dist/esm/services/klipy.mjs.map +1 -1
  320. package/dist/esm/services/localization.mjs.map +1 -1
  321. package/dist/index.cjs +3 -3
  322. package/dist/index.cjs.map +1 -1
  323. package/dist/style.css +1 -1
  324. package/dist/types/{package/common → common}/actionButtons/actionButtons.d.ts +1 -1
  325. package/dist/types/{package/common → common}/animatedIcon/animatedIcon.d.ts +1 -1
  326. package/dist/types/common/card/Card.d.ts +4 -0
  327. package/dist/types/{package/common → common}/card/CardActions.d.ts +2 -1
  328. package/dist/types/common/card/CardContent.d.ts +4 -0
  329. package/dist/types/{package/common → common}/card/CardHeader.d.ts +2 -1
  330. package/dist/types/common/card/CardMedia.d.ts +4 -0
  331. package/dist/types/common/carousel/carousel.d.ts +4 -0
  332. package/dist/types/common/chip/chip.d.ts +4 -0
  333. package/dist/types/{package/common → common}/configProvider/configProvider.d.ts +1 -1
  334. package/dist/types/{package/common → common}/datePicker/components/datePickerMonth/datePickerMonth.d.ts +1 -1
  335. package/dist/types/{package/common → common}/datePicker/datePicker.d.ts +1 -1
  336. package/dist/types/{package/common → common}/drawer/drawer.d.ts +1 -1
  337. package/dist/types/{package/common → common}/dropZone/dropZone.d.ts +2 -1
  338. package/dist/types/common/dropdown/dropdown.d.ts +4 -0
  339. package/dist/types/{package/common → common}/fab/components/fabBase/fabBase.d.ts +1 -1
  340. package/dist/types/{package/common → common}/fab/fab.d.ts +1 -1
  341. package/dist/types/{package/common → common}/floatingMenu/floatingMenu.d.ts +1 -1
  342. package/dist/types/{package/common → common}/floatingMenu/useFloatingPosition.d.ts +1 -1
  343. package/dist/types/{package/common → common}/hooks/useOverlay.d.ts +1 -1
  344. package/dist/types/{package/common → common}/iconPicker/iconPicker.d.ts +2 -1
  345. package/dist/types/{package/common → common}/idleManager/idleManager.d.ts +1 -1
  346. package/dist/types/{package/common → common}/infiniteBlock/infiniteBlock.d.ts +2 -1
  347. package/dist/types/common/input/input.d.ts +4 -0
  348. package/dist/types/{package/common → common}/inputDropdown/inputDropdown.d.ts +2 -1
  349. package/dist/types/{package/common → common}/kanbanBoard/KanbanBoard.d.ts +1 -1
  350. package/dist/types/{package/common → common}/kanbanBoard/KanbanColumn.d.ts +1 -1
  351. package/dist/types/{package/common → common}/kanbanBoard/KanbanItem.d.ts +1 -1
  352. package/dist/types/{package/common → common}/loading/iconLoading/iconLoading.d.ts +2 -1
  353. package/dist/types/common/modal/modal.d.ts +3 -0
  354. package/dist/types/{package/common → common}/overscroll/overscroll.d.ts +1 -1
  355. package/dist/types/common/popover/popover.d.ts +3 -0
  356. package/dist/types/{package/common → common}/scrollbarProvider/scrollbarProvider.d.ts +1 -1
  357. package/dist/types/{package/common → common}/sheetBackdrop/sheetBackdrop.d.ts +1 -1
  358. package/dist/types/common/slider/slider.d.ts +3 -0
  359. package/dist/types/{package/common → common}/slider/slider.types.d.ts +35 -10
  360. package/dist/types/{package/common → common}/splitButton/splitButton.d.ts +1 -1
  361. package/dist/types/{package/common → common}/stepper/stepper.d.ts +2 -1
  362. package/dist/types/{package/common → common}/sticky/sticky.d.ts +2 -1
  363. package/dist/types/{package/common → common}/tabHeader/tabHeader.d.ts +2 -1
  364. package/dist/types/common/textarea/textarea.d.ts +3 -0
  365. package/dist/types/{package/common → common}/themeProvider/theme.types.d.ts +30 -0
  366. package/dist/types/{package/common → common}/themeProvider/themeProvider.d.ts +1 -1
  367. package/dist/types/{package/common → common}/timeInput/components/clockDial/clockDial.d.ts +2 -1
  368. package/dist/types/{package/common → common}/timeInput/timeInput.d.ts +2 -1
  369. package/dist/types/{package/common → common}/timeline/timeline.d.ts +2 -1
  370. package/dist/types/{package/common → common}/toast/index.d.ts +1 -1
  371. package/dist/types/{package/common → common}/toast/toast.d.ts +2 -1
  372. package/dist/types/{package/common → common}/toast/toastProvider.d.ts +2 -2
  373. package/dist/types/{package/common → common}/tooltip/tooltip.d.ts +2 -1
  374. package/dist/types/common/utils/activationKey.d.ts +9 -0
  375. package/dist/types/{package/common → common}/virtualList/virtualRow.d.ts +1 -1
  376. package/dist/types/{package/common → common}/wizard/wizard.d.ts +2 -1
  377. package/dist/types/{package/services → services}/formValidation/index.d.ts +1 -1
  378. package/docs/Flip.md +1 -1
  379. package/docs/RoomDrawer.md +13 -5
  380. package/docs/RoomViewer.md +4 -0
  381. package/docs/Slider.md +34 -4
  382. package/package.json +73 -69
  383. package/dist/types/package/common/card/Card.d.ts +0 -3
  384. package/dist/types/package/common/card/CardContent.d.ts +0 -3
  385. package/dist/types/package/common/card/CardMedia.d.ts +0 -3
  386. package/dist/types/package/common/carousel/carousel.d.ts +0 -3
  387. package/dist/types/package/common/chip/chip.d.ts +0 -3
  388. package/dist/types/package/common/dropdown/dropdown.d.ts +0 -3
  389. package/dist/types/package/common/input/input.d.ts +0 -3
  390. package/dist/types/package/common/modal/modal.d.ts +0 -3
  391. package/dist/types/package/common/popover/popover.d.ts +0 -3
  392. package/dist/types/package/common/slider/slider.d.ts +0 -3
  393. package/dist/types/package/common/textarea/textarea.d.ts +0 -2
  394. /package/dist/types/{package/common → common}/accordion/accordion.d.ts +0 -0
  395. /package/dist/types/{package/common → common}/accordion/accordion.types.d.ts +0 -0
  396. /package/dist/types/{package/common → common}/accordion/index.d.ts +0 -0
  397. /package/dist/types/{package/common → common}/actionButtons/actionButtons.types.d.ts +0 -0
  398. /package/dist/types/{package/common → common}/actionButtons/index.d.ts +0 -0
  399. /package/dist/types/{package/common → common}/actionIcon/actionIcon.d.ts +0 -0
  400. /package/dist/types/{package/common → common}/actionIcon/actionIcon.types.d.ts +0 -0
  401. /package/dist/types/{package/common → common}/actionIcon/index.d.ts +0 -0
  402. /package/dist/types/{package/common → common}/alert/alert.d.ts +0 -0
  403. /package/dist/types/{package/common → common}/alert/alert.types.d.ts +0 -0
  404. /package/dist/types/{package/common → common}/alert/index.d.ts +0 -0
  405. /package/dist/types/{package/common → common}/animatedIcon/animatedIcon.types.d.ts +0 -0
  406. /package/dist/types/{package/common → common}/animatedIcon/index.d.ts +0 -0
  407. /package/dist/types/{package/common → common}/animatedLogo/animatedLogo.d.ts +0 -0
  408. /package/dist/types/{package/common → common}/animatedLogo/animatedLogo.types.d.ts +0 -0
  409. /package/dist/types/{package/common → common}/animatedLogo/index.d.ts +0 -0
  410. /package/dist/types/{package/common → common}/animatedText/animatedText.d.ts +0 -0
  411. /package/dist/types/{package/common → common}/animatedText/animatedText.types.d.ts +0 -0
  412. /package/dist/types/{package/common → common}/animatedText/index.d.ts +0 -0
  413. /package/dist/types/{package/common → common}/avatar/avatar.d.ts +0 -0
  414. /package/dist/types/{package/common → common}/avatar/avatar.types.d.ts +0 -0
  415. /package/dist/types/{package/common → common}/avatar/avatarGroup.d.ts +0 -0
  416. /package/dist/types/{package/common → common}/avatar/index.d.ts +0 -0
  417. /package/dist/types/{package/common → common}/badge/badge.d.ts +0 -0
  418. /package/dist/types/{package/common → common}/badge/badge.types.d.ts +0 -0
  419. /package/dist/types/{package/common → common}/badge/index.d.ts +0 -0
  420. /package/dist/types/{package/common → common}/bodyEnd/bodyEnd.d.ts +0 -0
  421. /package/dist/types/{package/common → common}/bodyEnd/bodyEnd.types.d.ts +0 -0
  422. /package/dist/types/{package/common → common}/bodyEnd/index.d.ts +0 -0
  423. /package/dist/types/{package/common → common}/breadcrumb/breadcrumb.d.ts +0 -0
  424. /package/dist/types/{package/common → common}/breadcrumb/breadcrumb.types.d.ts +0 -0
  425. /package/dist/types/{package/common → common}/breadcrumb/index.d.ts +0 -0
  426. /package/dist/types/{package/common → common}/button/button.d.ts +0 -0
  427. /package/dist/types/{package/common → common}/button/button.types.d.ts +0 -0
  428. /package/dist/types/{package/common → common}/button/index.d.ts +0 -0
  429. /package/dist/types/{package/common → common}/buttonGroup/buttonGroup.d.ts +0 -0
  430. /package/dist/types/{package/common → common}/buttonGroup/buttonGroup.types.d.ts +0 -0
  431. /package/dist/types/{package/common → common}/buttonGroup/index.d.ts +0 -0
  432. /package/dist/types/{package/common → common}/card/card.types.d.ts +0 -0
  433. /package/dist/types/{package/common → common}/card/index.d.ts +0 -0
  434. /package/dist/types/{package/common → common}/carousel/carousel.types.d.ts +0 -0
  435. /package/dist/types/{package/common → common}/carousel/index.d.ts +0 -0
  436. /package/dist/types/{package/common → common}/checkbox/checkbox.d.ts +0 -0
  437. /package/dist/types/{package/common → common}/checkbox/checkbox.types.d.ts +0 -0
  438. /package/dist/types/{package/common → common}/checkbox/index.d.ts +0 -0
  439. /package/dist/types/{package/common → common}/chip/chip.types.d.ts +0 -0
  440. /package/dist/types/{package/common → common}/chip/chipContainer.d.ts +0 -0
  441. /package/dist/types/{package/common → common}/chip/index.d.ts +0 -0
  442. /package/dist/types/{package/common → common}/colorPicker/colorPicker.d.ts +0 -0
  443. /package/dist/types/{package/common → common}/colorPicker/colorPicker.types.d.ts +0 -0
  444. /package/dist/types/{package/common → common}/colorPicker/index.d.ts +0 -0
  445. /package/dist/types/{package/common → common}/configProvider/configProvider.types.d.ts +0 -0
  446. /package/dist/types/{package/common → common}/configProvider/index.d.ts +0 -0
  447. /package/dist/types/{package/common → common}/configProvider/useComponentDefaults.d.ts +0 -0
  448. /package/dist/types/{package/common → common}/configProvider/usePresentationDefault.d.ts +0 -0
  449. /package/dist/types/{package/common → common}/confirmModal/confirmModal.d.ts +0 -0
  450. /package/dist/types/{package/common → common}/confirmModal/confirmModal.types.d.ts +0 -0
  451. /package/dist/types/{package/common → common}/confirmModal/index.d.ts +0 -0
  452. /package/dist/types/{package/common → common}/datePicker/components/datePickerMonth/index.d.ts +0 -0
  453. /package/dist/types/{package/common → common}/datePicker/dateFunctions.d.ts +0 -0
  454. /package/dist/types/{package/common → common}/datePicker/index.d.ts +0 -0
  455. /package/dist/types/{package/common → common}/divider/divider.d.ts +0 -0
  456. /package/dist/types/{package/common → common}/divider/divider.types.d.ts +0 -0
  457. /package/dist/types/{package/common → common}/divider/index.d.ts +0 -0
  458. /package/dist/types/{package/common → common}/drawer/drawer.types.d.ts +0 -0
  459. /package/dist/types/{package/common → common}/drawer/index.d.ts +0 -0
  460. /package/dist/types/{package/common → common}/dropZone/dropZone.types.d.ts +0 -0
  461. /package/dist/types/{package/common → common}/dropZone/index.d.ts +0 -0
  462. /package/dist/types/{package/common → common}/dropdown/dropdown.types.d.ts +0 -0
  463. /package/dist/types/{package/common → common}/dropdown/index.d.ts +0 -0
  464. /package/dist/types/{package/common → common}/emptyState/emptyState.d.ts +0 -0
  465. /package/dist/types/{package/common → common}/emptyState/emptyState.types.d.ts +0 -0
  466. /package/dist/types/{package/common → common}/emptyState/index.d.ts +0 -0
  467. /package/dist/types/{package/common → common}/errorBoundary/errorBoundary.d.ts +0 -0
  468. /package/dist/types/{package/common → common}/errorBoundary/errorBoundary.types.d.ts +0 -0
  469. /package/dist/types/{package/common → common}/errorBoundary/index.d.ts +0 -0
  470. /package/dist/types/{package/common → common}/fab/components/fabBase/fabBase.types.d.ts +0 -0
  471. /package/dist/types/{package/common → common}/fab/components/fabBase/index.d.ts +0 -0
  472. /package/dist/types/{package/common → common}/fab/fab.types.d.ts +0 -0
  473. /package/dist/types/{package/common → common}/fab/index.d.ts +0 -0
  474. /package/dist/types/{package/common → common}/flip/flip.d.ts +0 -0
  475. /package/dist/types/{package/common → common}/flip/flip.types.d.ts +0 -0
  476. /package/dist/types/{package/common → common}/flip/index.d.ts +0 -0
  477. /package/dist/types/{package/common → common}/floatingMenu/floatingMenu.types.d.ts +0 -0
  478. /package/dist/types/{package/common → common}/floatingMenu/index.d.ts +0 -0
  479. /package/dist/types/{package/common → common}/floorPlan/floorPlan.faces.d.ts +0 -0
  480. /package/dist/types/{package/common → common}/floorPlan/floorPlan.fixtures.d.ts +0 -0
  481. /package/dist/types/{package/common → common}/floorPlan/floorPlan.geometry.d.ts +0 -0
  482. /package/dist/types/{package/common → common}/floorPlan/floorPlan.graph.d.ts +0 -0
  483. /package/dist/types/{package/common → common}/floorPlan/floorPlan.hit.d.ts +0 -0
  484. /package/dist/types/{package/common → common}/floorPlan/floorPlan.json.d.ts +0 -0
  485. /package/dist/types/{package/common → common}/floorPlan/floorPlan.mesh.d.ts +0 -0
  486. /package/dist/types/{package/common → common}/floorPlan/floorPlan.path.d.ts +0 -0
  487. /package/dist/types/{package/common → common}/floorPlan/floorPlan.plan.d.ts +0 -0
  488. /package/dist/types/{package/common → common}/floorPlan/floorPlan.rooms.d.ts +0 -0
  489. /package/dist/types/{package/common → common}/floorPlan/floorPlan.snap.d.ts +0 -0
  490. /package/dist/types/{package/common → common}/floorPlan/floorPlan.triangulate.d.ts +0 -0
  491. /package/dist/types/{package/common → common}/floorPlan/floorPlan.types.d.ts +0 -0
  492. /package/dist/types/{package/common → common}/floorPlan/index.d.ts +0 -0
  493. /package/dist/types/{package/common → common}/floorPlan/legacySvg.d.ts +0 -0
  494. /package/dist/types/{package/common → common}/hooks/useAnchorTracking.d.ts +0 -0
  495. /package/dist/types/{package/common → common}/hooks/useCoarsePointer.d.ts +0 -0
  496. /package/dist/types/{package/common → common}/hooks/useFocusBoundary.d.ts +0 -0
  497. /package/dist/types/{package/common → common}/hooks/useMediaQuery.d.ts +0 -0
  498. /package/dist/types/{package/common → common}/hooks/useSheet.d.ts +0 -0
  499. /package/dist/types/{package/common → common}/hooks/useSwipeDismiss.d.ts +0 -0
  500. /package/dist/types/{package/common → common}/hooks/useVisualViewportSize.d.ts +0 -0
  501. /package/dist/types/{package/common → common}/iconPicker/iconPicker.types.d.ts +0 -0
  502. /package/dist/types/{package/common → common}/iconPicker/index.d.ts +0 -0
  503. /package/dist/types/{package/common → common}/idleManager/idleManager.types.d.ts +0 -0
  504. /package/dist/types/{package/common → common}/idleManager/index.d.ts +0 -0
  505. /package/dist/types/{package/common → common}/infiniteBlock/index.d.ts +0 -0
  506. /package/dist/types/{package/common → common}/infiniteBlock/infiniteBlock.types.d.ts +0 -0
  507. /package/dist/types/{package/common → common}/input/index.d.ts +0 -0
  508. /package/dist/types/{package/common → common}/input/input.types.d.ts +0 -0
  509. /package/dist/types/{package/common → common}/inputDropdown/index.d.ts +0 -0
  510. /package/dist/types/{package/common → common}/inputDropdown/inputDropdown.types.d.ts +0 -0
  511. /package/dist/types/{package/common → common}/interactableDiv/index.d.ts +0 -0
  512. /package/dist/types/{package/common → common}/interactableDiv/interactableDiv.d.ts +0 -0
  513. /package/dist/types/{package/common → common}/kanbanBoard/index.d.ts +0 -0
  514. /package/dist/types/{package/common → common}/kanbanBoard/kanbanBoard.types.d.ts +0 -0
  515. /package/dist/types/{package/common → common}/kanbanBoard/kanbanBoard.utils.d.ts +0 -0
  516. /package/dist/types/{package/common → common}/klipyPicker/components/gifPreview/gifPreview.d.ts +0 -0
  517. /package/dist/types/{package/common → common}/klipyPicker/components/gifPreview/gifPreview.types.d.ts +0 -0
  518. /package/dist/types/{package/common → common}/klipyPicker/components/gifPreview/index.d.ts +0 -0
  519. /package/dist/types/{package/common → common}/klipyPicker/components/gifView/gifView.d.ts +0 -0
  520. /package/dist/types/{package/common → common}/klipyPicker/components/gifView/gifView.types.d.ts +0 -0
  521. /package/dist/types/{package/common → common}/klipyPicker/components/gifView/index.d.ts +0 -0
  522. /package/dist/types/{package/common → common}/klipyPicker/index.d.ts +0 -0
  523. /package/dist/types/{package/common → common}/klipyPicker/klipyPicker.d.ts +0 -0
  524. /package/dist/types/{package/common → common}/klipyPicker/klipyPicker.types.d.ts +0 -0
  525. /package/dist/types/{package/common → common}/loading/iconLoading/index.d.ts +0 -0
  526. /package/dist/types/{package/common → common}/loading/index.d.ts +0 -0
  527. /package/dist/types/{package/common → common}/loading/spinnerLoading/index.d.ts +0 -0
  528. /package/dist/types/{package/common → common}/loading/spinnerLoading/spinnerLoading.d.ts +0 -0
  529. /package/dist/types/{package/common → common}/modal/index.d.ts +0 -0
  530. /package/dist/types/{package/common → common}/modal/modal.types.d.ts +0 -0
  531. /package/dist/types/{package/common → common}/multiSelect/index.d.ts +0 -0
  532. /package/dist/types/{package/common → common}/multiSelect/multiSelect.d.ts +0 -0
  533. /package/dist/types/{package/common → common}/multiSelect/multiSelect.types.d.ts +0 -0
  534. /package/dist/types/{package/common → common}/numberInput/index.d.ts +0 -0
  535. /package/dist/types/{package/common → common}/numberInput/numberInput.d.ts +0 -0
  536. /package/dist/types/{package/common → common}/numberInput/numberInput.types.d.ts +0 -0
  537. /package/dist/types/{package/common → common}/numberInput/useStepRepeat.d.ts +0 -0
  538. /package/dist/types/{package/common → common}/optionPicker/index.d.ts +0 -0
  539. /package/dist/types/{package/common → common}/optionPicker/optionPicker.d.ts +0 -0
  540. /package/dist/types/{package/common → common}/optionPicker/optionPicker.types.d.ts +0 -0
  541. /package/dist/types/{package/common → common}/otpInput/index.d.ts +0 -0
  542. /package/dist/types/{package/common → common}/otpInput/otpInput.d.ts +0 -0
  543. /package/dist/types/{package/common → common}/otpInput/otpInput.types.d.ts +0 -0
  544. /package/dist/types/{package/common → common}/overscroll/index.d.ts +0 -0
  545. /package/dist/types/{package/common → common}/overscroll/overscroll.types.d.ts +0 -0
  546. /package/dist/types/{package/common → common}/pagination/index.d.ts +0 -0
  547. /package/dist/types/{package/common → common}/pagination/pagination.d.ts +0 -0
  548. /package/dist/types/{package/common → common}/pagination/pagination.types.d.ts +0 -0
  549. /package/dist/types/{package/common → common}/planCanvas/index.d.ts +0 -0
  550. /package/dist/types/{package/common → common}/planCanvas/planCanvas.d.ts +0 -0
  551. /package/dist/types/{package/common → common}/planCanvas/planCanvas.types.d.ts +0 -0
  552. /package/dist/types/{package/common → common}/popover/index.d.ts +0 -0
  553. /package/dist/types/{package/common → common}/popover/popover.types.d.ts +0 -0
  554. /package/dist/types/{package/common → common}/popover/usePopoverPosition.d.ts +0 -0
  555. /package/dist/types/{package/common → common}/progressBar/index.d.ts +0 -0
  556. /package/dist/types/{package/common → common}/progressBar/progressBar.d.ts +0 -0
  557. /package/dist/types/{package/common → common}/progressBar/progressBar.types.d.ts +0 -0
  558. /package/dist/types/{package/common → common}/radioGroup/index.d.ts +0 -0
  559. /package/dist/types/{package/common → common}/radioGroup/radioGroup.d.ts +0 -0
  560. /package/dist/types/{package/common → common}/radioGroup/radioGroup.types.d.ts +0 -0
  561. /package/dist/types/{package/common → common}/rating/index.d.ts +0 -0
  562. /package/dist/types/{package/common → common}/rating/rating.d.ts +0 -0
  563. /package/dist/types/{package/common → common}/rating/rating.types.d.ts +0 -0
  564. /package/dist/types/{package/common → common}/revealLens/index.d.ts +0 -0
  565. /package/dist/types/{package/common → common}/revealLens/revealLens.d.ts +0 -0
  566. /package/dist/types/{package/common → common}/revealLens/revealLens.types.d.ts +0 -0
  567. /package/dist/types/{package/common → common}/ripple/index.d.ts +0 -0
  568. /package/dist/types/{package/common → common}/ripple/ripple.d.ts +0 -0
  569. /package/dist/types/{package/common → common}/ripple/ripple.types.d.ts +0 -0
  570. /package/dist/types/{package/common → common}/roomDrawer/index.d.ts +0 -0
  571. /package/dist/types/{package/common → common}/roomDrawer/roomDrawer.d.ts +0 -0
  572. /package/dist/types/{package/common → common}/roomDrawer/roomDrawer.types.d.ts +0 -0
  573. /package/dist/types/{package/common → common}/roomDrawer/usePlanHistory.d.ts +0 -0
  574. /package/dist/types/{package/common → common}/roomViewer/index.d.ts +0 -0
  575. /package/dist/types/{package/common → common}/roomViewer/roomViewer.d.ts +0 -0
  576. /package/dist/types/{package/common → common}/roomViewer/roomViewer.types.d.ts +0 -0
  577. /package/dist/types/{package/common → common}/scrollbarProvider/index.d.ts +0 -0
  578. /package/dist/types/{package/common → common}/searchInput/index.d.ts +0 -0
  579. /package/dist/types/{package/common → common}/searchInput/searchInput.d.ts +0 -0
  580. /package/dist/types/{package/common → common}/searchInput/searchInput.types.d.ts +0 -0
  581. /package/dist/types/{package/common → common}/sectionHeader/index.d.ts +0 -0
  582. /package/dist/types/{package/common → common}/sectionHeader/sectionHeader.d.ts +0 -0
  583. /package/dist/types/{package/common → common}/sectionHeader/sectionHeader.types.d.ts +0 -0
  584. /package/dist/types/{package/common → common}/sheetBackdrop/index.d.ts +0 -0
  585. /package/dist/types/{package/common → common}/sheetBackdrop/sheetBackdrop.types.d.ts +0 -0
  586. /package/dist/types/{package/common → common}/skeleton/index.d.ts +0 -0
  587. /package/dist/types/{package/common → common}/skeleton/skeleton.d.ts +0 -0
  588. /package/dist/types/{package/common → common}/skeleton/skeleton.types.d.ts +0 -0
  589. /package/dist/types/{package/common → common}/slider/index.d.ts +0 -0
  590. /package/dist/types/{package/common → common}/splitButton/index.d.ts +0 -0
  591. /package/dist/types/{package/common → common}/splitButton/splitButton.types.d.ts +0 -0
  592. /package/dist/types/{package/common → common}/stepper/index.d.ts +0 -0
  593. /package/dist/types/{package/common → common}/stepper/stepper.types.d.ts +0 -0
  594. /package/dist/types/{package/common → common}/sticky/index.d.ts +0 -0
  595. /package/dist/types/{package/common → common}/sticky/sticky.types.d.ts +0 -0
  596. /package/dist/types/{package/common → common}/sticky/stickyStack.d.ts +0 -0
  597. /package/dist/types/{package/common → common}/switch/index.d.ts +0 -0
  598. /package/dist/types/{package/common → common}/switch/switch.d.ts +0 -0
  599. /package/dist/types/{package/common → common}/switch/switch.types.d.ts +0 -0
  600. /package/dist/types/{package/common → common}/tabHeader/index.d.ts +0 -0
  601. /package/dist/types/{package/common → common}/tabHeader/tabHeader.types.d.ts +0 -0
  602. /package/dist/types/{package/common → common}/textarea/index.d.ts +0 -0
  603. /package/dist/types/{package/common → common}/textarea/textarea.types.d.ts +0 -0
  604. /package/dist/types/{package/common → common}/themeProvider/defaultTheme.d.ts +0 -0
  605. /package/dist/types/{package/common → common}/themeProvider/index.d.ts +0 -0
  606. /package/dist/types/{package/common → common}/themeProvider/useTheme.d.ts +0 -0
  607. /package/dist/types/{package/common → common}/tilt/index.d.ts +0 -0
  608. /package/dist/types/{package/common → common}/tilt/tilt.d.ts +0 -0
  609. /package/dist/types/{package/common → common}/tilt/tilt.types.d.ts +0 -0
  610. /package/dist/types/{package/common → common}/tilt/tiltMath.d.ts +0 -0
  611. /package/dist/types/{package/common → common}/tiltGroup/index.d.ts +0 -0
  612. /package/dist/types/{package/common → common}/tiltGroup/tiltGroup.d.ts +0 -0
  613. /package/dist/types/{package/common → common}/tiltGroup/tiltGroup.types.d.ts +0 -0
  614. /package/dist/types/{package/common → common}/timeInput/components/clockDial/clockDial.types.d.ts +0 -0
  615. /package/dist/types/{package/common → common}/timeInput/components/clockDial/index.d.ts +0 -0
  616. /package/dist/types/{package/common → common}/timeInput/index.d.ts +0 -0
  617. /package/dist/types/{package/common → common}/timeInput/timeFunctions.d.ts +0 -0
  618. /package/dist/types/{package/common → common}/timeInput/timeInput.types.d.ts +0 -0
  619. /package/dist/types/{package/common → common}/timeline/index.d.ts +0 -0
  620. /package/dist/types/{package/common → common}/timeline/timeline.types.d.ts +0 -0
  621. /package/dist/types/{package/common → common}/timer/index.d.ts +0 -0
  622. /package/dist/types/{package/common → common}/timer/timer.chime.d.ts +0 -0
  623. /package/dist/types/{package/common → common}/timer/timer.d.ts +0 -0
  624. /package/dist/types/{package/common → common}/timer/timer.types.d.ts +0 -0
  625. /package/dist/types/{package/common → common}/toast/toast.types.d.ts +0 -0
  626. /package/dist/types/{package/common → common}/toast/toastService.d.ts +0 -0
  627. /package/dist/types/{package/common → common}/tooltip/index.d.ts +0 -0
  628. /package/dist/types/{package/common → common}/tooltip/tooltip.types.d.ts +0 -0
  629. /package/dist/types/{package/common → common}/tree/flattenTree.d.ts +0 -0
  630. /package/dist/types/{package/common → common}/tree/index.d.ts +0 -0
  631. /package/dist/types/{package/common → common}/tree/tree.d.ts +0 -0
  632. /package/dist/types/{package/common → common}/tree/tree.types.d.ts +0 -0
  633. /package/dist/types/{package/common → common}/types/actions.types.d.ts +0 -0
  634. /package/dist/types/{package/common → common}/types/baseProps.types.d.ts +0 -0
  635. /package/dist/types/{package/common → common}/types/icon.types.d.ts +0 -0
  636. /package/dist/types/{package/common → common}/types/slots.types.d.ts +0 -0
  637. /package/dist/types/{package/common → common}/utils/renderIcon.d.ts +0 -0
  638. /package/dist/types/{package/common → common}/utils/scrollAncestors.d.ts +0 -0
  639. /package/dist/types/{package/common → common}/utils/visualViewport.d.ts +0 -0
  640. /package/dist/types/{package/common → common}/virtualList/index.d.ts +0 -0
  641. /package/dist/types/{package/common → common}/virtualList/useColumns.d.ts +0 -0
  642. /package/dist/types/{package/common → common}/virtualList/useRowDrag.d.ts +0 -0
  643. /package/dist/types/{package/common → common}/virtualList/useSelection.d.ts +0 -0
  644. /package/dist/types/{package/common → common}/virtualList/useVirtualWindow.d.ts +0 -0
  645. /package/dist/types/{package/common → common}/virtualList/virtualList.d.ts +0 -0
  646. /package/dist/types/{package/common → common}/virtualList/virtualList.types.d.ts +0 -0
  647. /package/dist/types/{package/common → common}/virtualList/virtualList.utils.d.ts +0 -0
  648. /package/dist/types/{package/common → common}/wizard/index.d.ts +0 -0
  649. /package/dist/types/{package/common → common}/wizard/wizard.types.d.ts +0 -0
  650. /package/dist/types/{package/hooks → hooks}/useWindowSize.d.ts +0 -0
  651. /package/dist/types/{package/index.d.ts → index.d.ts} +0 -0
  652. /package/dist/types/{package/services → services}/formValidation/FormValidatorGroupWithForm.d.ts +0 -0
  653. /package/dist/types/{package/services → services}/formValidation/useFormValidatorGroup.d.ts +0 -0
  654. /package/dist/types/{package/services → services}/formValidation/validatableComponent.d.ts +0 -0
  655. /package/dist/types/{package/services → services}/klipy.d.ts +0 -0
  656. /package/dist/types/{package/services → services}/localization.d.ts +0 -0
@@ -1,2 +1,2 @@
1
- import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import{renderIcon as t}from"../utils/renderIcon.mjs";import n from"../actionIcon/actionIcon.mjs";import r from"../hooks/useCoarsePointer.mjs";import i from"../input/input.mjs";import{OpeningKind as a,WallType as o}from"../floorPlan/floorPlan.types.mjs";import{pointToSegment as s}from"../floorPlan/floorPlan.geometry.mjs";import{DEFAULT_WALL_ATTRS as c,addOpening as l,addRect as ee,addWall as te,detachWall as ne,dissolveNode as re,mergeNodes as ie,moveNode as ae,removeOpening as oe,removeWall as se,splitWall as ce,updateOpening as le,weldShortWalls as ue}from"../floorPlan/floorPlan.graph.mjs";import{addFloor as de,duplicateFloor as fe,emptyFloorPlan as pe,floorBelow as me,floorBounds as he,floorIndex as ge,getFloor as _e,moveFloor as ve,removeFloor as ye,renameFloor as be,setFloor as xe,setFloorHeight as Se}from"../floorPlan/floorPlan.plan.mjs";import{commitDerivation as Ce,derivePlan as we}from"../floorPlan/floorPlan.rooms.mjs";import{HIT_PX as Te,HIT_PX_COARSE as Ee,hitTest as De,selectionsEqual as Oe,worldTolerances as u}from"../floorPlan/floorPlan.hit.mjs";import{SnapKind as d,clientToWorld as ke,resolveSnap as Ae}from"../floorPlan/floorPlan.snap.mjs";import{planFromJson as je,planToJson as Me}from"../floorPlan/floorPlan.json.mjs";import Ne from"../numberInput/index.mjs";import Pe from"../planCanvas/planCanvas.mjs";import{usePlanHistory as Fe}from"./usePlanHistory.mjs";import f from"./roomDrawer.module.mjs";import{forwardRef as Ie,useCallback as p,useEffect as Le,useImperativeHandle as Re,useMemo as ze,useRef as m,useState as h}from"react";import g from"classnames";import{faAngleDown as Be,faAngleUp as Ve,faArrowPointer as He,faArrowRotateLeft as Ue,faArrowRotateRight as We,faBorderAll as Ge,faClone as Ke,faDoorOpen as qe,faDownload as Je,faDraftingCompass as Ye,faExpand as Xe,faLayerGroup as Ze,faMagnet as Qe,faMagnifyingGlassMinus as $e,faMagnifyingGlassPlus as et,faMinus as tt,faPlus as nt,faRulerCombined as rt,faSquare as it,faTrash as at,faUpload as ot,faWindowMaximize as st}from"@fortawesome/free-solid-svg-icons";import{Fragment as ct,jsx as _,jsxs as v}from"react/jsx-runtime";var lt=[`select`,`wall`,`rect`,`door`,`window`,`archway`,`measure`],ut={v:`select`,w:`wall`,r:`rect`,d:`door`,n:`window`,a:`archway`,m:`measure`},dt={door:a.Door,window:a.Window,archway:a.Archway},ft={[a.Door]:`Door`,[a.Window]:`Window`,[a.Archway]:`Archway`,[a.Gap]:`Gap`},pt={[a.Door]:{width:900,sill:0,head:2100},[a.Window]:{width:1200,sill:900,head:2100},[a.Archway]:{width:1200,sill:0,head:2100},[a.Gap]:{width:1e3,sill:0,head:2500}},mt=1,ht=4,gt=[];function _t(e){return e>=1e3?`${(e/1e3).toFixed(2)} m`:`${Math.round(e)} mm`}function vt(e){let t=e/1e6;return`${t.toFixed(+(t<10))} m²`}function yt(e){let t=e*180/Math.PI;return t=(t%360+360)%360,t>180&&(t-=360),`${Math.abs(t)<.05?0:Math.round(t*10)/10}°`}var y=Ie(function(a,Ie){let{value:y,defaultValue:bt,onChange:b,onChangeEnd:xt,floorId:St,defaultFloorId:Ct,onFloorChange:wt,showFloorBar:Tt=!0,showUnderlay:Et=!0,tool:Dt,defaultTool:Ot=`select`,onToolChange:kt,tools:At=lt,selection:jt,defaultSelection:Mt,onSelectionChange:Nt,multiSelect:Pt=!0,onHoverChange:Ft,view:It,defaultView:Lt,onViewChange:Rt,minZoom:zt=.005,maxZoom:Bt=2,fitOnMount:Vt=!0,gridSize:x=100,showGrid:Ht=!0,snap:Ut=!0,angleLock:Wt=!1,constrainAngle:Gt=45,showSnapGuides:Kt=!0,wallThickness:qt=c.thickness,wallHeight:Jt,openingDefaults:Yt,showMeasurements:Xt=!0,formatLength:Zt=_t,formatArea:Qt=vt,showToolbar:$t=!0,showInspector:en=!0,showHint:tn=!0,showHistoryControls:nn=!0,showFileControls:rn=!0,fileName:an,onImport:on,historyMode:sn=`internal`,historyLimit:cn=50,onHistoryChange:ln,readOnly:un=!1,disabled:S=!1,canvasHeight:dn=`420px`,getRoomColor:fn,renderRoomLabel:pn,labels:C,icons:w,"aria-label":mn,className:hn,style:gn,classNames:T,styles:E,..._n}=e(`RoomDrawer`,a),vn=r(),D=vn?Ee:Te,yn=m(null),bn=m(null),xn=m(null),Sn=m(null),O=m({kind:`none`}),k=m(new Map),A=m(null),Cn=m(!1),wn=m(!1),Tn=m(!1),j=Fe(ze(()=>bt??y??pe(),[]),cn),En=y!==void 0,M=En?y:j.present;Le(()=>{if(!(!En||!y)){if(y===Sn.current){j.replace(y);return}j.commit(y,`external`)}},[y,En]);let[Dn,On]=h(Ct),kn=St??Dn??M.floors[0]?.id,N=ze(()=>_e(M,kn)??_e(M)??pe().floors[0],[M,kn]),[An,jn]=h(Et);Le(()=>jn(Et),[Et]);let Mn=ze(()=>An?me(M,N.id):null,[An,M,N.id]),Nn=p(e=>{e!==N.id&&(St===void 0&&On(e),wt?.(e))},[N.id,St,wt]),P=ze(()=>we(N),[N]).rooms,[Pn,Fn]=h(Ot),F=Dt??Pn,In=p(e=>{Dt===void 0&&Fn(e),kt?.(e)},[Dt,kt]),[Ln,Rn]=h(Mt??gt),I=jt===void 0?Ln:jt,L=m(I);L.current=I;let R=p(e=>{let t=e===null?gt:Array.isArray(e)?e:[e];L.current=t,jt===void 0&&Rn(t),Nt?.([...t])},[jt,Nt]),zn=p(e=>{let t=L.current,n=t.filter(t=>!(t.type===e.type&&t.id===e.id));R(n.length===t.length?[...t,e]:n)},[R]),z=I.length===1?I[0]:null,Bn=p(e=>{let t=new Set;for(let n of e)if(n.type===`node`)t.add(n.id);else if(n.type===`wall`){let e=N.walls[n.id];e&&(t.add(e.a),t.add(e.b))}else if(n.type===`room`){let e=P.find(e=>e.roomId===n.id);for(let n of e?.nodeIds??[])t.add(n)}return t},[N.walls,P]),Vn=ze(()=>Bn(I),[Bn,I]),[Hn,Un]=h(null),[Wn,Gn]=h(Lt??{x:0,y:0,zoom:.05}),B=It??Wn,V=p(e=>{It===void 0&&Gn(e),Rt?.(e)},[It,Rt]),[H,Kn]=h({width:800,height:420}),[U,qn]=h([]),[W,Jn]=h(null),[Yn,Xn]=h(Ut),[Zn,Qn]=h(Wt);Le(()=>Xn(Ut),[Ut]),Le(()=>Qn(Wt),[Wt]);let[$n,er]=h(Ht);Le(()=>er(Ht),[Ht]);let tr=m(null),[G,nr]=h(null),[K,rr]=h([]),ir=m(0),[ar,or]=h(null),sr=m(null),cr=p(e=>{let t=u(D,B.zoom);for(let n=K.length-1;n>=0;n--){let r=K[n];if(Math.hypot(e.x-r.a.x,e.y-r.a.y)<=t.node)return{id:r.id,end:`a`};if(Math.hypot(e.x-r.b.x,e.y-r.b.y)<=t.node)return{id:r.id,end:`b`}}for(let n=K.length-1;n>=0;n--){let r=K[n];if(s(e,r.a,r.b).dist<=t.wall)return{id:r.id}}return null},[K,D,B.zoom]),[lr,ur]=h(null),q=!un&&!S,dr=ze(()=>{if(U.length<2)return;let e=U[U.length-2],t=U[U.length-1];return Math.atan2(t.y-e.y,t.x-e.x)},[U]);Le(()=>{let e=bn.current;if(!e)return;let t=new ResizeObserver(()=>{let t=e.getBoundingClientRect();t.width>0&&t.height>0&&Kn({width:Math.round(t.width),height:Math.round(t.height)})});t.observe(e);let n=e.getBoundingClientRect();return n.width>0&&n.height>0&&Kn({width:Math.round(n.width),height:Math.round(n.height)}),()=>t.disconnect()},[]);let fr=p((e,t)=>ke(e,t,bn.current?.getBoundingClientRect()??{left:0,top:0},B),[B]),J=p(e=>({x:(e.x-B.x)*B.zoom,y:(e.y-B.y)*B.zoom}),[B]),Y=p((e,t,n,r,i)=>{let a=Yn!==wn.current,o=Zn!==Tn.current,s=Ae(e,{floor:N,pxToWorld:B.zoom>0?1/B.zoom:1,origin:t,referenceAngle:r,excludeNodeIds:n,excludeWallIds:i,options:{enabled:a?[d.Node,d.Intersection,d.Wall,d.Angle,d.Extension,d.Alignment,d.Grid]:[],gridSize:x,angleStepDeg:o?Gt:0,toleranceScreenPx:vn?16:10}});return tr.current=s,s},[N,B.zoom,Yn,Zn,x,Gt,vn]),pr=p(e=>{let t=Object.values(N.walls).filter(t=>t.a===e||t.b===e),n=new Set(t.map(e=>e.id)),r=N.nodes[e];if(!r)return{excludeWallIds:n};let i={x:r.x,y:r.y},a,o=t[0];if(o){let t=o.a===e?o.b:o.a,n=N.nodes[t];n&&(a=Math.atan2(n.y-r.y,n.x-r.x))}return{origin:i,referenceAngle:a,excludeWallIds:n}},[N]),mr=p((e={})=>{let t=e.padding??24,n=he(N);if(!n||n.width<=0||n.height<=0){V({x:-1e3,y:-1e3,zoom:.05});return}let r=Math.min((H.width-t*2)/n.width,(H.height-t*2)/n.height),i=Math.max(zt,Math.min(Bt,r));V({x:n.minX-(H.width/i-n.width)/2,y:n.minY-(H.height/i-n.height)/2,zoom:i})},[N,H.width,H.height,zt,Bt,V]),hr=m(!1);Le(()=>{!Vt||hr.current||Object.keys(N.nodes).length!==0&&(H.width<=1||(hr.current=!0,mr()))},[Vt,N,H.width,mr]);let gr=p((e,t,n,r=[],i={})=>{if(e===N)return M;let a=xe(M,e);Sn.current=a,n?i.push===!1?j.replace(a):j.commit(a,t,r):j.updateGesture(a);let o={reason:t,committed:n,targetIds:r};return b?.(a,o),n&&xt?.(a,o),a},[N,M,j,b,xt]),X=p((e,t,n=[],r={})=>{let i=Ce(ue(e).floor).floor;return gr(i,t,!0,n,r)},[gr]);Le(()=>{ln?.({canUndo:j.canUndo,canRedo:j.canRedo})},[j.canUndo,j.canRedo,ln]);let _r=ze(()=>z?.type===`room`?P.find(e=>e.roomId===z.id)??null:null,[z,P]),Z=z?.type===`wall`?N.walls[z.id]:void 0,vr=z?.type===`opening`?N.openings[z.id]:void 0,yr=ze(()=>{if(!Z)return null;let e=N.nodes[Z.a],t=N.nodes[Z.b];return!e||!t?null:{x:(e.x+t.x)/2,y:(e.y+t.y)/2}},[Z,N.nodes]),br=p(()=>{if(!q||!Z)return;let e=ce(N,Z.id,.5);e.result.wallIds&&(X(e.floor,`edit-wall`,[e.result.nodeId]),R({type:`node`,id:e.result.nodeId}))},[q,Z,N,X,R]),xr=p((e,t,n=new Set)=>{if(e.type===`wall`)return{floor:se(t,e.id).floor};if(e.type===`opening`)return{floor:oe(t,e.id).floor};if(e.type===`node`){let n=re(t,e.id,{force:!0});if(n.result)return{floor:n.floor,reselect:{type:`wall`,id:n.result.wallId}};let r=t;for(let n of Object.values(t.walls))(n.a===e.id||n.b===e.id)&&(r=se(r,n.id,{dissolveCollinear:!1}).floor);return{floor:r}}let r=P.find(t=>t.roomId===e.id);if(!r)return{floor:t};let i=new Set;for(let t of P)if(t.roomId!==e.id&&!(t.roomId&&n.has(t.roomId)))for(let e of t.wallIds)i.add(e);let a=t;for(let e of new Set(r.wallIds))i.has(e)||(a=se(a,e,{dissolveCollinear:!1}).floor);let o={...a.rooms};return delete o[e.id],{floor:{...a,rooms:o}}},[P]),Sr=p(()=>{let e=L.current;if(!q||e.length===0)return;let t={room:0,opening:1,wall:2,node:3},n=[...e].sort((e,n)=>t[e.type]-t[n.type]),r=new Set(n.filter(e=>e.type===`room`).map(e=>e.id)),i=N,a;for(let e of n){let t=xr(e,i,r);i=t.floor,n.length===1&&(a=t.reselect)}i!==N&&(X(i,`delete`,n.map(e=>e.id)),R(a??null))},[q,N,xr,X,R]),Cr=p(()=>{qn([])},[]),wr=p(e=>{if(S)return;if(yn.current?.focus(),ur(null),k.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),e.currentTarget.setPointerCapture?.(e.pointerId),k.current.size===2){let[e,t]=[...k.current.values()];O.current.kind!==`none`&&O.current.kind!==`pan`&&j.cancelGesture(),O.current={kind:`pinch`,startDist:Math.hypot(t.x-e.x,t.y-e.y),startView:B,startMid:{x:(e.x+t.x)/2,y:(e.y+t.y)/2}};return}if(k.current.size>2)return;if(A.current={client:{x:e.clientX,y:e.clientY},moved:!1},e.button===1||Cn.current){O.current={kind:`pan`,startClient:{x:e.clientX,y:e.clientY},startView:B};return}if(e.button!==0)return;let t=fr(e.clientX,e.clientY);if(!q){R(De(N,P,t,u(D,B.zoom)));return}if(F===`rect`){let e=Y(t).point;O.current={kind:`rect`,start:e,current:e},j.beginGesture();return}if(F===`measure`){let e=cr(t);if(e){let n=K.find(t=>t.id===e.id);O.current=e.end?{kind:`measureEnd`,id:e.id,end:e.end}:{kind:`measureMove`,id:e.id,startWorld:t,origA:n.a,origB:n.b};return}let n=Y(t).point;O.current={kind:`measure`,start:n,current:n};return}if(F===`wall`){let e=U[U.length-1],n=Y(t,e,void 0,dr).point;if(U.length===0){qn([n]);return}let r=U[U.length-1],i=te(N,r,n,{thickness:qt,type:o.Interior,height:Jt},u(D,B.zoom).node);i.result.wallIds.length>0&&X(i.floor,`draw-wall`,i.result.wallIds),U.length>=2&&Math.hypot(n.x-U[0].x,n.y-U[0].y)<u(D,B.zoom).node?Cr():qn(e=>[...e,n]);return}let n=dt[F];if(n){let e=De(N,P,t,u(D,B.zoom),{accept:[`wall`]});if(e?.type!==`wall`)return;let r=N.walls[e.id],i=N.nodes[r.a],a=N.nodes[r.b],o=Math.hypot(a.x-i.x,a.y-i.y),s=((t.x-i.x)*(a.x-i.x)+(t.y-i.y)*(a.y-i.y))/(o*o||1),c={...pt[n],...Yt?.[n]},ee=l(N,{wallId:r.id,kind:n,offset:Math.min(Math.max(s,0),1)*o,width:c.width,sill:c.sill,head:c.head});ee.result.openingId&&(X(ee.floor,`add-opening`,[ee.result.openingId]),R({type:`opening`,id:ee.result.openingId}));return}let r=u(D,B.zoom);if(yr&&z?.type===`wall`&&Math.hypot(t.x-yr.x,t.y-yr.y)<=r.node){j.beginGesture(),O.current={kind:`wallSplit`,wallId:z.id,at:yr};return}let i=De(N,P,t,r),a=Pt&&(e.ctrlKey||e.metaKey);if(!i){a||R(null),O.current=Pt?{kind:`marquee`,start:t,current:t,additive:a,base:L.current}:{kind:`none`};return}if((e.ctrlKey||e.metaKey)&&i.type===`wall`&&N.walls[i.id]){let e=N.walls[i.id];a||R(i),j.beginGesture(),O.current={kind:`wall`,wallId:i.id,startWorld:t,origA:{...N.nodes[e.a]},origB:{...N.nodes[e.b]},moved:!1,detach:!0,toggle:a};return}if(a){zn(i),O.current={kind:`none`};return}if(L.current.some(e=>e.type===i.type&&e.id===i.id)||R(i),j.beginGesture(),L.current.length>1){let e=[...Bn(L.current)],n={};for(let t of e){let e=N.nodes[t];e&&(n[t]={x:e.x,y:e.y})}O.current={kind:`room`,nodeIds:e,startWorld:t,orig:n,moved:!1};return}if(i.type===`node`)O.current={kind:`node`,nodeId:i.id,moved:!1,...pr(i.id)};else if(i.type===`wall`){let e=N.walls[i.id];O.current={kind:`wall`,wallId:i.id,startWorld:t,origA:{...N.nodes[e.a]},origB:{...N.nodes[e.b]},moved:!1}}else if(i.type===`opening`)O.current={kind:`opening`,openingId:i.id,moved:!1};else{let e=P.find(e=>e.roomId===i.id),n=e?[...new Set(e.nodeIds)]:[],r={};for(let e of n){let t=N.nodes[e];t&&(r[e]={x:t.x,y:t.y})}O.current={kind:`room`,nodeIds:n,startWorld:t,orig:r,moved:!1}}},[S,q,B,F,N,P,D,fr,Y,U,qt,Jt,Yt,X,R,yr,z,dr,pr,Bn,Pt,zn,j,Cr,cr,K]),Tr=p(e=>{if(S)return;k.current.has(e.pointerId)&&k.current.set(e.pointerId,{x:e.clientX,y:e.clientY});let t=O.current;if(t.kind===`pinch`&&k.current.size>=2){let[e,n]=[...k.current.values()],r=Math.hypot(n.x-e.x,n.y-e.y);if(t.startDist<=0)return;let i=Math.max(zt,Math.min(Bt,t.startView.zoom*(r/t.startDist))),a=bn.current?.getBoundingClientRect()??{left:0,top:0},o={x:(e.x+n.x)/2,y:(e.y+n.y)/2},s=ke(t.startMid.x,t.startMid.y,a,t.startView);V({x:s.x-(o.x-a.left)/i,y:s.y-(o.y-a.top)/i,zoom:i});return}if(A.current){let t=e.clientX-A.current.client.x,n=e.clientY-A.current.client.y;Math.hypot(t,n)>ht&&(A.current.moved=!0)}if(t.kind===`pan`){V({x:t.startView.x-(e.clientX-t.startClient.x)/t.startView.zoom,y:t.startView.y-(e.clientY-t.startClient.y)/t.startView.zoom,zoom:t.startView.zoom});return}let n=fr(e.clientX,e.clientY);if(Jn(n),t.kind===`none`){if(!q)return;if(F===`wall`&&U.length>0){let e=Y(n,U[U.length-1],void 0,dr);Jn(e.point),nr(e);return}if(F===`select`){let e=De(N,P,n,u(D,B.zoom));Oe(e,Hn)||(Un(e),Ft?.(e))}F===`measure`&&or(cr(n)?.id??null);return}if(A.current?.moved){if(t.kind===`measureEnd`){let e=Y(n).point;rr(n=>n.map(n=>n.id===t.id?{...n,[t.end]:e}:n)),Jn(e);return}if(t.kind===`measureMove`){let e=n.x-t.startWorld.x,r=n.y-t.startWorld.y;rr(n=>n.map(n=>n.id===t.id?{...n,a:{x:t.origA.x+e,y:t.origA.y+r},b:{x:t.origB.x+e,y:t.origB.y+r}}:n));return}if(t.kind===`rect`||t.kind===`measure`){O.current={...t,current:Y(n).point},Jn(Y(n).point);return}if(t.kind===`marquee`){O.current={...t,current:n},Jn(n);return}if(t.kind===`wallSplit`){let e=ce(N,t.wallId,t.at);if(!e.result.wallIds){O.current={kind:`none`};return}let r=e.result.nodeId,i=N.walls[t.wallId],a=i?e.floor.nodes[i.a]:void 0,o=i?e.floor.nodes[i.b]:void 0,s={origin:a?{x:a.x,y:a.y}:void 0,referenceAngle:a&&o?Math.atan2(o.y-a.y,o.x-a.x):void 0,excludeWallIds:new Set(e.result.wallIds)},c=Y(n,s.origin,new Set([r]),s.referenceAngle,s.excludeWallIds).point;O.current={kind:`node`,nodeId:r,moved:!0,...s},R({type:`node`,id:r}),nr(tr.current),gr(ae(e.floor,r,c).floor,`move-node`,!1,[r]);return}if(t.kind===`node`){let e=Y(n,t.origin,new Set([t.nodeId]),t.referenceAngle,t.excludeWallIds).point;nr(tr.current),O.current={...t,moved:!0},gr(ae(N,t.nodeId,e).floor,`move-node`,!1,[t.nodeId]);return}if(t.kind===`wall`){let e=N.walls[t.wallId];if(!e)return;let r=t.origB.x-t.origA.x,i=t.origB.y-t.origA.y,a=Math.hypot(r,i);if(a<1e-6)return;let o={x:-i/a,y:r/a},s=(n.x-t.startWorld.x)*o.x+(n.y-t.startWorld.y)*o.y,c=Ut!==wn.current&&x>0?x:1,l=Math.round(s/c)*c,ee=Math.max(c,10);if(t.detach){if(Math.abs(l)<ee)return;let e=ne(N,t.wallId,{x:o.x*l,y:o.y*l});if(!e.result)return;O.current={...t,detach:!1,toggle:!1,detachedSign:Math.sign(l),moved:!0},R({type:`wall`,id:t.wallId}),gr(e.floor,`move-wall`,!1,[t.wallId]);return}let te=ae(N,e.a,{x:t.origA.x+o.x*l,y:t.origA.y+o.y*l}).floor;te=ae(te,e.b,{x:t.origB.x+o.x*l,y:t.origB.y+o.y*l}).floor,t.detachedSign&&Math.abs(l)<10?(te=ue(te).floor,O.current={...t,detachedSign:void 0,moved:!0}):O.current={...t,moved:!0},gr(te,`move-wall`,!1,[t.wallId]);return}if(t.kind===`opening`){let e=N.openings[t.openingId];if(!e)return;let r=N.walls[e.wallId],i=N.nodes[r.a],a=N.nodes[r.b],o=Math.hypot(a.x-i.x,a.y-i.y),s=((n.x-i.x)*(a.x-i.x)+(n.y-i.y)*(a.y-i.y))/(o*o||1);O.current={...t,moved:!0},gr(le(N,t.openingId,{offset:Math.min(Math.max(s,0),1)*o}).floor,`move-opening`,!1,[t.openingId]);return}if(t.kind===`room`){let e=n.x-t.startWorld.x,r=n.y-t.startWorld.y,i=Ut!==wn.current&&x>0?x:1,a=Math.round(e/i)*i,o=Math.round(r/i)*i,s=N;for(let e of t.nodeIds){let n=t.orig[e];n&&(s=ae(s,e,{x:n.x+a,y:n.y+o}).floor)}O.current={...t,moved:!0},gr(s,`move-room`,!1,t.nodeIds)}}},[S,q,F,N,P,Hn,D,B.zoom,zt,Bt,x,Ut,fr,Y,gr,V,R,U,dr,Ft,cr]),Er=p((e,t)=>{k.current.delete(e.pointerId);let n=O.current;O.current={kind:`none`};let r=A.current?.moved??!1;if(A.current=null,nr(null),n.kind===`none`||n.kind===`pan`||n.kind===`pinch`)return;if(n.kind===`marquee`){if(t||!r){t&&R([...n.base]);return}let e=Math.min(n.start.x,n.current.x),i=Math.max(n.start.x,n.current.x),a=Math.min(n.start.y,n.current.y),o=Math.max(n.start.y,n.current.y),s=[];for(let t of Object.values(N.nodes))t.x>=e&&t.x<=i&&t.y>=a&&t.y<=o&&s.push({type:`node`,id:t.id});if(n.additive){let e=new Set(n.base.map(e=>`${e.type}:${e.id}`));R([...n.base,...s.filter(t=>!e.has(`${t.type}:${t.id}`))])}else R(s);return}if(t){let e=j.cancelGesture();e&&b?.(e,{reason:`external`,committed:!1,targetIds:[]});return}if(n.kind===`measureEnd`||n.kind===`measureMove`)return;if(n.kind===`measure`){let e=Math.hypot(n.current.x-n.start.x,n.current.y-n.start.y);r&&e>mt&&(ir.current+=1,rr(e=>[...e,{id:ir.current,a:n.start,b:n.current}]));return}if(n.kind===`rect`){if(!r){j.cancelGesture();return}let e=ee(N,n.start,n.current,{thickness:qt,type:o.Interior,height:Jt},u(D,B.zoom).node);if(e.result.wallIds.length===0){j.cancelGesture();return}let t=j.endGesture();X(e.floor,`draw-rect`,e.result.wallIds,{push:!t});return}if(!r){j.cancelGesture(),n.kind===`wall`&&n.toggle&&zn({type:`wall`,id:n.wallId});return}if(n.kind===`node`){let e=N.nodes[n.nodeId];if(e){let t=u(D,B.zoom).node,r=Object.values(N.nodes).find(r=>r.id!==n.nodeId&&Math.hypot(r.x-e.x,r.y-e.y)<=t);if(r){let e=j.endGesture();X(ie(N,r.id,n.nodeId).floor,`move-node`,[r.id],{push:!e}),R({type:`node`,id:r.id});return}}}let i=j.endGesture();X(N,n.kind===`wall`?`move-wall`:n.kind===`opening`?`move-opening`:n.kind===`room`?`move-room`:`move-node`,[],{push:!i})},[N,j,D,B.zoom,qt,Jt,X,R,zn,b]);Le(()=>{let e=bn.current;if(!e||S)return;function t(t){t.preventDefault();let n=e.getBoundingClientRect(),r=Math.exp(-t.deltaY*.002);V((()=>{let e=Dr.current,i=Math.max(zt,Math.min(Bt,e.zoom*r)),a=ke(t.clientX,t.clientY,n,e);return{x:a.x-(t.clientX-n.left)/i,y:a.y-(t.clientY-n.top)/i,zoom:i}})())}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[S,zt,Bt,V]);let Dr=m(B);Dr.current=B;let Or=p(e=>{let t=Math.max(zt,Math.min(Bt,B.zoom*e)),n={x:B.x+H.width/2/B.zoom,y:B.y+H.height/2/B.zoom};V({x:n.x-H.width/2/t,y:n.y-H.height/2/t,zoom:t})},[B,H,zt,Bt,V]),kr=p(()=>{if(sn===`none`)return;let e=j.undo();e&&(Sn.current=e,b?.(e,{reason:`undo`,committed:!0,targetIds:[]}),xt?.(e,{reason:`undo`,committed:!0,targetIds:[]}))},[sn,j,b,xt]),Ar=p(()=>{if(sn===`none`)return;let e=j.redo();e&&(Sn.current=e,b?.(e,{reason:`redo`,committed:!0,targetIds:[]}),xt?.(e,{reason:`redo`,committed:!0,targetIds:[]}))},[sn,j,b,xt]),jr=p(()=>{let e=P.filter(e=>e.roomId).map(e=>({type:`room`,id:e.roomId}));if(e.length>0){R(e);return}R(Object.keys(N.nodes).map(e=>({type:`node`,id:e})))},[P,N.nodes,R]),Mr=p((e,t)=>{if(!q||Vn.size===0)return;let n=x>0?x:100,r=Tn.current?n*10:n,i=N;for(let n of Vn){let a=i.nodes[n];a&&(i=ae(i,n,{x:a.x+e*r,y:a.y+t*r}).floor)}X(i,`nudge`,[...Vn])},[q,Vn,N,x,X]),Nr=p(e=>{if(S)return;let t=e.target;if(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement){e.key===`Escape`&&t.blur();return}if(e.key===`Shift`&&(Tn.current=!0),e.key===`Alt`&&(wn.current=!0),e.key===` `&&!Cn.current){Cn.current=!0,e.preventDefault();return}let n=e.metaKey||e.ctrlKey;if(n&&e.key.toLowerCase()===`z`){e.preventDefault(),e.shiftKey?Ar():kr();return}if(n&&e.key.toLowerCase()===`a`){e.preventDefault(),Pt&&jr();return}if(n&&e.key.toLowerCase()===`y`){e.preventDefault(),Ar();return}if(e.key===`Escape`){U.length>0?Cr():K.length>0?rr([]):R(null);return}if(e.key===`Enter`&&F===`wall`){Cr();return}if(e.key===`Delete`||e.key===`Backspace`){if(e.preventDefault(),F===`measure`){ar!==null&&(rr(e=>e.filter(e=>e.id!==ar)),or(null));return}Sr();return}if(e.key===`+`||e.key===`=`){Or(1.25);return}if(e.key===`-`){Or(1/1.25);return}if(e.key===`0`){mr();return}if(e.key.startsWith(`Arrow`)){e.preventDefault();let t={ArrowLeft:[-1,0],ArrowRight:[1,0],ArrowUp:[0,-1],ArrowDown:[0,1]}[e.key];t&&Mr(t[0],t[1]);return}let r=e.key.toLowerCase();if(r===`s`){Xn(e=>!e);return}if(r===`l`){Qn(e=>!e);return}if(r===`g`){er(e=>!e);return}let i=ut[e.key.toLowerCase()];i&&q&&At.includes(i)&&(In(i),Cr())},[S,q,At,F,U,K.length,ar,Ar,kr,R,Cr,Sr,Or,mr,Mr,In,Pt,jr]),Q=p((e,t,n)=>{Sn.current=e,n?.resetHistory?(j.clearHistory(),j.replace(e)):j.commit(e,t);let r={reason:t,committed:!0,targetIds:[]};b?.(e,r),xt?.(e,r)},[j,b,xt]),Pr=p((e={})=>{let{plan:t,floor:n}=de(M,{...e,index:ge(M,N.id)+1});return Q(t,`add-floor`),Nn(n.id),n.id},[M,N.id,Q,Nn]),Fr=p(()=>{let{plan:e,floor:t}=fe(M,N.id);return t?(Q(e,`duplicate-floor`),Nn(t.id),t.id):null},[M,N.id,Q,Nn]),Ir=p(e=>{let t=e??N.id,n=ye(M,t);if(n!==M&&(Q(n,`remove-floor`),t===N.id)){let e=ge(M,t);Nn(n.floors[Math.max(0,e-1)].id)}},[M,N.id,Q,Nn]),Lr=p((e,t)=>{let n=ve(M,e,t);n!==M&&Q(n,`move-floor`)},[M,Q]),Rr=p((e,t)=>{let n=Se(M,e,t);n!==M&&Q(n,`edit-floor`)},[M,Q]),zr=p((e,t)=>{let n=be(M,e,t);n!==M&&Q(n,`rename-floor`)},[M,Q]),Br=p(e=>{let t=(e??an??M.name??``).trim()||`floor-plan`,n=URL.createObjectURL(new Blob([Me(M)],{type:`application/json`})),r=document.createElement(`a`);r.href=n,r.download=t.endsWith(`.json`)?t:`${t}.json`,r.click(),setTimeout(()=>URL.revokeObjectURL(n),0)},[an,M]),Vr=p(e=>{let t=je(e);return t.plan&&Q(t.plan,`import`),ur(t.plan&&t.issues.length===0?null:t.issues),on?.(t),t},[on,Q]),Hr=p(e=>{e.text().then(e=>Vr(e)).catch(e=>{let t=[`Could not read that file: ${e.message}`];ur(t),on?.({plan:null,issues:t})})},[Vr,on]),Ur=p(()=>rr([]),[]),Wr=p(e=>{e.key===`Shift`&&(Tn.current=!1),e.key===`Alt`&&(wn.current=!1),e.key===` `&&(Cn.current=!1)},[]);Re(Ie,()=>({getPlan:()=>M,setPlan:(e,t)=>Q(e,`import`,t),clear:()=>Q(pe(),`clear`),getFloorId:()=>N.id,setFloorId:Nn,addFloor:e=>Pr(e),duplicateFloor:Fr,removeFloor:Ir,renameFloor:zr,moveFloor:Lr,setFloorHeight:Rr,clearMeasurements:Ur,download:Br,loadJson:Vr,undo:kr,redo:Ar,canUndo:()=>sn!==`none`&&j.canUndo,canRedo:()=>sn!==`none`&&j.canRedo,clearHistory:j.clearHistory,getSelection:()=>[...L.current],select:R,addToSelection:e=>{let t=Array.isArray(e)?e:[e],n=new Set(L.current.map(e=>`${e.type}:${e.id}`));R([...L.current,...t.filter(e=>!n.has(`${e.type}:${e.id}`))])},toggleSelection:zn,selectAll:jr,deleteSelection:Sr,getView:()=>B,setView:V,zoomBy:Or,fitToContent:mr,toWorld:fr,toScreen:J,getSvgElement:()=>xn.current}),[M,j,Q,N,Nn,Pr,Fr,Ir,zr,Lr,Rr,Ur,Br,Vr,kr,Ar,sn,R,zn,jr,Sr,B,V,Or,mr,fr,J]);let $=O.current,Gr=ze(()=>{if(!q)return null;let e=[],t=[...K,...$.kind===`measure`?[{id:-1,a:$.start,b:$.current}]:[]];for(let n of t){let t=J(n.a),r=J(n.b),i=Math.hypot(n.b.x-n.a.x,n.b.y-n.a.y);if(i<mt)continue;let a=Math.atan2(n.b.y-n.a.y,n.b.x-n.a.x),o=-Math.sin(a)*5,s=Math.cos(a)*5,c={x:(t.x+r.x)/2,y:(t.y+r.y)/2};if(e.push(v(`g`,{className:g(f.roomDrawerMeasureLine,ar===n.id&&f.roomDrawerMeasureLineHovered,T?.measureLine),children:[_(`line`,{x1:t.x,y1:t.y,x2:r.x,y2:r.y}),_(`line`,{x1:t.x-o,y1:t.y-s,x2:t.x+o,y2:t.y+s}),_(`line`,{x1:r.x-o,y1:r.y-s,x2:r.x+o,y2:r.y+s})]},`measure-${n.id}`)),F===`measure`&&n.id>=0)for(let[i,a]of[[`a`,t],[`b`,r]])e.push(_(`circle`,{className:f.roomDrawerMeasureGrip,cx:a.x,cy:a.y,r:4},`measure-grip-${n.id}-${i}`));e.push(_(`text`,{className:g(f.roomDrawerMeasure,T?.measureLine),x:c.x,y:c.y-8,textAnchor:`middle`,children:`${Zt(i)} · ${yt(a)}`},`measure-label-${n.id}`))}if(Kt&&G&&(G.guides.forEach((t,n)=>{let r=J(t.a),i=J(t.b);e.push(_(`line`,{className:g(f.roomDrawerGuide,t.kind===d.Angle&&f.roomDrawerGuideAngle),x1:r.x,y1:r.y,x2:i.x,y2:i.y},`guide-${n}`))}),G.kind!==d.None&&G.kind!==d.Grid)){let t=J(G.point);e.push(_(`rect`,{className:f.roomDrawerSnapMarker,x:t.x-4,y:t.y-4,width:8,height:8},`snap-marker`))}if($.kind===`rect`){let t=J($.start),n=J($.current),r=Math.min(t.x,n.x),i=Math.min(t.y,n.y),a=Math.max(t.x,n.x),o=Math.max(t.y,n.y);e.push(_(`rect`,{className:f.roomDrawerPreview,x:r,y:i,width:a-r,height:o-i},`rect-preview`));let s=Math.abs($.current.x-$.start.x),c=Math.abs($.current.y-$.start.y);Xt&&(s>0||c>0)&&(e.push(_(`text`,{className:f.roomDrawerMeasure,x:(r+a)/2,y:i-8,textAnchor:`middle`,children:Zt(s)},`rect-width`),_(`text`,{className:f.roomDrawerMeasure,x:r-8,y:(i+o)/2,textAnchor:`end`,dominantBaseline:`central`,children:Zt(c)},`rect-height`)),s>0&&c>0&&e.push(_(`text`,{className:g(f.roomDrawerMeasure,f.roomDrawerMeasureSecondary),x:(r+a)/2,y:(i+o)/2,textAnchor:`middle`,dominantBaseline:`central`,children:Qt(s*c)},`rect-area`)))}if(F===`wall`&&U.length>0){let t=[...U,W].filter(Boolean).map(J);if(e.push(_(`polyline`,{className:f.roomDrawerPreview,points:t.map(e=>`${e.x},${e.y}`).join(` `),fill:`none`},`chain`)),t.forEach((t,n)=>{e.push(_(`circle`,{className:f.roomDrawerHandle,cx:t.x,cy:t.y,r:4},`chain-dot-${n}`))}),Xt&&W&&U.length>0){let t=U[U.length-1],n=Math.hypot(W.x-t.x,W.y-t.y),r=J({x:(t.x+W.x)/2,y:(t.y+W.y)/2}),i=G?.kind===d.Angle;e.push(_(`text`,{className:g(f.roomDrawerMeasure,i&&f.roomDrawerMeasureLocked),x:r.x,y:r.y-8,textAnchor:`middle`,children:`${Zt(n)} · ${yt(G?.angleRelativeTo===`reference`&&dr!==void 0?Math.atan2(W.y-t.y,W.x-t.x)-dr:Math.atan2(W.y-t.y,W.x-t.x))}${G?.angleRelativeTo===`reference`?` rel`:``}`},`chain-len`))}}let n=new Set(I.filter(e=>e.type===`node`).map(e=>e.id));for(let t of Vn){let r=N.nodes[t];if(!r)continue;let i=J(r);e.push(_(`circle`,{className:g(f.roomDrawerHandle,n.has(t)&&f.roomDrawerHandleActive),cx:i.x,cy:i.y,r:5},`handle-${t}`))}if($.kind===`marquee`&&A.current?.moved){let t=J($.start),n=J($.current);e.push(_(`rect`,{className:f.roomDrawerMarquee,x:Math.min(t.x,n.x),y:Math.min(t.y,n.y),width:Math.abs(n.x-t.x),height:Math.abs(n.y-t.y)},`marquee`))}if(yr&&$.kind!==`node`){let t=J(yr);e.push(_(`circle`,{className:f.roomDrawerMidHandle,cx:t.x,cy:t.y,r:4},`midpoint`))}if(Xt&&$.kind===`room`&&$.moved){let t=new Set($.nodeIds),n=$.nodeIds.find(e=>N.nodes[e]&&$.orig[e]);if(n){let t=N.nodes[n],r=$.orig[n],i=t.x-r.x,a=t.y-r.y,o=z?.type===`room`?P.find(e=>e.roomId===z.id):void 0,s=J(o?o.anchor:t);e.push(_(`text`,{className:g(f.roomDrawerMeasure,f.roomDrawerMeasureOffset),x:s.x,y:s.y-26,textAnchor:`middle`,children:`${Zt(Math.hypot(i,a))} · ${yt(Math.atan2(a,i))}`},`room-offset`))}for(let n of Object.values(N.walls)){if(t.has(n.a)===t.has(n.b))continue;let r=N.nodes[n.a],i=N.nodes[n.b];if(!r||!i)continue;let a=t.has(n.a)?r:i,o=t.has(n.a)?i:r,s=J({x:(r.x+i.x)/2,y:(r.y+i.y)/2});e.push(_(`text`,{className:g(f.roomDrawerMeasure,f.roomDrawerMeasureSecondary),x:s.x,y:s.y-8,textAnchor:`middle`,children:`${Zt(Math.hypot(o.x-a.x,o.y-a.y))} · ${yt(Math.atan2(o.y-a.y,o.x-a.x))}`},`room-stretch-${n.id}`))}}if(Xt&&(z?.type===`node`||z?.type===`wall`)){let t=[],n=new Set,r=(e,r,i)=>{if(n.has(e))return;let a=N.walls[e];a&&(n.add(e),t.push({wall:a,from:r,primary:i}))};if(z.type===`node`)for(let e of Object.values(N.walls))(e.a===z.id||e.b===z.id)&&r(e.id,z.id,!0);else{let e=N.walls[z.id];if(e){r(e.id,e.a,!0);for(let t of Object.values(N.walls))if(t.id!==e.id)for(let n of[e.a,e.b])(t.a===n||t.b===n)&&r(t.id,n,!1)}}let i=G?.kind===d.Angle&&$.kind!==`none`;for(let{wall:n,from:r,primary:a}of t){let t=N.nodes[n.a],o=N.nodes[n.b];if(!t||!o)continue;let s=n.a===r?t:o,c=n.a===r?o:t,l=J({x:(t.x+o.x)/2,y:(t.y+o.y)/2});e.push(_(`text`,{className:g(f.roomDrawerMeasure,!a&&f.roomDrawerMeasureSecondary,a&&i&&f.roomDrawerMeasureLocked),x:l.x,y:l.y-8,textAnchor:`middle`,children:`${Zt(Math.hypot(c.x-s.x,c.y-s.y))} · ${yt(Math.atan2(c.y-s.y,c.x-s.x))}`},`measure-${n.id}`))}}return _(ct,{children:e})},[q,$,F,U,W,I,N,P,z,Vn,yr,Xt,Kt,G,dr,Zt,Qt,K,ar,T?.measureLine,J]),Kr={select:{icon:He,label:C?.select??`Select and edit`,key:`V`},wall:{icon:tt,label:C?.wall??`Draw walls`,key:`W`},rect:{icon:it,label:C?.rect??`Draw a room`,key:`R`},door:{icon:qe,label:C?.door??`Add a door`,key:`D`},window:{icon:st,label:C?.window??`Add a window`,key:`N`},archway:{icon:Xe,label:C?.archway??`Add an archway`,key:`A`},measure:{icon:rt,label:C?.measure??`Measure`,key:`M`}},qr=q?F===`wall`?C?.hintWall??`Click to place corners · Shift for a fixed angle, L to latch it · Click the first corner or press Enter to close`:F===`rect`?C?.hintRect??`Drag to draw a room`:F===`measure`?C?.hintMeasure??`Drag to measure · Drag an end or the line to adjust it · Delete removes one, Escape clears them`:dt[F]?C?.hintOpening??`Click a wall to cut an opening into it`:C?.hintSelect??(Pt?`Drag a corner to reshape · Drag a wall to push it, and the room next door moves with it · Ctrl-click or drag a box to select several · Delete to remove`:`Drag a corner to reshape · Drag a wall to push it, and the room next door moves with it · Drag the dot on a selected wall to add a corner · Delete to remove`):``,Jr=I.length===0?C?.selectedFloor??`Floor`:I.length>1?(C?.selectedCount??`{count} selected`).replace(`{count}`,String(I.length)):vr?C?.selectedOpening??ft[vr.kind]:Z?C?.selectedWall??`Wall`:z?.type===`room`?C?.selectedRoom??`Room`:C?.selectedCorner??`Corner`,Yr=q?At:[];return v(`div`,{..._n,ref:yn,className:g(f.roomDrawer,S&&f.roomDrawerDisabled,hn,T?.root),style:{...gn,...E?.root},role:`application`,"aria-label":mn??`Floor plan editor`,tabIndex:S?-1:0,onKeyDown:Nr,onKeyUp:Wr,children:[$t&&v(`div`,{className:g(f.roomDrawerToolbar,T?.toolbar),style:E?.toolbar,role:`toolbar`,"aria-label":`Drawing tools`,children:[Yr.map(e=>{let n=Kr[e];return _(`button`,{type:`button`,className:g(f.roomDrawerToolButton,e===F&&f.roomDrawerToolButtonActive,T?.toolButton),style:E?.toolButton,title:`${n.label} (${n.key})`,"aria-label":n.label,"aria-pressed":e===F,onClick:()=>{In(e),Cr()},children:t(w?.[e]??n.icon,{className:g(f.roomDrawerToolIcon,T?.toolIcon),style:E?.toolIcon})},e)}),Yr.length>0&&_(`span`,{className:f.roomDrawerToolbarSeparator}),q&&v(ct,{children:[[{on:Yn,toggle:()=>Xn(e=>!e),icon:w?.snap??Qe,label:C?.snap??`Snap to grid and geometry`,key:`S`},{on:Zn,toggle:()=>Qn(e=>!e),icon:w?.angleLock??Ye,label:C?.angleLock??`Lock to ${Gt}° angles`,key:`L`},{on:$n,toggle:()=>er(e=>!e),icon:w?.grid??Ge,label:C?.grid??`Show grid`,key:`G`},...me(M,N.id)?[{on:An,toggle:()=>jn(e=>!e),icon:w?.underlay??Ze,label:C?.underlay??`Show the floor below`,key:`B`}]:[]].map(e=>_(`button`,{type:`button`,className:g(f.roomDrawerToolButton,e.on&&f.roomDrawerToolButtonOn,T?.toolButton),style:E?.toolButton,title:`${e.label} (${e.key})`,"aria-label":e.label,"aria-pressed":e.on,onClick:e.toggle,children:t(e.icon,{className:g(f.roomDrawerToolIcon,T?.toolIcon),style:E?.toolIcon})},e.key)),_(`span`,{className:f.roomDrawerToolbarSeparator})]}),nn&&sn!==`none`&&q&&v(ct,{children:[_(`button`,{type:`button`,className:g(f.roomDrawerViewButton,T?.viewButton),style:E?.viewButton,title:C?.undo??`Undo`,"aria-label":C?.undo??`Undo`,disabled:!j.canUndo,onClick:kr,children:t(w?.undo??Ue)}),_(`button`,{type:`button`,className:g(f.roomDrawerViewButton,T?.viewButton),style:E?.viewButton,title:C?.redo??`Redo`,"aria-label":C?.redo??`Redo`,disabled:!j.canRedo,onClick:Ar,children:t(w?.redo??We)}),_(`span`,{className:f.roomDrawerToolbarSeparator})]}),rn&&v(ct,{children:[_(`button`,{type:`button`,className:g(f.roomDrawerViewButton,T?.viewButton),style:E?.viewButton,title:C?.download??`Download plan`,"aria-label":C?.download??`Download plan`,onClick:()=>Br(),children:t(w?.download??Je)}),q&&_(`button`,{type:`button`,className:g(f.roomDrawerViewButton,T?.viewButton),style:E?.viewButton,title:C?.upload??`Open a plan file`,"aria-label":C?.upload??`Open a plan file`,onClick:()=>sr.current?.click(),children:t(w?.upload??ot)}),_(`span`,{className:f.roomDrawerToolbarSeparator})]}),v(`div`,{className:g(f.roomDrawerViewControls,T?.viewControls),style:E?.viewControls,children:[_(`button`,{type:`button`,className:g(f.roomDrawerViewButton,T?.viewButton),style:E?.viewButton,title:C?.zoomOut??`Zoom out`,"aria-label":C?.zoomOut??`Zoom out`,onClick:()=>Or(1/1.25),children:t(w?.zoomOut??$e)}),v(`button`,{type:`button`,className:g(f.roomDrawerZoomLabel,T?.zoomLabel),style:E?.zoomLabel,title:C?.fit??`Fit to content`,onClick:()=>mr(),children:[Math.round(B.zoom*1e3)/10,`%`]}),_(`button`,{type:`button`,className:g(f.roomDrawerViewButton,T?.viewButton),style:E?.viewButton,title:C?.zoomIn??`Zoom in`,"aria-label":C?.zoomIn??`Zoom in`,onClick:()=>Or(1.25),children:t(w?.zoomIn??et)})]})]}),Tt&&M.floors.length>0&&v(`div`,{className:g(f.roomDrawerFloorBar,T?.floorBar),style:E?.floorBar,role:`tablist`,"aria-label":C?.selectedFloor??`Floor`,children:[[...M.floors].reverse().map(e=>_(`button`,{type:`button`,role:`tab`,className:g(f.roomDrawerFloorTab,e.id===N.id&&f.roomDrawerFloorTabActive,T?.floorTab),style:E?.floorTab,"aria-selected":e.id===N.id,onClick:()=>Nn(e.id),children:e.label},e.id)),q&&_(`button`,{type:`button`,className:g(f.roomDrawerFloorTab,f.roomDrawerFloorTabAdd),title:C?.addFloor??`Add a floor above`,"aria-label":C?.addFloor??`Add a floor above`,onClick:()=>Pr(),children:t(w?.addFloor??nt)})]}),_(`div`,{ref:bn,className:g(f.roomDrawerCanvasWrapper,q&&F!==`select`&&f.roomDrawerCanvasWrapperDrawing,T?.canvasWrapper),style:{height:dn,...E?.canvasWrapper},onPointerDown:wr,onPointerMove:Tr,onPointerUp:e=>Er(e,!1),onPointerCancel:e=>Er(e,!0),children:_(Pe,{ref:xn,floor:N,underlay:Mn,rooms:P,view:B,size:H,selection:I,hovered:Hn,interactiveRooms:!1,showGrid:$n,gridSize:x,showRoomLabels:!0,formatArea:Qt,getRoomColor:fn,renderRoomLabel:pn,overlay:Gr,classNames:T,styles:E})}),en&&q&&v(`div`,{className:g(f.roomDrawerInspector,T?.inspector),style:E?.inspector,children:[_(`span`,{className:g(f.roomDrawerInspectorKind,I.length===0&&f.roomDrawerInspectorKindEmpty,T?.inspectorLabel),children:Jr}),I.length===0&&v(ct,{children:[_(i,{className:g(f.roomDrawerInspectorName,T?.inspectorField),style:E?.inspectorField,label:C?.floorName??`Floor name`,value:N.label,onChange:e=>zr(N.id,e)}),_(Ne,{className:g(f.roomDrawerInspectorField,T?.inspectorField),style:E?.inspectorField,label:C?.floorHeight??`Height (mm)`,title:`Storey height. The floors above move to sit on top of it.`,value:N.height,decimalScale:0,min:500,step:100,showArrows:!0,onChange:e=>{e!==void 0&&Rr(N.id,e)}}),M.floors.length>1&&v(ct,{children:[_(`button`,{type:`button`,className:g(f.roomDrawerInspectorAction,T?.inspectorField),style:E?.inspectorField,title:C?.moveFloorUp??`Move this floor up`,"aria-label":C?.moveFloorUp??`Move this floor up`,disabled:ge(M,N.id)>=M.floors.length-1,onClick:()=>Lr(N.id,ge(M,N.id)+1),children:t(w?.moveFloorUp??Ve)}),_(`button`,{type:`button`,className:g(f.roomDrawerInspectorAction,T?.inspectorField),style:E?.inspectorField,title:C?.moveFloorDown??`Move this floor down`,"aria-label":C?.moveFloorDown??`Move this floor down`,disabled:ge(M,N.id)<=0,onClick:()=>Lr(N.id,ge(M,N.id)-1),children:t(w?.moveFloorDown??Be)})]}),_(`button`,{type:`button`,className:g(f.roomDrawerInspectorAction,T?.inspectorField),style:E?.inspectorField,title:C?.duplicateFloor??`Copy this floor to a new one above`,onClick:()=>Fr(),children:t(w?.duplicateFloor??Ke)}),M.floors.length>1&&_(n,{className:f.roomDrawerInspectorDelete,icon:w?.delete??at,title:C?.deleteFloor??`Delete this floor`,onClick:()=>Ir()})]}),_r?.meta&&v(ct,{children:[_(i,{className:g(f.roomDrawerInspectorName,T?.inspectorField),style:E?.inspectorField,label:C?.roomName??`Room name`,value:_r.meta.name,onChange:e=>{let t=_r.meta;X({...N,rooms:{...N.rooms,[t.id]:{...t,name:e}}},`edit-room`,[t.id])}}),_(`span`,{className:g(f.roomDrawerInspectorLabel,T?.inspectorLabel),children:Qt(_r.area)})]}),Z&&_(`button`,{type:`button`,className:g(f.roomDrawerInspectorAction,T?.inspectorField),style:E?.inspectorField,onClick:br,title:C?.addCorner??`Add a corner to this wall`,children:C?.addCorner??`Add corner`}),Z&&_(Ne,{className:g(f.roomDrawerInspectorField,T?.inspectorField),style:E?.inspectorField,label:C?.thickness??`Thickness (mm)`,value:Z.thickness,decimalScale:0,min:10,showArrows:!0,step:10,onChange:e=>{e!==void 0&&X({...N,walls:{...N.walls,[Z.id]:{...Z,thickness:e}}},`edit-wall`,[Z.id])}}),vr&&v(ct,{children:[_(Ne,{className:g(f.roomDrawerInspectorField,T?.inspectorField),style:E?.inspectorField,label:C?.width??`Width (mm)`,value:vr.width,decimalScale:0,min:100,step:50,showArrows:!0,onChange:e=>{e!==void 0&&X(le(N,vr.id,{width:e}).floor,`edit-opening`,[vr.id])}}),_(Ne,{className:g(f.roomDrawerInspectorField,T?.inspectorField),style:E?.inspectorField,label:C?.sill??`Sill (mm)`,title:`How far above the floor the opening starts. Stored for a 3D view; it does not change the plan.`,showArrows:!0,value:vr.sill,decimalScale:0,min:0,step:50,onChange:e=>{e!==void 0&&X(le(N,vr.id,{sill:e}).floor,`edit-opening`,[vr.id])}})]}),I.length>0&&_(n,{className:f.roomDrawerInspectorDelete,icon:w?.delete??at,title:C?.deleteSelection??`Delete selection`,onClick:Sr})]}),rn&&q&&_(`input`,{ref:sr,type:`file`,accept:`application/json,.json`,className:f.roomDrawerFileInput,tabIndex:-1,"aria-hidden":`true`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&Hr(t)}}),tn&&(lr!==null||qr)&&_(`div`,{className:g(f.roomDrawerHint,lr!==null&&f.roomDrawerHintReport,T?.hint),style:E?.hint,role:lr===null?void 0:`status`,children:lr===null?qr:lr.length===0?C?.importFailed??`That file could not be read as a floor plan`:lr.join(` · `)})]})});export{y as default};
1
+ import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import{renderIcon as t}from"../utils/renderIcon.mjs";import n from"../actionIcon/actionIcon.mjs";import r from"../hooks/useCoarsePointer.mjs";import i from"../input/input.mjs";import{OpeningKind as a,WallType as o}from"../floorPlan/floorPlan.types.mjs";import{pointToSegment as s}from"../floorPlan/floorPlan.geometry.mjs";import{DEFAULT_WALL_ATTRS as c,addOpening as l,addRect as ee,addWall as u,detachWall as te,dissolveNode as ne,mergeNodes as re,moveNode as ie,removeOpening as ae,removeWall as oe,splitWall as se,updateOpening as ce,weldShortWalls as le}from"../floorPlan/floorPlan.graph.mjs";import{addFloor as ue,duplicateFloor as de,emptyFloorPlan as fe,floorBelow as pe,floorBounds as me,floorIndex as he,getFloor as ge,moveFloor as _e,removeFloor as ve,renameFloor as ye,setFloor as be,setFloorHeight as xe}from"../floorPlan/floorPlan.plan.mjs";import{commitDerivation as Se,derivePlan as Ce}from"../floorPlan/floorPlan.rooms.mjs";import{HIT_PX as we,HIT_PX_COARSE as Te,hitTest as Ee,selectionsEqual as De,worldTolerances as d}from"../floorPlan/floorPlan.hit.mjs";import{SnapKind as f,clientToWorld as Oe,resolveSnap as ke}from"../floorPlan/floorPlan.snap.mjs";import{planFromJson as Ae,planToJson as je}from"../floorPlan/floorPlan.json.mjs";import Me from"../numberInput/index.mjs";import Ne from"../planCanvas/planCanvas.mjs";import{usePlanHistory as Pe}from"./usePlanHistory.mjs";import p from"./roomDrawer.module.mjs";import{forwardRef as Fe,useCallback as m,useEffect as h,useImperativeHandle as Ie,useMemo as Le,useRef as g,useState as _}from"react";import v from"classnames";import{faAngleDown as Re,faAngleUp as ze,faArrowPointer as Be,faArrowRotateLeft as Ve,faArrowRotateRight as He,faBorderAll as Ue,faClone as We,faDoorOpen as Ge,faDownload as Ke,faDraftingCompass as qe,faExpand as Je,faLayerGroup as Ye,faMagnet as Xe,faMagnifyingGlassMinus as Ze,faMagnifyingGlassPlus as Qe,faMinus as $e,faPlus as et,faRulerCombined as tt,faSquare as nt,faTrash as rt,faUpload as it,faWindowMaximize as at}from"@fortawesome/free-solid-svg-icons";import{Fragment as ot,jsx as y,jsxs as b}from"react/jsx-runtime";var st=[`select`,`wall`,`rect`,`door`,`window`,`archway`,`measure`],ct={v:`select`,w:`wall`,r:`rect`,d:`door`,n:`window`,a:`archway`,m:`measure`},lt={door:a.Door,window:a.Window,archway:a.Archway},ut={[a.Door]:`Door`,[a.Window]:`Window`,[a.Archway]:`Archway`,[a.Gap]:`Gap`},dt={[a.Door]:{width:900,sill:0,head:2100},[a.Window]:{width:1200,sill:900,head:2100},[a.Archway]:{width:1200,sill:0,head:2100},[a.Gap]:{width:1e3,sill:0,head:2500}},ft=1,pt=4,mt=[];function ht(e){return e>=1e3?`${(e/1e3).toFixed(2)} m`:`${Math.round(e)} mm`}function gt(e){let t=e/1e6;return`${t.toFixed(+(t<10))} m²`}function _t(e){let t=e*180/Math.PI;return t=(t%360+360)%360,t>180&&(t-=360),`${Math.abs(t)<.05?0:Math.round(t*10)/10}°`}var x=Fe(function(a,Fe){let{value:x,defaultValue:vt,onChange:S,onChangeEnd:yt,floorId:bt,defaultFloorId:xt,onFloorChange:St,showFloorBar:Ct=!0,showUnderlay:wt=!0,tool:Tt,defaultTool:Et=`select`,onToolChange:Dt,tools:Ot=st,selection:kt,defaultSelection:At,onSelectionChange:jt,multiSelect:Mt=!0,onHoverChange:Nt,view:Pt,defaultView:Ft,onViewChange:It,minZoom:Lt=.005,maxZoom:Rt=2,fitOnMount:zt=!0,gridSize:C=100,showGrid:Bt=!0,snap:Vt=!0,angleLock:Ht=!1,constrainAngle:Ut=45,showSnapGuides:Wt=!0,wallThickness:Gt=c.thickness,wallHeight:Kt,openingDefaults:qt,showMeasurements:Jt=!0,formatLength:Yt=ht,formatArea:Xt=gt,showToolbar:Zt=!0,showInspector:Qt=!0,showHint:$t=!0,showHistoryControls:en=!0,showFileControls:tn=!0,fileName:nn,onImport:rn,historyMode:an=`internal`,historyLimit:on=50,onHistoryChange:sn,readOnly:cn=!1,disabled:w=!1,canvasHeight:ln=`420px`,getRoomColor:un,renderRoomLabel:dn,labels:T,icons:E,"aria-label":fn,className:pn,style:mn,classNames:D,styles:O,...hn}=e(`RoomDrawer`,a),gn=r(),k=gn?Te:we,_n=g(null),vn=g(null),yn=g(null),bn=g(null),A=g({kind:`none`}),xn=g(new Map),Sn=g(null),Cn=g(!1),wn=g(!1),Tn=g(!1),En=Le(()=>vt??x??fe(),[]),j=Pe(En,on),Dn=x!==void 0,M=Dn?x:j.present;h(()=>{if(Dn&&x){if(x===bn.current){j.replace(x);return}j.commit(x,`external`)}},[x,Dn]);let[On,kn]=_(xt),An=bt??On??M.floors[0]?.id,N=Le(()=>ge(M,An)??ge(M)??fe().floors[0],[M,An]),[jn,Mn]=_(wt);h(()=>Mn(wt),[wt]);let Nn=Le(()=>jn?pe(M,N.id):null,[jn,M,N.id]),Pn=m(e=>{e!==N.id&&(bt===void 0&&kn(e),St?.(e))},[N.id,bt,St]),P=Le(()=>Ce(N),[N]).rooms,[Fn,In]=_(Et),F=Tt??Fn,Ln=m(e=>{Tt===void 0&&In(e),Dt?.(e)},[Tt,Dt]),[Rn,zn]=_(At??mt),I=kt===void 0?Rn:kt,L=g(I);L.current=I;let R=m(e=>{let t=e===null?mt:Array.isArray(e)?e:[e];L.current=t,kt===void 0&&zn(t),jt?.([...t])},[kt,jt]),Bn=m(e=>{let t=L.current,n=t.filter(t=>t.type!==e.type||t.id!==e.id);R(n.length===t.length?[...t,e]:n)},[R]),z=I.length===1?I[0]:null,Vn=m(e=>{let t=new Set;for(let n of e)if(n.type===`node`)t.add(n.id);else if(n.type===`wall`){let e=N.walls[n.id];e&&(t.add(e.a),t.add(e.b))}else if(n.type===`room`){let e=P.find(e=>e.roomId===n.id);for(let n of e?.nodeIds??[])t.add(n)}return t},[N.walls,P]),Hn=Le(()=>Vn(I),[Vn,I]),[Un,Wn]=_(null),[Gn,Kn]=_(Ft??{x:0,y:0,zoom:.05}),B=Pt??Gn,V=m(e=>{Pt===void 0&&Kn(e),It?.(e)},[Pt,It]),[H,qn]=_({width:800,height:420}),[U,Jn]=_([]),[W,Yn]=_(null),[Xn,Zn]=_(Vt),[Qn,$n]=_(Ht);h(()=>Zn(Vt),[Vt]),h(()=>$n(Ht),[Ht]);let[er,tr]=_(Bt);h(()=>tr(Bt),[Bt]);let nr=g(null),[G,rr]=_(null),[K,ir]=_([]),ar=g(0),[or,sr]=_(null),cr=g(null),lr=m(e=>{let t=d(k,B.zoom);for(let n=K.length-1;n>=0;n--){let r=K[n];if(Math.hypot(e.x-r.a.x,e.y-r.a.y)<=t.node)return{id:r.id,end:`a`};if(Math.hypot(e.x-r.b.x,e.y-r.b.y)<=t.node)return{id:r.id,end:`b`}}for(let n=K.length-1;n>=0;n--){let r=K[n];if(s(e,r.a,r.b).dist<=t.wall)return{id:r.id}}return null},[K,k,B.zoom]),[ur,dr]=_(null),q=!cn&&!w,fr=Le(()=>{if(U.length<2)return;let e=U[U.length-2],t=U[U.length-1];return Math.atan2(t.y-e.y,t.x-e.x)},[U]);h(()=>{let e=vn.current;if(!e)return;let t=new ResizeObserver(()=>{let t=e.getBoundingClientRect();t.width>0&&t.height>0&&qn({width:Math.round(t.width),height:Math.round(t.height)})});t.observe(e);let n=e.getBoundingClientRect();return n.width>0&&n.height>0&&qn({width:Math.round(n.width),height:Math.round(n.height)}),()=>t.disconnect()},[]);let pr=m((e,t)=>{let n=vn.current?.getBoundingClientRect()??{left:0,top:0};return Oe(e,t,n,B)},[B]),J=m(e=>({x:(e.x-B.x)*B.zoom,y:(e.y-B.y)*B.zoom}),[B]),Y=m((e,t,n,r,i)=>{let a=Xn!==wn.current,o=Qn!==Tn.current,s=ke(e,{floor:N,pxToWorld:B.zoom>0?1/B.zoom:1,origin:t,referenceAngle:r,excludeNodeIds:n,excludeWallIds:i,options:{enabled:a?[f.Node,f.Intersection,f.Wall,f.Angle,f.Extension,f.Alignment,f.Grid]:[],gridSize:C,angleStepDeg:o?Ut:0,toleranceScreenPx:gn?16:10}});return nr.current=s,s},[N,B.zoom,Xn,Qn,C,Ut,gn]),mr=m(e=>{let t=Object.values(N.walls).filter(t=>t.a===e||t.b===e),n=new Set(t.map(e=>e.id)),r=N.nodes[e];if(!r)return{excludeWallIds:n};let i={x:r.x,y:r.y},a,o=t[0];if(o){let t=o.a===e?o.b:o.a,n=N.nodes[t];n&&(a=Math.atan2(n.y-r.y,n.x-r.x))}return{origin:i,referenceAngle:a,excludeWallIds:n}},[N]),hr=m((e={})=>{let t=e.padding??24,n=me(N);if(!n||n.width<=0||n.height<=0){V({x:-1e3,y:-1e3,zoom:.05});return}let r=Math.min((H.width-t*2)/n.width,(H.height-t*2)/n.height),i=Math.max(Lt,Math.min(Rt,r));V({x:n.minX-(H.width/i-n.width)/2,y:n.minY-(H.height/i-n.height)/2,zoom:i})},[N,H.width,H.height,Lt,Rt,V]),gr=g(!1);h(()=>{zt&&!gr.current&&Object.keys(N.nodes).length!==0&&(H.width<=1||(gr.current=!0,hr()))},[zt,N,H.width,hr]);let _r=m((e,t,n,r=[],i={})=>{if(e===N)return M;let a=be(M,e);bn.current=a,n?i.push===!1?j.replace(a):j.commit(a,t,r):j.updateGesture(a);let o={reason:t,committed:n,targetIds:r};return S?.(a,o),n&&yt?.(a,o),a},[N,M,j,S,yt]),X=m((e,t,n=[],r={})=>{let i=Se(le(e).floor).floor;return _r(i,t,!0,n,r)},[_r]);h(()=>{sn?.({canUndo:j.canUndo,canRedo:j.canRedo})},[j.canUndo,j.canRedo,sn]);let vr=Le(()=>z?.type===`room`?P.find(e=>e.roomId===z.id)??null:null,[z,P]),Z=z?.type===`wall`?N.walls[z.id]:void 0,yr=z?.type===`opening`?N.openings[z.id]:void 0,br=Le(()=>{if(!Z)return null;let e=N.nodes[Z.a],t=N.nodes[Z.b];return!e||!t?null:{x:(e.x+t.x)/2,y:(e.y+t.y)/2}},[Z,N.nodes]),xr=m(()=>{if(!q||!Z)return;let e=se(N,Z.id,.5);e.result.wallIds&&(X(e.floor,`edit-wall`,[e.result.nodeId]),R({type:`node`,id:e.result.nodeId}))},[q,Z,N,X,R]),Sr=m((e,t,n=new Set)=>{if(e.type===`wall`)return{floor:oe(t,e.id).floor};if(e.type===`opening`)return{floor:ae(t,e.id).floor};if(e.type===`node`){let n=ne(t,e.id,{force:!0});if(n.result)return{floor:n.floor,reselect:{type:`wall`,id:n.result.wallId}};let r=t;for(let n of Object.values(t.walls))(n.a===e.id||n.b===e.id)&&(r=oe(r,n.id,{dissolveCollinear:!1}).floor);return{floor:r}}let r=P.find(t=>t.roomId===e.id);if(!r)return{floor:t};let i=new Set;for(let t of P)if(t.roomId!==e.id&&!(t.roomId&&n.has(t.roomId)))for(let e of t.wallIds)i.add(e);let a=t;for(let e of new Set(r.wallIds))i.has(e)||(a=oe(a,e,{dissolveCollinear:!1}).floor);let o={...a.rooms};return delete o[e.id],{floor:{...a,rooms:o}}},[P]),Cr=m(()=>{let e=L.current;if(!q||e.length===0)return;let t={room:0,opening:1,wall:2,node:3},n=[...e].sort((e,n)=>t[e.type]-t[n.type]),r=new Set(n.filter(e=>e.type===`room`).map(e=>e.id)),i=N,a;for(let e of n){let t=Sr(e,i,r);i=t.floor,n.length===1&&(a=t.reselect)}i!==N&&(X(i,`delete`,n.map(e=>e.id)),R(a??null))},[q,N,Sr,X,R]),wr=m(()=>{Jn(e=>e.length===0?e:[]),rr(null)},[]);h(()=>{wr()},[F,wr]);let Tr=m(e=>{if(w)return;if(_n.current?.focus(),dr(null),xn.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),e.currentTarget.setPointerCapture?.(e.pointerId),xn.current.size===2){let[e,t]=[...xn.current.values()];A.current.kind!==`none`&&A.current.kind!==`pan`&&j.cancelGesture(),A.current={kind:`pinch`,startDist:Math.hypot(t.x-e.x,t.y-e.y),startView:B,startMid:{x:(e.x+t.x)/2,y:(e.y+t.y)/2}};return}if(xn.current.size>2)return;if(Sn.current={client:{x:e.clientX,y:e.clientY},moved:!1},e.button===1||Cn.current){A.current={kind:`pan`,startClient:{x:e.clientX,y:e.clientY},startView:B};return}if(e.button!==0)return;let t=pr(e.clientX,e.clientY);if(!q){let e=Ee(N,P,t,d(k,B.zoom));R(e);return}if(F===`rect`){let e=Y(t).point;A.current={kind:`rect`,start:e,current:e},j.beginGesture();return}if(F===`measure`){let e=lr(t);if(e){let n=K.find(t=>t.id===e.id);A.current=e.end?{kind:`measureEnd`,id:e.id,end:e.end}:{kind:`measureMove`,id:e.id,startWorld:t,origA:n.a,origB:n.b};return}let n=Y(t).point;A.current={kind:`measure`,start:n,current:n};return}if(F===`wall`){let e=U[U.length-1],n=Y(t,e,void 0,fr).point;if(U.length===0){Jn([n]);return}let r=U[U.length-1],i=u(N,r,n,{thickness:Gt,type:o.Interior,height:Kt},d(k,B.zoom).node);i.result.wallIds.length>0&&X(i.floor,`draw-wall`,i.result.wallIds),U.length>=2&&Math.hypot(n.x-U[0].x,n.y-U[0].y)<d(k,B.zoom).node?wr():Jn(e=>[...e,n]);return}let n=lt[F];if(n){let e=d(k,B.zoom),r=Ee(N,P,t,e,{accept:[`wall`]});if(r?.type!==`wall`)return;let i=N.walls[r.id],a=N.nodes[i.a],o=N.nodes[i.b],s=Math.hypot(o.x-a.x,o.y-a.y),c=((t.x-a.x)*(o.x-a.x)+(t.y-a.y)*(o.y-a.y))/(s*s||1),ee={...dt[n],...qt?.[n]},u=l(N,{wallId:i.id,kind:n,offset:Math.min(Math.max(c,0),1)*s,width:ee.width,sill:ee.sill,head:ee.head});u.result.openingId&&(X(u.floor,`add-opening`,[u.result.openingId]),R({type:`opening`,id:u.result.openingId}));return}let r=d(k,B.zoom);if(br&&z?.type===`wall`&&Math.hypot(t.x-br.x,t.y-br.y)<=r.node){j.beginGesture(),A.current={kind:`wallSplit`,wallId:z.id,at:br};return}let i=Ee(N,P,t,r),a=Mt&&(e.ctrlKey||e.metaKey);if(!i){a||R(null),A.current=Mt?{kind:`marquee`,start:t,current:t,additive:a,base:L.current}:{kind:`none`};return}if((e.ctrlKey||e.metaKey)&&i.type===`wall`&&N.walls[i.id]){let e=N.walls[i.id];a||R(i),j.beginGesture(),A.current={kind:`wall`,wallId:i.id,startWorld:t,origA:{...N.nodes[e.a]},origB:{...N.nodes[e.b]},moved:!1,detach:!0,toggle:a};return}if(a){Bn(i),A.current={kind:`none`};return}if(L.current.some(e=>e.type===i.type&&e.id===i.id)||R(i),j.beginGesture(),L.current.length>1){let e=[...Vn(L.current)],n={};for(let t of e){let e=N.nodes[t];e&&(n[t]={x:e.x,y:e.y})}A.current={kind:`room`,nodeIds:e,startWorld:t,orig:n,moved:!1};return}if(i.type===`node`)A.current={kind:`node`,nodeId:i.id,moved:!1,...mr(i.id)};else if(i.type===`wall`){let e=N.walls[i.id];A.current={kind:`wall`,wallId:i.id,startWorld:t,origA:{...N.nodes[e.a]},origB:{...N.nodes[e.b]},moved:!1}}else if(i.type===`opening`)A.current={kind:`opening`,openingId:i.id,moved:!1};else{let e=P.find(e=>e.roomId===i.id),n=e?[...new Set(e.nodeIds)]:[],r={};for(let e of n){let t=N.nodes[e];t&&(r[e]={x:t.x,y:t.y})}A.current={kind:`room`,nodeIds:n,startWorld:t,orig:r,moved:!1}}},[w,q,B,F,N,P,k,pr,Y,U,Gt,Kt,qt,X,R,br,z,fr,mr,Vn,Mt,Bn,j,wr,lr,K]),Er=m(e=>{if(w)return;xn.current.has(e.pointerId)&&xn.current.set(e.pointerId,{x:e.clientX,y:e.clientY});let t=A.current;if(t.kind===`pinch`&&xn.current.size>=2){let[e,n]=[...xn.current.values()],r=Math.hypot(n.x-e.x,n.y-e.y);if(t.startDist<=0)return;let i=Math.max(Lt,Math.min(Rt,t.startView.zoom*(r/t.startDist))),a=vn.current?.getBoundingClientRect()??{left:0,top:0},o={x:(e.x+n.x)/2,y:(e.y+n.y)/2},s=Oe(t.startMid.x,t.startMid.y,a,t.startView);V({x:s.x-(o.x-a.left)/i,y:s.y-(o.y-a.top)/i,zoom:i});return}if(Sn.current){let t=e.clientX-Sn.current.client.x,n=e.clientY-Sn.current.client.y;Math.hypot(t,n)>pt&&(Sn.current.moved=!0)}if(t.kind===`pan`){V({x:t.startView.x-(e.clientX-t.startClient.x)/t.startView.zoom,y:t.startView.y-(e.clientY-t.startClient.y)/t.startView.zoom,zoom:t.startView.zoom});return}let n=pr(e.clientX,e.clientY);if(Yn(n),t.kind===`none`){if(!q)return;if(F===`wall`&&U.length>0){let e=Y(n,U[U.length-1],void 0,fr);Yn(e.point),rr(e);return}if(F===`select`){let e=Ee(N,P,n,d(k,B.zoom));De(e,Un)||(Wn(e),Nt?.(e))}F===`measure`&&sr(lr(n)?.id??null);return}if(Sn.current?.moved){if(t.kind===`measureEnd`){let e=Y(n).point;ir(n=>n.map(n=>n.id===t.id?{...n,[t.end]:e}:n)),Yn(e);return}if(t.kind===`measureMove`){let e=n.x-t.startWorld.x,r=n.y-t.startWorld.y;ir(n=>n.map(n=>n.id===t.id?{...n,a:{x:t.origA.x+e,y:t.origA.y+r},b:{x:t.origB.x+e,y:t.origB.y+r}}:n));return}if(t.kind===`rect`||t.kind===`measure`){A.current={...t,current:Y(n).point},Yn(Y(n).point);return}if(t.kind===`marquee`){A.current={...t,current:n},Yn(n);return}if(t.kind===`wallSplit`){let e=se(N,t.wallId,t.at);if(!e.result.wallIds){A.current={kind:`none`};return}let r=e.result.nodeId,i=N.walls[t.wallId],a=i?e.floor.nodes[i.a]:void 0,o=i?e.floor.nodes[i.b]:void 0,s={origin:a?{x:a.x,y:a.y}:void 0,referenceAngle:a&&o?Math.atan2(o.y-a.y,o.x-a.x):void 0,excludeWallIds:new Set(e.result.wallIds)},c=Y(n,s.origin,new Set([r]),s.referenceAngle,s.excludeWallIds).point;A.current={kind:`node`,nodeId:r,moved:!0,...s},R({type:`node`,id:r}),rr(nr.current),_r(ie(e.floor,r,c).floor,`move-node`,!1,[r]);return}if(t.kind===`node`){let e=Y(n,t.origin,new Set([t.nodeId]),t.referenceAngle,t.excludeWallIds).point;rr(nr.current),A.current={...t,moved:!0},_r(ie(N,t.nodeId,e).floor,`move-node`,!1,[t.nodeId]);return}if(t.kind===`wall`){let e=N.walls[t.wallId];if(!e)return;let r=t.origB.x-t.origA.x,i=t.origB.y-t.origA.y,a=Math.hypot(r,i);if(a<1e-6)return;let o={x:-i/a,y:r/a},s=(n.x-t.startWorld.x)*o.x+(n.y-t.startWorld.y)*o.y,c=Vt!==wn.current&&C>0?C:1,l=Math.round(s/c)*c,ee=Math.max(c,10);if(t.detach){if(Math.abs(l)<ee)return;let e=te(N,t.wallId,{x:o.x*l,y:o.y*l});if(!e.result)return;A.current={...t,detach:!1,toggle:!1,detachedSign:Math.sign(l),moved:!0},R({type:`wall`,id:t.wallId}),_r(e.floor,`move-wall`,!1,[t.wallId]);return}let u=ie(N,e.a,{x:t.origA.x+o.x*l,y:t.origA.y+o.y*l}).floor;u=ie(u,e.b,{x:t.origB.x+o.x*l,y:t.origB.y+o.y*l}).floor,t.detachedSign&&Math.abs(l)<10?(u=le(u).floor,A.current={...t,detachedSign:void 0,moved:!0}):A.current={...t,moved:!0},_r(u,`move-wall`,!1,[t.wallId]);return}if(t.kind===`opening`){let e=N.openings[t.openingId];if(!e)return;let r=N.walls[e.wallId],i=N.nodes[r.a],a=N.nodes[r.b],o=Math.hypot(a.x-i.x,a.y-i.y),s=((n.x-i.x)*(a.x-i.x)+(n.y-i.y)*(a.y-i.y))/(o*o||1);A.current={...t,moved:!0},_r(ce(N,t.openingId,{offset:Math.min(Math.max(s,0),1)*o}).floor,`move-opening`,!1,[t.openingId]);return}if(t.kind===`room`){let e=n.x-t.startWorld.x,r=n.y-t.startWorld.y,i=Vt!==wn.current&&C>0?C:1,a=Math.round(e/i)*i,o=Math.round(r/i)*i,s=N;for(let e of t.nodeIds){let n=t.orig[e];n&&(s=ie(s,e,{x:n.x+a,y:n.y+o}).floor)}A.current={...t,moved:!0},_r(s,`move-room`,!1,t.nodeIds)}}},[w,q,F,N,P,Un,k,B.zoom,Lt,Rt,C,Vt,pr,Y,_r,V,R,U,fr,Nt,lr]),Dr=m((e,t)=>{xn.current.delete(e.pointerId);let n=A.current;A.current={kind:`none`};let r=Sn.current?.moved??!1;if(Sn.current=null,rr(null),n.kind===`none`||n.kind===`pan`||n.kind===`pinch`)return;if(n.kind===`marquee`){if(t||!r){t&&R([...n.base]);return}let e=Math.min(n.start.x,n.current.x),i=Math.max(n.start.x,n.current.x),a=Math.min(n.start.y,n.current.y),o=Math.max(n.start.y,n.current.y),s=[];for(let t of Object.values(N.nodes))t.x>=e&&t.x<=i&&t.y>=a&&t.y<=o&&s.push({type:`node`,id:t.id});if(n.additive){let e=new Set(n.base.map(e=>`${e.type}:${e.id}`));R([...n.base,...s.filter(t=>!e.has(`${t.type}:${t.id}`))])}else R(s);return}if(t){let e=j.cancelGesture();e&&S?.(e,{reason:`external`,committed:!1,targetIds:[]});return}if(n.kind===`measureEnd`||n.kind===`measureMove`)return;if(n.kind===`measure`){let e=Math.hypot(n.current.x-n.start.x,n.current.y-n.start.y);r&&e>ft&&(ar.current+=1,ir(e=>[...e,{id:ar.current,a:n.start,b:n.current}]));return}if(n.kind===`rect`){if(!r){j.cancelGesture();return}let e=ee(N,n.start,n.current,{thickness:Gt,type:o.Interior,height:Kt},d(k,B.zoom).node);if(e.result.wallIds.length===0){j.cancelGesture();return}let t=j.endGesture();X(e.floor,`draw-rect`,e.result.wallIds,{push:!t});return}if(!r){j.cancelGesture(),n.kind===`wall`&&n.toggle&&Bn({type:`wall`,id:n.wallId});return}if(n.kind===`node`){let e=N.nodes[n.nodeId];if(e){let t=d(k,B.zoom).node,r=Object.values(N.nodes).find(r=>r.id!==n.nodeId&&Math.hypot(r.x-e.x,r.y-e.y)<=t);if(r){let e=j.endGesture();X(re(N,r.id,n.nodeId).floor,`move-node`,[r.id],{push:!e}),R({type:`node`,id:r.id});return}}}let i=j.endGesture(),a=n.kind===`wall`?`move-wall`:n.kind===`opening`?`move-opening`:n.kind===`room`?`move-room`:`move-node`;X(N,a,[],{push:!i})},[N,j,k,B.zoom,Gt,Kt,X,R,Bn,S]);h(()=>{let e=vn.current;if(!e||w)return;function t(t){t.preventDefault();let n=e.getBoundingClientRect(),r=Math.exp(-t.deltaY*.002);V((()=>{let e=Or.current,i=Math.max(Lt,Math.min(Rt,e.zoom*r)),a=Oe(t.clientX,t.clientY,n,e);return{x:a.x-(t.clientX-n.left)/i,y:a.y-(t.clientY-n.top)/i,zoom:i}})())}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[w,Lt,Rt,V]);let Or=g(B);Or.current=B;let kr=m(e=>{let t=Math.max(Lt,Math.min(Rt,B.zoom*e)),n={x:B.x+H.width/2/B.zoom,y:B.y+H.height/2/B.zoom};V({x:n.x-H.width/2/t,y:n.y-H.height/2/t,zoom:t})},[B,H,Lt,Rt,V]),Ar=m(()=>{if(an===`none`)return;let e=j.undo();e&&(bn.current=e,S?.(e,{reason:`undo`,committed:!0,targetIds:[]}),yt?.(e,{reason:`undo`,committed:!0,targetIds:[]}))},[an,j,S,yt]),jr=m(()=>{if(an===`none`)return;let e=j.redo();e&&(bn.current=e,S?.(e,{reason:`redo`,committed:!0,targetIds:[]}),yt?.(e,{reason:`redo`,committed:!0,targetIds:[]}))},[an,j,S,yt]),Mr=m(()=>{let e=P.filter(e=>e.roomId).map(e=>({type:`room`,id:e.roomId}));if(e.length>0){R(e);return}R(Object.keys(N.nodes).map(e=>({type:`node`,id:e})))},[P,N.nodes,R]),Nr=m((e,t)=>{if(!q||Hn.size===0)return;let n=C>0?C:100,r=Tn.current?n*10:n,i=N;for(let n of Hn){let a=i.nodes[n];a&&(i=ie(i,n,{x:a.x+e*r,y:a.y+t*r}).floor)}X(i,`nudge`,[...Hn])},[q,Hn,N,C,X]),Pr=m(e=>{if(w)return;let t=e.target;if(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement){e.key===`Escape`&&t.blur();return}if(e.key===`Shift`&&(Tn.current=!0),e.key===`Alt`&&(wn.current=!0),e.key===` `&&!Cn.current){Cn.current=!0,e.preventDefault();return}let n=e.metaKey||e.ctrlKey;if(n&&e.key.toLowerCase()===`z`){e.preventDefault(),e.shiftKey?jr():Ar();return}if(n&&e.key.toLowerCase()===`a`){e.preventDefault(),Mt&&Mr();return}if(n&&e.key.toLowerCase()===`y`){e.preventDefault(),jr();return}if(e.key===`Escape`){U.length>0?wr():K.length>0?ir([]):R(null);return}if(e.key===`Enter`&&F===`wall`){wr();return}if(e.key===`Delete`||e.key===`Backspace`){if(e.preventDefault(),F===`measure`){or!==null&&(ir(e=>e.filter(e=>e.id!==or)),sr(null));return}Cr();return}if(e.key===`+`||e.key===`=`){kr(1.25);return}if(e.key===`-`){kr(1/1.25);return}if(e.key===`0`){hr();return}if(e.key.startsWith(`Arrow`)){e.preventDefault();let t={ArrowLeft:[-1,0],ArrowRight:[1,0],ArrowUp:[0,-1],ArrowDown:[0,1]}[e.key];t&&Nr(t[0],t[1]);return}let r=e.key.toLowerCase();if(r===`s`){Zn(e=>!e);return}if(r===`l`){$n(e=>!e);return}if(r===`g`){tr(e=>!e);return}let i=ct[e.key.toLowerCase()];i&&q&&Ot.includes(i)&&(Ln(i),wr())},[w,q,Ot,F,U,K.length,or,jr,Ar,R,wr,Cr,kr,hr,Nr,Ln,Mt,Mr]),Q=m((e,t,n)=>{bn.current=e,n?.resetHistory?(j.clearHistory(),j.replace(e)):j.commit(e,t);let r={reason:t,committed:!0,targetIds:[]};S?.(e,r),yt?.(e,r)},[j,S,yt]),Fr=m((e={})=>{let{plan:t,floor:n}=ue(M,{...e,index:he(M,N.id)+1});return Q(t,`add-floor`),Pn(n.id),n.id},[M,N.id,Q,Pn]),Ir=m(()=>{let{plan:e,floor:t}=de(M,N.id);return t?(Q(e,`duplicate-floor`),Pn(t.id),t.id):null},[M,N.id,Q,Pn]),Lr=m(e=>{let t=e??N.id,n=ve(M,t);if(n!==M&&(Q(n,`remove-floor`),t===N.id)){let e=he(M,t);Pn(n.floors[Math.max(0,e-1)].id)}},[M,N.id,Q,Pn]),Rr=m((e,t)=>{let n=_e(M,e,t);n!==M&&Q(n,`move-floor`)},[M,Q]),zr=m((e,t)=>{let n=xe(M,e,t);n!==M&&Q(n,`edit-floor`)},[M,Q]),Br=m((e,t)=>{let n=ye(M,e,t);n!==M&&Q(n,`rename-floor`)},[M,Q]),Vr=m(e=>{let t=(e??nn??M.name??``).trim()||`floor-plan`,n=URL.createObjectURL(new Blob([je(M)],{type:`application/json`})),r=document.createElement(`a`);r.href=n,r.download=t.endsWith(`.json`)?t:`${t}.json`,r.click(),setTimeout(()=>URL.revokeObjectURL(n),0)},[nn,M]),Hr=m(e=>{let t=Ae(e);return t.plan&&Q(t.plan,`import`),dr(t.plan&&t.issues.length===0?null:t.issues),rn?.(t),t},[rn,Q]),Ur=m(e=>{e.text().then(e=>Hr(e)).catch(e=>{let t=[`Could not read that file: ${e.message}`];dr(t),rn?.({plan:null,issues:t})})},[Hr,rn]),Wr=m(()=>ir([]),[]),Gr=m(e=>{e.key===`Shift`&&(Tn.current=!1),e.key===`Alt`&&(wn.current=!1),e.key===` `&&(Cn.current=!1)},[]);Ie(Fe,()=>({getPlan:()=>M,setPlan:(e,t)=>Q(e,`import`,t),clear:()=>Q(fe(),`clear`),getFloorId:()=>N.id,setFloorId:Pn,addFloor:e=>Fr(e),duplicateFloor:Ir,removeFloor:Lr,renameFloor:Br,moveFloor:Rr,setFloorHeight:zr,clearMeasurements:Wr,download:Vr,loadJson:Hr,undo:Ar,redo:jr,canUndo:()=>an!==`none`&&j.canUndo,canRedo:()=>an!==`none`&&j.canRedo,clearHistory:j.clearHistory,getSelection:()=>[...L.current],select:R,addToSelection:e=>{let t=Array.isArray(e)?e:[e],n=new Set(L.current.map(e=>`${e.type}:${e.id}`));R([...L.current,...t.filter(e=>!n.has(`${e.type}:${e.id}`))])},toggleSelection:Bn,selectAll:Mr,deleteSelection:Cr,getView:()=>B,setView:V,zoomBy:kr,fitToContent:hr,toWorld:pr,toScreen:J,getSvgElement:()=>yn.current}),[M,j,Q,N,Pn,Fr,Ir,Lr,Br,Rr,zr,Wr,Vr,Hr,Ar,jr,an,R,Bn,Mr,Cr,B,V,kr,hr,pr,J]);let $=A.current,Kr=Le(()=>{if(!q)return null;let e=[],t=[...K,...$.kind===`measure`?[{id:-1,a:$.start,b:$.current}]:[]];for(let n of t){let t=J(n.a),r=J(n.b),i=Math.hypot(n.b.x-n.a.x,n.b.y-n.a.y);if(i<ft)continue;let a=Math.atan2(n.b.y-n.a.y,n.b.x-n.a.x),o=-Math.sin(a)*5,s=Math.cos(a)*5,c={x:(t.x+r.x)/2,y:(t.y+r.y)/2};if(e.push(b(`g`,{className:v(p.roomDrawerMeasureLine,or===n.id&&p.roomDrawerMeasureLineHovered,D?.measureLine),children:[y(`line`,{x1:t.x,y1:t.y,x2:r.x,y2:r.y}),y(`line`,{x1:t.x-o,y1:t.y-s,x2:t.x+o,y2:t.y+s}),y(`line`,{x1:r.x-o,y1:r.y-s,x2:r.x+o,y2:r.y+s})]},`measure-${n.id}`)),F===`measure`&&n.id>=0)for(let[i,a]of[[`a`,t],[`b`,r]])e.push(y(`circle`,{className:p.roomDrawerMeasureGrip,cx:a.x,cy:a.y,r:4},`measure-grip-${n.id}-${i}`));e.push(y(`text`,{className:v(p.roomDrawerMeasure,D?.measureLine),x:c.x,y:c.y-8,textAnchor:`middle`,children:`${Yt(i)} · ${_t(a)}`},`measure-label-${n.id}`))}if(Wt&&G&&(G.guides.forEach((t,n)=>{let r=J(t.a),i=J(t.b);e.push(y(`line`,{className:v(p.roomDrawerGuide,t.kind===f.Angle&&p.roomDrawerGuideAngle),x1:r.x,y1:r.y,x2:i.x,y2:i.y},`guide-${n}`))}),G.kind!==f.None&&G.kind!==f.Grid)){let t=J(G.point);e.push(y(`rect`,{className:p.roomDrawerSnapMarker,x:t.x-4,y:t.y-4,width:8,height:8},`snap-marker`))}if($.kind===`rect`){let t=J($.start),n=J($.current),r=Math.min(t.x,n.x),i=Math.min(t.y,n.y),a=Math.max(t.x,n.x),o=Math.max(t.y,n.y);e.push(y(`rect`,{className:p.roomDrawerPreview,x:r,y:i,width:a-r,height:o-i},`rect-preview`));let s=Math.abs($.current.x-$.start.x),c=Math.abs($.current.y-$.start.y);Jt&&(s>0||c>0)&&(e.push(y(`text`,{className:p.roomDrawerMeasure,x:(r+a)/2,y:i-8,textAnchor:`middle`,children:Yt(s)},`rect-width`),y(`text`,{className:p.roomDrawerMeasure,x:r-8,y:(i+o)/2,textAnchor:`end`,dominantBaseline:`central`,children:Yt(c)},`rect-height`)),s>0&&c>0&&e.push(y(`text`,{className:v(p.roomDrawerMeasure,p.roomDrawerMeasureSecondary),x:(r+a)/2,y:(i+o)/2,textAnchor:`middle`,dominantBaseline:`central`,children:Xt(s*c)},`rect-area`)))}if(F===`wall`&&U.length>0){let t=[...U,W].filter(Boolean).map(J);if(e.push(y(`polyline`,{className:p.roomDrawerPreview,points:t.map(e=>`${e.x},${e.y}`).join(` `),fill:`none`},`chain`)),t.forEach((t,n)=>{e.push(y(`circle`,{className:p.roomDrawerHandle,cx:t.x,cy:t.y,r:4},`chain-dot-${n}`))}),Jt&&W&&U.length>0){let t=U[U.length-1],n=Math.hypot(W.x-t.x,W.y-t.y),r=J({x:(t.x+W.x)/2,y:(t.y+W.y)/2}),i=G?.kind===f.Angle;e.push(y(`text`,{className:v(p.roomDrawerMeasure,i&&p.roomDrawerMeasureLocked),x:r.x,y:r.y-8,textAnchor:`middle`,children:`${Yt(n)} · ${_t(G?.angleRelativeTo===`reference`&&fr!==void 0?Math.atan2(W.y-t.y,W.x-t.x)-fr:Math.atan2(W.y-t.y,W.x-t.x))}${G?.angleRelativeTo===`reference`?` rel`:``}`},`chain-len`))}}let n=new Set(I.filter(e=>e.type===`node`).map(e=>e.id));for(let t of Hn){let r=N.nodes[t];if(!r)continue;let i=J(r);e.push(y(`circle`,{className:v(p.roomDrawerHandle,n.has(t)&&p.roomDrawerHandleActive),cx:i.x,cy:i.y,r:5},`handle-${t}`))}if($.kind===`marquee`&&Sn.current?.moved){let t=J($.start),n=J($.current);e.push(y(`rect`,{className:p.roomDrawerMarquee,x:Math.min(t.x,n.x),y:Math.min(t.y,n.y),width:Math.abs(n.x-t.x),height:Math.abs(n.y-t.y)},`marquee`))}if(br&&$.kind!==`node`){let t=J(br);e.push(y(`circle`,{className:p.roomDrawerMidHandle,cx:t.x,cy:t.y,r:4},`midpoint`))}if(Jt&&$.kind===`room`&&$.moved){let t=new Set($.nodeIds),n=$.nodeIds.find(e=>N.nodes[e]&&$.orig[e]);if(n){let t=N.nodes[n],r=$.orig[n],i=t.x-r.x,a=t.y-r.y,o=z?.type===`room`?P.find(e=>e.roomId===z.id):void 0,s=J(o?o.anchor:t);e.push(y(`text`,{className:v(p.roomDrawerMeasure,p.roomDrawerMeasureOffset),x:s.x,y:s.y-26,textAnchor:`middle`,children:`${Yt(Math.hypot(i,a))} · ${_t(Math.atan2(a,i))}`},`room-offset`))}for(let n of Object.values(N.walls)){if(t.has(n.a)===t.has(n.b))continue;let r=N.nodes[n.a],i=N.nodes[n.b];if(!r||!i)continue;let a=t.has(n.a)?r:i,o=t.has(n.a)?i:r,s=J({x:(r.x+i.x)/2,y:(r.y+i.y)/2});e.push(y(`text`,{className:v(p.roomDrawerMeasure,p.roomDrawerMeasureSecondary),x:s.x,y:s.y-8,textAnchor:`middle`,children:`${Yt(Math.hypot(o.x-a.x,o.y-a.y))} · ${_t(Math.atan2(o.y-a.y,o.x-a.x))}`},`room-stretch-${n.id}`))}}if(Jt&&(z?.type===`node`||z?.type===`wall`)){let t=[],n=new Set,r=(e,r,i)=>{if(n.has(e))return;let a=N.walls[e];a&&(n.add(e),t.push({wall:a,from:r,primary:i}))};if(z.type===`node`)for(let e of Object.values(N.walls))(e.a===z.id||e.b===z.id)&&r(e.id,z.id,!0);else{let e=N.walls[z.id];if(e){r(e.id,e.a,!0);for(let t of Object.values(N.walls))if(t.id!==e.id)for(let n of[e.a,e.b])(t.a===n||t.b===n)&&r(t.id,n,!1)}}let i=G?.kind===f.Angle&&$.kind!==`none`;for(let{wall:n,from:r,primary:a}of t){let t=N.nodes[n.a],o=N.nodes[n.b];if(!t||!o)continue;let s=n.a===r?t:o,c=n.a===r?o:t,l=J({x:(t.x+o.x)/2,y:(t.y+o.y)/2});e.push(y(`text`,{className:v(p.roomDrawerMeasure,!a&&p.roomDrawerMeasureSecondary,a&&i&&p.roomDrawerMeasureLocked),x:l.x,y:l.y-8,textAnchor:`middle`,children:`${Yt(Math.hypot(c.x-s.x,c.y-s.y))} · ${_t(Math.atan2(c.y-s.y,c.x-s.x))}`},`measure-${n.id}`))}}return y(ot,{children:e})},[q,$,F,U,W,I,N,P,z,Hn,br,Jt,Wt,G,fr,Yt,Xt,K,or,D?.measureLine,J]),qr={select:{icon:Be,label:T?.select??`Select and edit`,key:`V`},wall:{icon:$e,label:T?.wall??`Draw walls`,key:`W`},rect:{icon:nt,label:T?.rect??`Draw a room`,key:`R`},door:{icon:Ge,label:T?.door??`Add a door`,key:`D`},window:{icon:at,label:T?.window??`Add a window`,key:`N`},archway:{icon:Je,label:T?.archway??`Add an archway`,key:`A`},measure:{icon:tt,label:T?.measure??`Measure`,key:`M`}},Jr=q?F===`wall`?T?.hintWall??`Click to place corners · Shift for a fixed angle, L to latch it · Click the first corner or press Enter to close`:F===`rect`?T?.hintRect??`Drag to draw a room`:F===`measure`?T?.hintMeasure??`Drag to measure · Drag an end or the line to adjust it · Delete removes one, Escape clears them`:lt[F]?T?.hintOpening??`Click a wall to cut an opening into it`:T?.hintSelect??(Mt?`Drag a corner to reshape · Drag a wall to push it, and the room next door moves with it · Ctrl-click or drag a box to select several · Delete to remove`:`Drag a corner to reshape · Drag a wall to push it, and the room next door moves with it · Drag the dot on a selected wall to add a corner · Delete to remove`):``,Yr=I.length===0?T?.selectedFloor??`Floor`:I.length>1?(T?.selectedCount??`{count} selected`).replace(`{count}`,String(I.length)):yr?T?.selectedOpening??ut[yr.kind]:Z?T?.selectedWall??`Wall`:z?.type===`room`?T?.selectedRoom??`Room`:T?.selectedCorner??`Corner`,Xr=q?Ot:[];return b(`div`,{...hn,ref:_n,className:v(p.roomDrawer,w&&p.roomDrawerDisabled,pn,D?.root),style:{...mn,...O?.root},role:`application`,"aria-label":fn??`Floor plan editor`,tabIndex:w?-1:0,onKeyDown:Pr,onKeyUp:Gr,children:[Zt&&b(`div`,{className:v(p.roomDrawerToolbar,D?.toolbar),style:O?.toolbar,role:`toolbar`,"aria-label":`Drawing tools`,children:[Xr.map(e=>{let n=qr[e];return y(`button`,{type:`button`,className:v(p.roomDrawerToolButton,e===F&&p.roomDrawerToolButtonActive,D?.toolButton),style:O?.toolButton,title:`${n.label} (${n.key})`,"aria-label":n.label,"aria-pressed":e===F,onClick:()=>{Ln(e),wr()},children:t(E?.[e]??n.icon,{className:v(p.roomDrawerToolIcon,D?.toolIcon),style:O?.toolIcon})},e)}),Xr.length>0&&y(`span`,{className:p.roomDrawerToolbarSeparator}),q&&b(ot,{children:[[{on:Xn,toggle:()=>Zn(e=>!e),icon:E?.snap??Xe,label:T?.snap??`Snap to grid and geometry`,key:`S`},{on:Qn,toggle:()=>$n(e=>!e),icon:E?.angleLock??qe,label:T?.angleLock??`Lock to ${Ut}° angles`,key:`L`},{on:er,toggle:()=>tr(e=>!e),icon:E?.grid??Ue,label:T?.grid??`Show grid`,key:`G`},...pe(M,N.id)?[{on:jn,toggle:()=>Mn(e=>!e),icon:E?.underlay??Ye,label:T?.underlay??`Show the floor below`,key:`B`}]:[]].map(e=>y(`button`,{type:`button`,className:v(p.roomDrawerToolButton,e.on&&p.roomDrawerToolButtonOn,D?.toolButton),style:O?.toolButton,title:`${e.label} (${e.key})`,"aria-label":e.label,"aria-pressed":e.on,onClick:e.toggle,children:t(e.icon,{className:v(p.roomDrawerToolIcon,D?.toolIcon),style:O?.toolIcon})},e.key)),y(`span`,{className:p.roomDrawerToolbarSeparator})]}),en&&an!==`none`&&q&&b(ot,{children:[y(`button`,{type:`button`,className:v(p.roomDrawerViewButton,D?.viewButton),style:O?.viewButton,title:T?.undo??`Undo`,"aria-label":T?.undo??`Undo`,disabled:!j.canUndo,onClick:Ar,children:t(E?.undo??Ve)}),y(`button`,{type:`button`,className:v(p.roomDrawerViewButton,D?.viewButton),style:O?.viewButton,title:T?.redo??`Redo`,"aria-label":T?.redo??`Redo`,disabled:!j.canRedo,onClick:jr,children:t(E?.redo??He)}),y(`span`,{className:p.roomDrawerToolbarSeparator})]}),tn&&b(ot,{children:[y(`button`,{type:`button`,className:v(p.roomDrawerViewButton,D?.viewButton),style:O?.viewButton,title:T?.download??`Download plan`,"aria-label":T?.download??`Download plan`,onClick:()=>Vr(),children:t(E?.download??Ke)}),q&&y(`button`,{type:`button`,className:v(p.roomDrawerViewButton,D?.viewButton),style:O?.viewButton,title:T?.upload??`Open a plan file`,"aria-label":T?.upload??`Open a plan file`,onClick:()=>cr.current?.click(),children:t(E?.upload??it)}),y(`span`,{className:p.roomDrawerToolbarSeparator})]}),b(`div`,{className:v(p.roomDrawerViewControls,D?.viewControls),style:O?.viewControls,children:[y(`button`,{type:`button`,className:v(p.roomDrawerViewButton,D?.viewButton),style:O?.viewButton,title:T?.zoomOut??`Zoom out`,"aria-label":T?.zoomOut??`Zoom out`,onClick:()=>kr(1/1.25),children:t(E?.zoomOut??Ze)}),b(`button`,{type:`button`,className:v(p.roomDrawerZoomLabel,D?.zoomLabel),style:O?.zoomLabel,title:T?.fit??`Fit to content`,onClick:()=>hr(),children:[Math.round(B.zoom*1e3)/10,`%`]}),y(`button`,{type:`button`,className:v(p.roomDrawerViewButton,D?.viewButton),style:O?.viewButton,title:T?.zoomIn??`Zoom in`,"aria-label":T?.zoomIn??`Zoom in`,onClick:()=>kr(1.25),children:t(E?.zoomIn??Qe)})]})]}),Ct&&M.floors.length>0&&b(`div`,{className:v(p.roomDrawerFloorBar,D?.floorBar),style:O?.floorBar,role:`tablist`,"aria-label":T?.selectedFloor??`Floor`,children:[[...M.floors].reverse().map(e=>y(`button`,{type:`button`,role:`tab`,className:v(p.roomDrawerFloorTab,e.id===N.id&&p.roomDrawerFloorTabActive,D?.floorTab),style:O?.floorTab,"aria-selected":e.id===N.id,onClick:()=>Pn(e.id),children:e.label},e.id)),q&&y(`button`,{type:`button`,className:v(p.roomDrawerFloorTab,p.roomDrawerFloorTabAdd),title:T?.addFloor??`Add a floor above`,"aria-label":T?.addFloor??`Add a floor above`,onClick:()=>Fr(),children:t(E?.addFloor??et)})]}),y(`div`,{ref:vn,className:v(p.roomDrawerCanvasWrapper,q&&F!==`select`&&p.roomDrawerCanvasWrapperDrawing,D?.canvasWrapper),style:{height:ln,...O?.canvasWrapper},onPointerDown:Tr,onPointerMove:Er,onPointerUp:e=>Dr(e,!1),onPointerCancel:e=>Dr(e,!0),children:y(Ne,{ref:yn,floor:N,underlay:Nn,rooms:P,view:B,size:H,selection:I,hovered:Un,interactiveRooms:!1,showGrid:er,gridSize:C,showRoomLabels:!0,formatArea:Xt,getRoomColor:un,renderRoomLabel:dn,overlay:Kr,classNames:D,styles:O})}),Qt&&q&&b(`div`,{className:v(p.roomDrawerInspector,D?.inspector),style:O?.inspector,children:[y(`span`,{className:v(p.roomDrawerInspectorKind,I.length===0&&p.roomDrawerInspectorKindEmpty,D?.inspectorLabel),children:Yr}),I.length===0&&b(ot,{children:[y(i,{className:v(p.roomDrawerInspectorName,D?.inspectorField),style:O?.inspectorField,label:T?.floorName??`Floor name`,value:N.label,onChange:e=>Br(N.id,e)}),y(Me,{className:v(p.roomDrawerInspectorField,D?.inspectorField),style:O?.inspectorField,label:T?.floorHeight??`Height (mm)`,title:`Storey height. The floors above move to sit on top of it.`,value:N.height,decimalScale:0,min:500,step:100,showArrows:!0,onChange:e=>{e!==void 0&&zr(N.id,e)}}),M.floors.length>1&&b(ot,{children:[y(`button`,{type:`button`,className:v(p.roomDrawerInspectorAction,D?.inspectorField),style:O?.inspectorField,title:T?.moveFloorUp??`Move this floor up`,"aria-label":T?.moveFloorUp??`Move this floor up`,disabled:he(M,N.id)>=M.floors.length-1,onClick:()=>Rr(N.id,he(M,N.id)+1),children:t(E?.moveFloorUp??ze)}),y(`button`,{type:`button`,className:v(p.roomDrawerInspectorAction,D?.inspectorField),style:O?.inspectorField,title:T?.moveFloorDown??`Move this floor down`,"aria-label":T?.moveFloorDown??`Move this floor down`,disabled:he(M,N.id)<=0,onClick:()=>Rr(N.id,he(M,N.id)-1),children:t(E?.moveFloorDown??Re)})]}),y(`button`,{type:`button`,className:v(p.roomDrawerInspectorAction,D?.inspectorField),style:O?.inspectorField,title:T?.duplicateFloor??`Copy this floor to a new one above`,onClick:()=>Ir(),children:t(E?.duplicateFloor??We)}),M.floors.length>1&&y(n,{className:p.roomDrawerInspectorDelete,icon:E?.delete??rt,title:T?.deleteFloor??`Delete this floor`,onClick:()=>Lr()})]}),vr?.meta&&b(ot,{children:[y(i,{className:v(p.roomDrawerInspectorName,D?.inspectorField),style:O?.inspectorField,label:T?.roomName??`Room name`,value:vr.meta.name,onChange:e=>{let t=vr.meta;X({...N,rooms:{...N.rooms,[t.id]:{...t,name:e}}},`edit-room`,[t.id])}}),y(`span`,{className:v(p.roomDrawerInspectorLabel,D?.inspectorLabel),children:Xt(vr.area)})]}),Z&&y(`button`,{type:`button`,className:v(p.roomDrawerInspectorAction,D?.inspectorField),style:O?.inspectorField,onClick:xr,title:T?.addCorner??`Add a corner to this wall`,children:T?.addCorner??`Add corner`}),Z&&y(Me,{className:v(p.roomDrawerInspectorField,D?.inspectorField),style:O?.inspectorField,label:T?.thickness??`Thickness (mm)`,value:Z.thickness,decimalScale:0,min:10,showArrows:!0,step:10,onChange:e=>{e!==void 0&&X({...N,walls:{...N.walls,[Z.id]:{...Z,thickness:e}}},`edit-wall`,[Z.id])}}),yr&&b(ot,{children:[y(Me,{className:v(p.roomDrawerInspectorField,D?.inspectorField),style:O?.inspectorField,label:T?.width??`Width (mm)`,value:yr.width,decimalScale:0,min:100,step:50,showArrows:!0,onChange:e=>{e!==void 0&&X(ce(N,yr.id,{width:e}).floor,`edit-opening`,[yr.id])}}),y(Me,{className:v(p.roomDrawerInspectorField,D?.inspectorField),style:O?.inspectorField,label:T?.sill??`Sill (mm)`,title:`How far above the floor the opening starts. Stored for a 3D view; it does not change the plan.`,showArrows:!0,value:yr.sill,decimalScale:0,min:0,step:50,onChange:e=>{e!==void 0&&X(ce(N,yr.id,{sill:e}).floor,`edit-opening`,[yr.id])}})]}),I.length>0&&y(n,{className:p.roomDrawerInspectorDelete,icon:E?.delete??rt,title:T?.deleteSelection??`Delete selection`,onClick:Cr})]}),tn&&q&&y(`input`,{ref:cr,type:`file`,accept:`application/json,.json`,className:p.roomDrawerFileInput,tabIndex:-1,"aria-hidden":`true`,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&Ur(t)}}),$t&&(ur!==null||Jr)&&y(`div`,{className:v(p.roomDrawerHint,ur!==null&&p.roomDrawerHintReport,D?.hint),style:O?.hint,role:ur===null?void 0:`status`,children:ur===null?Jr:ur.length===0?T?.importFailed??`That file could not be read as a floor plan`:ur.join(` · `)})]})});export{x as default};
2
2
  //# sourceMappingURL=roomDrawer.mjs.map