@ahrowe/ui 0.27.0 → 0.29.0

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 (666) hide show
  1. package/dist/esm/common/accordion/accordion.mjs +1 -1
  2. package/dist/esm/common/accordion/accordion.mjs.map +1 -1
  3. package/dist/esm/common/accordion/accordion.module.mjs +1 -1
  4. package/dist/esm/common/accordion/accordion.module.mjs.map +1 -1
  5. package/dist/esm/common/accordion/accordion.plain.module.mjs +1 -1
  6. package/dist/esm/common/accordion/accordion.plain.module.mjs.map +1 -1
  7. package/dist/esm/common/accordion/accordion.primary.module.mjs +1 -1
  8. package/dist/esm/common/accordion/accordion.primary.module.mjs.map +1 -1
  9. package/dist/esm/common/actionButtons/actionButtons.mjs.map +1 -1
  10. package/dist/esm/common/actionButtons/actionButtons.module.mjs +1 -1
  11. package/dist/esm/common/actionButtons/actionButtons.module.mjs.map +1 -1
  12. package/dist/esm/common/actionIcon/actionIcon.mjs.map +1 -1
  13. package/dist/esm/common/actionIcon/actionIcon.module.mjs +1 -1
  14. package/dist/esm/common/actionIcon/actionIcon.module.mjs.map +1 -1
  15. package/dist/esm/common/alert/alert.mjs.map +1 -1
  16. package/dist/esm/common/alert/alert.module.mjs +1 -1
  17. package/dist/esm/common/animatedIcon/animatedIcon.mjs.map +1 -1
  18. package/dist/esm/common/animatedIcon/animatedIcon.module.mjs +1 -1
  19. package/dist/esm/common/animatedIcon/animatedIcon.module.mjs.map +1 -1
  20. package/dist/esm/common/animatedLogo/animatedLogo.mjs.map +1 -1
  21. package/dist/esm/common/animatedLogo/animatedLogo.module.mjs +1 -1
  22. package/dist/esm/common/animatedText/animatedText.mjs +1 -1
  23. package/dist/esm/common/animatedText/animatedText.mjs.map +1 -1
  24. package/dist/esm/common/animatedText/animatedText.module.mjs +1 -1
  25. package/dist/esm/common/animatedText/animatedText.module.mjs.map +1 -1
  26. package/dist/esm/common/avatar/avatar.mjs.map +1 -1
  27. package/dist/esm/common/avatar/avatar.module.mjs +1 -1
  28. package/dist/esm/common/avatar/avatar.module.mjs.map +1 -1
  29. package/dist/esm/common/avatar/avatarGroup.mjs.map +1 -1
  30. package/dist/esm/common/badge/badge.mjs.map +1 -1
  31. package/dist/esm/common/badge/badge.module.mjs +1 -1
  32. package/dist/esm/common/badge/badge.module.mjs.map +1 -1
  33. package/dist/esm/common/breadcrumb/breadcrumb.mjs.map +1 -1
  34. package/dist/esm/common/breadcrumb/breadcrumb.module.mjs +1 -1
  35. package/dist/esm/common/button/button.mjs.map +1 -1
  36. package/dist/esm/common/button/button.module.mjs +1 -1
  37. package/dist/esm/common/button/button.module.mjs.map +1 -1
  38. package/dist/esm/common/buttonGroup/buttonGroup.mjs.map +1 -1
  39. package/dist/esm/common/buttonGroup/buttonGroup.module.mjs +1 -1
  40. package/dist/esm/common/buttonGroup/buttonGroup.module.mjs.map +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.map +1 -1
  54. package/dist/esm/common/chip/chip.module.mjs +1 -1
  55. package/dist/esm/common/chip/chip.module.mjs.map +1 -1
  56. package/dist/esm/common/colorPicker/colorPicker.mjs +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 +1 -1
  63. package/dist/esm/common/confirmModal/confirmModal.mjs.map +1 -1
  64. package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.mjs.map +1 -1
  65. package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.module.mjs +1 -1
  66. package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.module.mjs.map +1 -1
  67. package/dist/esm/common/datePicker/dateFunctions.mjs.map +1 -1
  68. package/dist/esm/common/datePicker/datePicker.mjs +1 -1
  69. package/dist/esm/common/datePicker/datePicker.mjs.map +1 -1
  70. package/dist/esm/common/datePicker/datePicker.module.mjs +1 -1
  71. package/dist/esm/common/divider/divider.mjs.map +1 -1
  72. package/dist/esm/common/divider/divider.module.mjs +1 -1
  73. package/dist/esm/common/drawer/drawer.mjs.map +1 -1
  74. package/dist/esm/common/drawer/drawer.module.mjs +1 -1
  75. package/dist/esm/common/drawer/drawer.module.mjs.map +1 -1
  76. package/dist/esm/common/dropZone/dropZone.mjs +1 -1
  77. package/dist/esm/common/dropZone/dropZone.mjs.map +1 -1
  78. package/dist/esm/common/dropZone/dropZone.module.mjs +1 -1
  79. package/dist/esm/common/dropZone/dropZone.module.mjs.map +1 -1
  80. package/dist/esm/common/dropdown/dropdown.mjs +1 -1
  81. package/dist/esm/common/dropdown/dropdown.mjs.map +1 -1
  82. package/dist/esm/common/dropdown/dropdown.module.mjs +1 -1
  83. package/dist/esm/common/dropdown/dropdown.module.mjs.map +1 -1
  84. package/dist/esm/common/emptyState/emptyState.mjs.map +1 -1
  85. package/dist/esm/common/emptyState/emptyState.module.mjs +1 -1
  86. package/dist/esm/common/errorBoundary/errorBoundary.mjs.map +1 -1
  87. package/dist/esm/common/errorBoundary/errorBoundary.module.mjs +1 -1
  88. package/dist/esm/common/errorBoundary/errorBoundary.module.mjs.map +1 -1
  89. package/dist/esm/common/fab/components/fabBase/fabBase.mjs.map +1 -1
  90. package/dist/esm/common/fab/components/fabBase/fabBase.module.mjs +1 -1
  91. package/dist/esm/common/fab/fab.mjs.map +1 -1
  92. package/dist/esm/common/fab/fab.module.mjs +1 -1
  93. package/dist/esm/common/fab/fab.module.mjs.map +1 -1
  94. package/dist/esm/common/flip/flip.mjs +1 -1
  95. package/dist/esm/common/flip/flip.mjs.map +1 -1
  96. package/dist/esm/common/flip/flip.module.mjs +1 -1
  97. package/dist/esm/common/floatingMenu/floatingMenu.mjs +1 -1
  98. package/dist/esm/common/floatingMenu/floatingMenu.mjs.map +1 -1
  99. package/dist/esm/common/floatingMenu/floatingMenu.module.mjs +1 -1
  100. package/dist/esm/common/floatingMenu/floatingMenu.module.mjs.map +1 -1
  101. package/dist/esm/common/floatingMenu/floatingMenu.types.mjs.map +1 -1
  102. package/dist/esm/common/floatingMenu/useFloatingPosition.mjs +1 -1
  103. package/dist/esm/common/floatingMenu/useFloatingPosition.mjs.map +1 -1
  104. package/dist/esm/common/floorPlan/floorPlan.faces.mjs.map +1 -1
  105. package/dist/esm/common/floorPlan/floorPlan.geometry.mjs.map +1 -1
  106. package/dist/esm/common/floorPlan/floorPlan.graph.mjs +1 -1
  107. package/dist/esm/common/floorPlan/floorPlan.graph.mjs.map +1 -1
  108. package/dist/esm/common/floorPlan/floorPlan.hit.mjs.map +1 -1
  109. package/dist/esm/common/floorPlan/floorPlan.json.mjs +1 -1
  110. package/dist/esm/common/floorPlan/floorPlan.json.mjs.map +1 -1
  111. package/dist/esm/common/floorPlan/floorPlan.mesh.mjs.map +1 -1
  112. package/dist/esm/common/floorPlan/floorPlan.path.mjs.map +1 -1
  113. package/dist/esm/common/floorPlan/floorPlan.plan.mjs +1 -1
  114. package/dist/esm/common/floorPlan/floorPlan.plan.mjs.map +1 -1
  115. package/dist/esm/common/floorPlan/floorPlan.rooms.mjs +1 -1
  116. package/dist/esm/common/floorPlan/floorPlan.rooms.mjs.map +1 -1
  117. package/dist/esm/common/floorPlan/floorPlan.snap.mjs.map +1 -1
  118. package/dist/esm/common/floorPlan/floorPlan.triangulate.mjs +1 -1
  119. package/dist/esm/common/floorPlan/floorPlan.triangulate.mjs.map +1 -1
  120. package/dist/esm/common/floorPlan/legacySvg.mjs.map +1 -1
  121. package/dist/esm/common/hooks/useAnchorTracking.mjs +2 -0
  122. package/dist/esm/common/hooks/useAnchorTracking.mjs.map +1 -0
  123. package/dist/esm/common/hooks/useCoarsePointer.mjs +1 -1
  124. package/dist/esm/common/hooks/useFocusBoundary.mjs.map +1 -1
  125. package/dist/esm/common/hooks/useMediaQuery.mjs +1 -1
  126. package/dist/esm/common/hooks/useMediaQuery.mjs.map +1 -1
  127. package/dist/esm/common/hooks/useOverlay.mjs.map +1 -1
  128. package/dist/esm/common/hooks/useSheet.mjs +1 -1
  129. package/dist/esm/common/hooks/useSheet.mjs.map +1 -1
  130. package/dist/esm/common/hooks/useSwipeDismiss.mjs +1 -1
  131. package/dist/esm/common/hooks/useSwipeDismiss.mjs.map +1 -1
  132. package/dist/esm/common/iconPicker/iconPicker.mjs +1 -1
  133. package/dist/esm/common/iconPicker/iconPicker.mjs.map +1 -1
  134. package/dist/esm/common/iconPicker/iconPicker.module.mjs +1 -1
  135. package/dist/esm/common/idleManager/idleManager.mjs +1 -1
  136. package/dist/esm/common/idleManager/idleManager.mjs.map +1 -1
  137. package/dist/esm/common/infiniteBlock/infiniteBlock.mjs.map +1 -1
  138. package/dist/esm/common/infiniteBlock/infiniteBlock.module.mjs +1 -1
  139. package/dist/esm/common/input/input.mjs +1 -1
  140. package/dist/esm/common/input/input.mjs.map +1 -1
  141. package/dist/esm/common/input/input.module.mjs +1 -1
  142. package/dist/esm/common/input/input.module.mjs.map +1 -1
  143. package/dist/esm/common/input/input.types.mjs.map +1 -1
  144. package/dist/esm/common/inputDropdown/inputDropdown.mjs +1 -1
  145. package/dist/esm/common/inputDropdown/inputDropdown.mjs.map +1 -1
  146. package/dist/esm/common/inputDropdown/inputDropdown.module.mjs +1 -1
  147. package/dist/esm/common/inputDropdown/inputDropdown.module.mjs.map +1 -1
  148. package/dist/esm/common/interactableDiv/interactableDiv.mjs.map +1 -1
  149. package/dist/esm/common/interactableDiv/interactableDiv.module.mjs +1 -1
  150. package/dist/esm/common/kanbanBoard/KanbanBoard.mjs +1 -1
  151. package/dist/esm/common/kanbanBoard/KanbanBoard.mjs.map +1 -1
  152. package/dist/esm/common/kanbanBoard/KanbanColumn.mjs +1 -1
  153. package/dist/esm/common/kanbanBoard/KanbanColumn.mjs.map +1 -1
  154. package/dist/esm/common/kanbanBoard/KanbanItem.mjs.map +1 -1
  155. package/dist/esm/common/kanbanBoard/kanbanBoard.module.mjs +1 -1
  156. package/dist/esm/common/kanbanBoard/kanbanBoard.module.mjs.map +1 -1
  157. package/dist/esm/common/kanbanBoard/kanbanBoard.utils.mjs +1 -1
  158. package/dist/esm/common/kanbanBoard/kanbanBoard.utils.mjs.map +1 -1
  159. package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.mjs.map +1 -1
  160. package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.module.mjs +1 -1
  161. package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.module.mjs.map +1 -1
  162. package/dist/esm/common/klipyPicker/components/gifView/gifView.mjs +1 -1
  163. package/dist/esm/common/klipyPicker/components/gifView/gifView.mjs.map +1 -1
  164. package/dist/esm/common/klipyPicker/components/gifView/gifView.module.mjs +1 -1
  165. package/dist/esm/common/klipyPicker/components/gifView/gifView.module.mjs.map +1 -1
  166. package/dist/esm/common/klipyPicker/klipyPicker.mjs.map +1 -1
  167. package/dist/esm/common/klipyPicker/klipyPicker.module.mjs +1 -1
  168. package/dist/esm/common/loading/iconLoading/iconLoading.mjs.map +1 -1
  169. package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs +1 -1
  170. package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs.map +1 -1
  171. package/dist/esm/common/loading/spinnerLoading/spinnerLoading.mjs.map +1 -1
  172. package/dist/esm/common/loading/spinnerLoading/spinnerLoading.module.mjs +1 -1
  173. package/dist/esm/common/modal/modal.mjs.map +1 -1
  174. package/dist/esm/common/modal/modal.module.mjs +1 -1
  175. package/dist/esm/common/modal/modal.module.mjs.map +1 -1
  176. package/dist/esm/common/multiSelect/multiSelect.mjs +2 -0
  177. package/dist/esm/common/multiSelect/multiSelect.mjs.map +1 -0
  178. package/dist/esm/common/multiSelect/multiSelect.module.mjs +2 -0
  179. package/dist/esm/common/multiSelect/multiSelect.module.mjs.map +1 -0
  180. package/dist/esm/common/numberInput/numberInput.mjs +1 -1
  181. package/dist/esm/common/numberInput/numberInput.mjs.map +1 -1
  182. package/dist/esm/common/numberInput/numberInput.module.mjs +1 -1
  183. package/dist/esm/common/numberInput/numberInput.module.mjs.map +1 -1
  184. package/dist/esm/common/numberInput/useStepRepeat.mjs +1 -1
  185. package/dist/esm/common/numberInput/useStepRepeat.mjs.map +1 -1
  186. package/dist/esm/common/optionPicker/optionPicker.mjs +1 -1
  187. package/dist/esm/common/optionPicker/optionPicker.mjs.map +1 -1
  188. package/dist/esm/common/optionPicker/optionPicker.module.mjs +1 -1
  189. package/dist/esm/common/optionPicker/optionPicker.module.mjs.map +1 -1
  190. package/dist/esm/common/otpInput/otpInput.mjs.map +1 -1
  191. package/dist/esm/common/otpInput/otpInput.module.mjs +1 -1
  192. package/dist/esm/common/otpInput/otpInput.module.mjs.map +1 -1
  193. package/dist/esm/common/overscroll/overscroll.mjs +1 -1
  194. package/dist/esm/common/overscroll/overscroll.mjs.map +1 -1
  195. package/dist/esm/common/overscroll/overscroll.module.mjs +1 -1
  196. package/dist/esm/common/pagination/pagination.mjs +2 -0
  197. package/dist/esm/common/pagination/pagination.mjs.map +1 -0
  198. package/dist/esm/common/pagination/pagination.module.mjs +2 -0
  199. package/dist/esm/common/pagination/pagination.module.mjs.map +1 -0
  200. package/dist/esm/common/planCanvas/planCanvas.mjs +1 -1
  201. package/dist/esm/common/planCanvas/planCanvas.mjs.map +1 -1
  202. package/dist/esm/common/planCanvas/planCanvas.module.mjs +1 -1
  203. package/dist/esm/common/planCanvas/planCanvas.module.mjs.map +1 -1
  204. package/dist/esm/common/popover/popover.mjs +1 -1
  205. package/dist/esm/common/popover/popover.mjs.map +1 -1
  206. package/dist/esm/common/popover/popover.module.mjs +1 -1
  207. package/dist/esm/common/popover/popover.module.mjs.map +1 -1
  208. package/dist/esm/common/popover/usePopoverPosition.mjs +1 -1
  209. package/dist/esm/common/popover/usePopoverPosition.mjs.map +1 -1
  210. package/dist/esm/common/progressBar/progressBar.mjs +1 -1
  211. package/dist/esm/common/progressBar/progressBar.mjs.map +1 -1
  212. package/dist/esm/common/progressBar/progressBar.module.mjs +1 -1
  213. package/dist/esm/common/progressBar/progressBar.module.mjs.map +1 -1
  214. package/dist/esm/common/radioGroup/radioGroup.mjs +1 -1
  215. package/dist/esm/common/radioGroup/radioGroup.mjs.map +1 -1
  216. package/dist/esm/common/radioGroup/radioGroup.module.mjs +1 -1
  217. package/dist/esm/common/radioGroup/radioGroup.module.mjs.map +1 -1
  218. package/dist/esm/common/rating/rating.mjs +1 -1
  219. package/dist/esm/common/rating/rating.mjs.map +1 -1
  220. package/dist/esm/common/rating/rating.module.mjs +1 -1
  221. package/dist/esm/common/revealLens/revealLens.mjs.map +1 -1
  222. package/dist/esm/common/revealLens/revealLens.module.mjs +1 -1
  223. package/dist/esm/common/revealLens/revealLens.module.mjs.map +1 -1
  224. package/dist/esm/common/ripple/ripple.mjs.map +1 -1
  225. package/dist/esm/common/ripple/ripple.module.mjs +1 -1
  226. package/dist/esm/common/ripple/ripple.module.mjs.map +1 -1
  227. package/dist/esm/common/roomDrawer/roomDrawer.mjs +1 -1
  228. package/dist/esm/common/roomDrawer/roomDrawer.mjs.map +1 -1
  229. package/dist/esm/common/roomDrawer/roomDrawer.module.mjs +1 -1
  230. package/dist/esm/common/roomDrawer/roomDrawer.module.mjs.map +1 -1
  231. package/dist/esm/common/roomDrawer/usePlanHistory.mjs.map +1 -1
  232. package/dist/esm/common/roomViewer/roomViewer.mjs +1 -1
  233. package/dist/esm/common/roomViewer/roomViewer.mjs.map +1 -1
  234. package/dist/esm/common/roomViewer/roomViewer.module.mjs +1 -1
  235. package/dist/esm/common/scrollbarProvider/scrollbarProvider.mjs.map +1 -1
  236. package/dist/esm/common/scrollbarProvider/scrollbarProvider.module.mjs +1 -1
  237. package/dist/esm/common/scrollbarProvider/scrollbarProvider.module.mjs.map +1 -1
  238. package/dist/esm/common/searchInput/searchInput.mjs.map +1 -1
  239. package/dist/esm/common/searchInput/searchInput.module.mjs +1 -1
  240. package/dist/esm/common/sectionHeader/sectionHeader.mjs.map +1 -1
  241. package/dist/esm/common/sectionHeader/sectionHeader.module.mjs +1 -1
  242. package/dist/esm/common/sectionHeader/sectionHeader.module.mjs.map +1 -1
  243. package/dist/esm/common/skeleton/skeleton.mjs.map +1 -1
  244. package/dist/esm/common/skeleton/skeleton.module.mjs +1 -1
  245. package/dist/esm/common/slider/slider.mjs +1 -1
  246. package/dist/esm/common/slider/slider.mjs.map +1 -1
  247. package/dist/esm/common/slider/slider.module.mjs +1 -1
  248. package/dist/esm/common/slider/slider.module.mjs.map +1 -1
  249. package/dist/esm/common/splitButton/splitButton.mjs.map +1 -1
  250. package/dist/esm/common/splitButton/splitButton.module.mjs +1 -1
  251. package/dist/esm/common/stepper/stepper.mjs.map +1 -1
  252. package/dist/esm/common/stepper/stepper.module.mjs +1 -1
  253. package/dist/esm/common/stepper/stepper.module.mjs.map +1 -1
  254. package/dist/esm/common/sticky/sticky.mjs.map +1 -1
  255. package/dist/esm/common/sticky/sticky.module.mjs +1 -1
  256. package/dist/esm/common/sticky/stickyStack.mjs.map +1 -1
  257. package/dist/esm/common/styles/sheet.module.mjs +1 -1
  258. package/dist/esm/common/styles/sheet.module.mjs.map +1 -1
  259. package/dist/esm/common/switch/switch.mjs.map +1 -1
  260. package/dist/esm/common/switch/switch.module.mjs +1 -1
  261. package/dist/esm/common/tabHeader/tabHeader.mjs.map +1 -1
  262. package/dist/esm/common/tabHeader/tabHeader.module.mjs +1 -1
  263. package/dist/esm/common/tabHeader/tabHeader.module.mjs.map +1 -1
  264. package/dist/esm/common/themeProvider/defaultTheme.mjs.map +1 -1
  265. package/dist/esm/common/themeProvider/theme.module.mjs +1 -1
  266. package/dist/esm/common/themeProvider/themeProvider.mjs +1 -1
  267. package/dist/esm/common/themeProvider/themeProvider.mjs.map +1 -1
  268. package/dist/esm/common/themeProvider/useTheme.mjs.map +1 -1
  269. package/dist/esm/common/tilt/tilt.mjs.map +1 -1
  270. package/dist/esm/common/tilt/tilt.module.mjs +1 -1
  271. package/dist/esm/common/tiltGroup/tiltGroup.mjs.map +1 -1
  272. package/dist/esm/common/timeInput/components/clockDial/clockDial.mjs +1 -1
  273. package/dist/esm/common/timeInput/components/clockDial/clockDial.mjs.map +1 -1
  274. package/dist/esm/common/timeInput/components/clockDial/clockDial.module.mjs +1 -1
  275. package/dist/esm/common/timeInput/components/clockDial/clockDial.module.mjs.map +1 -1
  276. package/dist/esm/common/timeInput/timeFunctions.mjs +1 -1
  277. package/dist/esm/common/timeInput/timeFunctions.mjs.map +1 -1
  278. package/dist/esm/common/timeInput/timeInput.mjs +1 -1
  279. package/dist/esm/common/timeInput/timeInput.mjs.map +1 -1
  280. package/dist/esm/common/timeInput/timeInput.module.mjs +1 -1
  281. package/dist/esm/common/timeInput/timeInput.module.mjs.map +1 -1
  282. package/dist/esm/common/timeline/timeline.mjs.map +1 -1
  283. package/dist/esm/common/timeline/timeline.module.mjs +1 -1
  284. package/dist/esm/common/timeline/timeline.module.mjs.map +1 -1
  285. package/dist/esm/common/timer/timer.chime.mjs.map +1 -1
  286. package/dist/esm/common/timer/timer.mjs +1 -1
  287. package/dist/esm/common/timer/timer.mjs.map +1 -1
  288. package/dist/esm/common/timer/timer.module.mjs +1 -1
  289. package/dist/esm/common/timer/timer.module.mjs.map +1 -1
  290. package/dist/esm/common/toast/toast.mjs.map +1 -1
  291. package/dist/esm/common/toast/toast.module.mjs +1 -1
  292. package/dist/esm/common/toast/toast.module.mjs.map +1 -1
  293. package/dist/esm/common/toast/toastProvider.mjs.map +1 -1
  294. package/dist/esm/common/tooltip/tooltip.mjs.map +1 -1
  295. package/dist/esm/common/tooltip/tooltip.module.mjs +1 -1
  296. package/dist/esm/common/tooltip/tooltip.module.mjs.map +1 -1
  297. package/dist/esm/common/tree/flattenTree.mjs +2 -0
  298. package/dist/esm/common/tree/flattenTree.mjs.map +1 -0
  299. package/dist/esm/common/tree/tree.mjs +2 -0
  300. package/dist/esm/common/tree/tree.mjs.map +1 -0
  301. package/dist/esm/common/tree/tree.module.mjs +2 -0
  302. package/dist/esm/common/tree/tree.module.mjs.map +1 -0
  303. package/dist/esm/common/utils/renderIcon.mjs +1 -1
  304. package/dist/esm/common/utils/renderIcon.mjs.map +1 -1
  305. package/dist/esm/common/virtualList/useColumns.mjs +1 -1
  306. package/dist/esm/common/virtualList/useColumns.mjs.map +1 -1
  307. package/dist/esm/common/virtualList/useRowDrag.mjs +1 -1
  308. package/dist/esm/common/virtualList/useRowDrag.mjs.map +1 -1
  309. package/dist/esm/common/virtualList/useSelection.mjs.map +1 -1
  310. package/dist/esm/common/virtualList/useVirtualWindow.mjs +1 -1
  311. package/dist/esm/common/virtualList/useVirtualWindow.mjs.map +1 -1
  312. package/dist/esm/common/virtualList/virtualList.mjs +1 -1
  313. package/dist/esm/common/virtualList/virtualList.mjs.map +1 -1
  314. package/dist/esm/common/virtualList/virtualList.module.mjs +1 -1
  315. package/dist/esm/common/virtualList/virtualList.module.mjs.map +1 -1
  316. package/dist/esm/common/virtualList/virtualList.utils.mjs.map +1 -1
  317. package/dist/esm/common/virtualList/virtualRow.mjs +1 -1
  318. package/dist/esm/common/virtualList/virtualRow.mjs.map +1 -1
  319. package/dist/esm/common/wizard/wizard.mjs +1 -1
  320. package/dist/esm/common/wizard/wizard.mjs.map +1 -1
  321. package/dist/esm/common/wizard/wizard.module.mjs +1 -1
  322. package/dist/esm/index.mjs +1 -1
  323. package/dist/esm/services/formValidation/FormValidatorGroupWithForm.mjs.map +1 -1
  324. package/dist/esm/services/formValidation/index.mjs +1 -1
  325. package/dist/esm/services/formValidation/useFormValidatorGroup.mjs.map +1 -1
  326. package/dist/esm/services/formValidation/validatableComponent.mjs.map +1 -1
  327. package/dist/esm/services/klipy.mjs.map +1 -1
  328. package/dist/esm/services/localization.mjs.map +1 -1
  329. package/dist/index.cjs +3 -3
  330. package/dist/index.cjs.map +1 -1
  331. package/dist/style.css +1 -1
  332. package/dist/types/{package/common → common}/actionButtons/actionButtons.d.ts +1 -1
  333. package/dist/types/{package/common → common}/animatedIcon/animatedIcon.d.ts +1 -1
  334. package/dist/types/common/card/Card.d.ts +4 -0
  335. package/dist/types/{package/common → common}/card/CardActions.d.ts +2 -1
  336. package/dist/types/common/card/CardContent.d.ts +4 -0
  337. package/dist/types/{package/common → common}/card/CardHeader.d.ts +2 -1
  338. package/dist/types/common/card/CardMedia.d.ts +4 -0
  339. package/dist/types/common/carousel/carousel.d.ts +4 -0
  340. package/dist/types/common/chip/chip.d.ts +4 -0
  341. package/dist/types/{package/common → common}/configProvider/configProvider.d.ts +1 -1
  342. package/dist/types/{package/common → common}/configProvider/configProvider.types.d.ts +6 -0
  343. package/dist/types/{package/common → common}/datePicker/components/datePickerMonth/datePickerMonth.d.ts +1 -1
  344. package/dist/types/{package/common → common}/datePicker/datePicker.d.ts +1 -1
  345. package/dist/types/{package/common → common}/drawer/drawer.d.ts +1 -1
  346. package/dist/types/{package/common → common}/dropZone/dropZone.d.ts +2 -1
  347. package/dist/types/common/dropdown/dropdown.d.ts +4 -0
  348. package/dist/types/{package/common → common}/fab/components/fabBase/fabBase.d.ts +1 -1
  349. package/dist/types/{package/common → common}/fab/fab.d.ts +1 -1
  350. package/dist/types/{package/common → common}/floatingMenu/floatingMenu.d.ts +1 -1
  351. package/dist/types/{package/common → common}/floatingMenu/useFloatingPosition.d.ts +5 -7
  352. package/dist/types/common/hooks/useAnchorTracking.d.ts +40 -0
  353. package/dist/types/{package/common → common}/hooks/useOverlay.d.ts +1 -1
  354. package/dist/types/{package/common → common}/iconPicker/iconPicker.d.ts +2 -1
  355. package/dist/types/{package/common → common}/idleManager/idleManager.d.ts +1 -1
  356. package/dist/types/{package/common → common}/infiniteBlock/infiniteBlock.d.ts +2 -1
  357. package/dist/types/common/input/input.d.ts +4 -0
  358. package/dist/types/{package/common → common}/inputDropdown/inputDropdown.d.ts +2 -1
  359. package/dist/types/{package/common → common}/inputDropdown/inputDropdown.types.d.ts +6 -0
  360. package/dist/types/{package/common → common}/kanbanBoard/KanbanBoard.d.ts +1 -1
  361. package/dist/types/{package/common → common}/kanbanBoard/KanbanColumn.d.ts +1 -1
  362. package/dist/types/{package/common → common}/kanbanBoard/KanbanItem.d.ts +1 -1
  363. package/dist/types/{package/common → common}/loading/iconLoading/iconLoading.d.ts +2 -1
  364. package/dist/types/common/modal/modal.d.ts +3 -0
  365. package/dist/types/common/multiSelect/index.d.ts +2 -0
  366. package/dist/types/common/multiSelect/multiSelect.d.ts +4 -0
  367. package/dist/types/common/multiSelect/multiSelect.types.d.ts +62 -0
  368. package/dist/types/{package/common → common}/overscroll/overscroll.d.ts +1 -1
  369. package/dist/types/common/pagination/index.d.ts +2 -0
  370. package/dist/types/common/pagination/pagination.d.ts +4 -0
  371. package/dist/types/common/pagination/pagination.types.d.ts +30 -0
  372. package/dist/types/common/popover/popover.d.ts +3 -0
  373. package/dist/types/{package/common → common}/popover/usePopoverPosition.d.ts +4 -2
  374. package/dist/types/{package/common → common}/scrollbarProvider/scrollbarProvider.d.ts +1 -1
  375. package/dist/types/{package/common → common}/sheetBackdrop/sheetBackdrop.d.ts +1 -1
  376. package/dist/types/common/slider/slider.d.ts +3 -0
  377. package/dist/types/{package/common → common}/slider/slider.types.d.ts +35 -10
  378. package/dist/types/{package/common → common}/splitButton/splitButton.d.ts +1 -1
  379. package/dist/types/{package/common → common}/stepper/stepper.d.ts +2 -1
  380. package/dist/types/{package/common → common}/sticky/sticky.d.ts +2 -1
  381. package/dist/types/{package/common → common}/tabHeader/tabHeader.d.ts +2 -1
  382. package/dist/types/common/textarea/textarea.d.ts +3 -0
  383. package/dist/types/{package/common → common}/themeProvider/themeProvider.d.ts +1 -1
  384. package/dist/types/{package/common → common}/timeInput/components/clockDial/clockDial.d.ts +2 -1
  385. package/dist/types/{package/common → common}/timeInput/timeInput.d.ts +2 -1
  386. package/dist/types/{package/common → common}/timeline/timeline.d.ts +2 -1
  387. package/dist/types/{package/common → common}/toast/index.d.ts +1 -1
  388. package/dist/types/{package/common → common}/toast/toast.d.ts +2 -1
  389. package/dist/types/{package/common → common}/toast/toastProvider.d.ts +2 -2
  390. package/dist/types/{package/common → common}/tooltip/tooltip.d.ts +2 -1
  391. package/dist/types/common/tree/flattenTree.d.ts +3 -0
  392. package/dist/types/common/tree/index.d.ts +3 -0
  393. package/dist/types/common/tree/tree.d.ts +4 -0
  394. package/dist/types/common/tree/tree.types.d.ts +62 -0
  395. package/dist/types/{package/common → common}/virtualList/virtualList.types.d.ts +8 -0
  396. package/dist/types/{package/common → common}/virtualList/virtualRow.d.ts +2 -2
  397. package/dist/types/{package/common → common}/wizard/wizard.d.ts +2 -1
  398. package/dist/types/{package/index.d.ts → index.d.ts} +6 -0
  399. package/dist/types/{package/services → services}/formValidation/index.d.ts +1 -1
  400. package/docs/CLAUDE.md +3 -0
  401. package/docs/InputDropdown.md +3 -0
  402. package/docs/MultiSelect.md +100 -0
  403. package/docs/Pagination.md +72 -0
  404. package/docs/Slider.md +34 -4
  405. package/docs/Tree.md +95 -0
  406. package/docs/VirtualList.md +1 -0
  407. package/package.json +74 -70
  408. package/dist/types/package/common/card/Card.d.ts +0 -3
  409. package/dist/types/package/common/card/CardContent.d.ts +0 -3
  410. package/dist/types/package/common/card/CardMedia.d.ts +0 -3
  411. package/dist/types/package/common/carousel/carousel.d.ts +0 -3
  412. package/dist/types/package/common/chip/chip.d.ts +0 -3
  413. package/dist/types/package/common/dropdown/dropdown.d.ts +0 -3
  414. package/dist/types/package/common/input/input.d.ts +0 -3
  415. package/dist/types/package/common/modal/modal.d.ts +0 -3
  416. package/dist/types/package/common/popover/popover.d.ts +0 -3
  417. package/dist/types/package/common/slider/slider.d.ts +0 -3
  418. package/dist/types/package/common/textarea/textarea.d.ts +0 -2
  419. /package/dist/types/{package/common → common}/accordion/accordion.d.ts +0 -0
  420. /package/dist/types/{package/common → common}/accordion/accordion.types.d.ts +0 -0
  421. /package/dist/types/{package/common → common}/accordion/index.d.ts +0 -0
  422. /package/dist/types/{package/common → common}/actionButtons/actionButtons.types.d.ts +0 -0
  423. /package/dist/types/{package/common → common}/actionButtons/index.d.ts +0 -0
  424. /package/dist/types/{package/common → common}/actionIcon/actionIcon.d.ts +0 -0
  425. /package/dist/types/{package/common → common}/actionIcon/actionIcon.types.d.ts +0 -0
  426. /package/dist/types/{package/common → common}/actionIcon/index.d.ts +0 -0
  427. /package/dist/types/{package/common → common}/alert/alert.d.ts +0 -0
  428. /package/dist/types/{package/common → common}/alert/alert.types.d.ts +0 -0
  429. /package/dist/types/{package/common → common}/alert/index.d.ts +0 -0
  430. /package/dist/types/{package/common → common}/animatedIcon/animatedIcon.types.d.ts +0 -0
  431. /package/dist/types/{package/common → common}/animatedIcon/index.d.ts +0 -0
  432. /package/dist/types/{package/common → common}/animatedLogo/animatedLogo.d.ts +0 -0
  433. /package/dist/types/{package/common → common}/animatedLogo/animatedLogo.types.d.ts +0 -0
  434. /package/dist/types/{package/common → common}/animatedLogo/index.d.ts +0 -0
  435. /package/dist/types/{package/common → common}/animatedText/animatedText.d.ts +0 -0
  436. /package/dist/types/{package/common → common}/animatedText/animatedText.types.d.ts +0 -0
  437. /package/dist/types/{package/common → common}/animatedText/index.d.ts +0 -0
  438. /package/dist/types/{package/common → common}/avatar/avatar.d.ts +0 -0
  439. /package/dist/types/{package/common → common}/avatar/avatar.types.d.ts +0 -0
  440. /package/dist/types/{package/common → common}/avatar/avatarGroup.d.ts +0 -0
  441. /package/dist/types/{package/common → common}/avatar/index.d.ts +0 -0
  442. /package/dist/types/{package/common → common}/badge/badge.d.ts +0 -0
  443. /package/dist/types/{package/common → common}/badge/badge.types.d.ts +0 -0
  444. /package/dist/types/{package/common → common}/badge/index.d.ts +0 -0
  445. /package/dist/types/{package/common → common}/bodyEnd/bodyEnd.d.ts +0 -0
  446. /package/dist/types/{package/common → common}/bodyEnd/bodyEnd.types.d.ts +0 -0
  447. /package/dist/types/{package/common → common}/bodyEnd/index.d.ts +0 -0
  448. /package/dist/types/{package/common → common}/breadcrumb/breadcrumb.d.ts +0 -0
  449. /package/dist/types/{package/common → common}/breadcrumb/breadcrumb.types.d.ts +0 -0
  450. /package/dist/types/{package/common → common}/breadcrumb/index.d.ts +0 -0
  451. /package/dist/types/{package/common → common}/button/button.d.ts +0 -0
  452. /package/dist/types/{package/common → common}/button/button.types.d.ts +0 -0
  453. /package/dist/types/{package/common → common}/button/index.d.ts +0 -0
  454. /package/dist/types/{package/common → common}/buttonGroup/buttonGroup.d.ts +0 -0
  455. /package/dist/types/{package/common → common}/buttonGroup/buttonGroup.types.d.ts +0 -0
  456. /package/dist/types/{package/common → common}/buttonGroup/index.d.ts +0 -0
  457. /package/dist/types/{package/common → common}/card/card.types.d.ts +0 -0
  458. /package/dist/types/{package/common → common}/card/index.d.ts +0 -0
  459. /package/dist/types/{package/common → common}/carousel/carousel.types.d.ts +0 -0
  460. /package/dist/types/{package/common → common}/carousel/index.d.ts +0 -0
  461. /package/dist/types/{package/common → common}/checkbox/checkbox.d.ts +0 -0
  462. /package/dist/types/{package/common → common}/checkbox/checkbox.types.d.ts +0 -0
  463. /package/dist/types/{package/common → common}/checkbox/index.d.ts +0 -0
  464. /package/dist/types/{package/common → common}/chip/chip.types.d.ts +0 -0
  465. /package/dist/types/{package/common → common}/chip/chipContainer.d.ts +0 -0
  466. /package/dist/types/{package/common → common}/chip/index.d.ts +0 -0
  467. /package/dist/types/{package/common → common}/colorPicker/colorPicker.d.ts +0 -0
  468. /package/dist/types/{package/common → common}/colorPicker/colorPicker.types.d.ts +0 -0
  469. /package/dist/types/{package/common → common}/colorPicker/index.d.ts +0 -0
  470. /package/dist/types/{package/common → common}/configProvider/index.d.ts +0 -0
  471. /package/dist/types/{package/common → common}/configProvider/useComponentDefaults.d.ts +0 -0
  472. /package/dist/types/{package/common → common}/configProvider/usePresentationDefault.d.ts +0 -0
  473. /package/dist/types/{package/common → common}/confirmModal/confirmModal.d.ts +0 -0
  474. /package/dist/types/{package/common → common}/confirmModal/confirmModal.types.d.ts +0 -0
  475. /package/dist/types/{package/common → common}/confirmModal/index.d.ts +0 -0
  476. /package/dist/types/{package/common → common}/datePicker/components/datePickerMonth/index.d.ts +0 -0
  477. /package/dist/types/{package/common → common}/datePicker/dateFunctions.d.ts +0 -0
  478. /package/dist/types/{package/common → common}/datePicker/index.d.ts +0 -0
  479. /package/dist/types/{package/common → common}/divider/divider.d.ts +0 -0
  480. /package/dist/types/{package/common → common}/divider/divider.types.d.ts +0 -0
  481. /package/dist/types/{package/common → common}/divider/index.d.ts +0 -0
  482. /package/dist/types/{package/common → common}/drawer/drawer.types.d.ts +0 -0
  483. /package/dist/types/{package/common → common}/drawer/index.d.ts +0 -0
  484. /package/dist/types/{package/common → common}/dropZone/dropZone.types.d.ts +0 -0
  485. /package/dist/types/{package/common → common}/dropZone/index.d.ts +0 -0
  486. /package/dist/types/{package/common → common}/dropdown/dropdown.types.d.ts +0 -0
  487. /package/dist/types/{package/common → common}/dropdown/index.d.ts +0 -0
  488. /package/dist/types/{package/common → common}/emptyState/emptyState.d.ts +0 -0
  489. /package/dist/types/{package/common → common}/emptyState/emptyState.types.d.ts +0 -0
  490. /package/dist/types/{package/common → common}/emptyState/index.d.ts +0 -0
  491. /package/dist/types/{package/common → common}/errorBoundary/errorBoundary.d.ts +0 -0
  492. /package/dist/types/{package/common → common}/errorBoundary/errorBoundary.types.d.ts +0 -0
  493. /package/dist/types/{package/common → common}/errorBoundary/index.d.ts +0 -0
  494. /package/dist/types/{package/common → common}/fab/components/fabBase/fabBase.types.d.ts +0 -0
  495. /package/dist/types/{package/common → common}/fab/components/fabBase/index.d.ts +0 -0
  496. /package/dist/types/{package/common → common}/fab/fab.types.d.ts +0 -0
  497. /package/dist/types/{package/common → common}/fab/index.d.ts +0 -0
  498. /package/dist/types/{package/common → common}/flip/flip.d.ts +0 -0
  499. /package/dist/types/{package/common → common}/flip/flip.types.d.ts +0 -0
  500. /package/dist/types/{package/common → common}/flip/index.d.ts +0 -0
  501. /package/dist/types/{package/common → common}/floatingMenu/floatingMenu.types.d.ts +0 -0
  502. /package/dist/types/{package/common → common}/floatingMenu/index.d.ts +0 -0
  503. /package/dist/types/{package/common → common}/floorPlan/floorPlan.faces.d.ts +0 -0
  504. /package/dist/types/{package/common → common}/floorPlan/floorPlan.fixtures.d.ts +0 -0
  505. /package/dist/types/{package/common → common}/floorPlan/floorPlan.geometry.d.ts +0 -0
  506. /package/dist/types/{package/common → common}/floorPlan/floorPlan.graph.d.ts +0 -0
  507. /package/dist/types/{package/common → common}/floorPlan/floorPlan.hit.d.ts +0 -0
  508. /package/dist/types/{package/common → common}/floorPlan/floorPlan.json.d.ts +0 -0
  509. /package/dist/types/{package/common → common}/floorPlan/floorPlan.mesh.d.ts +0 -0
  510. /package/dist/types/{package/common → common}/floorPlan/floorPlan.path.d.ts +0 -0
  511. /package/dist/types/{package/common → common}/floorPlan/floorPlan.plan.d.ts +0 -0
  512. /package/dist/types/{package/common → common}/floorPlan/floorPlan.rooms.d.ts +0 -0
  513. /package/dist/types/{package/common → common}/floorPlan/floorPlan.snap.d.ts +0 -0
  514. /package/dist/types/{package/common → common}/floorPlan/floorPlan.triangulate.d.ts +0 -0
  515. /package/dist/types/{package/common → common}/floorPlan/floorPlan.types.d.ts +0 -0
  516. /package/dist/types/{package/common → common}/floorPlan/index.d.ts +0 -0
  517. /package/dist/types/{package/common → common}/floorPlan/legacySvg.d.ts +0 -0
  518. /package/dist/types/{package/common → common}/hooks/useCoarsePointer.d.ts +0 -0
  519. /package/dist/types/{package/common → common}/hooks/useFocusBoundary.d.ts +0 -0
  520. /package/dist/types/{package/common → common}/hooks/useMediaQuery.d.ts +0 -0
  521. /package/dist/types/{package/common → common}/hooks/useSheet.d.ts +0 -0
  522. /package/dist/types/{package/common → common}/hooks/useSwipeDismiss.d.ts +0 -0
  523. /package/dist/types/{package/common → common}/hooks/useVisualViewportSize.d.ts +0 -0
  524. /package/dist/types/{package/common → common}/iconPicker/iconPicker.types.d.ts +0 -0
  525. /package/dist/types/{package/common → common}/iconPicker/index.d.ts +0 -0
  526. /package/dist/types/{package/common → common}/idleManager/idleManager.types.d.ts +0 -0
  527. /package/dist/types/{package/common → common}/idleManager/index.d.ts +0 -0
  528. /package/dist/types/{package/common → common}/infiniteBlock/index.d.ts +0 -0
  529. /package/dist/types/{package/common → common}/infiniteBlock/infiniteBlock.types.d.ts +0 -0
  530. /package/dist/types/{package/common → common}/input/index.d.ts +0 -0
  531. /package/dist/types/{package/common → common}/input/input.types.d.ts +0 -0
  532. /package/dist/types/{package/common → common}/inputDropdown/index.d.ts +0 -0
  533. /package/dist/types/{package/common → common}/interactableDiv/index.d.ts +0 -0
  534. /package/dist/types/{package/common → common}/interactableDiv/interactableDiv.d.ts +0 -0
  535. /package/dist/types/{package/common → common}/kanbanBoard/index.d.ts +0 -0
  536. /package/dist/types/{package/common → common}/kanbanBoard/kanbanBoard.types.d.ts +0 -0
  537. /package/dist/types/{package/common → common}/kanbanBoard/kanbanBoard.utils.d.ts +0 -0
  538. /package/dist/types/{package/common → common}/klipyPicker/components/gifPreview/gifPreview.d.ts +0 -0
  539. /package/dist/types/{package/common → common}/klipyPicker/components/gifPreview/gifPreview.types.d.ts +0 -0
  540. /package/dist/types/{package/common → common}/klipyPicker/components/gifPreview/index.d.ts +0 -0
  541. /package/dist/types/{package/common → common}/klipyPicker/components/gifView/gifView.d.ts +0 -0
  542. /package/dist/types/{package/common → common}/klipyPicker/components/gifView/gifView.types.d.ts +0 -0
  543. /package/dist/types/{package/common → common}/klipyPicker/components/gifView/index.d.ts +0 -0
  544. /package/dist/types/{package/common → common}/klipyPicker/index.d.ts +0 -0
  545. /package/dist/types/{package/common → common}/klipyPicker/klipyPicker.d.ts +0 -0
  546. /package/dist/types/{package/common → common}/klipyPicker/klipyPicker.types.d.ts +0 -0
  547. /package/dist/types/{package/common → common}/loading/iconLoading/index.d.ts +0 -0
  548. /package/dist/types/{package/common → common}/loading/index.d.ts +0 -0
  549. /package/dist/types/{package/common → common}/loading/spinnerLoading/index.d.ts +0 -0
  550. /package/dist/types/{package/common → common}/loading/spinnerLoading/spinnerLoading.d.ts +0 -0
  551. /package/dist/types/{package/common → common}/modal/index.d.ts +0 -0
  552. /package/dist/types/{package/common → common}/modal/modal.types.d.ts +0 -0
  553. /package/dist/types/{package/common → common}/numberInput/index.d.ts +0 -0
  554. /package/dist/types/{package/common → common}/numberInput/numberInput.d.ts +0 -0
  555. /package/dist/types/{package/common → common}/numberInput/numberInput.types.d.ts +0 -0
  556. /package/dist/types/{package/common → common}/numberInput/useStepRepeat.d.ts +0 -0
  557. /package/dist/types/{package/common → common}/optionPicker/index.d.ts +0 -0
  558. /package/dist/types/{package/common → common}/optionPicker/optionPicker.d.ts +0 -0
  559. /package/dist/types/{package/common → common}/optionPicker/optionPicker.types.d.ts +0 -0
  560. /package/dist/types/{package/common → common}/otpInput/index.d.ts +0 -0
  561. /package/dist/types/{package/common → common}/otpInput/otpInput.d.ts +0 -0
  562. /package/dist/types/{package/common → common}/otpInput/otpInput.types.d.ts +0 -0
  563. /package/dist/types/{package/common → common}/overscroll/index.d.ts +0 -0
  564. /package/dist/types/{package/common → common}/overscroll/overscroll.types.d.ts +0 -0
  565. /package/dist/types/{package/common → common}/planCanvas/index.d.ts +0 -0
  566. /package/dist/types/{package/common → common}/planCanvas/planCanvas.d.ts +0 -0
  567. /package/dist/types/{package/common → common}/planCanvas/planCanvas.types.d.ts +0 -0
  568. /package/dist/types/{package/common → common}/popover/index.d.ts +0 -0
  569. /package/dist/types/{package/common → common}/popover/popover.types.d.ts +0 -0
  570. /package/dist/types/{package/common → common}/progressBar/index.d.ts +0 -0
  571. /package/dist/types/{package/common → common}/progressBar/progressBar.d.ts +0 -0
  572. /package/dist/types/{package/common → common}/progressBar/progressBar.types.d.ts +0 -0
  573. /package/dist/types/{package/common → common}/radioGroup/index.d.ts +0 -0
  574. /package/dist/types/{package/common → common}/radioGroup/radioGroup.d.ts +0 -0
  575. /package/dist/types/{package/common → common}/radioGroup/radioGroup.types.d.ts +0 -0
  576. /package/dist/types/{package/common → common}/rating/index.d.ts +0 -0
  577. /package/dist/types/{package/common → common}/rating/rating.d.ts +0 -0
  578. /package/dist/types/{package/common → common}/rating/rating.types.d.ts +0 -0
  579. /package/dist/types/{package/common → common}/revealLens/index.d.ts +0 -0
  580. /package/dist/types/{package/common → common}/revealLens/revealLens.d.ts +0 -0
  581. /package/dist/types/{package/common → common}/revealLens/revealLens.types.d.ts +0 -0
  582. /package/dist/types/{package/common → common}/ripple/index.d.ts +0 -0
  583. /package/dist/types/{package/common → common}/ripple/ripple.d.ts +0 -0
  584. /package/dist/types/{package/common → common}/ripple/ripple.types.d.ts +0 -0
  585. /package/dist/types/{package/common → common}/roomDrawer/index.d.ts +0 -0
  586. /package/dist/types/{package/common → common}/roomDrawer/roomDrawer.d.ts +0 -0
  587. /package/dist/types/{package/common → common}/roomDrawer/roomDrawer.types.d.ts +0 -0
  588. /package/dist/types/{package/common → common}/roomDrawer/usePlanHistory.d.ts +0 -0
  589. /package/dist/types/{package/common → common}/roomViewer/index.d.ts +0 -0
  590. /package/dist/types/{package/common → common}/roomViewer/roomViewer.d.ts +0 -0
  591. /package/dist/types/{package/common → common}/roomViewer/roomViewer.types.d.ts +0 -0
  592. /package/dist/types/{package/common → common}/scrollbarProvider/index.d.ts +0 -0
  593. /package/dist/types/{package/common → common}/searchInput/index.d.ts +0 -0
  594. /package/dist/types/{package/common → common}/searchInput/searchInput.d.ts +0 -0
  595. /package/dist/types/{package/common → common}/searchInput/searchInput.types.d.ts +0 -0
  596. /package/dist/types/{package/common → common}/sectionHeader/index.d.ts +0 -0
  597. /package/dist/types/{package/common → common}/sectionHeader/sectionHeader.d.ts +0 -0
  598. /package/dist/types/{package/common → common}/sectionHeader/sectionHeader.types.d.ts +0 -0
  599. /package/dist/types/{package/common → common}/sheetBackdrop/index.d.ts +0 -0
  600. /package/dist/types/{package/common → common}/sheetBackdrop/sheetBackdrop.types.d.ts +0 -0
  601. /package/dist/types/{package/common → common}/skeleton/index.d.ts +0 -0
  602. /package/dist/types/{package/common → common}/skeleton/skeleton.d.ts +0 -0
  603. /package/dist/types/{package/common → common}/skeleton/skeleton.types.d.ts +0 -0
  604. /package/dist/types/{package/common → common}/slider/index.d.ts +0 -0
  605. /package/dist/types/{package/common → common}/splitButton/index.d.ts +0 -0
  606. /package/dist/types/{package/common → common}/splitButton/splitButton.types.d.ts +0 -0
  607. /package/dist/types/{package/common → common}/stepper/index.d.ts +0 -0
  608. /package/dist/types/{package/common → common}/stepper/stepper.types.d.ts +0 -0
  609. /package/dist/types/{package/common → common}/sticky/index.d.ts +0 -0
  610. /package/dist/types/{package/common → common}/sticky/sticky.types.d.ts +0 -0
  611. /package/dist/types/{package/common → common}/sticky/stickyStack.d.ts +0 -0
  612. /package/dist/types/{package/common → common}/switch/index.d.ts +0 -0
  613. /package/dist/types/{package/common → common}/switch/switch.d.ts +0 -0
  614. /package/dist/types/{package/common → common}/switch/switch.types.d.ts +0 -0
  615. /package/dist/types/{package/common → common}/tabHeader/index.d.ts +0 -0
  616. /package/dist/types/{package/common → common}/tabHeader/tabHeader.types.d.ts +0 -0
  617. /package/dist/types/{package/common → common}/textarea/index.d.ts +0 -0
  618. /package/dist/types/{package/common → common}/textarea/textarea.types.d.ts +0 -0
  619. /package/dist/types/{package/common → common}/themeProvider/defaultTheme.d.ts +0 -0
  620. /package/dist/types/{package/common → common}/themeProvider/index.d.ts +0 -0
  621. /package/dist/types/{package/common → common}/themeProvider/theme.types.d.ts +0 -0
  622. /package/dist/types/{package/common → common}/themeProvider/useTheme.d.ts +0 -0
  623. /package/dist/types/{package/common → common}/tilt/index.d.ts +0 -0
  624. /package/dist/types/{package/common → common}/tilt/tilt.d.ts +0 -0
  625. /package/dist/types/{package/common → common}/tilt/tilt.types.d.ts +0 -0
  626. /package/dist/types/{package/common → common}/tilt/tiltMath.d.ts +0 -0
  627. /package/dist/types/{package/common → common}/tiltGroup/index.d.ts +0 -0
  628. /package/dist/types/{package/common → common}/tiltGroup/tiltGroup.d.ts +0 -0
  629. /package/dist/types/{package/common → common}/tiltGroup/tiltGroup.types.d.ts +0 -0
  630. /package/dist/types/{package/common → common}/timeInput/components/clockDial/clockDial.types.d.ts +0 -0
  631. /package/dist/types/{package/common → common}/timeInput/components/clockDial/index.d.ts +0 -0
  632. /package/dist/types/{package/common → common}/timeInput/index.d.ts +0 -0
  633. /package/dist/types/{package/common → common}/timeInput/timeFunctions.d.ts +0 -0
  634. /package/dist/types/{package/common → common}/timeInput/timeInput.types.d.ts +0 -0
  635. /package/dist/types/{package/common → common}/timeline/index.d.ts +0 -0
  636. /package/dist/types/{package/common → common}/timeline/timeline.types.d.ts +0 -0
  637. /package/dist/types/{package/common → common}/timer/index.d.ts +0 -0
  638. /package/dist/types/{package/common → common}/timer/timer.chime.d.ts +0 -0
  639. /package/dist/types/{package/common → common}/timer/timer.d.ts +0 -0
  640. /package/dist/types/{package/common → common}/timer/timer.types.d.ts +0 -0
  641. /package/dist/types/{package/common → common}/toast/toast.types.d.ts +0 -0
  642. /package/dist/types/{package/common → common}/toast/toastService.d.ts +0 -0
  643. /package/dist/types/{package/common → common}/tooltip/index.d.ts +0 -0
  644. /package/dist/types/{package/common → common}/tooltip/tooltip.types.d.ts +0 -0
  645. /package/dist/types/{package/common → common}/types/actions.types.d.ts +0 -0
  646. /package/dist/types/{package/common → common}/types/baseProps.types.d.ts +0 -0
  647. /package/dist/types/{package/common → common}/types/icon.types.d.ts +0 -0
  648. /package/dist/types/{package/common → common}/types/slots.types.d.ts +0 -0
  649. /package/dist/types/{package/common → common}/utils/renderIcon.d.ts +0 -0
  650. /package/dist/types/{package/common → common}/utils/scrollAncestors.d.ts +0 -0
  651. /package/dist/types/{package/common → common}/utils/visualViewport.d.ts +0 -0
  652. /package/dist/types/{package/common → common}/virtualList/index.d.ts +0 -0
  653. /package/dist/types/{package/common → common}/virtualList/useColumns.d.ts +0 -0
  654. /package/dist/types/{package/common → common}/virtualList/useRowDrag.d.ts +0 -0
  655. /package/dist/types/{package/common → common}/virtualList/useSelection.d.ts +0 -0
  656. /package/dist/types/{package/common → common}/virtualList/useVirtualWindow.d.ts +0 -0
  657. /package/dist/types/{package/common → common}/virtualList/virtualList.d.ts +0 -0
  658. /package/dist/types/{package/common → common}/virtualList/virtualList.utils.d.ts +0 -0
  659. /package/dist/types/{package/common → common}/wizard/index.d.ts +0 -0
  660. /package/dist/types/{package/common → common}/wizard/wizard.types.d.ts +0 -0
  661. /package/dist/types/{package/hooks → hooks}/useWindowSize.d.ts +0 -0
  662. /package/dist/types/{package/services → services}/formValidation/FormValidatorGroupWithForm.d.ts +0 -0
  663. /package/dist/types/{package/services → services}/formValidation/useFormValidatorGroup.d.ts +0 -0
  664. /package/dist/types/{package/services → services}/formValidation/validatableComponent.d.ts +0 -0
  665. /package/dist/types/{package/services → services}/klipy.d.ts +0 -0
  666. /package/dist/types/{package/services → services}/localization.d.ts +0 -0
@@ -1,2 +1,2 @@
1
- import{getScrollableAncestors as e,isHiddenByAnyAncestor as t}from"../utils/scrollAncestors.mjs";import{getVisualViewportRect as n}from"../utils/visualViewport.mjs";import{PopoverAlign as r,PopoverPlacement as i}from"./popover.types.mjs";import{useLayoutEffect as a}from"react";var o={[i.Top]:`bottom`,[i.Bottom]:`top`,[i.Left]:`right`,[i.Right]:`left`},s=8;function c({isOpen:c,placement:l,align:u,offset:d,triggerRef:f,floatingRef:p,panelRef:m,arrowRef:h}){a(()=>{if(!c)return;let a,g;function _(){let c=f.current,v=p.current,y=m.current;if(!c||!v||!y){a=requestAnimationFrame(_);return}let b=e(c);function x(){let e=c.getBoundingClientRect(),a=y.offsetWidth,f=y.offsetHeight,p=n(),m={top:e.top-p.top,bottom:p.top+p.height-e.bottom,left:e.left-p.left,right:p.left+p.width-e.right},g=l===i.Top||l===i.Bottom?f:a,_=l,x=o[l];m[_]<g+d&&m[x]>m[_]&&(_=x);let S=_===`top`||_===`bottom`,C,w;_===`bottom`?C=e.bottom+d:_===`top`?C=e.top-d-f:w=_===`right`?e.right+d:e.left-d-a,S?(w=u===r.Start?e.left:u===r.End?e.right-a:e.left+e.width/2-a/2,w=Math.max(p.left+s,Math.min(w,p.left+p.width-a-s))):(C=u===r.Start?e.top:u===r.End?e.bottom-f:e.top+e.height/2-f/2,C=Math.max(p.top+s,Math.min(C,p.top+p.height-f-s))),v.style.top=`${C}px`,v.style.left=`${w}px`,v.style.visibility=t(e,b)?`hidden`:`visible`,v.dataset.placement=_;let T=h.current;if(T){let t=T.offsetWidth/2||5;if(S){let n=e.left+e.width/2-w;T.style.setProperty(`--arrow-x`,`${Math.max(t+2,Math.min(n,a-t-2))}px`),T.style.removeProperty(`--arrow-y`)}else{let n=e.top+e.height/2-C;T.style.setProperty(`--arrow-y`,`${Math.max(t+2,Math.min(n,f-t-2))}px`),T.style.removeProperty(`--arrow-x`)}}}x();let S=[window,...b];S.forEach(e=>e.addEventListener(`scroll`,x,{passive:!0})),window.addEventListener(`resize`,x),window.visualViewport?.addEventListener(`resize`,x),window.visualViewport?.addEventListener(`scroll`,x),g=()=>{S.forEach(e=>e.removeEventListener(`scroll`,x)),window.removeEventListener(`resize`,x),window.visualViewport?.removeEventListener(`resize`,x),window.visualViewport?.removeEventListener(`scroll`,x),v.style.top=``,v.style.left=``,v.style.visibility=``}}return _(),()=>{a!==void 0&&cancelAnimationFrame(a),g?.()}},[c,l,u,d,f,p,m,h])}export{c as usePopoverPosition};
1
+ import{isHiddenByAnyAncestor as e}from"../utils/scrollAncestors.mjs";import{getVisualViewportRect as t}from"../utils/visualViewport.mjs";import{useAnchorTracking as n}from"../hooks/useAnchorTracking.mjs";import{PopoverAlign as r,PopoverPlacement as i}from"./popover.types.mjs";var a={[i.Top]:`bottom`,[i.Bottom]:`top`,[i.Left]:`right`,[i.Right]:`left`},o=8;function s({isOpen:s,placement:c,align:l,offset:u,triggerRef:d,floatingRef:f,panelRef:p,arrowRef:m}){n({isOpen:s,triggerRef:d,elementRefs:[f,p],resizeRefs:[p],deps:[c,l,u,f,p,m],update:(n,s)=>{let d=f.current,h=p.current;if(!d||!h)return;let g=n.getBoundingClientRect(),_=h.offsetWidth,v=h.offsetHeight,y=t(),b={top:g.top-y.top,bottom:y.top+y.height-g.bottom,left:g.left-y.left,right:y.left+y.width-g.right},x=c===i.Top||c===i.Bottom?v:_,S=c,C=a[c];b[S]<x+u&&b[C]>b[S]&&(S=C);let w=S===`top`||S===`bottom`,T,E;S===`bottom`?T=g.bottom+u:S===`top`?T=g.top-u-v:E=S===`right`?g.right+u:g.left-u-_,w?(E=l===r.Start?g.left:l===r.End?g.right-_:g.left+g.width/2-_/2,E=Math.max(y.left+o,Math.min(E,y.left+y.width-_-o))):(T=l===r.Start?g.top:l===r.End?g.bottom-v:g.top+g.height/2-v/2,T=Math.max(y.top+o,Math.min(T,y.top+y.height-v-o))),d.style.top=`${T}px`,d.style.left=`${E}px`,d.style.visibility=e(g,s)?`hidden`:`visible`,d.dataset.placement=S;let D=m.current;if(D){let e=D.offsetWidth/2||5;if(w){let t=g.left+g.width/2-E;D.style.setProperty(`--arrow-x`,`${Math.max(e+2,Math.min(t,_-e-2))}px`),D.style.removeProperty(`--arrow-y`)}else{let t=g.top+g.height/2-T;D.style.setProperty(`--arrow-y`,`${Math.max(e+2,Math.min(t,v-e-2))}px`),D.style.removeProperty(`--arrow-x`)}}},teardown:()=>{let e=f.current;e&&(e.style.top=``,e.style.left=``,e.style.visibility=``)}})}export{s as usePopoverPosition};
2
2
  //# sourceMappingURL=usePopoverPosition.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePopoverPosition.mjs","names":[],"sources":["../../../../package/common/popover/usePopoverPosition.ts"],"sourcesContent":["import { useLayoutEffect, type RefObject } from 'react';\nimport { getScrollableAncestors, isHiddenByAnyAncestor } from 'components/common/utils/scrollAncestors';\nimport { getVisualViewportRect } from 'components/common/utils/visualViewport';\nimport { PopoverPlacement, PopoverAlign } from './popover.types';\n\ntype Axis = 'top' | 'bottom' | 'left' | 'right';\nconst OPPOSITE: Record<PopoverPlacement, Axis> = {\n [PopoverPlacement.Top]: 'bottom',\n [PopoverPlacement.Bottom]: 'top',\n [PopoverPlacement.Left]: 'right',\n [PopoverPlacement.Right]: 'left',\n};\n\nconst MARGIN = 8; // viewport gutter kept clear when shifting a panel back on-screen\n\nexport interface UsePopoverPositionArgs {\n isOpen: boolean;\n placement: PopoverPlacement;\n align: PopoverAlign;\n offset: number;\n triggerRef: RefObject<HTMLElement | null>;\n /** `position: fixed` wrapper that receives top/left/visibility and the resolved-placement data attribute. */\n floatingRef: RefObject<HTMLElement | null>;\n /** Visible panel, measured to decide flip and shift. */\n panelRef: RefObject<HTMLElement | null>;\n /** Arrow element; gets `--arrow-x` / `--arrow-y` written to it. Pass a null ref when `withArrow` is false. */\n arrowRef: RefObject<HTMLElement | null>;\n}\n\n/**\n * Positions a portaled, `position: fixed` popover on any of the four sides of its trigger with\n * start/center/end cross-axis alignment. Flips to the opposite side when the preferred one has no\n * room, shifts back on-screen along the cross axis, points the arrow at the trigger centre, and\n * hides (not closes) the panel once the trigger scrolls behind a clipping ancestor. Position is\n * written straight to the DOM via refs — going through setState lags the browser's scroll paint.\n */\nexport function usePopoverPosition({\n isOpen, placement, align, offset, triggerRef, floatingRef, panelRef, arrowRef,\n}: UsePopoverPositionArgs) {\n useLayoutEffect(() => {\n if (!isOpen) return;\n\n let rafId: number | undefined;\n let teardown: (() => void) | undefined;\n\n // The portal target (BodyEnd's #bodyEnd) can still be missing on the first commit, so the\n // floating ref lands one render later. Refs don't re-fire the effect, so retry each frame.\n function trySetup() {\n const trigger = triggerRef.current;\n const floating = floatingRef.current;\n const panel = panelRef.current;\n if (!trigger || !floating || !panel) {\n rafId = requestAnimationFrame(trySetup);\n return;\n }\n const ancestors = getScrollableAncestors(trigger);\n\n function updatePos() {\n const t = trigger!.getBoundingClientRect();\n const pw = panel!.offsetWidth;\n const ph = panel!.offsetHeight;\n // The visible area, not the full layout viewport — shrinks on mobile when a keyboard is\n // open, so the panel flips/clamps against what's actually on screen instead of ending up\n // hidden behind the keyboard.\n const vv = getVisualViewportRect();\n\n // Resolve the main-axis side, flipping when the preferred side lacks room and the\n // opposite side has more.\n const room: Record<Axis, number> = {\n top: t.top - vv.top,\n bottom: vv.top + vv.height - t.bottom,\n left: t.left - vv.left,\n right: vv.left + vv.width - t.right,\n };\n const need = (placement === PopoverPlacement.Top || placement === PopoverPlacement.Bottom) ? ph : pw;\n let side: Axis = placement as unknown as Axis;\n const opp = OPPOSITE[placement];\n if (room[side] < need + offset && room[opp] > room[side]) side = opp;\n\n const vertical = side === 'top' || side === 'bottom';\n\n // Main axis: place the panel just outside the trigger on the resolved side.\n let top: number;\n let left: number;\n if (side === 'bottom') { top = t.bottom + offset; }\n else if (side === 'top') { top = t.top - offset - ph; }\n else if (side === 'right') { left = t.right + offset; }\n else { left = t.left - offset - pw; }\n\n // Cross axis: align start/center/end against the trigger, then shift on-screen.\n if (vertical) {\n if (align === PopoverAlign.Start) left = t.left;\n else if (align === PopoverAlign.End) left = t.right - pw;\n else left = t.left + t.width / 2 - pw / 2;\n left = Math.max(vv.left + MARGIN, Math.min(left!, vv.left + vv.width - pw - MARGIN));\n } else {\n if (align === PopoverAlign.Start) top = t.top;\n else if (align === PopoverAlign.End) top = t.bottom - ph;\n else top = t.top + t.height / 2 - ph / 2;\n top = Math.max(vv.top + MARGIN, Math.min(top!, vv.top + vv.height - ph - MARGIN));\n }\n\n floating!.style.top = `${top!}px`;\n floating!.style.left = `${left!}px`;\n floating!.style.visibility = isHiddenByAnyAncestor(t, ancestors) ? 'hidden' : 'visible';\n floating!.dataset.placement = side;\n\n // Arrow: centre it on the trigger along the cross axis, clamped inside the panel edges.\n const arrow = arrowRef.current;\n if (arrow) {\n const half = arrow.offsetWidth / 2 || 5;\n if (vertical) {\n const x = t.left + t.width / 2 - left!;\n arrow.style.setProperty('--arrow-x', `${Math.max(half + 2, Math.min(x, pw - half - 2))}px`);\n arrow.style.removeProperty('--arrow-y');\n } else {\n const y = t.top + t.height / 2 - top!;\n arrow.style.setProperty('--arrow-y', `${Math.max(half + 2, Math.min(y, ph - half - 2))}px`);\n arrow.style.removeProperty('--arrow-x');\n }\n }\n }\n\n updatePos();\n\n const scrollTargets: (Window | HTMLElement)[] = [window, ...ancestors];\n scrollTargets.forEach((tt) => tt.addEventListener('scroll', updatePos, { passive: true }));\n window.addEventListener('resize', updatePos);\n // `window.resize` doesn't reliably fire when a mobile keyboard opens/closes — visualViewport\n // does, and is what the room/clamp math above is measured against.\n window.visualViewport?.addEventListener('resize', updatePos);\n window.visualViewport?.addEventListener('scroll', updatePos);\n teardown = () => {\n scrollTargets.forEach((tt) => tt.removeEventListener('scroll', updatePos));\n window.removeEventListener('resize', updatePos);\n window.visualViewport?.removeEventListener('resize', updatePos);\n window.visualViewport?.removeEventListener('scroll', updatePos);\n // Positioning is written as inline styles, which outrank any class the panel might\n // switch to while it stays mounted — a popover turning into a bottom sheet (`useSheet`)\n // would keep the coordinates computed for its anchored self.\n floating!.style.top = '';\n floating!.style.left = '';\n floating!.style.visibility = '';\n };\n }\n\n trySetup();\n\n return () => {\n if (rafId !== undefined) cancelAnimationFrame(rafId);\n teardown?.();\n };\n }, [isOpen, placement, align, offset, triggerRef, floatingRef, panelRef, arrowRef]);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"usePopoverPosition.mjs","names":[],"sources":["../../../../package/common/popover/usePopoverPosition.ts"],"sourcesContent":["import { type RefObject } from 'react';\nimport { isHiddenByAnyAncestor } from 'components/common/utils/scrollAncestors';\nimport { getVisualViewportRect } from 'components/common/utils/visualViewport';\nimport { useAnchorTracking } from '../hooks/useAnchorTracking';\nimport { PopoverPlacement, PopoverAlign } from './popover.types';\n\ntype Axis = 'top' | 'bottom' | 'left' | 'right';\nconst OPPOSITE: Record<PopoverPlacement, Axis> = {\n [PopoverPlacement.Top]: 'bottom',\n [PopoverPlacement.Bottom]: 'top',\n [PopoverPlacement.Left]: 'right',\n [PopoverPlacement.Right]: 'left',\n};\n\nconst MARGIN = 8; // viewport gutter kept clear when shifting a panel back on-screen\n\nexport interface UsePopoverPositionArgs {\n isOpen: boolean;\n placement: PopoverPlacement;\n align: PopoverAlign;\n offset: number;\n triggerRef: RefObject<HTMLElement | null>;\n /** `position: fixed` wrapper that receives top/left/visibility and the resolved-placement data attribute. */\n floatingRef: RefObject<HTMLElement | null>;\n /** Visible panel, measured to decide flip and shift. */\n panelRef: RefObject<HTMLElement | null>;\n /** Arrow element; gets `--arrow-x` / `--arrow-y` written to it. Pass a null ref when `withArrow` is false. */\n arrowRef: RefObject<HTMLElement | null>;\n}\n\n/**\n * Positions a portaled, `position: fixed` popover on any of the four sides of its trigger with\n * start/center/end cross-axis alignment. Flips to the opposite side when the preferred one has no\n * room, shifts back on-screen along the cross axis, points the arrow at the trigger centre, and\n * hides (not closes) the panel once the trigger scrolls behind a clipping ancestor.\n *\n * `useAnchorTracking` supplies the lifecycle around this: mount wait, ancestor resolution, and\n * re-running on scroll, viewport resize and panel size changes.\n */\nexport function usePopoverPosition({\n isOpen,\n placement,\n align,\n offset,\n triggerRef,\n floatingRef,\n panelRef,\n arrowRef,\n}: UsePopoverPositionArgs) {\n useAnchorTracking({\n isOpen,\n triggerRef,\n elementRefs: [floatingRef, panelRef],\n // The panel's own size feeds the flip decision and, on the `top`/`left` sides, the coordinate\n // itself — so content that resizes while open has to be re-measured.\n resizeRefs: [panelRef],\n deps: [placement, align, offset, floatingRef, panelRef, arrowRef],\n\n update: (trigger, ancestors) => {\n const floating = floatingRef.current;\n const panel = panelRef.current;\n if (!floating || !panel) return;\n\n const t = trigger.getBoundingClientRect();\n const pw = panel.offsetWidth;\n const ph = panel.offsetHeight;\n // The visible area, not the full layout viewport — shrinks on mobile when a keyboard is\n // open, so the panel flips/clamps against what's actually on screen instead of ending up\n // hidden behind the keyboard.\n const vv = getVisualViewportRect();\n\n // Resolve the main-axis side, flipping when the preferred side lacks room and the\n // opposite side has more.\n const room: Record<Axis, number> = {\n top: t.top - vv.top,\n bottom: vv.top + vv.height - t.bottom,\n left: t.left - vv.left,\n right: vv.left + vv.width - t.right,\n };\n const need = placement === PopoverPlacement.Top || placement === PopoverPlacement.Bottom ? ph : pw;\n let side: Axis = placement as unknown as Axis;\n const opp = OPPOSITE[placement];\n if (room[side] < need + offset && room[opp] > room[side]) side = opp;\n\n const vertical = side === 'top' || side === 'bottom';\n\n // Main axis: place the panel just outside the trigger on the resolved side.\n let top: number;\n let left: number;\n if (side === 'bottom') {\n top = t.bottom + offset;\n } else if (side === 'top') {\n top = t.top - offset - ph;\n } else if (side === 'right') {\n left = t.right + offset;\n } else {\n left = t.left - offset - pw;\n }\n\n // Cross axis: align start/center/end against the trigger, then shift on-screen.\n if (vertical) {\n if (align === PopoverAlign.Start) left = t.left;\n else if (align === PopoverAlign.End) left = t.right - pw;\n else left = t.left + t.width / 2 - pw / 2;\n left = Math.max(vv.left + MARGIN, Math.min(left!, vv.left + vv.width - pw - MARGIN));\n } else {\n if (align === PopoverAlign.Start) top = t.top;\n else if (align === PopoverAlign.End) top = t.bottom - ph;\n else top = t.top + t.height / 2 - ph / 2;\n top = Math.max(vv.top + MARGIN, Math.min(top!, vv.top + vv.height - ph - MARGIN));\n }\n\n floating.style.top = `${top!}px`;\n floating.style.left = `${left!}px`;\n floating.style.visibility = isHiddenByAnyAncestor(t, ancestors) ? 'hidden' : 'visible';\n floating.dataset.placement = side;\n\n // Arrow: centre it on the trigger along the cross axis, clamped inside the panel edges.\n const arrow = arrowRef.current;\n if (arrow) {\n const half = arrow.offsetWidth / 2 || 5;\n if (vertical) {\n const x = t.left + t.width / 2 - left!;\n arrow.style.setProperty('--arrow-x', `${Math.max(half + 2, Math.min(x, pw - half - 2))}px`);\n arrow.style.removeProperty('--arrow-y');\n } else {\n const y = t.top + t.height / 2 - top!;\n arrow.style.setProperty('--arrow-y', `${Math.max(half + 2, Math.min(y, ph - half - 2))}px`);\n arrow.style.removeProperty('--arrow-x');\n }\n }\n },\n\n teardown: () => {\n // Positioning is written as inline styles, which outrank any class the panel might\n // switch to while it stays mounted — a popover turning into a bottom sheet (`useSheet`)\n // would keep the coordinates computed for its anchored self.\n const floating = floatingRef.current;\n if (!floating) return;\n floating.style.top = '';\n floating.style.left = '';\n floating.style.visibility = '';\n },\n });\n}\n"],"mappings":"qRAOA,IAAM,EAA2C,EAC9C,EAAiB,KAAM,UACvB,EAAiB,QAAS,OAC1B,EAAiB,MAAO,SACxB,EAAiB,OAAQ,MAC5B,EAEM,EAAS,EAyBf,SAAgB,EAAmB,CACjC,SACA,YACA,QACA,SACA,aACA,cACA,WACA,YACyB,CACzB,EAAkB,CAChB,SACA,aACA,YAAa,CAAC,EAAa,CAAQ,EAGnC,WAAY,CAAC,CAAQ,EACrB,KAAM,CAAC,EAAW,EAAO,EAAQ,EAAa,EAAU,CAAQ,EAEhE,QAAS,EAAS,IAAc,CAC9B,IAAM,EAAW,EAAY,QACvB,EAAQ,EAAS,QACvB,GAAI,CAAC,GAAY,CAAC,EAAO,OAEzB,IAAM,EAAI,EAAQ,sBAAsB,EAClC,EAAK,EAAM,YACX,EAAK,EAAM,aAIX,EAAK,EAAsB,EAI3B,EAA6B,CACjC,IAAK,EAAE,IAAM,EAAG,IAChB,OAAQ,EAAG,IAAM,EAAG,OAAS,EAAE,OAC/B,KAAM,EAAE,KAAO,EAAG,KAClB,MAAO,EAAG,KAAO,EAAG,MAAQ,EAAE,KAChC,EACM,EAAO,IAAc,EAAiB,KAAO,IAAc,EAAiB,OAAS,EAAK,EAC5F,EAAa,EACX,EAAM,EAAS,GACjB,EAAK,GAAQ,EAAO,GAAU,EAAK,GAAO,EAAK,KAAO,EAAO,GAEjE,IAAM,EAAW,IAAS,OAAS,IAAS,SAGxC,EACA,EACA,IAAS,SACX,EAAM,EAAE,OAAS,EACR,IAAS,MAClB,EAAM,EAAE,IAAM,EAAS,EAClB,AAGL,EAHS,IAAS,QACX,EAAE,MAAQ,EAEV,EAAE,KAAO,EAAS,EAIvB,GACF,AAEK,EAFD,IAAU,EAAa,MAAc,EAAE,KAClC,IAAU,EAAa,IAAY,EAAE,MAAQ,EAC1C,EAAE,KAAO,EAAE,MAAQ,EAAI,EAAK,EACxC,EAAO,KAAK,IAAI,EAAG,KAAO,EAAQ,KAAK,IAAI,EAAO,EAAG,KAAO,EAAG,MAAQ,EAAK,CAAM,CAAC,IAEnF,AAEK,EAFD,IAAU,EAAa,MAAa,EAAE,IACjC,IAAU,EAAa,IAAW,EAAE,OAAS,EAC3C,EAAE,IAAM,EAAE,OAAS,EAAI,EAAK,EACvC,EAAM,KAAK,IAAI,EAAG,IAAM,EAAQ,KAAK,IAAI,EAAM,EAAG,IAAM,EAAG,OAAS,EAAK,CAAM,CAAC,GAGlF,EAAS,MAAM,IAAM,GAAG,EAAK,IAC7B,EAAS,MAAM,KAAO,GAAG,EAAM,IAC/B,EAAS,MAAM,WAAa,EAAsB,EAAG,CAAS,EAAI,SAAW,UAC7E,EAAS,QAAQ,UAAY,EAG7B,IAAM,EAAQ,EAAS,QACvB,GAAI,EAAO,CACT,IAAM,EAAO,EAAM,YAAc,GAAK,EACtC,GAAI,EAAU,CACZ,IAAM,EAAI,EAAE,KAAO,EAAE,MAAQ,EAAI,EACjC,EAAM,MAAM,YAAY,YAAa,GAAG,KAAK,IAAI,EAAO,EAAG,KAAK,IAAI,EAAG,EAAK,EAAO,CAAC,CAAC,EAAE,GAAG,EAC1F,EAAM,MAAM,eAAe,WAAW,CACxC,KAAO,CACL,IAAM,EAAI,EAAE,IAAM,EAAE,OAAS,EAAI,EACjC,EAAM,MAAM,YAAY,YAAa,GAAG,KAAK,IAAI,EAAO,EAAG,KAAK,IAAI,EAAG,EAAK,EAAO,CAAC,CAAC,EAAE,GAAG,EAC1F,EAAM,MAAM,eAAe,WAAW,CACxC,CACF,CACF,EAEA,aAAgB,CAId,IAAM,EAAW,EAAY,QACxB,IACL,EAAS,MAAM,IAAM,GACrB,EAAS,MAAM,KAAO,GACtB,EAAS,MAAM,WAAa,GAC9B,CACF,CAAC,CACH"}
@@ -1,2 +1,2 @@
1
- import e from"./progressBar.module.mjs";import t from"classnames";import{jsx as n}from"react/jsx-runtime";function r(e){let t=e.replace(`#`,``),n=parseInt(t.substring(0,2),16),r=parseInt(t.substring(2,4),16),i=parseInt(t.substring(4,6),16);return(.299*n+.587*r+.114*i)/255>.5?`#000000`:`#ffffff`}function i({className:i=void 0,total:a=100,progress:o=0,style:s=void 0,...c}){function l(){let i=[];return Array.isArray(o)?i.push(...o):typeof o==`object`?i.push(o):i.push({amount:o}),i.map((o,c)=>{let l=a?o.amount/a*100:0;return n(`div`,{className:t(e.progressBarFill,c===i.length-1&&e.progressBarFillEnd,o.class),style:{width:`${l}%`,background:o.color||void 0,...s||{}},title:o.label?`${o.label}: ${o.amount}`:void 0,children:o.label&&n(`div`,{className:e.progressBarLabel,style:o.color?{color:r(o.color)}:{},children:o.label})},c)})}return n(`div`,{...c,className:t(e.progressBar,i),style:s,children:l()})}export{i as default};
1
+ import e from"./progressBar.module.mjs";import t from"classnames";import{jsx as n}from"react/jsx-runtime";function r(e){let t=e.replace(`#`,``),n=parseInt(t.substring(0,2),16),r=parseInt(t.substring(2,4),16),i=parseInt(t.substring(4,6),16);return(.299*n+.587*r+.114*i)/255>.5?`#000000`:`#ffffff`}function i({className:i=void 0,total:a=100,progress:o=0,style:s=void 0,...c}){function l(){let i=[];return Array.isArray(o)?i.push(...o):typeof o==`object`?i.push(o):i.push({amount:o}),i.map((o,c)=>{let l=a?o.amount/a*100:0;return n(`div`,{className:t(e.progressBarFill,c===i.length-1&&e.progressBarFillEnd,o.class),style:{width:`${l}%`,background:o.color||void 0,...s||{}},title:o.label?`${o.label}: ${o.amount}`:void 0,children:o.label&&n(`div`,{className:e.progressBarLabel,style:o.color?{color:r(o.color)}:{},children:o.label})},c)})}return n(`div`,{...c,className:t(e.progressBar,i),style:s,children:l()})}export{i as default,r as getContrastColor};
2
2
  //# sourceMappingURL=progressBar.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"progressBar.mjs","names":[],"sources":["../../../../package/common/progressBar/progressBar.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport cx from 'classnames';\nimport { Progress, ProgressBarProps } from './progressBar.types';\n\nimport styles from './progressBar.module.pcss';\n\nexport function getContrastColor(hexColor: string): string {\n const hex = hexColor.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n \n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\nfunction ProgressBar({\n className = undefined,\n total = 100,\n progress = 0,\n style = undefined,\n ...rest\n}: ProgressBarProps): ReactElement {\n\n function renderProgressBars() {\n const progressArray: Progress[] = [];\n\n if (Array.isArray(progress)) progressArray.push(...progress);\n else if (typeof progress === 'object') progressArray.push(progress);\n else progressArray.push({ amount: progress });\n\n return progressArray.map((prog, index) => {\n const widthPercentage = !total ? 0 : (prog.amount / total) * 100;\n\n return (\n <div\n key={index}\n className={cx(\n styles.progressBarFill,\n index === progressArray.length - 1 && styles.progressBarFillEnd,\n prog.class,\n )}\n style={{\n width: `${widthPercentage}%`,\n background: prog.color || undefined,\n ...(style || {}),\n }}\n title={prog.label ? `${prog.label}: ${prog.amount}` : undefined}\n >\n {prog.label && <div className={styles.progressBarLabel} style={prog.color ? { color: getContrastColor(prog.color) } : {}}>{prog.label}</div>}\n </div>\n );\n });\n }\n\n return (\n <div {...rest} className={cx(styles.progressBar, className)} style={style}>\n {renderProgressBars()}\n </div>\n );\n}\n\nexport default ProgressBar;\n"],"mappings":"0GAMA,SAAgB,EAAiB,EAA0B,CACzD,IAAM,EAAM,EAAS,QAAQ,IAAK,EAAE,EAC9B,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpC,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpC,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EAG1C,OADmB,KAAQ,EAAI,KAAQ,EAAI,KAAQ,GAAK,IACrC,GAAM,UAAY,SACvC,CAEA,SAAS,EAAY,CACnB,YAAY,IAAA,GACZ,QAAQ,IACR,WAAW,EACX,QAAQ,IAAA,GACR,GAAG,GAC8B,CAEjC,SAAS,GAAqB,CAC5B,IAAM,EAA4B,CAAC,EAMnC,OAJI,MAAM,QAAQ,CAAQ,EAAG,EAAc,KAAK,GAAG,CAAQ,EAClD,OAAO,GAAa,SAAU,EAAc,KAAK,CAAQ,EAC7D,EAAc,KAAK,CAAE,OAAQ,CAAS,CAAC,EAErC,EAAc,KAAK,EAAM,IAAU,CACxC,IAAM,EAAmB,EAAa,EAAK,OAAS,EAAS,IAA5B,EAEjC,OACE,EAAC,MAAD,CAEE,UAAW,EACT,EAAO,gBACP,IAAU,EAAc,OAAS,GAAK,EAAO,mBAC7C,EAAK,KACP,EACA,MAAO,CACL,MAAO,GAAG,EAAgB,GAC1B,WAAY,EAAK,OAAS,IAAA,GAC1B,GAAI,GAAS,CAAC,CAChB,EACA,MAAO,EAAK,MAAQ,GAAG,EAAK,MAAM,IAAI,EAAK,SAAW,IAAA,YAErD,EAAK,OAAS,EAAC,MAAD,CAAK,UAAW,EAAO,iBAAkB,MAAO,EAAK,MAAQ,CAAE,MAAO,EAAiB,EAAK,KAAK,CAAE,EAAI,CAAC,WAAI,EAAK,KAAW,CAAA,CACxI,EAdE,CAcF,CAET,CAAC,CACH,CAEA,OACE,EAAC,MAAD,CAAK,GAAI,EAAM,UAAW,EAAG,EAAO,YAAa,CAAS,EAAU,iBACjE,EAAmB,CACjB,CAAA,CAET"}
1
+ {"version":3,"file":"progressBar.mjs","names":[],"sources":["../../../../package/common/progressBar/progressBar.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport cx from 'classnames';\nimport { Progress, ProgressBarProps } from './progressBar.types';\n\nimport styles from './progressBar.module.pcss';\n\nexport function getContrastColor(hexColor: string): string {\n const hex = hexColor.replace('#', '');\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return luminance > 0.5 ? '#000000' : '#ffffff';\n}\n\nfunction ProgressBar({\n className = undefined,\n total = 100,\n progress = 0,\n style = undefined,\n ...rest\n}: ProgressBarProps): ReactElement {\n function renderProgressBars() {\n const progressArray: Progress[] = [];\n\n if (Array.isArray(progress)) progressArray.push(...progress);\n else if (typeof progress === 'object') progressArray.push(progress);\n else progressArray.push({ amount: progress });\n\n return progressArray.map((prog, index) => {\n const widthPercentage = !total ? 0 : (prog.amount / total) * 100;\n\n return (\n <div\n key={index}\n className={cx(\n styles.progressBarFill,\n index === progressArray.length - 1 && styles.progressBarFillEnd,\n prog.class,\n )}\n style={{\n width: `${widthPercentage}%`,\n background: prog.color || undefined,\n ...(style || {}),\n }}\n title={prog.label ? `${prog.label}: ${prog.amount}` : undefined}\n >\n {prog.label && (\n <div className={styles.progressBarLabel} style={prog.color ? { color: getContrastColor(prog.color) } : {}}>\n {prog.label}\n </div>\n )}\n </div>\n );\n });\n }\n\n return (\n <div {...rest} className={cx(styles.progressBar, className)} style={style}>\n {renderProgressBars()}\n </div>\n );\n}\n\nexport default ProgressBar;\n"],"mappings":"0GAMA,SAAgB,EAAiB,EAA0B,CACzD,IAAM,EAAM,EAAS,QAAQ,IAAK,EAAE,EAC9B,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpC,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EACpC,EAAI,SAAS,EAAI,UAAU,EAAG,CAAC,EAAG,EAAE,EAG1C,OADmB,KAAQ,EAAI,KAAQ,EAAI,KAAQ,GAAK,IACrC,GAAM,UAAY,SACvC,CAEA,SAAS,EAAY,CACnB,YAAY,IAAA,GACZ,QAAQ,IACR,WAAW,EACX,QAAQ,IAAA,GACR,GAAG,GAC8B,CACjC,SAAS,GAAqB,CAC5B,IAAM,EAA4B,CAAC,EAMnC,OAJI,MAAM,QAAQ,CAAQ,EAAG,EAAc,KAAK,GAAG,CAAQ,EAClD,OAAO,GAAa,SAAU,EAAc,KAAK,CAAQ,EAC7D,EAAc,KAAK,CAAE,OAAQ,CAAS,CAAC,EAErC,EAAc,KAAK,EAAM,IAAU,CACxC,IAAM,EAAmB,EAAa,EAAK,OAAS,EAAS,IAA5B,EAEjC,OACE,EAAC,MAAD,CAEE,UAAW,EACT,EAAO,gBACP,IAAU,EAAc,OAAS,GAAK,EAAO,mBAC7C,EAAK,KACP,EACA,MAAO,CACL,MAAO,GAAG,EAAgB,GAC1B,WAAY,EAAK,OAAS,IAAA,GAC1B,GAAI,GAAS,CAAC,CAChB,EACA,MAAO,EAAK,MAAQ,GAAG,EAAK,MAAM,IAAI,EAAK,SAAW,IAAA,GAErD,SAAA,EAAK,OACJ,EAAC,MAAD,CAAK,UAAW,EAAO,iBAAkB,MAAO,EAAK,MAAQ,CAAE,MAAO,EAAiB,EAAK,KAAK,CAAE,EAAI,CAAC,EACrG,SAAA,EAAK,KACH,CAAA,CAEJ,EAlBE,CAkBF,CAET,CAAC,CACH,CAEA,OACE,EAAC,MAAD,CAAK,GAAI,EAAM,UAAW,EAAG,EAAO,YAAa,CAAS,EAAU,QACjE,SAAA,EAAmB,CACjB,CAAA,CAET"}
@@ -1,2 +1,2 @@
1
- var e={progressBar:`progressBar_LO0sX`,"progressBar-fill":`progressBar-fill_rt32j`,progressBarFill:`progressBar-fill_rt32j`,"progressBar-fill-end":`progressBar-fill-end_71wL3`,progressBarFillEnd:`progressBar-fill-end_71wL3`,"progressBar-label":`progressBar-label_jWud2`,progressBarLabel:`progressBar-label_jWud2`,"progressBar-label-custom":`progressBar-label-custom_sSump`,progressBarLabelCustom:`progressBar-label-custom_sSump`};export{e as default};
1
+ var e=`progressBar_LO0sX`,t=`progressBar-fill_rt32j`,n=`progressBar-fill-end_71wL3`,r=`progressBar-label_jWud2`,i=`progressBar-label-custom_sSump`,a={progressBar:e,"progressBar-fill":`progressBar-fill_rt32j`,progressBarFill:t,"progressBar-fill-end":`progressBar-fill-end_71wL3`,progressBarFillEnd:n,"progressBar-label":`progressBar-label_jWud2`,progressBarLabel:r,"progressBar-label-custom":`progressBar-label-custom_sSump`,progressBarLabelCustom:i};export{a as default,e as progressBar,t as progressBarFill,n as progressBarFillEnd,r as progressBarLabel,i as progressBarLabelCustom};
2
2
  //# sourceMappingURL=progressBar.module.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"progressBar.module.mjs","names":[],"sources":["../../../../package/common/progressBar/progressBar.module.pcss"],"sourcesContent":[".progressBar{\n min-width: 100px;\n min-height: 10px;\n background-color: var(--progress-bar-track-color, var(--background-accent-light));\n border-radius: var(--default-border-radius);\n overflow: hidden;\n display: flex;\n align-items: stretch;\n\n &-fill {\n background-color: var(--primary-color);\n width: 0;\n display: flex;\n align-items: center;\n overflow: hidden;\n transition: width .3s ease;\n transform: translateZ(0);\n container-type: inline-size;\n\n &-end {\n border-radius: 0 var(--default-border-radius) var(--default-border-radius) 0;\n }\n }\n\n &-label {\n color: white;\n font-size: 12px;\n padding: 0 min(5px, 4cqw);\n box-sizing: border-box;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &-custom {\n mix-blend-mode: difference;\n }\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"progressBar.module.mjs","names":[],"sources":["../../../../package/common/progressBar/progressBar.module.pcss"],"sourcesContent":[".progressBar {\n min-width: 100px;\n min-height: 10px;\n background-color: var(--progress-bar-track-color, var(--background-accent-light));\n border-radius: var(--default-border-radius);\n overflow: hidden;\n display: flex;\n align-items: stretch;\n\n &-fill {\n background-color: var(--primary-color);\n width: 0;\n display: flex;\n align-items: center;\n overflow: hidden;\n transition: width 0.3s ease;\n transform: translateZ(0);\n container-type: inline-size;\n\n &-end {\n border-radius: 0 var(--default-border-radius) var(--default-border-radius) 0;\n }\n }\n\n &-label {\n color: white;\n font-size: 12px;\n padding: 0 min(5px, 4cqw);\n box-sizing: border-box;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &-custom {\n mix-blend-mode: difference;\n }\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import t from"../tooltip/tooltip.mjs";import{RadioGroupOrientation as n}from"./radioGroup.types.mjs";import r from"./radioGroup.module.mjs";import{useEffect as i,useRef as a,useState as o}from"react";import s from"classnames";import{jsx as c,jsxs as l}from"react/jsx-runtime";function u(u){let{options:d=[],value:f,defaultValue:p,onChange:m=()=>{},orientation:h=n.Vertical,disabled:g=!1,size:_=`18px`,tabIndex:v=0,formValidator:y=null,errorMessage:b=``,isValid:x=!0,className:S,style:C,classNames:w,styles:T,...E}=e(`RadioGroup`,u),D=a([]),O=a(y);i(()=>{O.current=y});let[,k]=o(0),[A,j]=o(p),[M,N]=o(!1),[P,F]=o(!1);i(()=>{if(!y)return;y.validate();let e=()=>k(e=>e+1);return y.registerOnUpdateListener(e),()=>y.removeOnUpdateListener(e)},[y]);let I=y?y.touched&&y.hasError():!x||!!b,L=y?y.getCurrentErrorMessage():b||``,R=f!==void 0&&!y,z=y?y.value:R?f:A;function B(e,t){y?y.set(e):R||j(e),m(e,t)}function V(e){e.currentTarget.contains(e.relatedTarget)||(N(!1),O.current&&(O.current.touched=!0))}let H=d.findIndex(e=>e.value===z),U=d.findIndex(e=>!e.disabled),W=H>=0?H:U;function G(e){D.current[e]?.focus()}function K(e,t,n){if(g||d.length===0)return;let r=t;for(let t=0;t<d.length;t++)if(r=(r+e+d.length)%d.length,!d[r].disabled){G(r),B(d[r].value,n);return}}function q(e,t){let n=d[t];switch(e.key){case`ArrowDown`:case`ArrowRight`:e.preventDefault(),K(1,t,e);break;case`ArrowUp`:case`ArrowLeft`:e.preventDefault(),K(-1,t,e);break;case` `:case`Enter`:e.preventDefault(),!g&&!n.disabled&&B(n.value,e);break;default:break}}return l(`div`,{...E,role:`radiogroup`,"aria-orientation":h,"aria-disabled":g||void 0,"aria-invalid":I||void 0,className:s(r.radioGroup,h===n.Horizontal&&r.radioGroupHorizontal,g&&r.radioGroupDisabled,I&&r.radioGroupError,S,w?.root),style:{"--radio-size":_,...C,...T?.root},onFocus:()=>N(!0),onBlur:V,onMouseEnter:()=>F(!0),onMouseLeave:()=>F(!1),children:[d.map((e,t)=>{let n=e.value===z,i=g||!!e.disabled;return l(`div`,{ref:e=>{D.current[t]=e},role:`radio`,"aria-checked":n,"aria-disabled":i||void 0,tabIndex:i?-1:t===W?v:-1,className:s(r.radioGroupOption,n&&r.radioGroupOptionChecked,i&&r.radioGroupOptionDisabled,w?.option),style:T?.option,onClick:()=>{i||B(e.value)},onKeyDown:e=>q(e,t),children:[c(`div`,{className:s(r.radioGroupRadio,n&&r.radioGroupRadioChecked,w?.radio),style:T?.radio,children:c(`div`,{className:s(r.radioGroupDot,n&&r.radioGroupDotChecked,w?.dot),style:T?.dot})}),(e.label??e.value)!==``&&l(`div`,{className:r.radioGroupText,children:[c(`div`,{className:s(r.radioGroupLabel,w?.label),style:T?.label,children:e.label??e.value}),e.description!=null&&c(`div`,{className:s(r.radioGroupDescription,w?.description),style:T?.description,children:e.description})]})]},String(e.value))}),c(t,{variant:`error`,message:L,isVisible:I&&(M||P)})]})}export{u as default};
1
+ import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import t from"../tooltip/tooltip.mjs";import{RadioGroupOrientation as n}from"./radioGroup.types.mjs";import r from"./radioGroup.module.mjs";import{useEffect as i,useRef as a,useState as o}from"react";import s from"classnames";import{jsx as c,jsxs as l}from"react/jsx-runtime";function u(u){let{options:d=[],value:f,defaultValue:p,onChange:m=()=>{},orientation:h=n.Vertical,disabled:g=!1,size:_=`18px`,tabIndex:v=0,formValidator:y=null,errorMessage:b=``,isValid:x=!0,className:S,style:C,classNames:w,styles:T,...E}=e(`RadioGroup`,u),D=a([]),O=a(y);i(()=>{O.current=y});let[,k]=o(0),[A,j]=o(p),[M,N]=o(!1),[P,F]=o(!1);i(()=>{if(!y)return;y.validate();let e=()=>k(e=>e+1);return y.registerOnUpdateListener(e),()=>y.removeOnUpdateListener(e)},[y]);let I=y?y.touched&&y.hasError():!x||!!b,L=y?y.getCurrentErrorMessage():b||``,R=f!==void 0&&!y,z=y?y.value:R?f:A;function B(e,t){y?y.set(e):R||j(e),m(e,t)}function V(e){e.currentTarget.contains(e.relatedTarget)||(N(!1),O.current&&(O.current.touched=!0))}let H=d.findIndex(e=>e.value===z),U=d.findIndex(e=>!e.disabled),W=H>=0?H:U;function G(e){D.current[e]?.focus()}function K(e,t,n){if(g||d.length===0)return;let r=t;for(let t=0;t<d.length;t++)if(r=(r+e+d.length)%d.length,!d[r].disabled){G(r),B(d[r].value,n);return}}function q(e,t){let n=d[t];switch(e.key){case`ArrowDown`:case`ArrowRight`:e.preventDefault(),K(1,t,e);break;case`ArrowUp`:case`ArrowLeft`:e.preventDefault(),K(-1,t,e);break;case` `:case`Enter`:e.preventDefault(),!g&&!n.disabled&&B(n.value,e)}}return l(`div`,{...E,role:`radiogroup`,"aria-orientation":h,"aria-disabled":g||void 0,"aria-invalid":I||void 0,className:s(r.radioGroup,h===n.Horizontal&&r.radioGroupHorizontal,g&&r.radioGroupDisabled,I&&r.radioGroupError,S,w?.root),style:{"--radio-size":_,...C,...T?.root},onFocus:()=>N(!0),onBlur:V,onMouseEnter:()=>F(!0),onMouseLeave:()=>F(!1),children:[d.map((e,t)=>{let n=e.value===z,i=g||!!e.disabled;return l(`div`,{ref:e=>{D.current[t]=e},role:`radio`,"aria-checked":n,"aria-disabled":i||void 0,tabIndex:i?-1:t===W?v:-1,className:s(r.radioGroupOption,n&&r.radioGroupOptionChecked,i&&r.radioGroupOptionDisabled,w?.option),style:T?.option,onClick:()=>{i||B(e.value)},onKeyDown:e=>q(e,t),children:[c(`div`,{className:s(r.radioGroupRadio,n&&r.radioGroupRadioChecked,w?.radio),style:T?.radio,children:c(`div`,{className:s(r.radioGroupDot,n&&r.radioGroupDotChecked,w?.dot),style:T?.dot})}),(e.label??e.value)!==``&&l(`div`,{className:r.radioGroupText,children:[c(`div`,{className:s(r.radioGroupLabel,w?.label),style:T?.label,children:e.label??e.value}),e.description!=null&&c(`div`,{className:s(r.radioGroupDescription,w?.description),style:T?.description,children:e.description})]})]},String(e.value))}),c(t,{variant:`error`,message:L,isVisible:I&&(M||P)})]})}export{u as default};
2
2
  //# sourceMappingURL=radioGroup.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radioGroup.mjs","names":[],"sources":["../../../../package/common/radioGroup/radioGroup.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type ReactElement } from 'react';\nimport cx from 'classnames';\nimport Tooltip from 'components/common/tooltip';\n\nimport { useComponentDefaults } from '../configProvider';\nimport { RadioGroupOrientation, type RadioGroupProps, type RadioValue } from './radioGroup.types';\nimport styles from './radioGroup.module.pcss';\n\nfunction RadioGroup(props: RadioGroupProps): ReactElement {\n const {\n options = [],\n value,\n defaultValue,\n onChange = () => {},\n orientation = RadioGroupOrientation.Vertical,\n disabled = false,\n size = '18px',\n tabIndex = 0,\n formValidator = null,\n errorMessage = '',\n isValid = true,\n className,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n } = useComponentDefaults('RadioGroup', props);\n\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\n const fvRef = useRef(formValidator);\n useEffect(() => { fvRef.current = formValidator; });\n const [, forceUpdate] = useState(0);\n const [internalValue, setInternalValue] = useState<RadioValue | undefined>(defaultValue);\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n useEffect(() => {\n if (!formValidator) return;\n formValidator.validate();\n const listener = () => forceUpdate((n) => n + 1);\n formValidator.registerOnUpdateListener(listener);\n return () => formValidator.removeOnUpdateListener(listener);\n }, [formValidator]);\n\n const hasError = formValidator\n ? formValidator.touched && formValidator.hasError()\n : !isValid || !!errorMessage;\n const errorText = formValidator ? formValidator.getCurrentErrorMessage() : errorMessage || '';\n\n const isControlled = value !== undefined && !formValidator;\n const currentValue = (formValidator ? formValidator.value : isControlled ? value : internalValue) as\n | RadioValue\n | undefined;\n\n function select(next: RadioValue, event?: React.MouseEvent | React.KeyboardEvent) {\n if (formValidator) formValidator.set(next);\n else if (!isControlled) setInternalValue(next);\n onChange(next, event);\n }\n\n function handleBlur(event: React.FocusEvent<HTMLDivElement>) {\n if (event.currentTarget.contains(event.relatedTarget as Node | null)) return;\n setIsFocused(false);\n if (fvRef.current) fvRef.current.touched = true;\n }\n\n const selectedIndex = options.findIndex((o) => o.value === currentValue);\n const firstEnabledIndex = options.findIndex((o) => !o.disabled);\n const rovingIndex = selectedIndex >= 0 ? selectedIndex : firstEnabledIndex;\n\n function focusOption(index: number) {\n optionRefs.current[index]?.focus();\n }\n\n function moveTo(step: 1 | -1, fromIndex: number, event: React.KeyboardEvent) {\n if (disabled || options.length === 0) return;\n let i = fromIndex;\n for (let count = 0; count < options.length; count++) {\n i = (i + step + options.length) % options.length;\n if (!options[i].disabled) {\n focusOption(i);\n select(options[i].value, event);\n return;\n }\n }\n }\n\n function handleKeyDown(event: React.KeyboardEvent, index: number) {\n const option = options[index];\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n moveTo(1, index, event);\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n moveTo(-1, index, event);\n break;\n case ' ':\n case 'Enter':\n event.preventDefault();\n if (!disabled && !option.disabled) select(option.value, event);\n break;\n default:\n break;\n }\n }\n\n return (\n <div\n {...rest}\n role=\"radiogroup\"\n aria-orientation={orientation}\n aria-disabled={disabled || undefined}\n aria-invalid={hasError || undefined}\n className={cx(\n styles.radioGroup,\n orientation === RadioGroupOrientation.Horizontal && styles.radioGroupHorizontal,\n disabled && styles.radioGroupDisabled,\n hasError && styles.radioGroupError,\n className,\n classNames?.root,\n )}\n style={{ '--radio-size': size, ...style, ...slotStyles?.root } as React.CSSProperties}\n onFocus={() => setIsFocused(true)}\n onBlur={handleBlur}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {options.map((option, index) => {\n const checked = option.value === currentValue;\n const optionDisabled = disabled || !!option.disabled;\n return (\n <div\n key={String(option.value)}\n ref={(el) => { optionRefs.current[index] = el; }}\n role=\"radio\"\n aria-checked={checked}\n aria-disabled={optionDisabled || undefined}\n tabIndex={optionDisabled ? -1 : index === rovingIndex ? tabIndex : -1}\n className={cx(\n styles.radioGroupOption,\n checked && styles.radioGroupOptionChecked,\n optionDisabled && styles.radioGroupOptionDisabled,\n classNames?.option,\n )}\n style={slotStyles?.option}\n onClick={() => { if (!optionDisabled) select(option.value); }}\n onKeyDown={(e) => handleKeyDown(e, index)}\n >\n <div\n className={cx(styles.radioGroupRadio, checked && styles.radioGroupRadioChecked, classNames?.radio)}\n style={slotStyles?.radio}\n >\n <div\n className={cx(styles.radioGroupDot, checked && styles.radioGroupDotChecked, classNames?.dot)}\n style={slotStyles?.dot}\n />\n </div>\n {(option.label ?? option.value) !== '' && (\n <div className={styles.radioGroupText}>\n <div className={cx(styles.radioGroupLabel, classNames?.label)} style={slotStyles?.label}>\n {option.label ?? option.value}\n </div>\n {option.description != null && (\n <div\n className={cx(styles.radioGroupDescription, classNames?.description)}\n style={slotStyles?.description}\n >\n {option.description}\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n <Tooltip\n variant=\"error\"\n message={errorText}\n isVisible={hasError && (isFocused || isHovered)}\n />\n </div>\n );\n}\n\nexport default RadioGroup;\n"],"mappings":"sWAQA,SAAS,EAAW,EAAsC,CACxD,GAAM,CACJ,UAAU,CAAC,EACX,QACA,eACA,eAAiB,CAAC,EAClB,cAAc,EAAsB,SACpC,WAAW,GACX,OAAO,OACP,WAAW,EACX,gBAAgB,KAChB,eAAe,GACf,UAAU,GACV,YACA,QACA,aACA,OAAQ,EACR,GAAG,GACD,EAAqB,aAAc,CAAK,EAEtC,EAAa,EAAkC,CAAC,CAAC,EACjD,EAAQ,EAAO,CAAa,EAClC,MAAgB,CAAE,EAAM,QAAU,CAAe,CAAC,EAClD,GAAM,EAAG,GAAe,EAAS,CAAC,EAC5B,CAAC,EAAe,GAAoB,EAAiC,CAAY,EACjF,CAAC,EAAW,GAAgB,EAAS,EAAK,EAC1C,CAAC,EAAW,GAAgB,EAAS,EAAK,EAEhD,MAAgB,CACd,GAAI,CAAC,EAAe,OACpB,EAAc,SAAS,EACvB,IAAM,MAAiB,EAAa,GAAM,EAAI,CAAC,EAE/C,OADA,EAAc,yBAAyB,CAAQ,MAClC,EAAc,uBAAuB,CAAQ,CAC5D,EAAG,CAAC,CAAa,CAAC,EAElB,IAAM,EAAW,EACb,EAAc,SAAW,EAAc,SAAS,EAChD,CAAC,GAAW,CAAC,CAAC,EACZ,EAAY,EAAgB,EAAc,uBAAuB,EAAI,GAAgB,GAErF,EAAe,IAAU,IAAA,IAAa,CAAC,EACvC,EAAgB,EAAgB,EAAc,MAAQ,EAAe,EAAQ,EAInF,SAAS,EAAO,EAAkB,EAAgD,CAC5E,EAAe,EAAc,IAAI,CAAI,EAC/B,GAAc,EAAiB,CAAI,EAC7C,EAAS,EAAM,CAAK,CACtB,CAEA,SAAS,EAAW,EAAyC,CACvD,EAAM,cAAc,SAAS,EAAM,aAA4B,IACnE,EAAa,EAAK,EACd,EAAM,UAAS,EAAM,QAAQ,QAAU,IAC7C,CAEA,IAAM,EAAgB,EAAQ,UAAW,GAAM,EAAE,QAAU,CAAY,EACjE,EAAoB,EAAQ,UAAW,GAAM,CAAC,EAAE,QAAQ,EACxD,EAAc,GAAiB,EAAI,EAAgB,EAEzD,SAAS,EAAY,EAAe,CAClC,EAAW,QAAQ,IAAQ,MAAM,CACnC,CAEA,SAAS,EAAO,EAAc,EAAmB,EAA4B,CAC3E,GAAI,GAAY,EAAQ,SAAW,EAAG,OACtC,IAAI,EAAI,EACR,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAQ,OAAQ,IAE1C,GADA,GAAK,EAAI,EAAO,EAAQ,QAAU,EAAQ,OACtC,CAAC,EAAQ,GAAG,SAAU,CACxB,EAAY,CAAC,EACb,EAAO,EAAQ,GAAG,MAAO,CAAK,EAC9B,MACF,CAEJ,CAEA,SAAS,EAAc,EAA4B,EAAe,CAChE,IAAM,EAAS,EAAQ,GACvB,OAAQ,EAAM,IAAd,CACE,IAAK,YACL,IAAK,aACH,EAAM,eAAe,EACrB,EAAO,EAAG,EAAO,CAAK,EACtB,MACF,IAAK,UACL,IAAK,YACH,EAAM,eAAe,EACrB,EAAO,GAAI,EAAO,CAAK,EACvB,MACF,IAAK,IACL,IAAK,QACH,EAAM,eAAe,EACjB,CAAC,GAAY,CAAC,EAAO,UAAU,EAAO,EAAO,MAAO,CAAK,EAC7D,MACF,QACE,KACJ,CACF,CAEA,OACE,EAAC,MAAD,CACE,GAAI,EACJ,KAAK,aACL,mBAAkB,EAClB,gBAAe,GAAY,IAAA,GAC3B,eAAc,GAAY,IAAA,GAC1B,UAAW,EACT,EAAO,WACP,IAAgB,EAAsB,YAAc,EAAO,qBAC3D,GAAY,EAAO,mBACnB,GAAY,EAAO,gBACnB,EACA,GAAY,IACd,EACA,MAAO,CAAE,eAAgB,EAAM,GAAG,EAAO,GAAG,GAAY,IAAK,EAC7D,YAAe,EAAa,EAAI,EAChC,OAAQ,EACR,iBAAoB,EAAa,EAAI,EACrC,iBAAoB,EAAa,EAAK,WAlBxC,CAoBG,EAAQ,KAAK,EAAQ,IAAU,CAC9B,IAAM,EAAU,EAAO,QAAU,EAC3B,EAAiB,GAAY,CAAC,CAAC,EAAO,SAC5C,OACE,EAAC,MAAD,CAEE,IAAM,GAAO,CAAE,EAAW,QAAQ,GAAS,CAAI,EAC/C,KAAK,QACL,eAAc,EACd,gBAAe,GAAkB,IAAA,GACjC,SAAU,EAAiB,GAAK,IAAU,EAAc,EAAW,GACnE,UAAW,EACT,EAAO,iBACP,GAAW,EAAO,wBAClB,GAAkB,EAAO,yBACzB,GAAY,MACd,EACA,MAAO,GAAY,OACnB,YAAe,CAAO,GAAgB,EAAO,EAAO,KAAK,CAAG,EAC5D,UAAY,GAAM,EAAc,EAAG,CAAK,WAf1C,CAiBE,EAAC,MAAD,CACE,UAAW,EAAG,EAAO,gBAAiB,GAAW,EAAO,uBAAwB,GAAY,KAAK,EACjG,MAAO,GAAY,eAEnB,EAAC,MAAD,CACE,UAAW,EAAG,EAAO,cAAe,GAAW,EAAO,qBAAsB,GAAY,GAAG,EAC3F,MAAO,GAAY,GACpB,CAAA,CACE,CAAA,GACH,EAAO,OAAS,EAAO,SAAW,IAClC,EAAC,MAAD,CAAK,UAAW,EAAO,wBAAvB,CACE,EAAC,MAAD,CAAK,UAAW,EAAG,EAAO,gBAAiB,GAAY,KAAK,EAAG,MAAO,GAAY,eAC/E,EAAO,OAAS,EAAO,KACrB,CAAA,EACJ,EAAO,aAAe,MACrB,EAAC,MAAD,CACE,UAAW,EAAG,EAAO,sBAAuB,GAAY,WAAW,EACnE,MAAO,GAAY,qBAElB,EAAO,WACL,CAAA,CAEJ,GAEJ,GAxCE,OAAO,EAAO,KAAK,CAwCrB,CAET,CAAC,EACD,EAAC,EAAD,CACE,QAAQ,QACR,QAAS,EACT,UAAW,IAAa,GAAa,EACtC,CAAA,CACE,GAET"}
1
+ {"version":3,"file":"radioGroup.mjs","names":[],"sources":["../../../../package/common/radioGroup/radioGroup.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type ReactElement } from 'react';\nimport cx from 'classnames';\nimport Tooltip from 'components/common/tooltip';\n\nimport { useComponentDefaults } from '../configProvider';\nimport { RadioGroupOrientation, type RadioGroupProps, type RadioValue } from './radioGroup.types';\nimport styles from './radioGroup.module.pcss';\n\nfunction RadioGroup(props: RadioGroupProps): ReactElement {\n const {\n options = [],\n value,\n defaultValue,\n onChange = () => {},\n orientation = RadioGroupOrientation.Vertical,\n disabled = false,\n size = '18px',\n tabIndex = 0,\n formValidator = null,\n errorMessage = '',\n isValid = true,\n className,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n } = useComponentDefaults('RadioGroup', props);\n\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\n const fvRef = useRef(formValidator);\n useEffect(() => {\n fvRef.current = formValidator;\n });\n const [, forceUpdate] = useState(0);\n const [internalValue, setInternalValue] = useState<RadioValue | undefined>(defaultValue);\n const [isFocused, setIsFocused] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n useEffect(() => {\n if (!formValidator) return;\n formValidator.validate();\n const listener = () => forceUpdate((n) => n + 1);\n formValidator.registerOnUpdateListener(listener);\n return () => formValidator.removeOnUpdateListener(listener);\n }, [formValidator]);\n\n const hasError = formValidator ? formValidator.touched && formValidator.hasError() : !isValid || !!errorMessage;\n const errorText = formValidator ? formValidator.getCurrentErrorMessage() : errorMessage || '';\n\n const isControlled = value !== undefined && !formValidator;\n const currentValue = (formValidator ? formValidator.value : isControlled ? value : internalValue) as\n | RadioValue\n | undefined;\n\n function select(next: RadioValue, event?: React.MouseEvent | React.KeyboardEvent) {\n if (formValidator) formValidator.set(next);\n else if (!isControlled) setInternalValue(next);\n onChange(next, event);\n }\n\n function handleBlur(event: React.FocusEvent<HTMLDivElement>) {\n if (event.currentTarget.contains(event.relatedTarget as Node | null)) return;\n setIsFocused(false);\n if (fvRef.current) fvRef.current.touched = true;\n }\n\n const selectedIndex = options.findIndex((o) => o.value === currentValue);\n const firstEnabledIndex = options.findIndex((o) => !o.disabled);\n const rovingIndex = selectedIndex >= 0 ? selectedIndex : firstEnabledIndex;\n\n function focusOption(index: number) {\n optionRefs.current[index]?.focus();\n }\n\n function moveTo(step: 1 | -1, fromIndex: number, event: React.KeyboardEvent) {\n if (disabled || options.length === 0) return;\n let i = fromIndex;\n for (let count = 0; count < options.length; count++) {\n i = (i + step + options.length) % options.length;\n if (!options[i].disabled) {\n focusOption(i);\n select(options[i].value, event);\n return;\n }\n }\n }\n\n function handleKeyDown(event: React.KeyboardEvent, index: number) {\n const option = options[index];\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n moveTo(1, index, event);\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n moveTo(-1, index, event);\n break;\n case ' ':\n case 'Enter':\n event.preventDefault();\n if (!disabled && !option.disabled) select(option.value, event);\n break;\n default:\n break;\n }\n }\n\n return (\n <div\n {...rest}\n role='radiogroup'\n aria-orientation={orientation}\n aria-disabled={disabled || undefined}\n aria-invalid={hasError || undefined}\n className={cx(\n styles.radioGroup,\n orientation === RadioGroupOrientation.Horizontal && styles.radioGroupHorizontal,\n disabled && styles.radioGroupDisabled,\n hasError && styles.radioGroupError,\n className,\n classNames?.root,\n )}\n style={{ '--radio-size': size, ...style, ...slotStyles?.root } as React.CSSProperties}\n onFocus={() => setIsFocused(true)}\n onBlur={handleBlur}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {options.map((option, index) => {\n const checked = option.value === currentValue;\n const optionDisabled = disabled || !!option.disabled;\n return (\n <div\n key={String(option.value)}\n ref={(el) => {\n optionRefs.current[index] = el;\n }}\n role='radio'\n aria-checked={checked}\n aria-disabled={optionDisabled || undefined}\n tabIndex={optionDisabled ? -1 : index === rovingIndex ? tabIndex : -1}\n className={cx(\n styles.radioGroupOption,\n checked && styles.radioGroupOptionChecked,\n optionDisabled && styles.radioGroupOptionDisabled,\n classNames?.option,\n )}\n style={slotStyles?.option}\n onClick={() => {\n if (!optionDisabled) select(option.value);\n }}\n onKeyDown={(e) => handleKeyDown(e, index)}\n >\n <div\n className={cx(styles.radioGroupRadio, checked && styles.radioGroupRadioChecked, classNames?.radio)}\n style={slotStyles?.radio}\n >\n <div\n className={cx(styles.radioGroupDot, checked && styles.radioGroupDotChecked, classNames?.dot)}\n style={slotStyles?.dot}\n />\n </div>\n {(option.label ?? option.value) !== '' && (\n <div className={styles.radioGroupText}>\n <div className={cx(styles.radioGroupLabel, classNames?.label)} style={slotStyles?.label}>\n {option.label ?? option.value}\n </div>\n {option.description != null && (\n <div\n className={cx(styles.radioGroupDescription, classNames?.description)}\n style={slotStyles?.description}\n >\n {option.description}\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n <Tooltip variant='error' message={errorText} isVisible={hasError && (isFocused || isHovered)} />\n </div>\n );\n}\n\nexport default RadioGroup;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e={radioGroup:`radioGroup_5PUYO`,"radioGroup-horizontal":`radioGroup-horizontal_cfCch`,radioGroupHorizontal:`radioGroup-horizontal_cfCch`,"radioGroup-disabled":`radioGroup-disabled_O2hKy`,radioGroupDisabled:`radioGroup-disabled_O2hKy`,"radioGroup-error":`radioGroup-error_HVUcn`,radioGroupError:`radioGroup-error_HVUcn`,"radioGroup-radio":`radioGroup-radio_XLU2j`,radioGroupRadio:`radioGroup-radio_XLU2j`,"radioGroup-radio-checked":`radioGroup-radio-checked_AOEJu`,radioGroupRadioChecked:`radioGroup-radio-checked_AOEJu`,"radioGroup-option":`radioGroup-option_QxMeW`,radioGroupOption:`radioGroup-option_QxMeW`,"radioGroup-option-disabled":`radioGroup-option-disabled_Q0y35`,radioGroupOptionDisabled:`radioGroup-option-disabled_Q0y35`,"radioGroup-dot":`radioGroup-dot_Q-4Ge`,radioGroupDot:`radioGroup-dot_Q-4Ge`,"radioGroup-dot-checked":`radioGroup-dot-checked_7djgv`,radioGroupDotChecked:`radioGroup-dot-checked_7djgv`,"radioGroup-text":`radioGroup-text_8ekBs`,radioGroupText:`radioGroup-text_8ekBs`,"radioGroup-label":`radioGroup-label_hJD2S`,radioGroupLabel:`radioGroup-label_hJD2S`,"radioGroup-description":`radioGroup-description_xZSLE`,radioGroupDescription:`radioGroup-description_xZSLE`};export{e as default};
1
+ var e=`radioGroup_5PUYO`,t=`radioGroup-horizontal_cfCch`,n=`radioGroup-disabled_O2hKy`,r=`radioGroup-error_HVUcn`,i=`radioGroup-radio_XLU2j`,a=`radioGroup-radio-checked_AOEJu`,o=`radioGroup-option_QxMeW`,s=`radioGroup-option-disabled_Q0y35`,c=`radioGroup-dot_Q-4Ge`,l=`radioGroup-dot-checked_7djgv`,u=`radioGroup-text_8ekBs`,d=`radioGroup-label_hJD2S`,f=`radioGroup-description_xZSLE`,p={radioGroup:e,"radioGroup-horizontal":`radioGroup-horizontal_cfCch`,radioGroupHorizontal:t,"radioGroup-disabled":`radioGroup-disabled_O2hKy`,radioGroupDisabled:n,"radioGroup-error":`radioGroup-error_HVUcn`,radioGroupError:r,"radioGroup-radio":`radioGroup-radio_XLU2j`,radioGroupRadio:i,"radioGroup-radio-checked":`radioGroup-radio-checked_AOEJu`,radioGroupRadioChecked:a,"radioGroup-option":`radioGroup-option_QxMeW`,radioGroupOption:o,"radioGroup-option-disabled":`radioGroup-option-disabled_Q0y35`,radioGroupOptionDisabled:s,"radioGroup-dot":`radioGroup-dot_Q-4Ge`,radioGroupDot:c,"radioGroup-dot-checked":`radioGroup-dot-checked_7djgv`,radioGroupDotChecked:l,"radioGroup-text":`radioGroup-text_8ekBs`,radioGroupText:u,"radioGroup-label":`radioGroup-label_hJD2S`,radioGroupLabel:d,"radioGroup-description":`radioGroup-description_xZSLE`,radioGroupDescription:f};export{p as default,e as radioGroup,f as radioGroupDescription,n as radioGroupDisabled,c as radioGroupDot,l as radioGroupDotChecked,r as radioGroupError,t as radioGroupHorizontal,d as radioGroupLabel,o as radioGroupOption,s as radioGroupOptionDisabled,i as radioGroupRadio,a as radioGroupRadioChecked,u as radioGroupText};
2
2
  //# sourceMappingURL=radioGroup.module.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radioGroup.module.mjs","names":[],"sources":["../../../../package/common/radioGroup/radioGroup.module.pcss"],"sourcesContent":[".radioGroup {\n --radio-size: 18px;\n user-select: none;\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: fit-content;\n\n &-horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n gap: 20px;\n }\n\n &-disabled {\n filter: brightness(0.85);\n cursor: not-allowed;\n }\n\n &-error &-radio:not(.radioGroup-radio-checked) {\n border-color: var(--error-color);\n }\n\n &-option {\n display: flex;\n align-items: flex-start;\n column-gap: 10px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n border: 1px solid transparent;\n border-radius: var(--default-border-radius);\n margin: -1px;\n color: var(--text-color);\n font-family: var(--default-font);\n font-size: var(--default-font-size);\n\n &:focus-visible {\n outline: none;\n border-color: var(--focus-border-color, var(--primary-color));\n }\n\n &-disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n }\n\n &-radio {\n flex-shrink: 0;\n width: var(--radio-size);\n height: var(--radio-size);\n border-radius: 50%;\n border: 1.8px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 1px;\n transition: border-color 0.15s;\n\n &-checked {\n border-color: var(--primary-color);\n }\n }\n\n &-dot {\n width: calc(var(--radio-size) * 0.5);\n height: calc(var(--radio-size) * 0.5);\n border-radius: 50%;\n background-color: var(--primary-color);\n transform: scale(0);\n transition: transform 0.15s ease;\n\n &-checked {\n transform: scale(1);\n }\n }\n\n &-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n &-label {\n line-height: 1.2;\n color: var(--text-color);\n }\n\n &-description {\n font-size: 0.85em;\n line-height: 1.3;\n color: var(--text-dark);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"radioGroup.module.mjs","names":[],"sources":["../../../../package/common/radioGroup/radioGroup.module.pcss"],"sourcesContent":[".radioGroup {\n --radio-size: 18px;\n\n user-select: none;\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: fit-content;\n\n &-horizontal {\n flex-flow: row wrap;\n gap: 20px;\n }\n\n &-disabled {\n filter: brightness(0.85);\n cursor: not-allowed;\n }\n\n &-error &-radio:not(.radioGroup-radio-checked) {\n border-color: var(--error-color);\n }\n\n &-option {\n display: flex;\n align-items: flex-start;\n column-gap: 10px;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n border: 1px solid transparent;\n border-radius: var(--default-border-radius);\n margin: -1px;\n color: var(--text-color);\n font-family: var(--default-font);\n font-size: var(--default-font-size);\n\n &:focus-visible {\n outline: none;\n border-color: var(--focus-border-color, var(--primary-color));\n }\n\n &-disabled {\n cursor: not-allowed;\n opacity: 0.55;\n }\n }\n\n &-radio {\n flex-shrink: 0;\n width: var(--radio-size);\n height: var(--radio-size);\n border-radius: 50%;\n border: 1.8px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 1px;\n transition: border-color 0.15s;\n\n &-checked {\n border-color: var(--primary-color);\n }\n }\n\n &-dot {\n width: calc(var(--radio-size) * 0.5);\n height: calc(var(--radio-size) * 0.5);\n border-radius: 50%;\n background-color: var(--primary-color);\n transform: scale(0);\n transition: transform 0.15s ease;\n\n &-checked {\n transform: scale(1);\n }\n }\n\n &-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n &-label {\n line-height: 1.2;\n color: var(--text-color);\n }\n\n &-description {\n font-size: 0.85em;\n line-height: 1.3;\n color: var(--text-dark);\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import{renderIcon as t}from"../utils/renderIcon.mjs";import n from"./rating.module.mjs";import{useRef as r,useState as i}from"react";import a from"classnames";import{faStar as o}from"@fortawesome/free-solid-svg-icons";import{jsx as s,jsxs as c}from"react/jsx-runtime";var l=4;function u(e,t){return Math.max(0,Math.min(t,e))}function d(d){let{value:f,defaultValue:p=0,onChange:m=()=>{},max:h=5,allowHalf:g=!1,allowClear:_=!0,readOnly:v=!1,disabled:y=!1,icon:b=o,"aria-label":x=`Rating`,className:S,style:C,classNames:w,styles:T,...E}=e(`Rating`,d),D=f!==void 0,[O,k]=i(p),A=u(D?f:O,h),[j,M]=i(null),N=!v&&!y,P=j??A,F=r(null),I=r(A),L=r(!1),R=r(0),z=r(!1);function B(e){let t=u(e,h);D||k(t),m(t)}function V(e){let t=F.current?.getBoundingClientRect();if(!t||t.width===0)return null;let n=u((e-t.left)/t.width,1)*h;return g?Math.round(n*2)/2:Math.ceil(n)}function H(e){if(!N)return;e.currentTarget.setPointerCapture?.(e.pointerId),L.current=!0,z.current=!1,R.current=e.clientX,I.current=A;let t=V(e.clientX);t!==null&&M(t)}function U(e){if(!N)return;let t=V(e.clientX);t!==null&&(L.current&&(e.preventDefault(),Math.abs(e.clientX-R.current)>l&&(z.current=!0)),M(t))}function W(e){if(!N||!L.current)return;e.currentTarget.releasePointerCapture?.(e.pointerId),L.current=!1;let t=V(e.clientX)??j;t!==null&&B(!z.current&&_&&t===I.current?0:t),M(null)}function G(){!N||L.current||M(null)}function K(e){let t=g?.5:1;e.key===`ArrowRight`||e.key===`ArrowUp`?(e.preventDefault(),B(A+t)):e.key===`ArrowLeft`||e.key===`ArrowDown`?(e.preventDefault(),B(A-t)):e.key===`Home`?(e.preventDefault(),B(0)):e.key===`End`&&(e.preventDefault(),B(h))}return s(`div`,{...E,ref:F,role:`slider`,"aria-label":x,"aria-valuemin":0,"aria-valuemax":h,"aria-valuenow":A,"aria-valuetext":`${A} out of ${h}`,"aria-readonly":v||void 0,"aria-disabled":y||void 0,tabIndex:N?0:-1,className:a(n.rating,y&&n.ratingDisabled,v&&n.ratingReadOnly,w?.root,S),style:{...C,...T?.root},onKeyDown:N?K:void 0,onPointerDown:N?H:void 0,onPointerMove:N?U:void 0,onPointerUp:N?W:void 0,onPointerCancel:N?W:void 0,onPointerLeave:N?G:void 0,children:Array.from({length:h},(e,r)=>{let i=Math.round(Math.max(0,Math.min(1,P-r))*100);return c(`div`,{className:a(n.ratingItem,w?.item),style:T?.item,children:[t(b,{className:a(n.ratingIconEmpty,w?.iconEmpty),style:T?.iconEmpty}),s(`div`,{className:n.ratingIconFilledClip,style:{width:`${i}%`},children:t(b,{className:a(n.ratingIconFilled,w?.iconFilled),style:T?.iconFilled})})]},r)})})}export{d as default};
1
+ import{useComponentDefaults as e}from"../configProvider/useComponentDefaults.mjs";import{renderIcon as t}from"../utils/renderIcon.mjs";import n from"./rating.module.mjs";import{useRef as r,useState as i}from"react";import a from"classnames";import{faStar as o}from"@fortawesome/free-solid-svg-icons";import{jsx as s,jsxs as c}from"react/jsx-runtime";var l=4;function u(e,t){return Math.max(0,Math.min(t,e))}function d(d){let{value:f,defaultValue:p=0,onChange:m=()=>{},max:h=5,allowHalf:g=!1,allowClear:_=!0,readOnly:v=!1,disabled:y=!1,icon:b=o,"aria-label":x=`Rating`,className:S,style:C,classNames:w,styles:T,...E}=e(`Rating`,d),D=f!==void 0,[O,k]=i(p),A=u(D?f:O,h),[j,M]=i(null),N=!v&&!y,P=j??A,F=r(null),I=r(A),L=r(!1),R=r(0),z=r(!1);function B(e){let t=u(e,h);D||k(t),m(t)}function V(e){let t=F.current?.getBoundingClientRect();if(!t||t.width===0)return null;let n=u((e-t.left)/t.width,1)*h;return g?Math.round(n*2)/2:Math.ceil(n)}function H(e){if(!N)return;e.currentTarget.setPointerCapture?.(e.pointerId),L.current=!0,z.current=!1,R.current=e.clientX,I.current=A;let t=V(e.clientX);t!==null&&M(t)}function U(e){if(!N)return;let t=V(e.clientX);t!==null&&(L.current&&(e.preventDefault(),Math.abs(e.clientX-R.current)>l&&(z.current=!0)),M(t))}function W(e){if(!N||!L.current)return;e.currentTarget.releasePointerCapture?.(e.pointerId),L.current=!1;let t=V(e.clientX)??j;t!==null&&B(!z.current&&_&&t===I.current?0:t),M(null)}function G(){N&&!L.current&&M(null)}function K(e){let t=g?.5:1;e.key===`ArrowRight`||e.key===`ArrowUp`?(e.preventDefault(),B(A+t)):e.key===`ArrowLeft`||e.key===`ArrowDown`?(e.preventDefault(),B(A-t)):e.key===`Home`?(e.preventDefault(),B(0)):e.key===`End`&&(e.preventDefault(),B(h))}return s(`div`,{...E,ref:F,role:`slider`,"aria-label":x,"aria-valuemin":0,"aria-valuemax":h,"aria-valuenow":A,"aria-valuetext":`${A} out of ${h}`,"aria-readonly":v||void 0,"aria-disabled":y||void 0,tabIndex:N?0:-1,className:a(n.rating,y&&n.ratingDisabled,v&&n.ratingReadOnly,w?.root,S),style:{...C,...T?.root},onKeyDown:N?K:void 0,onPointerDown:N?H:void 0,onPointerMove:N?U:void 0,onPointerUp:N?W:void 0,onPointerCancel:N?W:void 0,onPointerLeave:N?G:void 0,children:Array.from({length:h},(e,r)=>{let i=Math.round(Math.max(0,Math.min(1,P-r))*100);return c(`div`,{className:a(n.ratingItem,w?.item),style:T?.item,children:[t(b,{className:a(n.ratingIconEmpty,w?.iconEmpty),style:T?.iconEmpty}),s(`div`,{className:n.ratingIconFilledClip,style:{width:`${i}%`},children:t(b,{className:a(n.ratingIconFilled,w?.iconFilled),style:T?.iconFilled})})]},r)})})}export{d as default};
2
2
  //# sourceMappingURL=rating.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rating.mjs","names":[],"sources":["../../../../package/common/rating/rating.tsx"],"sourcesContent":["import { useRef, useState } from 'react';\nimport type { ReactElement } from 'react';\nimport cx from 'classnames';\nimport { faStar } from '@fortawesome/free-solid-svg-icons';\n\nimport { useComponentDefaults } from '../configProvider';\nimport type { RatingProps } from './rating.types';\n\nimport styles from './rating.module.pcss';\nimport { renderIcon } from '../utils/renderIcon';\n\nconst DRAG_THRESHOLD = 4;\n\nfunction clampValue(value: number, max: number): number {\n return Math.max(0, Math.min(max, value));\n}\n\nfunction Rating(props: RatingProps): ReactElement {\n const {\n value: controlledValue,\n defaultValue = 0,\n onChange = () => {},\n max = 5,\n allowHalf = false,\n allowClear = true,\n readOnly = false,\n disabled = false,\n icon = faStar,\n 'aria-label': ariaLabel = 'Rating',\n className,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n } = useComponentDefaults('Rating', props);\n\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const value = clampValue(isControlled ? controlledValue! : internalValue, max);\n\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n const isInteractive = !readOnly && !disabled;\n const displayValue = hoverValue ?? value;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const valueBeforeGestureRef = useRef(value);\n const draggingRef = useRef(false);\n const gestureStartXRef = useRef(0);\n const hasDraggedRef = useRef(false);\n\n function commit(nextValue: number) {\n const clamped = clampValue(nextValue, max);\n if (!isControlled) setInternalValue(clamped);\n onChange(clamped);\n }\n\n function getValueFromClientX(clientX: number): number | null {\n const rect = rootRef.current?.getBoundingClientRect();\n if (!rect || rect.width === 0) return null;\n const fraction = clampValue((clientX - rect.left) / rect.width, 1);\n const raw = fraction * max;\n return allowHalf ? Math.round(raw * 2) / 2 : Math.ceil(raw);\n }\n\n function handlePointerDown(event: React.PointerEvent<HTMLDivElement>) {\n if (!isInteractive) return;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n draggingRef.current = true;\n hasDraggedRef.current = false;\n gestureStartXRef.current = event.clientX;\n valueBeforeGestureRef.current = value;\n const next = getValueFromClientX(event.clientX);\n if (next !== null) setHoverValue(next);\n }\n\n function handlePointerMove(event: React.PointerEvent<HTMLDivElement>) {\n if (!isInteractive) return;\n const next = getValueFromClientX(event.clientX);\n if (next === null) return;\n if (draggingRef.current) {\n event.preventDefault();\n if (Math.abs(event.clientX - gestureStartXRef.current) > DRAG_THRESHOLD) {\n hasDraggedRef.current = true;\n }\n }\n setHoverValue(next);\n }\n\n function handlePointerUp(event: React.PointerEvent<HTMLDivElement>) {\n if (!isInteractive || !draggingRef.current) return;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n draggingRef.current = false;\n const next = getValueFromClientX(event.clientX) ?? hoverValue;\n if (next !== null) {\n const isClick = !hasDraggedRef.current;\n commit(isClick && allowClear && next === valueBeforeGestureRef.current ? 0 : next);\n }\n setHoverValue(null);\n }\n\n function handlePointerLeave() {\n if (!isInteractive || draggingRef.current) return;\n setHoverValue(null);\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>) {\n const step = allowHalf ? 0.5 : 1;\n if (event.key === 'ArrowRight' || event.key === 'ArrowUp') {\n event.preventDefault();\n commit(value + step);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {\n event.preventDefault();\n commit(value - step);\n } else if (event.key === 'Home') {\n event.preventDefault();\n commit(0);\n } else if (event.key === 'End') {\n event.preventDefault();\n commit(max);\n }\n }\n\n return (\n <div\n {...rest}\n ref={rootRef}\n role=\"slider\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={`${value} out of ${max}`}\n aria-readonly={readOnly || undefined}\n aria-disabled={disabled || undefined}\n tabIndex={isInteractive ? 0 : -1}\n className={cx(\n styles.rating,\n disabled && styles.ratingDisabled,\n readOnly && styles.ratingReadOnly,\n classNames?.root,\n className\n )}\n style={{ ...style, ...slotStyles?.root }}\n onKeyDown={isInteractive ? handleKeyDown : undefined}\n onPointerDown={isInteractive ? handlePointerDown : undefined}\n onPointerMove={isInteractive ? handlePointerMove : undefined}\n onPointerUp={isInteractive ? handlePointerUp : undefined}\n onPointerCancel={isInteractive ? handlePointerUp : undefined}\n onPointerLeave={isInteractive ? handlePointerLeave : undefined}\n >\n {Array.from({ length: max }, (_, index) => {\n const fillPercent = Math.round(Math.max(0, Math.min(1, displayValue - index)) * 100);\n\n return (\n <div key={index} className={cx(styles.ratingItem, classNames?.item)} style={slotStyles?.item}>\n {renderIcon(icon, {\n className: cx(styles.ratingIconEmpty, classNames?.iconEmpty),\n style: slotStyles?.iconEmpty,\n })}\n <div className={styles.ratingIconFilledClip} style={{ width: `${fillPercent}%` }}>\n {renderIcon(icon, {\n className: cx(styles.ratingIconFilled, classNames?.iconFilled),\n style: slotStyles?.iconFilled,\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport default Rating;\n"],"mappings":"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"}
1
+ {"version":3,"file":"rating.mjs","names":[],"sources":["../../../../package/common/rating/rating.tsx"],"sourcesContent":["import { useRef, useState } from 'react';\nimport type { ReactElement } from 'react';\nimport cx from 'classnames';\nimport { faStar } from '@fortawesome/free-solid-svg-icons';\n\nimport { useComponentDefaults } from '../configProvider';\nimport type { RatingProps } from './rating.types';\n\nimport styles from './rating.module.pcss';\nimport { renderIcon } from '../utils/renderIcon';\n\nconst DRAG_THRESHOLD = 4;\n\nfunction clampValue(value: number, max: number): number {\n return Math.max(0, Math.min(max, value));\n}\n\nfunction Rating(props: RatingProps): ReactElement {\n const {\n value: controlledValue,\n defaultValue = 0,\n onChange = () => {},\n max = 5,\n allowHalf = false,\n allowClear = true,\n readOnly = false,\n disabled = false,\n icon = faStar,\n 'aria-label': ariaLabel = 'Rating',\n className,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n } = useComponentDefaults('Rating', props);\n\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const value = clampValue(isControlled ? controlledValue! : internalValue, max);\n\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n const isInteractive = !readOnly && !disabled;\n const displayValue = hoverValue ?? value;\n\n const rootRef = useRef<HTMLDivElement>(null);\n const valueBeforeGestureRef = useRef(value);\n const draggingRef = useRef(false);\n const gestureStartXRef = useRef(0);\n const hasDraggedRef = useRef(false);\n\n function commit(nextValue: number) {\n const clamped = clampValue(nextValue, max);\n if (!isControlled) setInternalValue(clamped);\n onChange(clamped);\n }\n\n function getValueFromClientX(clientX: number): number | null {\n const rect = rootRef.current?.getBoundingClientRect();\n if (!rect || rect.width === 0) return null;\n const fraction = clampValue((clientX - rect.left) / rect.width, 1);\n const raw = fraction * max;\n return allowHalf ? Math.round(raw * 2) / 2 : Math.ceil(raw);\n }\n\n function handlePointerDown(event: React.PointerEvent<HTMLDivElement>) {\n if (!isInteractive) return;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n draggingRef.current = true;\n hasDraggedRef.current = false;\n gestureStartXRef.current = event.clientX;\n valueBeforeGestureRef.current = value;\n const next = getValueFromClientX(event.clientX);\n if (next !== null) setHoverValue(next);\n }\n\n function handlePointerMove(event: React.PointerEvent<HTMLDivElement>) {\n if (!isInteractive) return;\n const next = getValueFromClientX(event.clientX);\n if (next === null) return;\n if (draggingRef.current) {\n event.preventDefault();\n if (Math.abs(event.clientX - gestureStartXRef.current) > DRAG_THRESHOLD) {\n hasDraggedRef.current = true;\n }\n }\n setHoverValue(next);\n }\n\n function handlePointerUp(event: React.PointerEvent<HTMLDivElement>) {\n if (!isInteractive || !draggingRef.current) return;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n draggingRef.current = false;\n const next = getValueFromClientX(event.clientX) ?? hoverValue;\n if (next !== null) {\n const isClick = !hasDraggedRef.current;\n commit(isClick && allowClear && next === valueBeforeGestureRef.current ? 0 : next);\n }\n setHoverValue(null);\n }\n\n function handlePointerLeave() {\n if (!isInteractive || draggingRef.current) return;\n setHoverValue(null);\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>) {\n const step = allowHalf ? 0.5 : 1;\n if (event.key === 'ArrowRight' || event.key === 'ArrowUp') {\n event.preventDefault();\n commit(value + step);\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') {\n event.preventDefault();\n commit(value - step);\n } else if (event.key === 'Home') {\n event.preventDefault();\n commit(0);\n } else if (event.key === 'End') {\n event.preventDefault();\n commit(max);\n }\n }\n\n return (\n <div\n {...rest}\n ref={rootRef}\n role='slider'\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={`${value} out of ${max}`}\n aria-readonly={readOnly || undefined}\n aria-disabled={disabled || undefined}\n tabIndex={isInteractive ? 0 : -1}\n className={cx(\n styles.rating,\n disabled && styles.ratingDisabled,\n readOnly && styles.ratingReadOnly,\n classNames?.root,\n className,\n )}\n style={{ ...style, ...slotStyles?.root }}\n onKeyDown={isInteractive ? handleKeyDown : undefined}\n onPointerDown={isInteractive ? handlePointerDown : undefined}\n onPointerMove={isInteractive ? handlePointerMove : undefined}\n onPointerUp={isInteractive ? handlePointerUp : undefined}\n onPointerCancel={isInteractive ? handlePointerUp : undefined}\n onPointerLeave={isInteractive ? handlePointerLeave : undefined}\n >\n {Array.from({ length: max }, (_, index) => {\n const fillPercent = Math.round(Math.max(0, Math.min(1, displayValue - index)) * 100);\n\n return (\n <div key={index} className={cx(styles.ratingItem, classNames?.item)} style={slotStyles?.item}>\n {renderIcon(icon, {\n className: cx(styles.ratingIconEmpty, classNames?.iconEmpty),\n style: slotStyles?.iconEmpty,\n })}\n <div className={styles.ratingIconFilledClip} style={{ width: `${fillPercent}%` }}>\n {renderIcon(icon, {\n className: cx(styles.ratingIconFilled, classNames?.iconFilled),\n style: slotStyles?.iconFilled,\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport default Rating;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e={rating:`rating_eDKeX`,"rating-disabled":`rating-disabled_Xk0cI`,ratingDisabled:`rating-disabled_Xk0cI`,"rating-readOnly":`rating-readOnly_o8Kx1`,ratingReadOnly:`rating-readOnly_o8Kx1`,"rating-item":`rating-item_4tqx2`,ratingItem:`rating-item_4tqx2`,"rating-iconEmpty":`rating-iconEmpty_3uk2A`,ratingIconEmpty:`rating-iconEmpty_3uk2A`,"rating-iconFilledClip":`rating-iconFilledClip_4aNxG`,ratingIconFilledClip:`rating-iconFilledClip_4aNxG`,"rating-iconFilled":`rating-iconFilled_-rQ58`,ratingIconFilled:`rating-iconFilled_-rQ58`};export{e as default};
1
+ var e=`rating_eDKeX`,t=`rating-disabled_Xk0cI`,n=`rating-readOnly_o8Kx1`,r=`rating-item_4tqx2`,i=`rating-iconEmpty_3uk2A`,a=`rating-iconFilledClip_4aNxG`,o=`rating-iconFilled_-rQ58`,s={rating:e,"rating-disabled":`rating-disabled_Xk0cI`,ratingDisabled:t,"rating-readOnly":`rating-readOnly_o8Kx1`,ratingReadOnly:n,"rating-item":`rating-item_4tqx2`,ratingItem:r,"rating-iconEmpty":`rating-iconEmpty_3uk2A`,ratingIconEmpty:i,"rating-iconFilledClip":`rating-iconFilledClip_4aNxG`,ratingIconFilledClip:a,"rating-iconFilled":`rating-iconFilled_-rQ58`,ratingIconFilled:o};export{s as default,e as rating,t as ratingDisabled,i as ratingIconEmpty,o as ratingIconFilled,a as ratingIconFilledClip,r as ratingItem,n as ratingReadOnly};
2
2
  //# sourceMappingURL=rating.module.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"revealLens.mjs","names":[],"sources":["../../../../package/common/revealLens/revealLens.tsx"],"sourcesContent":["import { useRef, type PointerEvent as ReactPointerEvent, type ReactElement } from 'react';\nimport cx from 'classnames';\n\nimport { useComponentDefaults } from '../configProvider';\nimport type { RevealLensProps } from './revealLens.types';\nimport styles from './revealLens.module.pcss';\n\nfunction buildMaskImage(x: number, y: number, radius: number, feather: number): string {\n const inner = Math.max(radius - feather, 0);\n return `radial-gradient(circle ${radius}px at ${x}px ${y}px, transparent ${inner}px, transparent ${inner}px, white ${radius}px)`;\n}\n\nfunction applyMask(overlay: HTMLDivElement, value: string) {\n overlay.style.setProperty('mask-image', value);\n overlay.style.setProperty('-webkit-mask-image', value);\n}\n\nfunction clearMask(overlay: HTMLDivElement) {\n overlay.style.removeProperty('mask-image');\n overlay.style.removeProperty('-webkit-mask-image');\n}\n\nfunction RevealLens(props: RevealLensProps): ReactElement {\n const {\n background,\n overlay,\n radius = 120,\n feather = 24,\n shape = 'circle',\n maskImage,\n disabled = false,\n className,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n } = useComponentDefaults('RevealLens', props);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n const updateMask = (clientX: number, clientY: number) => {\n const root = rootRef.current;\n const overlayEl = overlayRef.current;\n if (!root || !overlayEl) return;\n\n const rect = root.getBoundingClientRect();\n const x = clientX - rect.left;\n const y = clientY - rect.top;\n\n overlayEl.classList.remove(styles.revealLensOverlayTransitioning);\n applyMask(overlayEl, maskImage ?? buildMaskImage(x, y, radius, feather));\n };\n\n const resetMask = () => {\n const overlayEl = overlayRef.current;\n if (!overlayEl) return;\n\n overlayEl.classList.add(styles.revealLensOverlayTransitioning);\n clearMask(overlayEl);\n };\n\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n updateMask(event.clientX, event.clientY);\n };\n\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n updateMask(event.clientX, event.clientY);\n };\n\n const handlePointerUp = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled || event.pointerType === 'mouse') return;\n resetMask();\n };\n\n // pointerleave/pointercancel can fire spuriously, with the pointer still physically over the\n // element, when it's nested inside two coincident 3D transform contexts (e.g. Tilt + Flip\n // composed per the docs, where Flip fills Tilt exactly and their perspective-origins land on\n // the same pixel). At that shared origin point, Chromium's hit-test can misresolve to an\n // ancestor instead of the actual topmost content. elementFromPoint reads that same broken\n // result, so it can't be trusted there either. The event's own clientX/clientY are real,\n // unaffected viewport coordinates, so check those directly against our own (transform-aware)\n // bounding rect first. A leave that's still geometrically inside us is never real.\n const handlePointerEnd = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n const root = rootRef.current;\n if (root) {\n const rect = root.getBoundingClientRect();\n const stillInside =\n event.clientX >= rect.left &&\n event.clientX <= rect.right &&\n event.clientY >= rect.top &&\n event.clientY <= rect.bottom;\n if (stillInside) return;\n\n if (typeof document.elementFromPoint === 'function') {\n const target = document.elementFromPoint(event.clientX, event.clientY);\n if (target && root.contains(target)) return;\n }\n }\n resetMask();\n };\n\n return (\n <div\n {...rest}\n ref={rootRef}\n className={cx(styles.revealLens, className, classNames?.root)}\n style={{ ...style, ...slotStyles?.root }}\n data-reveal-shape={shape}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerEnd}\n onPointerLeave={handlePointerEnd}\n >\n <div\n className={cx(styles.revealLensBackground, classNames?.background)}\n style={slotStyles?.background}\n >\n {background}\n </div>\n <div\n ref={overlayRef}\n className={cx(styles.revealLensOverlay, classNames?.overlay)}\n style={slotStyles?.overlay}\n >\n {overlay}\n </div>\n </div>\n );\n}\n\nexport default RevealLens;\n"],"mappings":"oOAOA,SAAS,EAAe,EAAW,EAAW,EAAgB,EAAyB,CACrF,IAAM,EAAQ,KAAK,IAAI,EAAS,EAAS,CAAC,EAC1C,MAAO,0BAA0B,EAAO,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAM,kBAAkB,EAAM,YAAY,EAAO,IAC9H,CAEA,SAAS,EAAU,EAAyB,EAAe,CACzD,EAAQ,MAAM,YAAY,aAAc,CAAK,EAC7C,EAAQ,MAAM,YAAY,qBAAsB,CAAK,CACvD,CAEA,SAAS,EAAU,EAAyB,CAC1C,EAAQ,MAAM,eAAe,YAAY,EACzC,EAAQ,MAAM,eAAe,oBAAoB,CACnD,CAEA,SAAS,EAAW,EAAsC,CACxD,GAAM,CACJ,aACA,UACA,SAAS,IACT,UAAU,GACV,QAAQ,SACR,YACA,WAAW,GACX,YACA,QACA,aACA,OAAQ,EACR,GAAG,GACD,EAAqB,aAAc,CAAK,EAEtC,EAAU,EAAuB,IAAI,EACrC,EAAa,EAAuB,IAAI,EAExC,GAAc,EAAiB,IAAoB,CACvD,IAAM,EAAO,EAAQ,QACf,EAAY,EAAW,QAC7B,GAAI,CAAC,GAAQ,CAAC,EAAW,OAEzB,IAAM,EAAO,EAAK,sBAAsB,EAClC,EAAI,EAAU,EAAK,KACnB,EAAI,EAAU,EAAK,IAEzB,EAAU,UAAU,OAAO,EAAO,8BAA8B,EAChE,EAAU,EAAW,GAAa,EAAe,EAAG,EAAG,EAAQ,CAAO,CAAC,CACzE,EAEM,MAAkB,CACtB,IAAM,EAAY,EAAW,QACxB,IAEL,EAAU,UAAU,IAAI,EAAO,8BAA8B,EAC7D,EAAU,CAAS,EACrB,EAEM,EAAqB,GAA6C,CAClE,IACJ,EAAM,cAAc,oBAAoB,EAAM,SAAS,EACvD,EAAW,EAAM,QAAS,EAAM,OAAO,EACzC,EAEM,EAAqB,GAA6C,CAClE,GACJ,EAAW,EAAM,QAAS,EAAM,OAAO,CACzC,EAEM,EAAmB,GAA6C,CAChE,GAAY,EAAM,cAAgB,SACtC,EAAU,CACZ,EAUM,EAAoB,GAA6C,CACrE,GAAI,EAAU,OACd,IAAM,EAAO,EAAQ,QACrB,GAAI,EAAM,CACR,IAAM,EAAO,EAAK,sBAAsB,EAMxC,GAJE,EAAM,SAAW,EAAK,MACtB,EAAM,SAAW,EAAK,OACtB,EAAM,SAAW,EAAK,KACtB,EAAM,SAAW,EAAK,OACP,OAEjB,GAAI,OAAO,SAAS,kBAAqB,WAAY,CACnD,IAAM,EAAS,SAAS,iBAAiB,EAAM,QAAS,EAAM,OAAO,EACrE,GAAI,GAAU,EAAK,SAAS,CAAM,EAAG,MACvC,CACF,CACA,EAAU,CACZ,EAEA,OACE,EAAC,MAAD,CACE,GAAI,EACJ,IAAK,EACL,UAAW,EAAG,EAAO,WAAY,EAAW,GAAY,IAAI,EAC5D,MAAO,CAAE,GAAG,EAAO,GAAG,GAAY,IAAK,EACvC,oBAAmB,EACnB,cAAe,EACf,cAAe,EACf,YAAa,EACb,gBAAiB,EACjB,eAAgB,WAVlB,CAYE,EAAC,MAAD,CACE,UAAW,EAAG,EAAO,qBAAsB,GAAY,UAAU,EACjE,MAAO,GAAY,oBAElB,CACE,CAAA,EACL,EAAC,MAAD,CACE,IAAK,EACL,UAAW,EAAG,EAAO,kBAAmB,GAAY,OAAO,EAC3D,MAAO,GAAY,iBAElB,CACE,CAAA,CACF,GAET"}
1
+ {"version":3,"file":"revealLens.mjs","names":[],"sources":["../../../../package/common/revealLens/revealLens.tsx"],"sourcesContent":["import { useRef, type PointerEvent as ReactPointerEvent, type ReactElement } from 'react';\nimport cx from 'classnames';\n\nimport { useComponentDefaults } from '../configProvider';\nimport type { RevealLensProps } from './revealLens.types';\nimport styles from './revealLens.module.pcss';\n\nfunction buildMaskImage(x: number, y: number, radius: number, feather: number): string {\n const inner = Math.max(radius - feather, 0);\n return `radial-gradient(circle ${radius}px at ${x}px ${y}px, transparent ${inner}px, transparent ${inner}px, white ${radius}px)`;\n}\n\nfunction applyMask(overlay: HTMLDivElement, value: string) {\n overlay.style.setProperty('mask-image', value);\n overlay.style.setProperty('-webkit-mask-image', value);\n}\n\nfunction clearMask(overlay: HTMLDivElement) {\n overlay.style.removeProperty('mask-image');\n overlay.style.removeProperty('-webkit-mask-image');\n}\n\nfunction RevealLens(props: RevealLensProps): ReactElement {\n const {\n background,\n overlay,\n radius = 120,\n feather = 24,\n shape = 'circle',\n maskImage,\n disabled = false,\n className,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n } = useComponentDefaults('RevealLens', props);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n const updateMask = (clientX: number, clientY: number) => {\n const root = rootRef.current;\n const overlayEl = overlayRef.current;\n if (!root || !overlayEl) return;\n\n const rect = root.getBoundingClientRect();\n const x = clientX - rect.left;\n const y = clientY - rect.top;\n\n overlayEl.classList.remove(styles.revealLensOverlayTransitioning);\n applyMask(overlayEl, maskImage ?? buildMaskImage(x, y, radius, feather));\n };\n\n const resetMask = () => {\n const overlayEl = overlayRef.current;\n if (!overlayEl) return;\n\n overlayEl.classList.add(styles.revealLensOverlayTransitioning);\n clearMask(overlayEl);\n };\n\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n updateMask(event.clientX, event.clientY);\n };\n\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n updateMask(event.clientX, event.clientY);\n };\n\n const handlePointerUp = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled || event.pointerType === 'mouse') return;\n resetMask();\n };\n\n // pointerleave/pointercancel can fire spuriously, with the pointer still physically over the\n // element, when it's nested inside two coincident 3D transform contexts (e.g. Tilt + Flip\n // composed per the docs, where Flip fills Tilt exactly and their perspective-origins land on\n // the same pixel). At that shared origin point, Chromium's hit-test can misresolve to an\n // ancestor instead of the actual topmost content. elementFromPoint reads that same broken\n // result, so it can't be trusted there either. The event's own clientX/clientY are real,\n // unaffected viewport coordinates, so check those directly against our own (transform-aware)\n // bounding rect first. A leave that's still geometrically inside us is never real.\n const handlePointerEnd = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n const root = rootRef.current;\n if (root) {\n const rect = root.getBoundingClientRect();\n const stillInside =\n event.clientX >= rect.left &&\n event.clientX <= rect.right &&\n event.clientY >= rect.top &&\n event.clientY <= rect.bottom;\n if (stillInside) return;\n\n if (typeof document.elementFromPoint === 'function') {\n const target = document.elementFromPoint(event.clientX, event.clientY);\n if (target && root.contains(target)) return;\n }\n }\n resetMask();\n };\n\n return (\n <div\n {...rest}\n ref={rootRef}\n className={cx(styles.revealLens, className, classNames?.root)}\n style={{ ...style, ...slotStyles?.root }}\n data-reveal-shape={shape}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerEnd}\n onPointerLeave={handlePointerEnd}\n >\n <div className={cx(styles.revealLensBackground, classNames?.background)} style={slotStyles?.background}>\n {background}\n </div>\n <div ref={overlayRef} className={cx(styles.revealLensOverlay, classNames?.overlay)} style={slotStyles?.overlay}>\n {overlay}\n </div>\n </div>\n );\n}\n\nexport default RevealLens;\n"],"mappings":"oOAOA,SAAS,EAAe,EAAW,EAAW,EAAgB,EAAyB,CACrF,IAAM,EAAQ,KAAK,IAAI,EAAS,EAAS,CAAC,EAC1C,MAAO,0BAA0B,EAAO,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAM,kBAAkB,EAAM,YAAY,EAAO,IAC9H,CAEA,SAAS,EAAU,EAAyB,EAAe,CACzD,EAAQ,MAAM,YAAY,aAAc,CAAK,EAC7C,EAAQ,MAAM,YAAY,qBAAsB,CAAK,CACvD,CAEA,SAAS,EAAU,EAAyB,CAC1C,EAAQ,MAAM,eAAe,YAAY,EACzC,EAAQ,MAAM,eAAe,oBAAoB,CACnD,CAEA,SAAS,EAAW,EAAsC,CACxD,GAAM,CACJ,aACA,UACA,SAAS,IACT,UAAU,GACV,QAAQ,SACR,YACA,WAAW,GACX,YACA,QACA,aACA,OAAQ,EACR,GAAG,GACD,EAAqB,aAAc,CAAK,EAEtC,EAAU,EAAuB,IAAI,EACrC,EAAa,EAAuB,IAAI,EAExC,GAAc,EAAiB,IAAoB,CACvD,IAAM,EAAO,EAAQ,QACf,EAAY,EAAW,QAC7B,GAAI,CAAC,GAAQ,CAAC,EAAW,OAEzB,IAAM,EAAO,EAAK,sBAAsB,EAClC,EAAI,EAAU,EAAK,KACnB,EAAI,EAAU,EAAK,IAEzB,EAAU,UAAU,OAAO,EAAO,8BAA8B,EAChE,EAAU,EAAW,GAAa,EAAe,EAAG,EAAG,EAAQ,CAAO,CAAC,CACzE,EAEM,MAAkB,CACtB,IAAM,EAAY,EAAW,QACxB,IAEL,EAAU,UAAU,IAAI,EAAO,8BAA8B,EAC7D,EAAU,CAAS,EACrB,EAEM,EAAqB,GAA6C,CAClE,IACJ,EAAM,cAAc,oBAAoB,EAAM,SAAS,EACvD,EAAW,EAAM,QAAS,EAAM,OAAO,EACzC,EAEM,EAAqB,GAA6C,CAClE,GACJ,EAAW,EAAM,QAAS,EAAM,OAAO,CACzC,EAEM,EAAmB,GAA6C,CAChE,GAAY,EAAM,cAAgB,SACtC,EAAU,CACZ,EAUM,EAAoB,GAA6C,CACrE,GAAI,EAAU,OACd,IAAM,EAAO,EAAQ,QACrB,GAAI,EAAM,CACR,IAAM,EAAO,EAAK,sBAAsB,EAMxC,GAJE,EAAM,SAAW,EAAK,MACtB,EAAM,SAAW,EAAK,OACtB,EAAM,SAAW,EAAK,KACtB,EAAM,SAAW,EAAK,OACP,OAEjB,GAAI,OAAO,SAAS,kBAAqB,WAAY,CACnD,IAAM,EAAS,SAAS,iBAAiB,EAAM,QAAS,EAAM,OAAO,EACrE,GAAI,GAAU,EAAK,SAAS,CAAM,EAAG,MACvC,CACF,CACA,EAAU,CACZ,EAEA,OACE,EAAC,MAAD,CACE,GAAI,EACJ,IAAK,EACL,UAAW,EAAG,EAAO,WAAY,EAAW,GAAY,IAAI,EAC5D,MAAO,CAAE,GAAG,EAAO,GAAG,GAAY,IAAK,EACvC,oBAAmB,EACnB,cAAe,EACf,cAAe,EACf,YAAa,EACb,gBAAiB,EACjB,eAAgB,EAVlB,SAAA,CAYE,EAAC,MAAD,CAAK,UAAW,EAAG,EAAO,qBAAsB,GAAY,UAAU,EAAG,MAAO,GAAY,WACzF,SAAA,CACE,CAAA,EACL,EAAC,MAAD,CAAK,IAAK,EAAY,UAAW,EAAG,EAAO,kBAAmB,GAAY,OAAO,EAAG,MAAO,GAAY,QACpG,SAAA,CACE,CAAA,CACF,GAET"}
@@ -1,2 +1,2 @@
1
- var e={revealLens:`revealLens_V3Kkk`,"revealLens-background":`revealLens-background_pQyK9`,revealLensBackground:`revealLens-background_pQyK9`,"revealLens-overlay":`revealLens-overlay_NOUoj`,revealLensOverlay:`revealLens-overlay_NOUoj`,"revealLens-overlay-transitioning":`revealLens-overlay-transitioning_-co2e`,revealLensOverlayTransitioning:`revealLens-overlay-transitioning_-co2e`};export{e as default};
1
+ var e=`revealLens_V3Kkk`,t=`revealLens-background_pQyK9`,n=`revealLens-overlay_NOUoj`,r=`revealLens-overlay-transitioning_-co2e`,i={revealLens:e,"revealLens-background":`revealLens-background_pQyK9`,revealLensBackground:t,"revealLens-overlay":`revealLens-overlay_NOUoj`,revealLensOverlay:n,"revealLens-overlay-transitioning":`revealLens-overlay-transitioning_-co2e`,revealLensOverlayTransitioning:r};export{i as default,e as revealLens,t as revealLensBackground,n as revealLensOverlay,r as revealLensOverlayTransitioning};
2
2
  //# sourceMappingURL=revealLens.module.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"revealLens.module.mjs","names":[],"sources":["../../../../package/common/revealLens/revealLens.module.pcss"],"sourcesContent":[".revealLens {\n display: grid;\n overflow: hidden;\n touch-action: none;\n\n &-background,\n &-overlay {\n grid-area: 1 / 1;\n min-width: 0;\n min-height: 0;\n }\n\n &-background {\n z-index: 0;\n }\n\n &-overlay {\n z-index: 1;\n }\n\n &-overlay-transitioning {\n transition: mask-image 0.25s ease, -webkit-mask-image 0.25s ease;\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"revealLens.module.mjs","names":[],"sources":["../../../../package/common/revealLens/revealLens.module.pcss"],"sourcesContent":[".revealLens {\n display: grid;\n overflow: hidden;\n touch-action: none;\n\n &-background,\n &-overlay {\n grid-area: 1 / 1;\n min-width: 0;\n min-height: 0;\n }\n\n &-background {\n z-index: 0;\n }\n\n &-overlay {\n z-index: 1;\n }\n\n &-overlay-transitioning {\n transition:\n mask-image 0.25s ease,\n -webkit-mask-image 0.25s ease;\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.mjs","names":[],"sources":["../../../../package/common/ripple/ripple.tsx"],"sourcesContent":["import React, { useRef, useEffect, useImperativeHandle, forwardRef } from 'react';\n\nimport styles from './ripple.module.pcss';\nimport type { RippleProps, RippleHandle } from './ripple.types';\n\nexport type { RippleProps, RippleHandle };\n\nconst Ripple = forwardRef<RippleHandle, RippleProps>(function Ripple({\n disabled = false,\n children,\n className,\n style,\n overflowHidden = true,\n rippleAnimationLength = 0.6,\n rippleBackground = 'rgba(255, 255, 255, 0.2)',\n manualOnly = false,\n ...rest\n}, ref) {\n const containerRef = useRef<HTMLDivElement>(null);\n const addRippleRef = useRef<((event: MouseEvent) => void) | null>(null);\n\n function spawnRipple(x: number, y: number) {\n if (disabled) return;\n const ripple = document.createElement('div');\n ripple.style.left = `${x}px`;\n ripple.style.top = `${y}px`;\n ripple.style.background = rippleBackground;\n ripple.classList.add(styles.ripple);\n containerRef.current?.appendChild(ripple);\n setTimeout(() => {\n containerRef.current?.removeChild(ripple);\n }, rippleAnimationLength * 1000 + 50);\n }\n\n function addRipple(event: MouseEvent | React.MouseEvent) {\n if (!containerRef.current) return;\n const pos = containerRef.current.getBoundingClientRect();\n spawnRipple(event.clientX - pos.x, event.clientY - pos.y);\n }\n\n useImperativeHandle(ref, () => ({\n addRipple() {\n const el = containerRef.current;\n if (!el) return;\n spawnRipple(el.offsetWidth / 2, el.offsetHeight / 2);\n },\n }));\n\n useEffect(() => {\n addRippleRef.current = addRipple;\n });\n\n useEffect(() => {\n if (children !== undefined || manualOnly) return;\n const parent = containerRef.current?.parentElement;\n if (!parent) return;\n const handler = (e: MouseEvent) => addRippleRef.current?.(e);\n parent.addEventListener('click', handler);\n return () => parent.removeEventListener('click', handler);\n }, [children, manualOnly]);\n\n const containerStyle: React.CSSProperties & { '--ripple-animation-length'?: string } = {\n '--ripple-animation-length': `${rippleAnimationLength}s`,\n };\n\n if (children !== undefined) {\n return (\n <div\n {...rest}\n className={className}\n onClick={manualOnly ? undefined : (e) => addRipple(e)}\n style={{\n position: 'relative',\n ...style,\n }}\n >\n {children}\n <div\n className={styles.rippleContainer}\n ref={containerRef}\n style={{\n overflow: overflowHidden ? 'hidden' : 'visible',\n ...containerStyle,\n }}\n />\n </div>\n );\n }\n\n return (\n <div\n className={styles.rippleContainer}\n ref={containerRef}\n style={{\n overflow: overflowHidden ? 'hidden' : 'visible',\n ...containerStyle,\n }}\n />\n );\n});\n\nexport default Ripple;\n"],"mappings":"4KAOA,IAAM,EAAS,EAAsC,SAAgB,CACnE,WAAW,GACX,WACA,YACA,QACA,iBAAiB,GACjB,wBAAwB,GACxB,mBAAmB,2BACnB,aAAa,GACb,GAAG,GACF,EAAK,CACN,IAAM,EAAe,EAAuB,IAAI,EAC1C,EAAe,EAA6C,IAAI,EAEtE,SAAS,EAAY,EAAW,EAAW,CACzC,GAAI,EAAU,OACd,IAAM,EAAS,SAAS,cAAc,KAAK,EAC3C,EAAO,MAAM,KAAO,GAAG,EAAE,IACzB,EAAO,MAAM,IAAM,GAAG,EAAE,IACxB,EAAO,MAAM,WAAa,EAC1B,EAAO,UAAU,IAAI,EAAO,MAAM,EAClC,EAAa,SAAS,YAAY,CAAM,EACxC,eAAiB,CACf,EAAa,SAAS,YAAY,CAAM,CAC1C,EAAG,EAAwB,IAAO,EAAE,CACtC,CAEA,SAAS,EAAU,EAAsC,CACvD,GAAI,CAAC,EAAa,QAAS,OAC3B,IAAM,EAAM,EAAa,QAAQ,sBAAsB,EACvD,EAAY,EAAM,QAAU,EAAI,EAAG,EAAM,QAAU,EAAI,CAAC,CAC1D,CAEA,EAAoB,OAAY,CAC9B,WAAY,CACV,IAAM,EAAK,EAAa,QACnB,GACL,EAAY,EAAG,YAAc,EAAG,EAAG,aAAe,CAAC,CACrD,CACF,EAAE,EAEF,MAAgB,CACd,EAAa,QAAU,CACzB,CAAC,EAED,MAAgB,CACd,GAAI,IAAa,IAAA,IAAa,EAAY,OAC1C,IAAM,EAAS,EAAa,SAAS,cACrC,GAAI,CAAC,EAAQ,OACb,IAAM,EAAW,GAAkB,EAAa,UAAU,CAAC,EAE3D,OADA,EAAO,iBAAiB,QAAS,CAAO,MAC3B,EAAO,oBAAoB,QAAS,CAAO,CAC1D,EAAG,CAAC,EAAU,CAAU,CAAC,EAEzB,IAAM,EAAiF,CACrF,4BAA6B,GAAG,EAAsB,EACxD,EA0BA,OAxBI,IAAa,IAAA,GAyBf,EAAC,MAAD,CACE,UAAW,EAAO,gBAClB,IAAK,EACL,MAAO,CACL,SAAU,EAAiB,SAAW,UACtC,GAAG,CACL,CACD,CAAA,EA9BC,EAAC,MAAD,CACE,GAAI,EACO,YACX,QAAS,EAAa,IAAA,GAAa,GAAM,EAAU,CAAC,EACpD,MAAO,CACL,SAAU,WACV,GAAG,CACL,WAPF,CASG,EACD,EAAC,MAAD,CACE,UAAW,EAAO,gBAClB,IAAK,EACL,MAAO,CACL,SAAU,EAAiB,SAAW,UACtC,GAAG,CACL,CACD,CAAA,CACE,GAcX,CAAC"}
1
+ {"version":3,"file":"ripple.mjs","names":[],"sources":["../../../../package/common/ripple/ripple.tsx"],"sourcesContent":["import React, { useRef, useEffect, useImperativeHandle, forwardRef } from 'react';\n\nimport styles from './ripple.module.pcss';\nimport type { RippleProps, RippleHandle } from './ripple.types';\n\nexport type { RippleProps, RippleHandle };\n\nconst Ripple = forwardRef<RippleHandle, RippleProps>(function Ripple(\n {\n disabled = false,\n children,\n className,\n style,\n overflowHidden = true,\n rippleAnimationLength = 0.6,\n rippleBackground = 'rgba(255, 255, 255, 0.2)',\n manualOnly = false,\n ...rest\n },\n ref,\n) {\n const containerRef = useRef<HTMLDivElement>(null);\n const addRippleRef = useRef<((event: MouseEvent) => void) | null>(null);\n\n function spawnRipple(x: number, y: number) {\n if (disabled) return;\n const ripple = document.createElement('div');\n ripple.style.left = `${x}px`;\n ripple.style.top = `${y}px`;\n ripple.style.background = rippleBackground;\n ripple.classList.add(styles.ripple);\n containerRef.current?.appendChild(ripple);\n setTimeout(\n () => {\n containerRef.current?.removeChild(ripple);\n },\n rippleAnimationLength * 1000 + 50,\n );\n }\n\n function addRipple(event: MouseEvent | React.MouseEvent) {\n if (!containerRef.current) return;\n const pos = containerRef.current.getBoundingClientRect();\n spawnRipple(event.clientX - pos.x, event.clientY - pos.y);\n }\n\n useImperativeHandle(ref, () => ({\n addRipple() {\n const el = containerRef.current;\n if (!el) return;\n spawnRipple(el.offsetWidth / 2, el.offsetHeight / 2);\n },\n }));\n\n useEffect(() => {\n addRippleRef.current = addRipple;\n });\n\n useEffect(() => {\n if (children !== undefined || manualOnly) return;\n const parent = containerRef.current?.parentElement;\n if (!parent) return;\n const handler = (e: MouseEvent) => addRippleRef.current?.(e);\n parent.addEventListener('click', handler);\n return () => parent.removeEventListener('click', handler);\n }, [children, manualOnly]);\n\n const containerStyle: React.CSSProperties & { '--ripple-animation-length'?: string } = {\n '--ripple-animation-length': `${rippleAnimationLength}s`,\n };\n\n if (children !== undefined) {\n return (\n <div\n {...rest}\n className={className}\n onClick={manualOnly ? undefined : (e) => addRipple(e)}\n style={{\n position: 'relative',\n ...style,\n }}\n >\n {children}\n <div\n className={styles.rippleContainer}\n ref={containerRef}\n style={{\n overflow: overflowHidden ? 'hidden' : 'visible',\n ...containerStyle,\n }}\n />\n </div>\n );\n }\n\n return (\n <div\n className={styles.rippleContainer}\n ref={containerRef}\n style={{\n overflow: overflowHidden ? 'hidden' : 'visible',\n ...containerStyle,\n }}\n />\n );\n});\n\nexport default Ripple;\n"],"mappings":"4KAOA,IAAM,EAAS,EAAsC,SACnD,CACE,WAAW,GACX,WACA,YACA,QACA,iBAAiB,GACjB,wBAAwB,GACxB,mBAAmB,2BACnB,aAAa,GACb,GAAG,GAEL,EACA,CACA,IAAM,EAAe,EAAuB,IAAI,EAC1C,EAAe,EAA6C,IAAI,EAEtE,SAAS,EAAY,EAAW,EAAW,CACzC,GAAI,EAAU,OACd,IAAM,EAAS,SAAS,cAAc,KAAK,EAC3C,EAAO,MAAM,KAAO,GAAG,EAAE,IACzB,EAAO,MAAM,IAAM,GAAG,EAAE,IACxB,EAAO,MAAM,WAAa,EAC1B,EAAO,UAAU,IAAI,EAAO,MAAM,EAClC,EAAa,SAAS,YAAY,CAAM,EACxC,eACQ,CACJ,EAAa,SAAS,YAAY,CAAM,CAC1C,EACA,EAAwB,IAAO,EACjC,CACF,CAEA,SAAS,EAAU,EAAsC,CACvD,GAAI,CAAC,EAAa,QAAS,OAC3B,IAAM,EAAM,EAAa,QAAQ,sBAAsB,EACvD,EAAY,EAAM,QAAU,EAAI,EAAG,EAAM,QAAU,EAAI,CAAC,CAC1D,CAEA,EAAoB,OAAY,CAC9B,WAAY,CACV,IAAM,EAAK,EAAa,QACnB,GACL,EAAY,EAAG,YAAc,EAAG,EAAG,aAAe,CAAC,CACrD,CACF,EAAE,EAEF,MAAgB,CACd,EAAa,QAAU,CACzB,CAAC,EAED,MAAgB,CACd,GAAI,IAAa,IAAA,IAAa,EAAY,OAC1C,IAAM,EAAS,EAAa,SAAS,cACrC,GAAI,CAAC,EAAQ,OACb,IAAM,EAAW,GAAkB,EAAa,UAAU,CAAC,EAE3D,OADA,EAAO,iBAAiB,QAAS,CAAO,MAC3B,EAAO,oBAAoB,QAAS,CAAO,CAC1D,EAAG,CAAC,EAAU,CAAU,CAAC,EAEzB,IAAM,EAAiF,CACrF,4BAA6B,GAAG,EAAsB,EACxD,EA0BA,OAxBI,IAAa,IAAA,GAyBf,EAAC,MAAD,CACE,UAAW,EAAO,gBAClB,IAAK,EACL,MAAO,CACL,SAAU,EAAiB,SAAW,UACtC,GAAG,CACL,CACD,CAAA,EA9BC,EAAC,MAAD,CACE,GAAI,EACO,YACX,QAAS,EAAa,IAAA,GAAa,GAAM,EAAU,CAAC,EACpD,MAAO,CACL,SAAU,WACV,GAAG,CACL,EAPF,SAAA,CASG,EACD,EAAC,MAAD,CACE,UAAW,EAAO,gBAClB,IAAK,EACL,MAAO,CACL,SAAU,EAAiB,SAAW,UACtC,GAAG,CACL,CACD,CAAA,CACE,GAcX,CAAC"}
@@ -1,2 +1,2 @@
1
- var e={ripple:`ripple_TsvyF`,"ripple-container":`ripple-container_QzHdC`,rippleContainer:`ripple-container_QzHdC`};export{e as default};
1
+ var e=`ripple_TsvyF`,t=`ripple-container_QzHdC`,n={ripple:e,"ripple-container":`ripple-container_QzHdC`,rippleContainer:t};export{n as default,e as ripple,t as rippleContainer};
2
2
  //# sourceMappingURL=ripple.module.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.module.mjs","names":[],"sources":["../../../../package/common/ripple/ripple.module.pcss"],"sourcesContent":[".ripple {\n background: rgba(255, 255, 255, 0.2);\n border-radius: 1000px;\n width: 100%;\n aspect-ratio: 1;\n position: absolute;\n left: 0;\n top: 0;\n transform: translate(-50%, -50%) scale(0);\n animation: ripple var(--ripple-animation-length) linear forwards;\n\n &-container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n border-radius: inherit;\n user-select: none;\n pointer-events: none;\n }\n\n @keyframes ripple {\n to {\n transform: translate(-50%, -50%) scale(4);\n opacity: 0;\n }\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"ripple.module.mjs","names":[],"sources":["../../../../package/common/ripple/ripple.module.pcss"],"sourcesContent":[".ripple {\n background: rgb(255 255 255 / 20%);\n border-radius: 1000px;\n width: 100%;\n aspect-ratio: 1;\n position: absolute;\n left: 0;\n top: 0;\n transform: translate(-50%, -50%) scale(0);\n animation: ripple var(--ripple-animation-length) linear forwards;\n\n &-container {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n border-radius: inherit;\n user-select: none;\n pointer-events: none;\n }\n\n @keyframes ripple {\n to {\n transform: translate(-50%, -50%) scale(4);\n opacity: 0;\n }\n }\n}\n"],"mappings":""}
@@ -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 Ie,useImperativeHandle as Le,useMemo as Re,useRef as h,useState as g}from"react";import _ from"classnames";import{faAngleDown as ze,faAngleUp as Be,faArrowPointer as Ve,faArrowRotateLeft as He,faArrowRotateRight as Ue,faBorderAll as We,faClone as Ge,faDoorOpen as Ke,faDownload as qe,faDraftingCompass as Je,faExpand as Ye,faLayerGroup as Xe,faMagnet as Ze,faMagnifyingGlassMinus as Qe,faMagnifyingGlassPlus as $e,faMinus as et,faPlus as tt,faRulerCombined as nt,faSquare as rt,faTrash as it,faUpload as at,faWindowMaximize as ot}from"@fortawesome/free-solid-svg-icons";import{Fragment as st,jsx as v,jsxs as y}from"react/jsx-runtime";var ct=[`select`,`wall`,`rect`,`door`,`window`,`archway`,`measure`],lt={v:`select`,w:`wall`,r:`rect`,d:`door`,n:`window`,a:`archway`,m:`measure`},ut={door:a.Door,window:a.Window,archway:a.Archway},dt={[a.Door]:`Door`,[a.Window]:`Window`,[a.Archway]:`Archway`,[a.Gap]:`Gap`},ft={[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}},pt=1,mt=4,ht=[];function gt(e){return e>=1e3?`${(e/1e3).toFixed(2)} m`:`${Math.round(e)} mm`}function _t(e){let t=e/1e6;return`${t.toFixed(+(t<10))} m²`}function vt(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 b=Fe(function(a,Fe){let{value:b,defaultValue:yt,onChange:x,onChangeEnd:bt,floorId:xt,defaultFloorId:St,onFloorChange:Ct,showFloorBar:wt=!0,showUnderlay:Tt=!0,tool:Et,defaultTool:Dt=`select`,onToolChange:Ot,tools:kt=ct,selection:At,defaultSelection:jt,onSelectionChange:Mt,multiSelect:Nt=!0,onHoverChange:Pt,view:Ft,defaultView:It,onViewChange:Lt,minZoom:Rt=.005,maxZoom:zt=2,fitOnMount:Bt=!0,gridSize:S=100,showGrid:Vt=!0,snap:Ht=!0,angleLock:Ut=!1,constrainAngle:Wt=45,showSnapGuides:Gt=!0,wallThickness:Kt=c.thickness,wallHeight:qt,openingDefaults:Jt,showMeasurements:Yt=!0,formatLength:Xt=gt,formatArea:Zt=_t,showToolbar:Qt=!0,showInspector:$t=!0,showHint:en=!0,showHistoryControls:tn=!0,showFileControls:nn=!0,fileName:rn,onImport:an,historyMode:on=`internal`,historyLimit:sn=50,onHistoryChange:cn,readOnly:ln=!1,disabled:C=!1,canvasHeight:un=`420px`,getRoomColor:dn,renderRoomLabel:fn,labels:w,icons:T,"aria-label":pn,className:mn,style:hn,classNames:E,styles:D,...gn}=e(`RoomDrawer`,a),_n=r(),O=_n?Te:we,vn=h(null),yn=h(null),bn=h(null),xn=h(null),k=h({kind:`none`}),A=h(new Map),Sn=h(null),Cn=h(!1),wn=h(!1),Tn=h(!1),En=Re(()=>yt??b??fe(),[]),j=Pe(En,sn),Dn=b!==void 0,M=Dn?b:j.present;Ie(()=>{if(Dn&&b){if(b===xn.current){j.replace(b);return}j.commit(b,`external`)}},[b,Dn]);let[On,kn]=g(St),An=xt??On??M.floors[0]?.id,N=Re(()=>ge(M,An)??ge(M)??fe().floors[0],[M,An]),[jn,Mn]=g(Tt);Ie(()=>Mn(Tt),[Tt]);let Nn=Re(()=>jn?pe(M,N.id):null,[jn,M,N.id]),Pn=m(e=>{e!==N.id&&(xt===void 0&&kn(e),Ct?.(e))},[N.id,xt,Ct]),P=Re(()=>Ce(N),[N]).rooms,[Fn,In]=g(Dt),F=Et??Fn,Ln=m(e=>{Et===void 0&&In(e),Ot?.(e)},[Et,Ot]),[Rn,zn]=g(jt??ht),I=At===void 0?Rn:At,L=h(I);L.current=I;let R=m(e=>{let t=e===null?ht:Array.isArray(e)?e:[e];L.current=t,At===void 0&&zn(t),Mt?.([...t])},[At,Mt]),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=Re(()=>Vn(I),[Vn,I]),[Un,Wn]=g(null),[Gn,Kn]=g(It??{x:0,y:0,zoom:.05}),B=Ft??Gn,V=m(e=>{Ft===void 0&&Kn(e),Lt?.(e)},[Ft,Lt]),[H,qn]=g({width:800,height:420}),[U,Jn]=g([]),[W,Yn]=g(null),[Xn,Zn]=g(Ht),[Qn,$n]=g(Ut);Ie(()=>Zn(Ht),[Ht]),Ie(()=>$n(Ut),[Ut]);let[er,tr]=g(Vt);Ie(()=>tr(Vt),[Vt]);let nr=h(null),[G,rr]=g(null),[K,ir]=g([]),ar=h(0),[or,sr]=g(null),cr=h(null),lr=m(e=>{let t=d(O,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,O,B.zoom]),[ur,dr]=g(null),q=!ln&&!C,fr=Re(()=>{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]);Ie(()=>{let e=yn.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=yn.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:S,angleStepDeg:o?Wt:0,toleranceScreenPx:_n?16:10}});return nr.current=s,s},[N,B.zoom,Xn,Qn,S,Wt,_n]),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(Rt,Math.min(zt,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,Rt,zt,V]),gr=h(!1);Ie(()=>{Bt&&!gr.current&&Object.keys(N.nodes).length!==0&&(H.width<=1||(gr.current=!0,hr()))},[Bt,N,H.width,hr]);let _r=m((e,t,n,r=[],i={})=>{if(e===N)return M;let a=be(M,e);xn.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 x?.(a,o),n&&bt?.(a,o),a},[N,M,j,x,bt]),X=m((e,t,n=[],r={})=>{let i=Se(le(e).floor).floor;return _r(i,t,!0,n,r)},[_r]);Ie(()=>{cn?.({canUndo:j.canUndo,canRedo:j.canRedo})},[j.canUndo,j.canRedo,cn]);let vr=Re(()=>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=Re(()=>{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([])},[]),Tr=m(e=>{if(C)return;if(vn.current?.focus(),dr(null),A.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),e.currentTarget.setPointerCapture?.(e.pointerId),A.current.size===2){let[e,t]=[...A.current.values()];k.current.kind!==`none`&&k.current.kind!==`pan`&&j.cancelGesture(),k.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(A.current.size>2)return;if(Sn.current={client:{x:e.clientX,y:e.clientY},moved:!1},e.button===1||Cn.current){k.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(O,B.zoom));R(e);return}if(F===`rect`){let e=Y(t).point;k.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);k.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;k.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:Kt,type:o.Interior,height:qt},d(O,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(O,B.zoom).node?wr():Jn(e=>[...e,n]);return}let n=ut[F];if(n){let e=d(O,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={...ft[n],...Jt?.[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(O,B.zoom);if(br&&z?.type===`wall`&&Math.hypot(t.x-br.x,t.y-br.y)<=r.node){j.beginGesture(),k.current={kind:`wallSplit`,wallId:z.id,at:br};return}let i=Ee(N,P,t,r),a=Nt&&(e.ctrlKey||e.metaKey);if(!i){a||R(null),k.current=Nt?{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(),k.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),k.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})}k.current={kind:`room`,nodeIds:e,startWorld:t,orig:n,moved:!1};return}if(i.type===`node`)k.current={kind:`node`,nodeId:i.id,moved:!1,...mr(i.id)};else if(i.type===`wall`){let e=N.walls[i.id];k.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`)k.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})}k.current={kind:`room`,nodeIds:n,startWorld:t,orig:r,moved:!1}}},[C,q,B,F,N,P,O,pr,Y,U,Kt,qt,Jt,X,R,br,z,fr,mr,Vn,Nt,Bn,j,wr,lr,K]),Er=m(e=>{if(C)return;A.current.has(e.pointerId)&&A.current.set(e.pointerId,{x:e.clientX,y:e.clientY});let t=k.current;if(t.kind===`pinch`&&A.current.size>=2){let[e,n]=[...A.current.values()],r=Math.hypot(n.x-e.x,n.y-e.y);if(t.startDist<=0)return;let i=Math.max(Rt,Math.min(zt,t.startView.zoom*(r/t.startDist))),a=yn.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)>mt&&(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(O,B.zoom));De(e,Un)||(Wn(e),Pt?.(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`){k.current={...t,current:Y(n).point},Yn(Y(n).point);return}if(t.kind===`marquee`){k.current={...t,current:n},Yn(n);return}if(t.kind===`wallSplit`){let e=se(N,t.wallId,t.at);if(!e.result.wallIds){k.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;k.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),k.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=Ht!==wn.current&&S>0?S: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;k.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,k.current={...t,detachedSign:void 0,moved:!0}):k.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);k.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=Ht!==wn.current&&S>0?S: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)}k.current={...t,moved:!0},_r(s,`move-room`,!1,t.nodeIds)}}},[C,q,F,N,P,Un,O,B.zoom,Rt,zt,S,Ht,pr,Y,_r,V,R,U,fr,Pt,lr]),Dr=m((e,t)=>{A.current.delete(e.pointerId);let n=k.current;k.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&&x?.(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>pt&&(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:Kt,type:o.Interior,height:qt},d(O,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(O,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,O,B.zoom,Kt,qt,X,R,Bn,x]);Ie(()=>{let e=yn.current;if(!e||C)return;function t(t){t.preventDefault();let n=e.getBoundingClientRect(),r=Math.exp(-t.deltaY*.002);V((()=>{let e=Or.current,i=Math.max(Rt,Math.min(zt,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)},[C,Rt,zt,V]);let Or=h(B);Or.current=B;let kr=m(e=>{let t=Math.max(Rt,Math.min(zt,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,Rt,zt,V]),Ar=m(()=>{if(on===`none`)return;let e=j.undo();e&&(xn.current=e,x?.(e,{reason:`undo`,committed:!0,targetIds:[]}),bt?.(e,{reason:`undo`,committed:!0,targetIds:[]}))},[on,j,x,bt]),jr=m(()=>{if(on===`none`)return;let e=j.redo();e&&(xn.current=e,x?.(e,{reason:`redo`,committed:!0,targetIds:[]}),bt?.(e,{reason:`redo`,committed:!0,targetIds:[]}))},[on,j,x,bt]),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=S>0?S: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,S,X]),Pr=m(e=>{if(C)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(),Nt&&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=lt[e.key.toLowerCase()];i&&q&&kt.includes(i)&&(Ln(i),wr())},[C,q,kt,F,U,K.length,or,jr,Ar,R,wr,Cr,kr,hr,Nr,Ln,Nt,Mr]),Q=m((e,t,n)=>{xn.current=e,n?.resetHistory?(j.clearHistory(),j.replace(e)):j.commit(e,t);let r={reason:t,committed:!0,targetIds:[]};x?.(e,r),bt?.(e,r)},[j,x,bt]),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??rn??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)},[rn,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),an?.(t),t},[an,Q]),Ur=m(e=>{e.text().then(e=>Hr(e)).catch(e=>{let t=[`Could not read that file: ${e.message}`];dr(t),an?.({plan:null,issues:t})})},[Hr,an]),Wr=m(()=>ir([]),[]),Gr=m(e=>{e.key===`Shift`&&(Tn.current=!1),e.key===`Alt`&&(wn.current=!1),e.key===` `&&(Cn.current=!1)},[]);Le(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:()=>on!==`none`&&j.canUndo,canRedo:()=>on!==`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:()=>bn.current}),[M,j,Q,N,Pn,Fr,Ir,Lr,Br,Rr,zr,Wr,Vr,Hr,Ar,jr,on,R,Bn,Mr,Cr,B,V,kr,hr,pr,J]);let $=k.current,Kr=Re(()=>{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<pt)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(y(`g`,{className:_(p.roomDrawerMeasureLine,or===n.id&&p.roomDrawerMeasureLineHovered,E?.measureLine),children:[v(`line`,{x1:t.x,y1:t.y,x2:r.x,y2:r.y}),v(`line`,{x1:t.x-o,y1:t.y-s,x2:t.x+o,y2:t.y+s}),v(`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(v(`circle`,{className:p.roomDrawerMeasureGrip,cx:a.x,cy:a.y,r:4},`measure-grip-${n.id}-${i}`));e.push(v(`text`,{className:_(p.roomDrawerMeasure,E?.measureLine),x:c.x,y:c.y-8,textAnchor:`middle`,children:`${Xt(i)} · ${vt(a)}`},`measure-label-${n.id}`))}if(Gt&&G&&(G.guides.forEach((t,n)=>{let r=J(t.a),i=J(t.b);e.push(v(`line`,{className:_(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(v(`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(v(`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);Yt&&(s>0||c>0)&&(e.push(v(`text`,{className:p.roomDrawerMeasure,x:(r+a)/2,y:i-8,textAnchor:`middle`,children:Xt(s)},`rect-width`),v(`text`,{className:p.roomDrawerMeasure,x:r-8,y:(i+o)/2,textAnchor:`end`,dominantBaseline:`central`,children:Xt(c)},`rect-height`)),s>0&&c>0&&e.push(v(`text`,{className:_(p.roomDrawerMeasure,p.roomDrawerMeasureSecondary),x:(r+a)/2,y:(i+o)/2,textAnchor:`middle`,dominantBaseline:`central`,children:Zt(s*c)},`rect-area`)))}if(F===`wall`&&U.length>0){let t=[...U,W].filter(Boolean).map(J);if(e.push(v(`polyline`,{className:p.roomDrawerPreview,points:t.map(e=>`${e.x},${e.y}`).join(` `),fill:`none`},`chain`)),t.forEach((t,n)=>{e.push(v(`circle`,{className:p.roomDrawerHandle,cx:t.x,cy:t.y,r:4},`chain-dot-${n}`))}),Yt&&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(v(`text`,{className:_(p.roomDrawerMeasure,i&&p.roomDrawerMeasureLocked),x:r.x,y:r.y-8,textAnchor:`middle`,children:`${Xt(n)} · ${vt(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(v(`circle`,{className:_(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(v(`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(v(`circle`,{className:p.roomDrawerMidHandle,cx:t.x,cy:t.y,r:4},`midpoint`))}if(Yt&&$.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(v(`text`,{className:_(p.roomDrawerMeasure,p.roomDrawerMeasureOffset),x:s.x,y:s.y-26,textAnchor:`middle`,children:`${Xt(Math.hypot(i,a))} · ${vt(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(v(`text`,{className:_(p.roomDrawerMeasure,p.roomDrawerMeasureSecondary),x:s.x,y:s.y-8,textAnchor:`middle`,children:`${Xt(Math.hypot(o.x-a.x,o.y-a.y))} · ${vt(Math.atan2(o.y-a.y,o.x-a.x))}`},`room-stretch-${n.id}`))}}if(Yt&&(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(v(`text`,{className:_(p.roomDrawerMeasure,!a&&p.roomDrawerMeasureSecondary,a&&i&&p.roomDrawerMeasureLocked),x:l.x,y:l.y-8,textAnchor:`middle`,children:`${Xt(Math.hypot(c.x-s.x,c.y-s.y))} · ${vt(Math.atan2(c.y-s.y,c.x-s.x))}`},`measure-${n.id}`))}}return v(st,{children:e})},[q,$,F,U,W,I,N,P,z,Hn,br,Yt,Gt,G,fr,Xt,Zt,K,or,E?.measureLine,J]),qr={select:{icon:Ve,label:w?.select??`Select and edit`,key:`V`},wall:{icon:et,label:w?.wall??`Draw walls`,key:`W`},rect:{icon:rt,label:w?.rect??`Draw a room`,key:`R`},door:{icon:Ke,label:w?.door??`Add a door`,key:`D`},window:{icon:ot,label:w?.window??`Add a window`,key:`N`},archway:{icon:Ye,label:w?.archway??`Add an archway`,key:`A`},measure:{icon:nt,label:w?.measure??`Measure`,key:`M`}},Jr=q?F===`wall`?w?.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`?w?.hintRect??`Drag to draw a room`:F===`measure`?w?.hintMeasure??`Drag to measure · Drag an end or the line to adjust it · Delete removes one, Escape clears them`:ut[F]?w?.hintOpening??`Click a wall to cut an opening into it`:w?.hintSelect??(Nt?`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?w?.selectedFloor??`Floor`:I.length>1?(w?.selectedCount??`{count} selected`).replace(`{count}`,String(I.length)):yr?w?.selectedOpening??dt[yr.kind]:Z?w?.selectedWall??`Wall`:z?.type===`room`?w?.selectedRoom??`Room`:w?.selectedCorner??`Corner`,Xr=q?kt:[];return y(`div`,{...gn,ref:vn,className:_(p.roomDrawer,C&&p.roomDrawerDisabled,mn,E?.root),style:{...hn,...D?.root},role:`application`,"aria-label":pn??`Floor plan editor`,tabIndex:C?-1:0,onKeyDown:Pr,onKeyUp:Gr,children:[Qt&&y(`div`,{className:_(p.roomDrawerToolbar,E?.toolbar),style:D?.toolbar,role:`toolbar`,"aria-label":`Drawing tools`,children:[Xr.map(e=>{let n=qr[e];return v(`button`,{type:`button`,className:_(p.roomDrawerToolButton,e===F&&p.roomDrawerToolButtonActive,E?.toolButton),style:D?.toolButton,title:`${n.label} (${n.key})`,"aria-label":n.label,"aria-pressed":e===F,onClick:()=>{Ln(e),wr()},children:t(T?.[e]??n.icon,{className:_(p.roomDrawerToolIcon,E?.toolIcon),style:D?.toolIcon})},e)}),Xr.length>0&&v(`span`,{className:p.roomDrawerToolbarSeparator}),q&&y(st,{children:[[{on:Xn,toggle:()=>Zn(e=>!e),icon:T?.snap??Ze,label:w?.snap??`Snap to grid and geometry`,key:`S`},{on:Qn,toggle:()=>$n(e=>!e),icon:T?.angleLock??Je,label:w?.angleLock??`Lock to ${Wt}° angles`,key:`L`},{on:er,toggle:()=>tr(e=>!e),icon:T?.grid??We,label:w?.grid??`Show grid`,key:`G`},...pe(M,N.id)?[{on:jn,toggle:()=>Mn(e=>!e),icon:T?.underlay??Xe,label:w?.underlay??`Show the floor below`,key:`B`}]:[]].map(e=>v(`button`,{type:`button`,className:_(p.roomDrawerToolButton,e.on&&p.roomDrawerToolButtonOn,E?.toolButton),style:D?.toolButton,title:`${e.label} (${e.key})`,"aria-label":e.label,"aria-pressed":e.on,onClick:e.toggle,children:t(e.icon,{className:_(p.roomDrawerToolIcon,E?.toolIcon),style:D?.toolIcon})},e.key)),v(`span`,{className:p.roomDrawerToolbarSeparator})]}),tn&&on!==`none`&&q&&y(st,{children:[v(`button`,{type:`button`,className:_(p.roomDrawerViewButton,E?.viewButton),style:D?.viewButton,title:w?.undo??`Undo`,"aria-label":w?.undo??`Undo`,disabled:!j.canUndo,onClick:Ar,children:t(T?.undo??He)}),v(`button`,{type:`button`,className:_(p.roomDrawerViewButton,E?.viewButton),style:D?.viewButton,title:w?.redo??`Redo`,"aria-label":w?.redo??`Redo`,disabled:!j.canRedo,onClick:jr,children:t(T?.redo??Ue)}),v(`span`,{className:p.roomDrawerToolbarSeparator})]}),nn&&y(st,{children:[v(`button`,{type:`button`,className:_(p.roomDrawerViewButton,E?.viewButton),style:D?.viewButton,title:w?.download??`Download plan`,"aria-label":w?.download??`Download plan`,onClick:()=>Vr(),children:t(T?.download??qe)}),q&&v(`button`,{type:`button`,className:_(p.roomDrawerViewButton,E?.viewButton),style:D?.viewButton,title:w?.upload??`Open a plan file`,"aria-label":w?.upload??`Open a plan file`,onClick:()=>cr.current?.click(),children:t(T?.upload??at)}),v(`span`,{className:p.roomDrawerToolbarSeparator})]}),y(`div`,{className:_(p.roomDrawerViewControls,E?.viewControls),style:D?.viewControls,children:[v(`button`,{type:`button`,className:_(p.roomDrawerViewButton,E?.viewButton),style:D?.viewButton,title:w?.zoomOut??`Zoom out`,"aria-label":w?.zoomOut??`Zoom out`,onClick:()=>kr(1/1.25),children:t(T?.zoomOut??Qe)}),y(`button`,{type:`button`,className:_(p.roomDrawerZoomLabel,E?.zoomLabel),style:D?.zoomLabel,title:w?.fit??`Fit to content`,onClick:()=>hr(),children:[Math.round(B.zoom*1e3)/10,`%`]}),v(`button`,{type:`button`,className:_(p.roomDrawerViewButton,E?.viewButton),style:D?.viewButton,title:w?.zoomIn??`Zoom in`,"aria-label":w?.zoomIn??`Zoom in`,onClick:()=>kr(1.25),children:t(T?.zoomIn??$e)})]})]}),wt&&M.floors.length>0&&y(`div`,{className:_(p.roomDrawerFloorBar,E?.floorBar),style:D?.floorBar,role:`tablist`,"aria-label":w?.selectedFloor??`Floor`,children:[[...M.floors].reverse().map(e=>v(`button`,{type:`button`,role:`tab`,className:_(p.roomDrawerFloorTab,e.id===N.id&&p.roomDrawerFloorTabActive,E?.floorTab),style:D?.floorTab,"aria-selected":e.id===N.id,onClick:()=>Pn(e.id),children:e.label},e.id)),q&&v(`button`,{type:`button`,className:_(p.roomDrawerFloorTab,p.roomDrawerFloorTabAdd),title:w?.addFloor??`Add a floor above`,"aria-label":w?.addFloor??`Add a floor above`,onClick:()=>Fr(),children:t(T?.addFloor??tt)})]}),v(`div`,{ref:yn,className:_(p.roomDrawerCanvasWrapper,q&&F!==`select`&&p.roomDrawerCanvasWrapperDrawing,E?.canvasWrapper),style:{height:un,...D?.canvasWrapper},onPointerDown:Tr,onPointerMove:Er,onPointerUp:e=>Dr(e,!1),onPointerCancel:e=>Dr(e,!0),children:v(Ne,{ref:bn,floor:N,underlay:Nn,rooms:P,view:B,size:H,selection:I,hovered:Un,interactiveRooms:!1,showGrid:er,gridSize:S,showRoomLabels:!0,formatArea:Zt,getRoomColor:dn,renderRoomLabel:fn,overlay:Kr,classNames:E,styles:D})}),$t&&q&&y(`div`,{className:_(p.roomDrawerInspector,E?.inspector),style:D?.inspector,children:[v(`span`,{className:_(p.roomDrawerInspectorKind,I.length===0&&p.roomDrawerInspectorKindEmpty,E?.inspectorLabel),children:Yr}),I.length===0&&y(st,{children:[v(i,{className:_(p.roomDrawerInspectorName,E?.inspectorField),style:D?.inspectorField,label:w?.floorName??`Floor name`,value:N.label,onChange:e=>Br(N.id,e)}),v(Me,{className:_(p.roomDrawerInspectorField,E?.inspectorField),style:D?.inspectorField,label:w?.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&&y(st,{children:[v(`button`,{type:`button`,className:_(p.roomDrawerInspectorAction,E?.inspectorField),style:D?.inspectorField,title:w?.moveFloorUp??`Move this floor up`,"aria-label":w?.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(T?.moveFloorUp??Be)}),v(`button`,{type:`button`,className:_(p.roomDrawerInspectorAction,E?.inspectorField),style:D?.inspectorField,title:w?.moveFloorDown??`Move this floor down`,"aria-label":w?.moveFloorDown??`Move this floor down`,disabled:he(M,N.id)<=0,onClick:()=>Rr(N.id,he(M,N.id)-1),children:t(T?.moveFloorDown??ze)})]}),v(`button`,{type:`button`,className:_(p.roomDrawerInspectorAction,E?.inspectorField),style:D?.inspectorField,title:w?.duplicateFloor??`Copy this floor to a new one above`,onClick:()=>Ir(),children:t(T?.duplicateFloor??Ge)}),M.floors.length>1&&v(n,{className:p.roomDrawerInspectorDelete,icon:T?.delete??it,title:w?.deleteFloor??`Delete this floor`,onClick:()=>Lr()})]}),vr?.meta&&y(st,{children:[v(i,{className:_(p.roomDrawerInspectorName,E?.inspectorField),style:D?.inspectorField,label:w?.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])}}),v(`span`,{className:_(p.roomDrawerInspectorLabel,E?.inspectorLabel),children:Zt(vr.area)})]}),Z&&v(`button`,{type:`button`,className:_(p.roomDrawerInspectorAction,E?.inspectorField),style:D?.inspectorField,onClick:xr,title:w?.addCorner??`Add a corner to this wall`,children:w?.addCorner??`Add corner`}),Z&&v(Me,{className:_(p.roomDrawerInspectorField,E?.inspectorField),style:D?.inspectorField,label:w?.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&&y(st,{children:[v(Me,{className:_(p.roomDrawerInspectorField,E?.inspectorField),style:D?.inspectorField,label:w?.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])}}),v(Me,{className:_(p.roomDrawerInspectorField,E?.inspectorField),style:D?.inspectorField,label:w?.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&&v(n,{className:p.roomDrawerInspectorDelete,icon:T?.delete??it,title:w?.deleteSelection??`Delete selection`,onClick:Cr})]}),nn&&q&&v(`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)}}),en&&(ur!==null||Jr)&&v(`div`,{className:_(p.roomDrawerHint,ur!==null&&p.roomDrawerHintReport,E?.hint),style:D?.hint,role:ur===null?void 0:`status`,children:ur===null?Jr:ur.length===0?w?.importFailed??`That file could not be read as a floor plan`:ur.join(` · `)})]})});export{b as default};
2
2
  //# sourceMappingURL=roomDrawer.mjs.map