@corensystem/coren-ui 1.0.0-next.20260924.75108.887a9c2

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 (1671) hide show
  1. package/bin/intent.js +20 -0
  2. package/dist/accordion.d.mts +11 -0
  3. package/dist/accordion.d.mts.map +1 -0
  4. package/dist/accordion.mjs +42 -0
  5. package/dist/accordion.mjs.map +1 -0
  6. package/dist/activity-log.d.mts +29 -0
  7. package/dist/activity-log.d.mts.map +1 -0
  8. package/dist/activity-log.mjs +60 -0
  9. package/dist/activity-log.mjs.map +1 -0
  10. package/dist/activity-sheet.d.mts +18 -0
  11. package/dist/activity-sheet.d.mts.map +1 -0
  12. package/dist/activity-sheet.mjs +167 -0
  13. package/dist/activity-sheet.mjs.map +1 -0
  14. package/dist/add-clinic-location-dialog.d.mts +21 -0
  15. package/dist/add-clinic-location-dialog.d.mts.map +1 -0
  16. package/dist/add-clinic-location-dialog.mjs +96 -0
  17. package/dist/add-clinic-location-dialog.mjs.map +1 -0
  18. package/dist/add-clinic-visit-dialog.d.mts +51 -0
  19. package/dist/add-clinic-visit-dialog.d.mts.map +1 -0
  20. package/dist/add-clinic-visit-dialog.mjs +307 -0
  21. package/dist/add-clinic-visit-dialog.mjs.map +1 -0
  22. package/dist/add-observation-dialog.d.mts +36 -0
  23. package/dist/add-observation-dialog.d.mts.map +1 -0
  24. package/dist/add-observation-dialog.mjs +269 -0
  25. package/dist/add-observation-dialog.mjs.map +1 -0
  26. package/dist/alert-dialog.d.mts +24 -0
  27. package/dist/alert-dialog.d.mts.map +1 -0
  28. package/dist/alert-dialog.mjs +62 -0
  29. package/dist/alert-dialog.mjs.map +1 -0
  30. package/dist/alert.d.mts +12 -0
  31. package/dist/alert.d.mts.map +1 -0
  32. package/dist/alert.mjs +36 -0
  33. package/dist/alert.mjs.map +1 -0
  34. package/dist/app-card.d.mts +21 -0
  35. package/dist/app-card.d.mts.map +1 -0
  36. package/dist/app-card.mjs +49 -0
  37. package/dist/app-card.mjs.map +1 -0
  38. package/dist/app-shell.d.mts +39 -0
  39. package/dist/app-shell.d.mts.map +1 -0
  40. package/dist/app-shell.mjs +79 -0
  41. package/dist/app-shell.mjs.map +1 -0
  42. package/dist/aspect-ratio.d.mts +8 -0
  43. package/dist/aspect-ratio.d.mts.map +1 -0
  44. package/dist/aspect-ratio.mjs +14 -0
  45. package/dist/aspect-ratio.mjs.map +1 -0
  46. package/dist/asset-list-item.d.mts +36 -0
  47. package/dist/asset-list-item.d.mts.map +1 -0
  48. package/dist/asset-list-item.mjs +51 -0
  49. package/dist/asset-list-item.mjs.map +1 -0
  50. package/dist/assign-doctor-dialog.d.mts +28 -0
  51. package/dist/assign-doctor-dialog.d.mts.map +1 -0
  52. package/dist/assign-doctor-dialog.mjs +194 -0
  53. package/dist/assign-doctor-dialog.mjs.map +1 -0
  54. package/dist/attention-list.d.mts +29 -0
  55. package/dist/attention-list.d.mts.map +1 -0
  56. package/dist/attention-list.mjs +82 -0
  57. package/dist/attention-list.mjs.map +1 -0
  58. package/dist/avatar-status-dot.d.mts +22 -0
  59. package/dist/avatar-status-dot.d.mts.map +1 -0
  60. package/dist/avatar-status-dot.mjs +72 -0
  61. package/dist/avatar-status-dot.mjs.map +1 -0
  62. package/dist/avatar.d.mts +34 -0
  63. package/dist/avatar.d.mts.map +1 -0
  64. package/dist/avatar.mjs +103 -0
  65. package/dist/avatar.mjs.map +1 -0
  66. package/dist/badge.d.mts +18 -0
  67. package/dist/badge.d.mts.map +1 -0
  68. package/dist/badge.mjs +39 -0
  69. package/dist/badge.mjs.map +1 -0
  70. package/dist/banner.d.mts +18 -0
  71. package/dist/banner.d.mts.map +1 -0
  72. package/dist/banner.mjs +74 -0
  73. package/dist/banner.mjs.map +1 -0
  74. package/dist/blockquote.d.mts +13 -0
  75. package/dist/blockquote.d.mts.map +1 -0
  76. package/dist/blockquote.mjs +22 -0
  77. package/dist/blockquote.mjs.map +1 -0
  78. package/dist/blueprint-segment.d.mts +33 -0
  79. package/dist/blueprint-segment.d.mts.map +1 -0
  80. package/dist/blueprint-segment.mjs +59 -0
  81. package/dist/blueprint-segment.mjs.map +1 -0
  82. package/dist/bottom-sheet-switcher.d.mts +32 -0
  83. package/dist/bottom-sheet-switcher.d.mts.map +1 -0
  84. package/dist/bottom-sheet-switcher.mjs +40 -0
  85. package/dist/bottom-sheet-switcher.mjs.map +1 -0
  86. package/dist/bottom-sheet.d.mts +23 -0
  87. package/dist/bottom-sheet.d.mts.map +1 -0
  88. package/dist/bottom-sheet.mjs +91 -0
  89. package/dist/bottom-sheet.mjs.map +1 -0
  90. package/dist/breadcrumb.d.mts +39 -0
  91. package/dist/breadcrumb.d.mts.map +1 -0
  92. package/dist/breadcrumb.mjs +95 -0
  93. package/dist/breadcrumb.mjs.map +1 -0
  94. package/dist/breadcrumbs.d.mts +2 -0
  95. package/dist/breadcrumbs.mjs +2 -0
  96. package/dist/browser-tabs.d.mts +40 -0
  97. package/dist/browser-tabs.d.mts.map +1 -0
  98. package/dist/browser-tabs.mjs +127 -0
  99. package/dist/browser-tabs.mjs.map +1 -0
  100. package/dist/building-model-placeholder.d.mts +46 -0
  101. package/dist/building-model-placeholder.d.mts.map +1 -0
  102. package/dist/building-model-placeholder.mjs +175 -0
  103. package/dist/building-model-placeholder.mjs.map +1 -0
  104. package/dist/building-progress.d.mts +32 -0
  105. package/dist/building-progress.d.mts.map +1 -0
  106. package/dist/building-progress.mjs +74 -0
  107. package/dist/building-progress.mjs.map +1 -0
  108. package/dist/building-viewer.d.mts +91 -0
  109. package/dist/building-viewer.d.mts.map +1 -0
  110. package/dist/building-viewer.mjs +567 -0
  111. package/dist/building-viewer.mjs.map +1 -0
  112. package/dist/button-group.d.mts +8 -0
  113. package/dist/button-group.d.mts.map +1 -0
  114. package/dist/button-group.mjs +21 -0
  115. package/dist/button-group.mjs.map +1 -0
  116. package/dist/button.d.mts +21 -0
  117. package/dist/button.d.mts.map +1 -0
  118. package/dist/button.mjs +79 -0
  119. package/dist/button.mjs.map +1 -0
  120. package/dist/calendar-view.d.mts +47 -0
  121. package/dist/calendar-view.d.mts.map +1 -0
  122. package/dist/calendar-view.mjs +165 -0
  123. package/dist/calendar-view.mjs.map +1 -0
  124. package/dist/calendar.d.mts +15 -0
  125. package/dist/calendar.d.mts.map +1 -0
  126. package/dist/calendar.mjs +94 -0
  127. package/dist/calendar.mjs.map +1 -0
  128. package/dist/camera-detail-panel.d.mts +44 -0
  129. package/dist/camera-detail-panel.d.mts.map +1 -0
  130. package/dist/camera-detail-panel.mjs +105 -0
  131. package/dist/camera-detail-panel.mjs.map +1 -0
  132. package/dist/canvas-file-picker.d.mts +28 -0
  133. package/dist/canvas-file-picker.d.mts.map +1 -0
  134. package/dist/canvas-file-picker.mjs +90 -0
  135. package/dist/canvas-file-picker.mjs.map +1 -0
  136. package/dist/canvas-header.d.mts +28 -0
  137. package/dist/canvas-header.d.mts.map +1 -0
  138. package/dist/canvas-header.mjs +42 -0
  139. package/dist/canvas-header.mjs.map +1 -0
  140. package/dist/canvas-navigator.d.mts +87 -0
  141. package/dist/canvas-navigator.d.mts.map +1 -0
  142. package/dist/canvas-navigator.mjs +426 -0
  143. package/dist/canvas-navigator.mjs.map +1 -0
  144. package/dist/canvas-toolbar.d.mts +37 -0
  145. package/dist/canvas-toolbar.d.mts.map +1 -0
  146. package/dist/canvas-toolbar.mjs +65 -0
  147. package/dist/canvas-toolbar.mjs.map +1 -0
  148. package/dist/capture-route-minimap.d.mts +40 -0
  149. package/dist/capture-route-minimap.d.mts.map +1 -0
  150. package/dist/capture-route-minimap.mjs +438 -0
  151. package/dist/capture-route-minimap.mjs.map +1 -0
  152. package/dist/card.d.mts +17 -0
  153. package/dist/card.d.mts.map +1 -0
  154. package/dist/card.mjs +63 -0
  155. package/dist/card.mjs.map +1 -0
  156. package/dist/carousel.d.mts +23 -0
  157. package/dist/carousel.d.mts.map +1 -0
  158. package/dist/carousel.mjs +141 -0
  159. package/dist/carousel.mjs.map +1 -0
  160. package/dist/catalogue-view-toggle.d.mts +53 -0
  161. package/dist/catalogue-view-toggle.d.mts.map +1 -0
  162. package/dist/catalogue-view-toggle.mjs +54 -0
  163. package/dist/catalogue-view-toggle.mjs.map +1 -0
  164. package/dist/chart.d.mts +91 -0
  165. package/dist/chart.d.mts.map +1 -0
  166. package/dist/chart.mjs +254 -0
  167. package/dist/chart.mjs.map +1 -0
  168. package/dist/chat/core-ai-chat-header.d.mts +95 -0
  169. package/dist/chat/core-ai-chat-header.d.mts.map +1 -0
  170. package/dist/chat/core-ai-chat-header.mjs +237 -0
  171. package/dist/chat/core-ai-chat-header.mjs.map +1 -0
  172. package/dist/chat/core-ai-chat-message.d.mts +18 -0
  173. package/dist/chat/core-ai-chat-message.d.mts.map +1 -0
  174. package/dist/chat/core-ai-chat-message.mjs +82 -0
  175. package/dist/chat/core-ai-chat-message.mjs.map +1 -0
  176. package/dist/chat/core-ai-chat.d.mts +116 -0
  177. package/dist/chat/core-ai-chat.d.mts.map +1 -0
  178. package/dist/chat/core-ai-chat.mjs +325 -0
  179. package/dist/chat/core-ai-chat.mjs.map +1 -0
  180. package/dist/chat/core-chart-renderer.d.mts +10 -0
  181. package/dist/chat/core-chart-renderer.d.mts.map +1 -0
  182. package/dist/chat/core-chart-renderer.mjs +177 -0
  183. package/dist/chat/core-chart-renderer.mjs.map +1 -0
  184. package/dist/chat/core-chat-input.d.mts +9 -0
  185. package/dist/chat/core-chat-input.d.mts.map +1 -0
  186. package/dist/chat/core-chat-input.mjs +66 -0
  187. package/dist/chat/core-chat-input.mjs.map +1 -0
  188. package/dist/chat/core-chat-message.d.mts +11 -0
  189. package/dist/chat/core-chat-message.d.mts.map +1 -0
  190. package/dist/chat/core-chat-message.mjs +101 -0
  191. package/dist/chat/core-chat-message.mjs.map +1 -0
  192. package/dist/chat/core-chat-panel.d.mts +16 -0
  193. package/dist/chat/core-chat-panel.d.mts.map +1 -0
  194. package/dist/chat/core-chat-panel.mjs +139 -0
  195. package/dist/chat/core-chat-panel.mjs.map +1 -0
  196. package/dist/chat/core-chat-widget.d.mts +12 -0
  197. package/dist/chat/core-chat-widget.d.mts.map +1 -0
  198. package/dist/chat/core-chat-widget.mjs +116 -0
  199. package/dist/chat/core-chat-widget.mjs.map +1 -0
  200. package/dist/chat-layout.d.mts +38 -0
  201. package/dist/chat-layout.d.mts.map +1 -0
  202. package/dist/chat-layout.mjs +94 -0
  203. package/dist/chat-layout.mjs.map +1 -0
  204. package/dist/chat-message.d.mts +40 -0
  205. package/dist/chat-message.d.mts.map +1 -0
  206. package/dist/chat-message.mjs +84 -0
  207. package/dist/chat-message.mjs.map +1 -0
  208. package/dist/checkbox.d.mts +8 -0
  209. package/dist/checkbox.d.mts.map +1 -0
  210. package/dist/checkbox.mjs +22 -0
  211. package/dist/checkbox.mjs.map +1 -0
  212. package/dist/chip.d.mts +54 -0
  213. package/dist/chip.d.mts.map +1 -0
  214. package/dist/chip.mjs +142 -0
  215. package/dist/chip.mjs.map +1 -0
  216. package/dist/citation.d.mts +22 -0
  217. package/dist/citation.d.mts.map +1 -0
  218. package/dist/citation.mjs +70 -0
  219. package/dist/citation.mjs.map +1 -0
  220. package/dist/clickable-card.d.mts +28 -0
  221. package/dist/clickable-card.d.mts.map +1 -0
  222. package/dist/clickable-card.mjs +87 -0
  223. package/dist/clickable-card.mjs.map +1 -0
  224. package/dist/code.d.mts +21 -0
  225. package/dist/code.d.mts.map +1 -0
  226. package/dist/code.mjs +48 -0
  227. package/dist/code.mjs.map +1 -0
  228. package/dist/collapsible.d.mts +10 -0
  229. package/dist/collapsible.d.mts.map +1 -0
  230. package/dist/collapsible.mjs +16 -0
  231. package/dist/collapsible.mjs.map +1 -0
  232. package/dist/combobox.d.mts +116 -0
  233. package/dist/combobox.d.mts.map +1 -0
  234. package/dist/combobox.mjs +149 -0
  235. package/dist/combobox.mjs.map +1 -0
  236. package/dist/command-palette.d.mts +43 -0
  237. package/dist/command-palette.d.mts.map +1 -0
  238. package/dist/command-palette.mjs +70 -0
  239. package/dist/command-palette.mjs.map +1 -0
  240. package/dist/command.d.mts +91 -0
  241. package/dist/command.d.mts.map +1 -0
  242. package/dist/command.mjs +82 -0
  243. package/dist/command.mjs.map +1 -0
  244. package/dist/comment-composer.d.mts +29 -0
  245. package/dist/comment-composer.d.mts.map +1 -0
  246. package/dist/comment-composer.mjs +253 -0
  247. package/dist/comment-composer.mjs.map +1 -0
  248. package/dist/comment-thread.d.mts +66 -0
  249. package/dist/comment-thread.d.mts.map +1 -0
  250. package/dist/comment-thread.mjs +180 -0
  251. package/dist/comment-thread.mjs.map +1 -0
  252. package/dist/compare-bars.d.mts +29 -0
  253. package/dist/compare-bars.d.mts.map +1 -0
  254. package/dist/compare-bars.mjs +118 -0
  255. package/dist/compare-bars.mjs.map +1 -0
  256. package/dist/compare-view.d.mts +75 -0
  257. package/dist/compare-view.d.mts.map +1 -0
  258. package/dist/compare-view.mjs +383 -0
  259. package/dist/compare-view.mjs.map +1 -0
  260. package/dist/confirm-dialog.d.mts +37 -0
  261. package/dist/confirm-dialog.d.mts.map +1 -0
  262. package/dist/confirm-dialog.mjs +40 -0
  263. package/dist/confirm-dialog.mjs.map +1 -0
  264. package/dist/context-menu.d.mts +31 -0
  265. package/dist/context-menu.d.mts.map +1 -0
  266. package/dist/context-menu.mjs +84 -0
  267. package/dist/context-menu.mjs.map +1 -0
  268. package/dist/context-toolbar.d.mts +22 -0
  269. package/dist/context-toolbar.d.mts.map +1 -0
  270. package/dist/context-toolbar.mjs +81 -0
  271. package/dist/context-toolbar.mjs.map +1 -0
  272. package/dist/copy-button.d.mts +15 -0
  273. package/dist/copy-button.d.mts.map +1 -0
  274. package/dist/copy-button.mjs +33 -0
  275. package/dist/copy-button.mjs.map +1 -0
  276. package/dist/core-mark.d.mts +25 -0
  277. package/dist/core-mark.d.mts.map +1 -0
  278. package/dist/core-mark.mjs +74 -0
  279. package/dist/core-mark.mjs.map +1 -0
  280. package/dist/data/mock-data.d.mts +9 -0
  281. package/dist/data/mock-data.d.mts.map +1 -0
  282. package/dist/data/mock-data.mjs +159 -0
  283. package/dist/data/mock-data.mjs.map +1 -0
  284. package/dist/data/rnglf-zones.d.mts +17 -0
  285. package/dist/data/rnglf-zones.d.mts.map +1 -0
  286. package/dist/data/rnglf-zones.mjs +1400 -0
  287. package/dist/data/rnglf-zones.mjs.map +1 -0
  288. package/dist/data-table.d.mts +202 -0
  289. package/dist/data-table.d.mts.map +1 -0
  290. package/dist/data-table.mjs +520 -0
  291. package/dist/data-table.mjs.map +1 -0
  292. package/dist/date-picker.d.mts +111 -0
  293. package/dist/date-picker.d.mts.map +1 -0
  294. package/dist/date-picker.mjs +546 -0
  295. package/dist/date-picker.mjs.map +1 -0
  296. package/dist/date-range-input.d.mts +26 -0
  297. package/dist/date-range-input.d.mts.map +1 -0
  298. package/dist/date-range-input.mjs +60 -0
  299. package/dist/date-range-input.mjs.map +1 -0
  300. package/dist/date-time-input.d.mts +27 -0
  301. package/dist/date-time-input.d.mts.map +1 -0
  302. package/dist/date-time-input.mjs +110 -0
  303. package/dist/date-time-input.mjs.map +1 -0
  304. package/dist/detail-panel-shell.d.mts +37 -0
  305. package/dist/detail-panel-shell.d.mts.map +1 -0
  306. package/dist/detail-panel-shell.mjs +86 -0
  307. package/dist/detail-panel-shell.mjs.map +1 -0
  308. package/dist/dialog.d.mts +105 -0
  309. package/dist/dialog.d.mts.map +1 -0
  310. package/dist/dialog.mjs +137 -0
  311. package/dist/dialog.mjs.map +1 -0
  312. package/dist/divider.d.mts +8 -0
  313. package/dist/divider.d.mts.map +1 -0
  314. package/dist/divider.mjs +18 -0
  315. package/dist/divider.mjs.map +1 -0
  316. package/dist/drawer.d.mts +26 -0
  317. package/dist/drawer.d.mts.map +1 -0
  318. package/dist/drawer.mjs +53 -0
  319. package/dist/drawer.mjs.map +1 -0
  320. package/dist/drawing-actions.d.mts +29 -0
  321. package/dist/drawing-actions.d.mts.map +1 -0
  322. package/dist/drawing-actions.mjs +124 -0
  323. package/dist/drawing-actions.mjs.map +1 -0
  324. package/dist/dropdown-menu.d.mts +31 -0
  325. package/dist/dropdown-menu.d.mts.map +1 -0
  326. package/dist/dropdown-menu.mjs +84 -0
  327. package/dist/dropdown-menu.mjs.map +1 -0
  328. package/dist/empty.d.mts +34 -0
  329. package/dist/empty.d.mts.map +1 -0
  330. package/dist/empty.mjs +119 -0
  331. package/dist/empty.mjs.map +1 -0
  332. package/dist/error-page.d.mts +20 -0
  333. package/dist/error-page.d.mts.map +1 -0
  334. package/dist/error-page.mjs +96 -0
  335. package/dist/error-page.mjs.map +1 -0
  336. package/dist/export-dialog.d.mts +58 -0
  337. package/dist/export-dialog.d.mts.map +1 -0
  338. package/dist/export-dialog.mjs +248 -0
  339. package/dist/export-dialog.mjs.map +1 -0
  340. package/dist/field.d.mts +11 -0
  341. package/dist/field.d.mts.map +1 -0
  342. package/dist/field.mjs +34 -0
  343. package/dist/field.mjs.map +1 -0
  344. package/dist/file-input.d.mts +17 -0
  345. package/dist/file-input.d.mts.map +1 -0
  346. package/dist/file-input.mjs +114 -0
  347. package/dist/file-input.mjs.map +1 -0
  348. package/dist/file-system/context.d.mts +28 -0
  349. package/dist/file-system/context.d.mts.map +1 -0
  350. package/dist/file-system/context.mjs +42 -0
  351. package/dist/file-system/context.mjs.map +1 -0
  352. package/dist/file-system/file-system-details.d.mts +12 -0
  353. package/dist/file-system/file-system-details.d.mts.map +1 -0
  354. package/dist/file-system/file-system-details.mjs +166 -0
  355. package/dist/file-system/file-system-details.mjs.map +1 -0
  356. package/dist/file-system/file-system-filters.d.mts +16 -0
  357. package/dist/file-system/file-system-filters.d.mts.map +1 -0
  358. package/dist/file-system/file-system-filters.mjs +205 -0
  359. package/dist/file-system/file-system-filters.mjs.map +1 -0
  360. package/dist/file-system/file-system-new.d.mts +16 -0
  361. package/dist/file-system/file-system-new.d.mts.map +1 -0
  362. package/dist/file-system/file-system-new.mjs +204 -0
  363. package/dist/file-system/file-system-new.mjs.map +1 -0
  364. package/dist/file-system/file-system-path.d.mts +7 -0
  365. package/dist/file-system/file-system-path.d.mts.map +1 -0
  366. package/dist/file-system/file-system-path.mjs +22 -0
  367. package/dist/file-system/file-system-path.mjs.map +1 -0
  368. package/dist/file-system/file-system-project.d.mts +16 -0
  369. package/dist/file-system/file-system-project.d.mts.map +1 -0
  370. package/dist/file-system/file-system-project.mjs +253 -0
  371. package/dist/file-system/file-system-project.mjs.map +1 -0
  372. package/dist/file-system/file-system-table.d.mts +17 -0
  373. package/dist/file-system/file-system-table.d.mts.map +1 -0
  374. package/dist/file-system/file-system-table.mjs +95 -0
  375. package/dist/file-system/file-system-table.mjs.map +1 -0
  376. package/dist/file-system/file-system.d.mts +35 -0
  377. package/dist/file-system/file-system.d.mts.map +1 -0
  378. package/dist/file-system/file-system.mjs +179 -0
  379. package/dist/file-system/file-system.mjs.map +1 -0
  380. package/dist/file-system/index.d.mts +9 -0
  381. package/dist/file-system/index.mjs +9 -0
  382. package/dist/file-system/model.d.mts +156 -0
  383. package/dist/file-system/model.d.mts.map +1 -0
  384. package/dist/file-system/model.mjs +200 -0
  385. package/dist/file-system/model.mjs.map +1 -0
  386. package/dist/filter.d.mts +92 -0
  387. package/dist/filter.d.mts.map +1 -0
  388. package/dist/filter.mjs +267 -0
  389. package/dist/filter.mjs.map +1 -0
  390. package/dist/float-shadow.d.mts +10 -0
  391. package/dist/float-shadow.d.mts.map +1 -0
  392. package/dist/float-shadow.mjs +11 -0
  393. package/dist/float-shadow.mjs.map +1 -0
  394. package/dist/floating-assistant.d.mts +75 -0
  395. package/dist/floating-assistant.d.mts.map +1 -0
  396. package/dist/floating-assistant.mjs +114 -0
  397. package/dist/floating-assistant.mjs.map +1 -0
  398. package/dist/floor-progress-bar.d.mts +17 -0
  399. package/dist/floor-progress-bar.d.mts.map +1 -0
  400. package/dist/floor-progress-bar.mjs +38 -0
  401. package/dist/floor-progress-bar.mjs.map +1 -0
  402. package/dist/fonts/LICENSE.md +41 -0
  403. package/dist/fonts/figtree-italic-300-900-latin-ext.woff2 +0 -0
  404. package/dist/fonts/figtree-italic-300-900-latin.woff2 +0 -0
  405. package/dist/fonts/figtree-normal-300-900-latin-ext.woff2 +0 -0
  406. package/dist/fonts/figtree-normal-300-900-latin.woff2 +0 -0
  407. package/dist/fonts/ibm-plex-mono-italic-400-latin-ext.woff2 +0 -0
  408. package/dist/fonts/ibm-plex-mono-italic-400-latin.woff2 +0 -0
  409. package/dist/fonts/ibm-plex-mono-normal-400-latin-ext.woff2 +0 -0
  410. package/dist/fonts/ibm-plex-mono-normal-400-latin.woff2 +0 -0
  411. package/dist/fonts/ibm-plex-mono-normal-500-latin-ext.woff2 +0 -0
  412. package/dist/fonts/ibm-plex-mono-normal-500-latin.woff2 +0 -0
  413. package/dist/fonts/ibm-plex-mono-normal-600-latin-ext.woff2 +0 -0
  414. package/dist/fonts/ibm-plex-mono-normal-600-latin.woff2 +0 -0
  415. package/dist/fonts/lora-italic-400-700-latin-ext.woff2 +0 -0
  416. package/dist/fonts/lora-italic-400-700-latin.woff2 +0 -0
  417. package/dist/fonts/lora-normal-400-700-latin-ext.woff2 +0 -0
  418. package/dist/fonts/lora-normal-400-700-latin.woff2 +0 -0
  419. package/dist/footprint-viewer.d.mts +88 -0
  420. package/dist/footprint-viewer.d.mts.map +1 -0
  421. package/dist/footprint-viewer.mjs +657 -0
  422. package/dist/footprint-viewer.mjs.map +1 -0
  423. package/dist/form-action-bar.d.mts +32 -0
  424. package/dist/form-action-bar.d.mts.map +1 -0
  425. package/dist/form-action-bar.mjs +42 -0
  426. package/dist/form-action-bar.mjs.map +1 -0
  427. package/dist/form-dialog.d.mts +116 -0
  428. package/dist/form-dialog.d.mts.map +1 -0
  429. package/dist/form-dialog.mjs +149 -0
  430. package/dist/form-dialog.mjs.map +1 -0
  431. package/dist/form-layout.d.mts +33 -0
  432. package/dist/form-layout.d.mts.map +1 -0
  433. package/dist/form-layout.mjs +90 -0
  434. package/dist/form-layout.mjs.map +1 -0
  435. package/dist/form.d.mts +29 -0
  436. package/dist/form.d.mts.map +1 -0
  437. package/dist/form.mjs +93 -0
  438. package/dist/form.mjs.map +1 -0
  439. package/dist/fragment-viewer/cinematic.d.mts +76 -0
  440. package/dist/fragment-viewer/cinematic.d.mts.map +1 -0
  441. package/dist/fragment-viewer/cinematic.mjs +382 -0
  442. package/dist/fragment-viewer/cinematic.mjs.map +1 -0
  443. package/dist/fragment-viewer/context.d.mts +106 -0
  444. package/dist/fragment-viewer/context.d.mts.map +1 -0
  445. package/dist/fragment-viewer/context.mjs +168 -0
  446. package/dist/fragment-viewer/context.mjs.map +1 -0
  447. package/dist/fragment-viewer/runtime.d.mts +288 -0
  448. package/dist/fragment-viewer/runtime.d.mts.map +1 -0
  449. package/dist/fragment-viewer/runtime.mjs +782 -0
  450. package/dist/fragment-viewer/runtime.mjs.map +1 -0
  451. package/dist/fragment-viewer.d.mts +62 -0
  452. package/dist/fragment-viewer.d.mts.map +1 -0
  453. package/dist/fragment-viewer.mjs +144 -0
  454. package/dist/fragment-viewer.mjs.map +1 -0
  455. package/dist/gantt.d.mts +72 -0
  456. package/dist/gantt.d.mts.map +1 -0
  457. package/dist/gantt.mjs +281 -0
  458. package/dist/gantt.mjs.map +1 -0
  459. package/dist/graph-canvas.d.mts +60 -0
  460. package/dist/graph-canvas.d.mts.map +1 -0
  461. package/dist/graph-canvas.mjs +105 -0
  462. package/dist/graph-canvas.mjs.map +1 -0
  463. package/dist/grid.d.mts +16 -0
  464. package/dist/grid.d.mts.map +1 -0
  465. package/dist/grid.mjs +47 -0
  466. package/dist/grid.mjs.map +1 -0
  467. package/dist/heading.d.mts +16 -0
  468. package/dist/heading.d.mts.map +1 -0
  469. package/dist/heading.mjs +43 -0
  470. package/dist/heading.mjs.map +1 -0
  471. package/dist/house-shape.d.mts +22 -0
  472. package/dist/house-shape.d.mts.map +1 -0
  473. package/dist/house-shape.mjs +103 -0
  474. package/dist/house-shape.mjs.map +1 -0
  475. package/dist/hover-card.d.mts +10 -0
  476. package/dist/hover-card.d.mts.map +1 -0
  477. package/dist/hover-card.mjs +22 -0
  478. package/dist/hover-card.mjs.map +1 -0
  479. package/dist/icon-button.d.mts +20 -0
  480. package/dist/icon-button.d.mts.map +1 -0
  481. package/dist/icon-button.mjs +52 -0
  482. package/dist/icon-button.mjs.map +1 -0
  483. package/dist/icon.d.mts +16 -0
  484. package/dist/icon.d.mts.map +1 -0
  485. package/dist/icon.mjs +32 -0
  486. package/dist/icon.mjs.map +1 -0
  487. package/dist/image-zoom.d.mts +23 -0
  488. package/dist/image-zoom.d.mts.map +1 -0
  489. package/dist/image-zoom.mjs +51 -0
  490. package/dist/image-zoom.mjs.map +1 -0
  491. package/dist/index.d.mts +3 -0
  492. package/dist/index.mjs +2 -0
  493. package/dist/inline-comment-composer.d.mts +40 -0
  494. package/dist/inline-comment-composer.d.mts.map +1 -0
  495. package/dist/inline-comment-composer.mjs +174 -0
  496. package/dist/inline-comment-composer.mjs.map +1 -0
  497. package/dist/input-group.d.mts +8 -0
  498. package/dist/input-group.d.mts.map +1 -0
  499. package/dist/input-group.mjs +21 -0
  500. package/dist/input-group.mjs.map +1 -0
  501. package/dist/input-otp.d.mts +40 -0
  502. package/dist/input-otp.d.mts.map +1 -0
  503. package/dist/input-otp.mjs +44 -0
  504. package/dist/input-otp.mjs.map +1 -0
  505. package/dist/input.d.mts +7 -0
  506. package/dist/input.d.mts.map +1 -0
  507. package/dist/input.mjs +18 -0
  508. package/dist/input.mjs.map +1 -0
  509. package/dist/item.d.mts +10 -0
  510. package/dist/item.d.mts.map +1 -0
  511. package/dist/item.mjs +33 -0
  512. package/dist/item.mjs.map +1 -0
  513. package/dist/kbd.d.mts +8 -0
  514. package/dist/kbd.d.mts.map +1 -0
  515. package/dist/kbd.mjs +15 -0
  516. package/dist/kbd.mjs.map +1 -0
  517. package/dist/kiosk-body.d.mts +13 -0
  518. package/dist/kiosk-body.d.mts.map +1 -0
  519. package/dist/kiosk-body.mjs +352 -0
  520. package/dist/kiosk-body.mjs.map +1 -0
  521. package/dist/kpi-bar.d.mts +29 -0
  522. package/dist/kpi-bar.d.mts.map +1 -0
  523. package/dist/kpi-bar.mjs +46 -0
  524. package/dist/kpi-bar.mjs.map +1 -0
  525. package/dist/kpi-summary.d.mts +24 -0
  526. package/dist/kpi-summary.d.mts.map +1 -0
  527. package/dist/kpi-summary.mjs +22 -0
  528. package/dist/kpi-summary.mjs.map +1 -0
  529. package/dist/label.d.mts +19 -0
  530. package/dist/label.d.mts.map +1 -0
  531. package/dist/label.mjs +27 -0
  532. package/dist/label.mjs.map +1 -0
  533. package/dist/legend.d.mts +87 -0
  534. package/dist/legend.d.mts.map +1 -0
  535. package/dist/legend.mjs +210 -0
  536. package/dist/legend.mjs.map +1 -0
  537. package/dist/lightbox.d.mts +28 -0
  538. package/dist/lightbox.d.mts.map +1 -0
  539. package/dist/lightbox.mjs +142 -0
  540. package/dist/lightbox.mjs.map +1 -0
  541. package/dist/link-type-detail.d.mts +73 -0
  542. package/dist/link-type-detail.d.mts.map +1 -0
  543. package/dist/link-type-detail.mjs +628 -0
  544. package/dist/link-type-detail.mjs.map +1 -0
  545. package/dist/link-type-wizard.d.mts +35 -0
  546. package/dist/link-type-wizard.d.mts.map +1 -0
  547. package/dist/link-type-wizard.mjs +303 -0
  548. package/dist/link-type-wizard.mjs.map +1 -0
  549. package/dist/link.d.mts +14 -0
  550. package/dist/link.d.mts.map +1 -0
  551. package/dist/link.mjs +30 -0
  552. package/dist/link.mjs.map +1 -0
  553. package/dist/list.d.mts +19 -0
  554. package/dist/list.d.mts.map +1 -0
  555. package/dist/list.mjs +27 -0
  556. package/dist/list.mjs.map +1 -0
  557. package/dist/map-compare-layout.d.mts +53 -0
  558. package/dist/map-compare-layout.d.mts.map +1 -0
  559. package/dist/map-compare-layout.mjs +164 -0
  560. package/dist/map-compare-layout.mjs.map +1 -0
  561. package/dist/map-compass.d.mts +22 -0
  562. package/dist/map-compass.d.mts.map +1 -0
  563. package/dist/map-compass.mjs +56 -0
  564. package/dist/map-compass.mjs.map +1 -0
  565. package/dist/map-control-panel.d.mts +92 -0
  566. package/dist/map-control-panel.d.mts.map +1 -0
  567. package/dist/map-control-panel.mjs +153 -0
  568. package/dist/map-control-panel.mjs.map +1 -0
  569. package/dist/map-controls.d.mts +24 -0
  570. package/dist/map-controls.d.mts.map +1 -0
  571. package/dist/map-controls.mjs +322 -0
  572. package/dist/map-controls.mjs.map +1 -0
  573. package/dist/map-hover-card.d.mts +28 -0
  574. package/dist/map-hover-card.d.mts.map +1 -0
  575. package/dist/map-hover-card.mjs +56 -0
  576. package/dist/map-hover-card.mjs.map +1 -0
  577. package/dist/map-legend.d.mts +41 -0
  578. package/dist/map-legend.d.mts.map +1 -0
  579. package/dist/map-legend.mjs +97 -0
  580. package/dist/map-legend.mjs.map +1 -0
  581. package/dist/map-minimap.d.mts +44 -0
  582. package/dist/map-minimap.d.mts.map +1 -0
  583. package/dist/map-minimap.mjs +108 -0
  584. package/dist/map-minimap.mjs.map +1 -0
  585. package/dist/map-toolbar.d.mts +60 -0
  586. package/dist/map-toolbar.d.mts.map +1 -0
  587. package/dist/map-toolbar.mjs +195 -0
  588. package/dist/map-toolbar.mjs.map +1 -0
  589. package/dist/map-transition.d.mts +51 -0
  590. package/dist/map-transition.d.mts.map +1 -0
  591. package/dist/map-transition.mjs +59 -0
  592. package/dist/map-transition.mjs.map +1 -0
  593. package/dist/map.d.mts +14 -0
  594. package/dist/map.d.mts.map +1 -0
  595. package/dist/map.mjs +47 -0
  596. package/dist/map.mjs.map +1 -0
  597. package/dist/mapbox-token.d.mts +12 -0
  598. package/dist/mapbox-token.d.mts.map +1 -0
  599. package/dist/mapbox-token.mjs +15 -0
  600. package/dist/mapbox-token.mjs.map +1 -0
  601. package/dist/markdown.d.mts +18 -0
  602. package/dist/markdown.d.mts.map +1 -0
  603. package/dist/markdown.mjs +41 -0
  604. package/dist/markdown.mjs.map +1 -0
  605. package/dist/mega-menu.d.mts +36 -0
  606. package/dist/mega-menu.d.mts.map +1 -0
  607. package/dist/mega-menu.mjs +89 -0
  608. package/dist/mega-menu.mjs.map +1 -0
  609. package/dist/menubar.d.mts +32 -0
  610. package/dist/menubar.d.mts.map +1 -0
  611. package/dist/menubar.mjs +96 -0
  612. package/dist/menubar.mjs.map +1 -0
  613. package/dist/metadata-list.d.mts +2 -0
  614. package/dist/metadata-list.mjs +2 -0
  615. package/dist/metric-card.d.mts +28 -0
  616. package/dist/metric-card.d.mts.map +1 -0
  617. package/dist/metric-card.mjs +55 -0
  618. package/dist/metric-card.mjs.map +1 -0
  619. package/dist/milestone-table.d.mts +35 -0
  620. package/dist/milestone-table.d.mts.map +1 -0
  621. package/dist/milestone-table.mjs +84 -0
  622. package/dist/milestone-table.mjs.map +1 -0
  623. package/dist/minimap.d.mts +23 -0
  624. package/dist/minimap.d.mts.map +1 -0
  625. package/dist/minimap.mjs +64 -0
  626. package/dist/minimap.mjs.map +1 -0
  627. package/dist/more-menu.d.mts +27 -0
  628. package/dist/more-menu.d.mts.map +1 -0
  629. package/dist/more-menu.mjs +34 -0
  630. package/dist/more-menu.mjs.map +1 -0
  631. package/dist/multi-select.d.mts +38 -0
  632. package/dist/multi-select.d.mts.map +1 -0
  633. package/dist/multi-select.mjs +106 -0
  634. package/dist/multi-select.mjs.map +1 -0
  635. package/dist/navigation/core-app-sidebar.d.mts +461 -0
  636. package/dist/navigation/core-app-sidebar.d.mts.map +1 -0
  637. package/dist/navigation/core-app-sidebar.mjs +1288 -0
  638. package/dist/navigation/core-app-sidebar.mjs.map +1 -0
  639. package/dist/navigation/core-app-top-bar.d.mts +116 -0
  640. package/dist/navigation/core-app-top-bar.d.mts.map +1 -0
  641. package/dist/navigation/core-app-top-bar.mjs +224 -0
  642. package/dist/navigation/core-app-top-bar.mjs.map +1 -0
  643. package/dist/navigation/core-context-tabs.d.mts +12 -0
  644. package/dist/navigation/core-context-tabs.d.mts.map +1 -0
  645. package/dist/navigation/core-context-tabs.mjs +32 -0
  646. package/dist/navigation/core-context-tabs.mjs.map +1 -0
  647. package/dist/navigation/core-dashboard-header.d.mts +20 -0
  648. package/dist/navigation/core-dashboard-header.d.mts.map +1 -0
  649. package/dist/navigation/core-dashboard-header.mjs +227 -0
  650. package/dist/navigation/core-dashboard-header.mjs.map +1 -0
  651. package/dist/navigation/core-filter-strip.d.mts +12 -0
  652. package/dist/navigation/core-filter-strip.d.mts.map +1 -0
  653. package/dist/navigation/core-filter-strip.mjs +289 -0
  654. package/dist/navigation/core-filter-strip.mjs.map +1 -0
  655. package/dist/navigation/core-org-project-switcher.d.mts +12 -0
  656. package/dist/navigation/core-org-project-switcher.d.mts.map +1 -0
  657. package/dist/navigation/core-org-project-switcher.mjs +201 -0
  658. package/dist/navigation/core-org-project-switcher.mjs.map +1 -0
  659. package/dist/navigation/switcher.d.mts +38 -0
  660. package/dist/navigation/switcher.d.mts.map +1 -0
  661. package/dist/navigation/switcher.mjs +144 -0
  662. package/dist/navigation/switcher.mjs.map +1 -0
  663. package/dist/navigation-menu.d.mts +16 -0
  664. package/dist/navigation-menu.d.mts.map +1 -0
  665. package/dist/navigation-menu.mjs +64 -0
  666. package/dist/navigation-menu.mjs.map +1 -0
  667. package/dist/neighborhood-scene.d.mts +21 -0
  668. package/dist/neighborhood-scene.d.mts.map +1 -0
  669. package/dist/neighborhood-scene.mjs +285 -0
  670. package/dist/neighborhood-scene.mjs.map +1 -0
  671. package/dist/node-graph.d.mts +154 -0
  672. package/dist/node-graph.d.mts.map +1 -0
  673. package/dist/node-graph.mjs +349 -0
  674. package/dist/node-graph.mjs.map +1 -0
  675. package/dist/notification-center.d.mts +40 -0
  676. package/dist/notification-center.d.mts.map +1 -0
  677. package/dist/notification-center.mjs +224 -0
  678. package/dist/notification-center.mjs.map +1 -0
  679. package/dist/number-input.d.mts +23 -0
  680. package/dist/number-input.d.mts.map +1 -0
  681. package/dist/number-input.mjs +79 -0
  682. package/dist/number-input.mjs.map +1 -0
  683. package/dist/object-drawing-toolbar.d.mts +38 -0
  684. package/dist/object-drawing-toolbar.d.mts.map +1 -0
  685. package/dist/object-drawing-toolbar.mjs +172 -0
  686. package/dist/object-drawing-toolbar.mjs.map +1 -0
  687. package/dist/object-type-detail.d.mts +27 -0
  688. package/dist/object-type-detail.d.mts.map +1 -0
  689. package/dist/object-type-detail.mjs +1389 -0
  690. package/dist/object-type-detail.mjs.map +1 -0
  691. package/dist/object-type-wizard.d.mts +78 -0
  692. package/dist/object-type-wizard.d.mts.map +1 -0
  693. package/dist/object-type-wizard.mjs +885 -0
  694. package/dist/object-type-wizard.mjs.map +1 -0
  695. package/dist/observation-detail-panel.d.mts +89 -0
  696. package/dist/observation-detail-panel.d.mts.map +1 -0
  697. package/dist/observation-detail-panel.mjs +168 -0
  698. package/dist/observation-detail-panel.mjs.map +1 -0
  699. package/dist/observations-map.d.mts +288 -0
  700. package/dist/observations-map.d.mts.map +1 -0
  701. package/dist/observations-map.mjs +1087 -0
  702. package/dist/observations-map.mjs.map +1 -0
  703. package/dist/operations-drawer.d.mts +51 -0
  704. package/dist/operations-drawer.d.mts.map +1 -0
  705. package/dist/operations-drawer.mjs +193 -0
  706. package/dist/operations-drawer.mjs.map +1 -0
  707. package/dist/outline.d.mts +27 -0
  708. package/dist/outline.d.mts.map +1 -0
  709. package/dist/outline.mjs +47 -0
  710. package/dist/outline.mjs.map +1 -0
  711. package/dist/overflow-list.d.mts +23 -0
  712. package/dist/overflow-list.d.mts.map +1 -0
  713. package/dist/overflow-list.mjs +38 -0
  714. package/dist/overflow-list.mjs.map +1 -0
  715. package/dist/overlay.d.mts +17 -0
  716. package/dist/overlay.d.mts.map +1 -0
  717. package/dist/overlay.mjs +32 -0
  718. package/dist/overlay.mjs.map +1 -0
  719. package/dist/page-content-header.d.mts +43 -0
  720. package/dist/page-content-header.d.mts.map +1 -0
  721. package/dist/page-content-header.mjs +224 -0
  722. package/dist/page-content-header.mjs.map +1 -0
  723. package/dist/pages/almanar-blocks-data.d.mts +4 -0
  724. package/dist/pages/almanar-blocks-data.d.mts.map +1 -0
  725. package/dist/pages/almanar-blocks-data.mjs +691 -0
  726. package/dist/pages/almanar-blocks-data.mjs.map +1 -0
  727. package/dist/pages/almanar-hierarchy-data.d.mts +9 -0
  728. package/dist/pages/almanar-hierarchy-data.d.mts.map +1 -0
  729. package/dist/pages/almanar-hierarchy-data.mjs +816 -0
  730. package/dist/pages/almanar-hierarchy-data.mjs.map +1 -0
  731. package/dist/pages/almanar-villa-taxonomy.d.mts +9 -0
  732. package/dist/pages/almanar-villa-taxonomy.d.mts.map +1 -0
  733. package/dist/pages/almanar-villa-taxonomy.mjs +1569 -0
  734. package/dist/pages/almanar-villa-taxonomy.mjs.map +1 -0
  735. package/dist/pages/app-marketplace-shared.d.mts +146 -0
  736. package/dist/pages/app-marketplace-shared.d.mts.map +1 -0
  737. package/dist/pages/app-marketplace-shared.mjs +739 -0
  738. package/dist/pages/app-marketplace-shared.mjs.map +1 -0
  739. package/dist/pages/capture-ui-enhanced.d.mts +125 -0
  740. package/dist/pages/capture-ui-enhanced.d.mts.map +1 -0
  741. package/dist/pages/capture-ui-enhanced.mjs +915 -0
  742. package/dist/pages/capture-ui-enhanced.mjs.map +1 -0
  743. package/dist/pages/core-admin-panel.d.mts +10 -0
  744. package/dist/pages/core-admin-panel.d.mts.map +1 -0
  745. package/dist/pages/core-admin-panel.mjs +3076 -0
  746. package/dist/pages/core-admin-panel.mjs.map +1 -0
  747. package/dist/pages/core-analytics-overview.d.mts +10 -0
  748. package/dist/pages/core-analytics-overview.d.mts.map +1 -0
  749. package/dist/pages/core-analytics-overview.mjs +904 -0
  750. package/dist/pages/core-analytics-overview.mjs.map +1 -0
  751. package/dist/pages/core-app-installer.d.mts +17 -0
  752. package/dist/pages/core-app-installer.d.mts.map +1 -0
  753. package/dist/pages/core-app-installer.mjs +94 -0
  754. package/dist/pages/core-app-installer.mjs.map +1 -0
  755. package/dist/pages/core-blueprint-viewer-3.d.mts +25 -0
  756. package/dist/pages/core-blueprint-viewer-3.d.mts.map +1 -0
  757. package/dist/pages/core-blueprint-viewer-3.mjs +688 -0
  758. package/dist/pages/core-blueprint-viewer-3.mjs.map +1 -0
  759. package/dist/pages/core-blueprint-viewer.d.mts +14 -0
  760. package/dist/pages/core-blueprint-viewer.d.mts.map +1 -0
  761. package/dist/pages/core-blueprint-viewer.mjs +665 -0
  762. package/dist/pages/core-blueprint-viewer.mjs.map +1 -0
  763. package/dist/pages/core-building-viewer-capture.d.mts +18 -0
  764. package/dist/pages/core-building-viewer-capture.d.mts.map +1 -0
  765. package/dist/pages/core-building-viewer-capture.mjs +268 -0
  766. package/dist/pages/core-building-viewer-capture.mjs.map +1 -0
  767. package/dist/pages/core-building-viewer.d.mts +20 -0
  768. package/dist/pages/core-building-viewer.d.mts.map +1 -0
  769. package/dist/pages/core-building-viewer.mjs +299 -0
  770. package/dist/pages/core-building-viewer.mjs.map +1 -0
  771. package/dist/pages/core-clinic.d.mts +14 -0
  772. package/dist/pages/core-clinic.d.mts.map +1 -0
  773. package/dist/pages/core-clinic.mjs +2175 -0
  774. package/dist/pages/core-clinic.mjs.map +1 -0
  775. package/dist/pages/core-content-area.d.mts +15 -0
  776. package/dist/pages/core-content-area.d.mts.map +1 -0
  777. package/dist/pages/core-content-area.mjs +192 -0
  778. package/dist/pages/core-content-area.mjs.map +1 -0
  779. package/dist/pages/core-core-connect-v3.d.mts +16 -0
  780. package/dist/pages/core-core-connect-v3.d.mts.map +1 -0
  781. package/dist/pages/core-core-connect-v3.mjs +30 -0
  782. package/dist/pages/core-core-connect-v3.mjs.map +1 -0
  783. package/dist/pages/core-core-connect.d.mts +15 -0
  784. package/dist/pages/core-core-connect.d.mts.map +1 -0
  785. package/dist/pages/core-core-connect.mjs +21 -0
  786. package/dist/pages/core-core-connect.mjs.map +1 -0
  787. package/dist/pages/core-design-canvas.d.mts +10 -0
  788. package/dist/pages/core-design-canvas.d.mts.map +1 -0
  789. package/dist/pages/core-design-canvas.mjs +322 -0
  790. package/dist/pages/core-design-canvas.mjs.map +1 -0
  791. package/dist/pages/core-login-page.d.mts +8 -0
  792. package/dist/pages/core-login-page.d.mts.map +1 -0
  793. package/dist/pages/core-login-page.mjs +141 -0
  794. package/dist/pages/core-login-page.mjs.map +1 -0
  795. package/dist/pages/core-map-compare-layout.d.mts +20 -0
  796. package/dist/pages/core-map-compare-layout.d.mts.map +1 -0
  797. package/dist/pages/core-map-compare-layout.mjs +187 -0
  798. package/dist/pages/core-map-compare-layout.mjs.map +1 -0
  799. package/dist/pages/core-observations-map-view.d.mts +19 -0
  800. package/dist/pages/core-observations-map-view.d.mts.map +1 -0
  801. package/dist/pages/core-observations-map-view.mjs +1273 -0
  802. package/dist/pages/core-observations-map-view.mjs.map +1 -0
  803. package/dist/pages/core-org-ai-report.d.mts +9 -0
  804. package/dist/pages/core-org-ai-report.d.mts.map +1 -0
  805. package/dist/pages/core-org-ai-report.mjs +474 -0
  806. package/dist/pages/core-org-ai-report.mjs.map +1 -0
  807. package/dist/pages/core-org-overview.d.mts +11 -0
  808. package/dist/pages/core-org-overview.d.mts.map +1 -0
  809. package/dist/pages/core-org-overview.mjs +718 -0
  810. package/dist/pages/core-org-overview.mjs.map +1 -0
  811. package/dist/pages/core-org-performance.d.mts +11 -0
  812. package/dist/pages/core-org-performance.d.mts.map +1 -0
  813. package/dist/pages/core-org-performance.mjs +1398 -0
  814. package/dist/pages/core-org-performance.mjs.map +1 -0
  815. package/dist/pages/core-org-reality-capture.d.mts +10 -0
  816. package/dist/pages/core-org-reality-capture.d.mts.map +1 -0
  817. package/dist/pages/core-org-reality-capture.mjs +1962 -0
  818. package/dist/pages/core-org-reality-capture.mjs.map +1 -0
  819. package/dist/pages/core-org-workforce-intelligence.d.mts +12 -0
  820. package/dist/pages/core-org-workforce-intelligence.d.mts.map +1 -0
  821. package/dist/pages/core-org-workforce-intelligence.mjs +1215 -0
  822. package/dist/pages/core-org-workforce-intelligence.mjs.map +1 -0
  823. package/dist/pages/core-progress-details.d.mts +10 -0
  824. package/dist/pages/core-progress-details.d.mts.map +1 -0
  825. package/dist/pages/core-progress-details.mjs +758 -0
  826. package/dist/pages/core-progress-details.mjs.map +1 -0
  827. package/dist/pages/core-project-overview.d.mts +9 -0
  828. package/dist/pages/core-project-overview.d.mts.map +1 -0
  829. package/dist/pages/core-project-overview.mjs +246 -0
  830. package/dist/pages/core-project-overview.mjs.map +1 -0
  831. package/dist/pages/core-project-quality-issues.d.mts +9 -0
  832. package/dist/pages/core-project-quality-issues.d.mts.map +1 -0
  833. package/dist/pages/core-project-quality-issues.mjs +508 -0
  834. package/dist/pages/core-project-quality-issues.mjs.map +1 -0
  835. package/dist/pages/core-project-reality-capture.d.mts +9 -0
  836. package/dist/pages/core-project-reality-capture.d.mts.map +1 -0
  837. package/dist/pages/core-project-reality-capture.mjs +496 -0
  838. package/dist/pages/core-project-reality-capture.mjs.map +1 -0
  839. package/dist/pages/core-project-schedule-cost.d.mts +9 -0
  840. package/dist/pages/core-project-schedule-cost.d.mts.map +1 -0
  841. package/dist/pages/core-project-schedule-cost.mjs +548 -0
  842. package/dist/pages/core-project-schedule-cost.mjs.map +1 -0
  843. package/dist/pages/core-project-setup.d.mts +10 -0
  844. package/dist/pages/core-project-setup.d.mts.map +1 -0
  845. package/dist/pages/core-project-setup.mjs +283 -0
  846. package/dist/pages/core-project-setup.mjs.map +1 -0
  847. package/dist/pages/core-project-workforce-safety.d.mts +9 -0
  848. package/dist/pages/core-project-workforce-safety.d.mts.map +1 -0
  849. package/dist/pages/core-project-workforce-safety.mjs +465 -0
  850. package/dist/pages/core-project-workforce-safety.mjs.map +1 -0
  851. package/dist/pages/core-safety-manager.d.mts +14 -0
  852. package/dist/pages/core-safety-manager.d.mts.map +1 -0
  853. package/dist/pages/core-safety-manager.mjs +3081 -0
  854. package/dist/pages/core-safety-manager.mjs.map +1 -0
  855. package/dist/pages/core-site-reality.d.mts +25 -0
  856. package/dist/pages/core-site-reality.d.mts.map +1 -0
  857. package/dist/pages/core-site-reality.mjs +505 -0
  858. package/dist/pages/core-site-reality.mjs.map +1 -0
  859. package/dist/pages/core-task-monitor.d.mts +4 -0
  860. package/dist/pages/core-task-monitor.d.mts.map +1 -0
  861. package/dist/pages/core-task-monitor.mjs +587 -0
  862. package/dist/pages/core-task-monitor.mjs.map +1 -0
  863. package/dist/pages/core-timesheet.d.mts +2 -0
  864. package/dist/pages/core-timesheet.mjs +2 -0
  865. package/dist/pages/core-verifytime-command-center.d.mts +4 -0
  866. package/dist/pages/core-verifytime-command-center.d.mts.map +1 -0
  867. package/dist/pages/core-verifytime-command-center.mjs +1089 -0
  868. package/dist/pages/core-verifytime-command-center.mjs.map +1 -0
  869. package/dist/pages/core-wc3-workspace.d.mts +71 -0
  870. package/dist/pages/core-wc3-workspace.d.mts.map +1 -0
  871. package/dist/pages/core-wc3-workspace.mjs +1015 -0
  872. package/dist/pages/core-wc3-workspace.mjs.map +1 -0
  873. package/dist/pages/core-work-permit.d.mts +14 -0
  874. package/dist/pages/core-work-permit.d.mts.map +1 -0
  875. package/dist/pages/core-work-permit.mjs +281 -0
  876. package/dist/pages/core-work-permit.mjs.map +1 -0
  877. package/dist/pages/core-workforce.d.mts +24 -0
  878. package/dist/pages/core-workforce.d.mts.map +1 -0
  879. package/dist/pages/core-workforce.mjs +1253 -0
  880. package/dist/pages/core-workforce.mjs.map +1 -0
  881. package/dist/pages/org-logos.d.mts +9 -0
  882. package/dist/pages/org-logos.d.mts.map +1 -0
  883. package/dist/pages/org-logos.mjs +11 -0
  884. package/dist/pages/org-logos.mjs.map +1 -0
  885. package/dist/pages/state-machine-fixtures.d.mts +34 -0
  886. package/dist/pages/state-machine-fixtures.d.mts.map +1 -0
  887. package/dist/pages/state-machine-fixtures.mjs +73 -0
  888. package/dist/pages/state-machine-fixtures.mjs.map +1 -0
  889. package/dist/pages/state-machine.d.mts +407 -0
  890. package/dist/pages/state-machine.d.mts.map +1 -0
  891. package/dist/pages/state-machine.mjs +2254 -0
  892. package/dist/pages/state-machine.mjs.map +1 -0
  893. package/dist/pages/typeform/AttachmentInput.d.mts +11 -0
  894. package/dist/pages/typeform/AttachmentInput.d.mts.map +1 -0
  895. package/dist/pages/typeform/AttachmentInput.mjs +59 -0
  896. package/dist/pages/typeform/AttachmentInput.mjs.map +1 -0
  897. package/dist/pages/typeform/BuildMethodScreen.d.mts +10 -0
  898. package/dist/pages/typeform/BuildMethodScreen.d.mts.map +1 -0
  899. package/dist/pages/typeform/BuildMethodScreen.mjs +176 -0
  900. package/dist/pages/typeform/BuildMethodScreen.mjs.map +1 -0
  901. package/dist/pages/typeform/BuilderFlow.d.mts +29 -0
  902. package/dist/pages/typeform/BuilderFlow.d.mts.map +1 -0
  903. package/dist/pages/typeform/BuilderFlow.mjs +111 -0
  904. package/dist/pages/typeform/BuilderFlow.mjs.map +1 -0
  905. package/dist/pages/typeform/BuilderScreen.d.mts +14 -0
  906. package/dist/pages/typeform/BuilderScreen.d.mts.map +1 -0
  907. package/dist/pages/typeform/BuilderScreen.mjs +668 -0
  908. package/dist/pages/typeform/BuilderScreen.mjs.map +1 -0
  909. package/dist/pages/typeform/DataSourceSelect.d.mts +13 -0
  910. package/dist/pages/typeform/DataSourceSelect.d.mts.map +1 -0
  911. package/dist/pages/typeform/DataSourceSelect.mjs +36 -0
  912. package/dist/pages/typeform/DataSourceSelect.mjs.map +1 -0
  913. package/dist/pages/typeform/DerivedCountDisplay.d.mts +10 -0
  914. package/dist/pages/typeform/DerivedCountDisplay.d.mts.map +1 -0
  915. package/dist/pages/typeform/DerivedCountDisplay.mjs +20 -0
  916. package/dist/pages/typeform/DerivedCountDisplay.mjs.map +1 -0
  917. package/dist/pages/typeform/FillerRJSF.d.mts +10 -0
  918. package/dist/pages/typeform/FillerRJSF.d.mts.map +1 -0
  919. package/dist/pages/typeform/FillerRJSF.mjs +314 -0
  920. package/dist/pages/typeform/FillerRJSF.mjs.map +1 -0
  921. package/dist/pages/typeform/FormBuilderWidgetRJSF.d.mts +9 -0
  922. package/dist/pages/typeform/FormBuilderWidgetRJSF.d.mts.map +1 -0
  923. package/dist/pages/typeform/FormBuilderWidgetRJSF.mjs +22 -0
  924. package/dist/pages/typeform/FormBuilderWidgetRJSF.mjs.map +1 -0
  925. package/dist/pages/typeform/PublishScreen.d.mts +18 -0
  926. package/dist/pages/typeform/PublishScreen.d.mts.map +1 -0
  927. package/dist/pages/typeform/PublishScreen.mjs +163 -0
  928. package/dist/pages/typeform/PublishScreen.mjs.map +1 -0
  929. package/dist/pages/typeform/QuestionInspector.d.mts +7 -0
  930. package/dist/pages/typeform/QuestionInspector.d.mts.map +1 -0
  931. package/dist/pages/typeform/QuestionInspector.mjs +749 -0
  932. package/dist/pages/typeform/QuestionInspector.mjs.map +1 -0
  933. package/dist/pages/typeform/QuestionRenderer.d.mts +23 -0
  934. package/dist/pages/typeform/QuestionRenderer.d.mts.map +1 -0
  935. package/dist/pages/typeform/QuestionRenderer.mjs +170 -0
  936. package/dist/pages/typeform/QuestionRenderer.mjs.map +1 -0
  937. package/dist/pages/typeform/RatingInput.d.mts +14 -0
  938. package/dist/pages/typeform/RatingInput.d.mts.map +1 -0
  939. package/dist/pages/typeform/RatingInput.mjs +58 -0
  940. package/dist/pages/typeform/RatingInput.mjs.map +1 -0
  941. package/dist/pages/typeform/RuleGroupEditor.d.mts +9 -0
  942. package/dist/pages/typeform/RuleGroupEditor.d.mts.map +1 -0
  943. package/dist/pages/typeform/RuleGroupEditor.mjs +183 -0
  944. package/dist/pages/typeform/RuleGroupEditor.mjs.map +1 -0
  945. package/dist/pages/typeform/SignaturePad.d.mts +11 -0
  946. package/dist/pages/typeform/SignaturePad.d.mts.map +1 -0
  947. package/dist/pages/typeform/SignaturePad.mjs +111 -0
  948. package/dist/pages/typeform/SignaturePad.mjs.map +1 -0
  949. package/dist/pages/typeform/TableInput.d.mts +15 -0
  950. package/dist/pages/typeform/TableInput.d.mts.map +1 -0
  951. package/dist/pages/typeform/TableInput.mjs +73 -0
  952. package/dist/pages/typeform/TableInput.mjs.map +1 -0
  953. package/dist/pages/typeform/WorkspaceScreen.d.mts +20 -0
  954. package/dist/pages/typeform/WorkspaceScreen.d.mts.map +1 -0
  955. package/dist/pages/typeform/WorkspaceScreen.mjs +158 -0
  956. package/dist/pages/typeform/WorkspaceScreen.mjs.map +1 -0
  957. package/dist/pages/typeform/coreRjsfTheme.d.mts +4 -0
  958. package/dist/pages/typeform/coreRjsfTheme.d.mts.map +1 -0
  959. package/dist/pages/typeform/coreRjsfTheme.mjs +142 -0
  960. package/dist/pages/typeform/coreRjsfTheme.mjs.map +1 -0
  961. package/dist/pages/typeform/dataSources.d.mts +35 -0
  962. package/dist/pages/typeform/dataSources.d.mts.map +1 -0
  963. package/dist/pages/typeform/dataSources.mjs +210 -0
  964. package/dist/pages/typeform/dataSources.mjs.map +1 -0
  965. package/dist/pages/typeform/fillerShared.d.mts +21 -0
  966. package/dist/pages/typeform/fillerShared.d.mts.map +1 -0
  967. package/dist/pages/typeform/fillerShared.mjs +112 -0
  968. package/dist/pages/typeform/fillerShared.mjs.map +1 -0
  969. package/dist/pages/typeform/logic.d.mts +46 -0
  970. package/dist/pages/typeform/logic.d.mts.map +1 -0
  971. package/dist/pages/typeform/logic.mjs +193 -0
  972. package/dist/pages/typeform/logic.mjs.map +1 -0
  973. package/dist/pages/typeform/model.d.mts +144 -0
  974. package/dist/pages/typeform/model.d.mts.map +1 -0
  975. package/dist/pages/typeform/model.mjs +328 -0
  976. package/dist/pages/typeform/model.mjs.map +1 -0
  977. package/dist/pages/typeform/schemaToJsonSchema.d.mts +9 -0
  978. package/dist/pages/typeform/schemaToJsonSchema.d.mts.map +1 -0
  979. package/dist/pages/typeform/schemaToJsonSchema.mjs +119 -0
  980. package/dist/pages/typeform/schemaToJsonSchema.mjs.map +1 -0
  981. package/dist/pages/typeform/useFormBuilder.d.mts +34 -0
  982. package/dist/pages/typeform/useFormBuilder.d.mts.map +1 -0
  983. package/dist/pages/typeform/useFormBuilder.mjs +389 -0
  984. package/dist/pages/typeform/useFormBuilder.mjs.map +1 -0
  985. package/dist/pages/view-mode-thumbs.d.mts +6 -0
  986. package/dist/pages/view-mode-thumbs.d.mts.map +1 -0
  987. package/dist/pages/view-mode-thumbs.mjs +8 -0
  988. package/dist/pages/view-mode-thumbs.mjs.map +1 -0
  989. package/dist/pages/wc3-action-type-detail.d.mts +166 -0
  990. package/dist/pages/wc3-action-type-detail.d.mts.map +1 -0
  991. package/dist/pages/wc3-action-type-detail.mjs +2182 -0
  992. package/dist/pages/wc3-action-type-detail.mjs.map +1 -0
  993. package/dist/pages/wc3-action-type-run-dialog.d.mts +23 -0
  994. package/dist/pages/wc3-action-type-run-dialog.d.mts.map +1 -0
  995. package/dist/pages/wc3-action-type-run-dialog.mjs +383 -0
  996. package/dist/pages/wc3-action-type-run-dialog.mjs.map +1 -0
  997. package/dist/pages/wc3-action-type-wizard.d.mts +75 -0
  998. package/dist/pages/wc3-action-type-wizard.d.mts.map +1 -0
  999. package/dist/pages/wc3-action-type-wizard.mjs +702 -0
  1000. package/dist/pages/wc3-action-type-wizard.mjs.map +1 -0
  1001. package/dist/pages/wc3-analysis-data-view.d.mts +15 -0
  1002. package/dist/pages/wc3-analysis-data-view.d.mts.map +1 -0
  1003. package/dist/pages/wc3-analysis-data-view.mjs +129 -0
  1004. package/dist/pages/wc3-analysis-data-view.mjs.map +1 -0
  1005. package/dist/pages/wc3-analysis-data.d.mts +181 -0
  1006. package/dist/pages/wc3-analysis-data.d.mts.map +1 -0
  1007. package/dist/pages/wc3-analysis-data.mjs +4074 -0
  1008. package/dist/pages/wc3-analysis-data.mjs.map +1 -0
  1009. package/dist/pages/wc3-analysis-object-view.d.mts +12 -0
  1010. package/dist/pages/wc3-analysis-object-view.d.mts.map +1 -0
  1011. package/dist/pages/wc3-analysis-object-view.mjs +196 -0
  1012. package/dist/pages/wc3-analysis-object-view.mjs.map +1 -0
  1013. package/dist/pages/wc3-analysis-saved-view.d.mts +6 -0
  1014. package/dist/pages/wc3-analysis-saved-view.d.mts.map +1 -0
  1015. package/dist/pages/wc3-analysis-saved-view.mjs +540 -0
  1016. package/dist/pages/wc3-analysis-saved-view.mjs.map +1 -0
  1017. package/dist/pages/wc3-analysis-shared.d.mts +346 -0
  1018. package/dist/pages/wc3-analysis-shared.d.mts.map +1 -0
  1019. package/dist/pages/wc3-analysis-shared.mjs +1119 -0
  1020. package/dist/pages/wc3-analysis-shared.mjs.map +1 -0
  1021. package/dist/pages/wc3-analysis-views.d.mts +25 -0
  1022. package/dist/pages/wc3-analysis-views.d.mts.map +1 -0
  1023. package/dist/pages/wc3-analysis-views.mjs +48 -0
  1024. package/dist/pages/wc3-analysis-views.mjs.map +1 -0
  1025. package/dist/pages/wc3-fs-data.d.mts +12 -0
  1026. package/dist/pages/wc3-fs-data.d.mts.map +1 -0
  1027. package/dist/pages/wc3-fs-data.mjs +745 -0
  1028. package/dist/pages/wc3-fs-data.mjs.map +1 -0
  1029. package/dist/pages/wc3-fs-location-field.d.mts +13 -0
  1030. package/dist/pages/wc3-fs-location-field.d.mts.map +1 -0
  1031. package/dist/pages/wc3-fs-location-field.mjs +56 -0
  1032. package/dist/pages/wc3-fs-location-field.mjs.map +1 -0
  1033. package/dist/pages/wc3-fs-path-label.d.mts +12 -0
  1034. package/dist/pages/wc3-fs-path-label.d.mts.map +1 -0
  1035. package/dist/pages/wc3-fs-path-label.mjs +36 -0
  1036. package/dist/pages/wc3-fs-path-label.mjs.map +1 -0
  1037. package/dist/pages/wc3-fs-records.d.mts +17 -0
  1038. package/dist/pages/wc3-fs-records.d.mts.map +1 -0
  1039. package/dist/pages/wc3-fs-records.mjs +107 -0
  1040. package/dist/pages/wc3-fs-records.mjs.map +1 -0
  1041. package/dist/pages/wc3-fs-store.d.mts +43 -0
  1042. package/dist/pages/wc3-fs-store.d.mts.map +1 -0
  1043. package/dist/pages/wc3-fs-store.mjs +81 -0
  1044. package/dist/pages/wc3-fs-store.mjs.map +1 -0
  1045. package/dist/pages/wc3-fs-types.d.mts +19 -0
  1046. package/dist/pages/wc3-fs-types.d.mts.map +1 -0
  1047. package/dist/pages/wc3-fs-types.mjs +66 -0
  1048. package/dist/pages/wc3-fs-types.mjs.map +1 -0
  1049. package/dist/pages/wc3-graph-explorer-flow.d.mts +14 -0
  1050. package/dist/pages/wc3-graph-explorer-flow.d.mts.map +1 -0
  1051. package/dist/pages/wc3-graph-explorer-flow.mjs +275 -0
  1052. package/dist/pages/wc3-graph-explorer-flow.mjs.map +1 -0
  1053. package/dist/pages/wc3-group-detail.d.mts +26 -0
  1054. package/dist/pages/wc3-group-detail.d.mts.map +1 -0
  1055. package/dist/pages/wc3-group-detail.mjs +358 -0
  1056. package/dist/pages/wc3-group-detail.mjs.map +1 -0
  1057. package/dist/pages/wc3-group-wizard.d.mts +28 -0
  1058. package/dist/pages/wc3-group-wizard.d.mts.map +1 -0
  1059. package/dist/pages/wc3-group-wizard.mjs +120 -0
  1060. package/dist/pages/wc3-group-wizard.mjs.map +1 -0
  1061. package/dist/pages/wc3-health-view.d.mts +34 -0
  1062. package/dist/pages/wc3-health-view.d.mts.map +1 -0
  1063. package/dist/pages/wc3-health-view.mjs +413 -0
  1064. package/dist/pages/wc3-health-view.mjs.map +1 -0
  1065. package/dist/pages/wc3-home-view.d.mts +24 -0
  1066. package/dist/pages/wc3-home-view.d.mts.map +1 -0
  1067. package/dist/pages/wc3-home-view.mjs +59 -0
  1068. package/dist/pages/wc3-home-view.mjs.map +1 -0
  1069. package/dist/pages/wc3-interface-detail.d.mts +66 -0
  1070. package/dist/pages/wc3-interface-detail.d.mts.map +1 -0
  1071. package/dist/pages/wc3-interface-detail.mjs +1060 -0
  1072. package/dist/pages/wc3-interface-detail.mjs.map +1 -0
  1073. package/dist/pages/wc3-interface-wizard.d.mts +39 -0
  1074. package/dist/pages/wc3-interface-wizard.d.mts.map +1 -0
  1075. package/dist/pages/wc3-interface-wizard.mjs +226 -0
  1076. package/dist/pages/wc3-interface-wizard.mjs.map +1 -0
  1077. package/dist/pages/wc3-lineage-data-view.d.mts +6 -0
  1078. package/dist/pages/wc3-lineage-data-view.d.mts.map +1 -0
  1079. package/dist/pages/wc3-lineage-data-view.mjs +481 -0
  1080. package/dist/pages/wc3-lineage-data-view.mjs.map +1 -0
  1081. package/dist/pages/wc3-lineage-data.d.mts +191 -0
  1082. package/dist/pages/wc3-lineage-data.d.mts.map +1 -0
  1083. package/dist/pages/wc3-lineage-data.mjs +1061 -0
  1084. package/dist/pages/wc3-lineage-data.mjs.map +1 -0
  1085. package/dist/pages/wc3-lineage-impact-view.d.mts +13 -0
  1086. package/dist/pages/wc3-lineage-impact-view.d.mts.map +1 -0
  1087. package/dist/pages/wc3-lineage-impact-view.mjs +247 -0
  1088. package/dist/pages/wc3-lineage-impact-view.mjs.map +1 -0
  1089. package/dist/pages/wc3-lineage-shared.d.mts +137 -0
  1090. package/dist/pages/wc3-lineage-shared.d.mts.map +1 -0
  1091. package/dist/pages/wc3-lineage-shared.mjs +150 -0
  1092. package/dist/pages/wc3-lineage-shared.mjs.map +1 -0
  1093. package/dist/pages/wc3-lineage-views.d.mts +7 -0
  1094. package/dist/pages/wc3-lineage-views.d.mts.map +1 -0
  1095. package/dist/pages/wc3-lineage-views.mjs +13 -0
  1096. package/dist/pages/wc3-lineage-views.mjs.map +1 -0
  1097. package/dist/pages/wc3-lineage-workflow-view.d.mts +12 -0
  1098. package/dist/pages/wc3-lineage-workflow-view.d.mts.map +1 -0
  1099. package/dist/pages/wc3-lineage-workflow-view.mjs +326 -0
  1100. package/dist/pages/wc3-lineage-workflow-view.mjs.map +1 -0
  1101. package/dist/pages/wc3-object-type-detail.d.mts +18 -0
  1102. package/dist/pages/wc3-object-type-detail.d.mts.map +1 -0
  1103. package/dist/pages/wc3-object-type-detail.mjs +977 -0
  1104. package/dist/pages/wc3-object-type-detail.mjs.map +1 -0
  1105. package/dist/pages/wc3-ontology-data.d.mts +246 -0
  1106. package/dist/pages/wc3-ontology-data.d.mts.map +1 -0
  1107. package/dist/pages/wc3-ontology-data.mjs +8542 -0
  1108. package/dist/pages/wc3-ontology-data.mjs.map +1 -0
  1109. package/dist/pages/wc3-ontology-glyphs.d.mts +14 -0
  1110. package/dist/pages/wc3-ontology-glyphs.d.mts.map +1 -0
  1111. package/dist/pages/wc3-ontology-glyphs.mjs +53 -0
  1112. package/dist/pages/wc3-ontology-glyphs.mjs.map +1 -0
  1113. package/dist/pages/wc3-ontology-scope.d.mts +62 -0
  1114. package/dist/pages/wc3-ontology-scope.d.mts.map +1 -0
  1115. package/dist/pages/wc3-ontology-scope.mjs +109 -0
  1116. package/dist/pages/wc3-ontology-scope.mjs.map +1 -0
  1117. package/dist/pages/wc3-ontology-views.d.mts +34 -0
  1118. package/dist/pages/wc3-ontology-views.d.mts.map +1 -0
  1119. package/dist/pages/wc3-ontology-views.mjs +1253 -0
  1120. package/dist/pages/wc3-ontology-views.mjs.map +1 -0
  1121. package/dist/pages/wc3-permit-policy.d.mts +56 -0
  1122. package/dist/pages/wc3-permit-policy.d.mts.map +1 -0
  1123. package/dist/pages/wc3-permit-policy.mjs +478 -0
  1124. package/dist/pages/wc3-permit-policy.mjs.map +1 -0
  1125. package/dist/pages/wc3-pipeline-detail.d.mts +13 -0
  1126. package/dist/pages/wc3-pipeline-detail.d.mts.map +1 -0
  1127. package/dist/pages/wc3-pipeline-detail.mjs +818 -0
  1128. package/dist/pages/wc3-pipeline-detail.mjs.map +1 -0
  1129. package/dist/pages/wc3-pipeline-list-view.d.mts +5 -0
  1130. package/dist/pages/wc3-pipeline-list-view.d.mts.map +1 -0
  1131. package/dist/pages/wc3-pipeline-list-view.mjs +692 -0
  1132. package/dist/pages/wc3-pipeline-list-view.mjs.map +1 -0
  1133. package/dist/pages/wc3-pipeline-shared.d.mts +301 -0
  1134. package/dist/pages/wc3-pipeline-shared.d.mts.map +1 -0
  1135. package/dist/pages/wc3-pipeline-shared.mjs +703 -0
  1136. package/dist/pages/wc3-pipeline-shared.mjs.map +1 -0
  1137. package/dist/pages/wc3-pipeline-side-views.d.mts +7 -0
  1138. package/dist/pages/wc3-pipeline-side-views.d.mts.map +1 -0
  1139. package/dist/pages/wc3-pipeline-side-views.mjs +998 -0
  1140. package/dist/pages/wc3-pipeline-side-views.mjs.map +1 -0
  1141. package/dist/pages/wc3-pipeline-views.d.mts +15 -0
  1142. package/dist/pages/wc3-pipeline-views.d.mts.map +1 -0
  1143. package/dist/pages/wc3-pipeline-views.mjs +23 -0
  1144. package/dist/pages/wc3-pipeline-views.mjs.map +1 -0
  1145. package/dist/pages/wc3-process-bottlenecks.d.mts +22 -0
  1146. package/dist/pages/wc3-process-bottlenecks.d.mts.map +1 -0
  1147. package/dist/pages/wc3-process-bottlenecks.mjs +352 -0
  1148. package/dist/pages/wc3-process-bottlenecks.mjs.map +1 -0
  1149. package/dist/pages/wc3-process-create.d.mts +24 -0
  1150. package/dist/pages/wc3-process-create.d.mts.map +1 -0
  1151. package/dist/pages/wc3-process-create.mjs +230 -0
  1152. package/dist/pages/wc3-process-create.mjs.map +1 -0
  1153. package/dist/pages/wc3-process-data.d.mts +238 -0
  1154. package/dist/pages/wc3-process-data.d.mts.map +1 -0
  1155. package/dist/pages/wc3-process-data.mjs +2251 -0
  1156. package/dist/pages/wc3-process-data.mjs.map +1 -0
  1157. package/dist/pages/wc3-process-detail.d.mts +21 -0
  1158. package/dist/pages/wc3-process-detail.d.mts.map +1 -0
  1159. package/dist/pages/wc3-process-detail.mjs +21 -0
  1160. package/dist/pages/wc3-process-detail.mjs.map +1 -0
  1161. package/dist/pages/wc3-process-list-view.d.mts +5 -0
  1162. package/dist/pages/wc3-process-list-view.d.mts.map +1 -0
  1163. package/dist/pages/wc3-process-list-view.mjs +602 -0
  1164. package/dist/pages/wc3-process-list-view.mjs.map +1 -0
  1165. package/dist/pages/wc3-process-shared.d.mts +443 -0
  1166. package/dist/pages/wc3-process-shared.d.mts.map +1 -0
  1167. package/dist/pages/wc3-process-shared.mjs +980 -0
  1168. package/dist/pages/wc3-process-shared.mjs.map +1 -0
  1169. package/dist/pages/wc3-process-views.d.mts +19 -0
  1170. package/dist/pages/wc3-process-views.d.mts.map +1 -0
  1171. package/dist/pages/wc3-process-views.mjs +23 -0
  1172. package/dist/pages/wc3-process-views.mjs.map +1 -0
  1173. package/dist/pages/wc3-product-catalogue-view.d.mts +5 -0
  1174. package/dist/pages/wc3-product-catalogue-view.d.mts.map +1 -0
  1175. package/dist/pages/wc3-product-catalogue-view.mjs +587 -0
  1176. package/dist/pages/wc3-product-catalogue-view.mjs.map +1 -0
  1177. package/dist/pages/wc3-product-data.d.mts +206 -0
  1178. package/dist/pages/wc3-product-data.d.mts.map +1 -0
  1179. package/dist/pages/wc3-product-data.mjs +2669 -0
  1180. package/dist/pages/wc3-product-data.mjs.map +1 -0
  1181. package/dist/pages/wc3-product-detail.d.mts +31 -0
  1182. package/dist/pages/wc3-product-detail.d.mts.map +1 -0
  1183. package/dist/pages/wc3-product-detail.mjs +1137 -0
  1184. package/dist/pages/wc3-product-detail.mjs.map +1 -0
  1185. package/dist/pages/wc3-product-install-dialog.d.mts +99 -0
  1186. package/dist/pages/wc3-product-install-dialog.d.mts.map +1 -0
  1187. package/dist/pages/wc3-product-install-dialog.mjs +808 -0
  1188. package/dist/pages/wc3-product-install-dialog.mjs.map +1 -0
  1189. package/dist/pages/wc3-product-shared.d.mts +152 -0
  1190. package/dist/pages/wc3-product-shared.d.mts.map +1 -0
  1191. package/dist/pages/wc3-product-shared.mjs +268 -0
  1192. package/dist/pages/wc3-product-shared.mjs.map +1 -0
  1193. package/dist/pages/wc3-product-views.d.mts +7 -0
  1194. package/dist/pages/wc3-product-views.d.mts.map +1 -0
  1195. package/dist/pages/wc3-product-views.mjs +7 -0
  1196. package/dist/pages/wc3-product-views.mjs.map +1 -0
  1197. package/dist/pages/wc3-shared-property-detail.d.mts +95 -0
  1198. package/dist/pages/wc3-shared-property-detail.d.mts.map +1 -0
  1199. package/dist/pages/wc3-shared-property-detail.mjs +546 -0
  1200. package/dist/pages/wc3-shared-property-detail.mjs.map +1 -0
  1201. package/dist/pages/wc3-shared-property-view.d.mts +10 -0
  1202. package/dist/pages/wc3-shared-property-view.d.mts.map +1 -0
  1203. package/dist/pages/wc3-shared-property-view.mjs +455 -0
  1204. package/dist/pages/wc3-shared-property-view.mjs.map +1 -0
  1205. package/dist/pages/wc3-shared-property-wizard.d.mts +31 -0
  1206. package/dist/pages/wc3-shared-property-wizard.d.mts.map +1 -0
  1207. package/dist/pages/wc3-shared-property-wizard.mjs +181 -0
  1208. package/dist/pages/wc3-shared-property-wizard.mjs.map +1 -0
  1209. package/dist/pages/work-permit-templates.d.mts +30 -0
  1210. package/dist/pages/work-permit-templates.d.mts.map +1 -0
  1211. package/dist/pages/work-permit-templates.mjs +793 -0
  1212. package/dist/pages/work-permit-templates.mjs.map +1 -0
  1213. package/dist/pages/workforce-analytics.d.mts +11 -0
  1214. package/dist/pages/workforce-analytics.d.mts.map +1 -0
  1215. package/dist/pages/workforce-analytics.mjs +561 -0
  1216. package/dist/pages/workforce-analytics.mjs.map +1 -0
  1217. package/dist/pages/workforce-compliance-settings.d.mts +9 -0
  1218. package/dist/pages/workforce-compliance-settings.d.mts.map +1 -0
  1219. package/dist/pages/workforce-compliance-settings.mjs +375 -0
  1220. package/dist/pages/workforce-compliance-settings.mjs.map +1 -0
  1221. package/dist/pages/workforce-compliance.d.mts +81 -0
  1222. package/dist/pages/workforce-compliance.d.mts.map +1 -0
  1223. package/dist/pages/workforce-compliance.mjs +805 -0
  1224. package/dist/pages/workforce-compliance.mjs.map +1 -0
  1225. package/dist/pages/workforce-crews.d.mts +5 -0
  1226. package/dist/pages/workforce-crews.d.mts.map +1 -0
  1227. package/dist/pages/workforce-crews.mjs +1091 -0
  1228. package/dist/pages/workforce-crews.mjs.map +1 -0
  1229. package/dist/pages/workforce-map-view.d.mts +8 -0
  1230. package/dist/pages/workforce-map-view.d.mts.map +1 -0
  1231. package/dist/pages/workforce-map-view.mjs +953 -0
  1232. package/dist/pages/workforce-map-view.mjs.map +1 -0
  1233. package/dist/pages/workforce-obs.d.mts +5 -0
  1234. package/dist/pages/workforce-obs.d.mts.map +1 -0
  1235. package/dist/pages/workforce-obs.mjs +649 -0
  1236. package/dist/pages/workforce-obs.mjs.map +1 -0
  1237. package/dist/pagination.d.mts +32 -0
  1238. package/dist/pagination.d.mts.map +1 -0
  1239. package/dist/pagination.mjs +67 -0
  1240. package/dist/pagination.mjs.map +1 -0
  1241. package/dist/permission-matrix.d.mts +43 -0
  1242. package/dist/permission-matrix.d.mts.map +1 -0
  1243. package/dist/permission-matrix.mjs +146 -0
  1244. package/dist/permission-matrix.mjs.map +1 -0
  1245. package/dist/popover.d.mts +19 -0
  1246. package/dist/popover.d.mts.map +1 -0
  1247. package/dist/popover.mjs +31 -0
  1248. package/dist/popover.mjs.map +1 -0
  1249. package/dist/product-package-detail.d.mts +173 -0
  1250. package/dist/product-package-detail.d.mts.map +1 -0
  1251. package/dist/product-package-detail.mjs +521 -0
  1252. package/dist/product-package-detail.mjs.map +1 -0
  1253. package/dist/progress-comparison.d.mts +93 -0
  1254. package/dist/progress-comparison.d.mts.map +1 -0
  1255. package/dist/progress-comparison.mjs +253 -0
  1256. package/dist/progress-comparison.mjs.map +1 -0
  1257. package/dist/progress-list-item.d.mts +46 -0
  1258. package/dist/progress-list-item.d.mts.map +1 -0
  1259. package/dist/progress-list-item.mjs +79 -0
  1260. package/dist/progress-list-item.mjs.map +1 -0
  1261. package/dist/progress-sheet.d.mts +39 -0
  1262. package/dist/progress-sheet.d.mts.map +1 -0
  1263. package/dist/progress-sheet.mjs +760 -0
  1264. package/dist/progress-sheet.mjs.map +1 -0
  1265. package/dist/progress-stat.d.mts +26 -0
  1266. package/dist/progress-stat.d.mts.map +1 -0
  1267. package/dist/progress-stat.mjs +54 -0
  1268. package/dist/progress-stat.mjs.map +1 -0
  1269. package/dist/progress.d.mts +13 -0
  1270. package/dist/progress.d.mts.map +1 -0
  1271. package/dist/progress.mjs +32 -0
  1272. package/dist/progress.mjs.map +1 -0
  1273. package/dist/prompt-input.d.mts +108 -0
  1274. package/dist/prompt-input.d.mts.map +1 -0
  1275. package/dist/prompt-input.mjs +400 -0
  1276. package/dist/prompt-input.mjs.map +1 -0
  1277. package/dist/property-list.d.mts +37 -0
  1278. package/dist/property-list.d.mts.map +1 -0
  1279. package/dist/property-list.mjs +60 -0
  1280. package/dist/property-list.mjs.map +1 -0
  1281. package/dist/push-panel.d.mts +75 -0
  1282. package/dist/push-panel.d.mts.map +1 -0
  1283. package/dist/push-panel.mjs +182 -0
  1284. package/dist/push-panel.mjs.map +1 -0
  1285. package/dist/radio-group.d.mts +9 -0
  1286. package/dist/radio-group.d.mts.map +1 -0
  1287. package/dist/radio-group.mjs +27 -0
  1288. package/dist/radio-group.mjs.map +1 -0
  1289. package/dist/record-detail-shell.d.mts +46 -0
  1290. package/dist/record-detail-shell.d.mts.map +1 -0
  1291. package/dist/record-detail-shell.mjs +29 -0
  1292. package/dist/record-detail-shell.mjs.map +1 -0
  1293. package/dist/resizable.d.mts +11 -0
  1294. package/dist/resizable.d.mts.map +1 -0
  1295. package/dist/resizable.mjs +23 -0
  1296. package/dist/resizable.mjs.map +1 -0
  1297. package/dist/resize-handle.d.mts +19 -0
  1298. package/dist/resize-handle.d.mts.map +1 -0
  1299. package/dist/resize-handle.mjs +45 -0
  1300. package/dist/resize-handle.mjs.map +1 -0
  1301. package/dist/responder-detail-panel.d.mts +72 -0
  1302. package/dist/responder-detail-panel.d.mts.map +1 -0
  1303. package/dist/responder-detail-panel.mjs +232 -0
  1304. package/dist/responder-detail-panel.mjs.map +1 -0
  1305. package/dist/rule-row.d.mts +63 -0
  1306. package/dist/rule-row.d.mts.map +1 -0
  1307. package/dist/rule-row.mjs +97 -0
  1308. package/dist/rule-row.mjs.map +1 -0
  1309. package/dist/schedule-week-bar.d.mts +24 -0
  1310. package/dist/schedule-week-bar.d.mts.map +1 -0
  1311. package/dist/schedule-week-bar.mjs +99 -0
  1312. package/dist/schedule-week-bar.mjs.map +1 -0
  1313. package/dist/score-gauge.d.mts +24 -0
  1314. package/dist/score-gauge.d.mts.map +1 -0
  1315. package/dist/score-gauge.mjs +73 -0
  1316. package/dist/score-gauge.mjs.map +1 -0
  1317. package/dist/scroll-area.d.mts +27 -0
  1318. package/dist/scroll-area.d.mts.map +1 -0
  1319. package/dist/scroll-area.mjs +35 -0
  1320. package/dist/scroll-area.mjs.map +1 -0
  1321. package/dist/search-filter-bar.d.mts +22 -0
  1322. package/dist/search-filter-bar.d.mts.map +1 -0
  1323. package/dist/search-filter-bar.mjs +56 -0
  1324. package/dist/search-filter-bar.mjs.map +1 -0
  1325. package/dist/section-header.d.mts +22 -0
  1326. package/dist/section-header.d.mts.map +1 -0
  1327. package/dist/section-header.mjs +32 -0
  1328. package/dist/section-header.mjs.map +1 -0
  1329. package/dist/section-panel.d.mts +47 -0
  1330. package/dist/section-panel.d.mts.map +1 -0
  1331. package/dist/section-panel.mjs +78 -0
  1332. package/dist/section-panel.mjs.map +1 -0
  1333. package/dist/section.d.mts +15 -0
  1334. package/dist/section.d.mts.map +1 -0
  1335. package/dist/section.mjs +34 -0
  1336. package/dist/section.mjs.map +1 -0
  1337. package/dist/segmented-control.d.mts +26 -0
  1338. package/dist/segmented-control.d.mts.map +1 -0
  1339. package/dist/segmented-control.mjs +70 -0
  1340. package/dist/segmented-control.mjs.map +1 -0
  1341. package/dist/select.d.mts +87 -0
  1342. package/dist/select.d.mts.map +1 -0
  1343. package/dist/select.mjs +280 -0
  1344. package/dist/select.mjs.map +1 -0
  1345. package/dist/selectable-card.d.mts +39 -0
  1346. package/dist/selectable-card.d.mts.map +1 -0
  1347. package/dist/selectable-card.mjs +102 -0
  1348. package/dist/selectable-card.mjs.map +1 -0
  1349. package/dist/separator.d.mts +8 -0
  1350. package/dist/separator.d.mts.map +1 -0
  1351. package/dist/separator.mjs +18 -0
  1352. package/dist/separator.mjs.map +1 -0
  1353. package/dist/services/chatService.d.mts +11 -0
  1354. package/dist/services/chatService.d.mts.map +1 -0
  1355. package/dist/services/chatService.mjs +44 -0
  1356. package/dist/services/chatService.mjs.map +1 -0
  1357. package/dist/setup-steps-checklist.d.mts +50 -0
  1358. package/dist/setup-steps-checklist.d.mts.map +1 -0
  1359. package/dist/setup-steps-checklist.mjs +183 -0
  1360. package/dist/setup-steps-checklist.mjs.map +1 -0
  1361. package/dist/sheet.d.mts +41 -0
  1362. package/dist/sheet.d.mts.map +1 -0
  1363. package/dist/sheet.mjs +71 -0
  1364. package/dist/sheet.mjs.map +1 -0
  1365. package/dist/side-menu.d.mts +61 -0
  1366. package/dist/side-menu.d.mts.map +1 -0
  1367. package/dist/side-menu.mjs +160 -0
  1368. package/dist/side-menu.mjs.map +1 -0
  1369. package/dist/sidebar.d.mts +36 -0
  1370. package/dist/sidebar.d.mts.map +1 -0
  1371. package/dist/sidebar.mjs +159 -0
  1372. package/dist/sidebar.mjs.map +1 -0
  1373. package/dist/single-house-view.d.mts +13 -0
  1374. package/dist/single-house-view.d.mts.map +1 -0
  1375. package/dist/single-house-view.mjs +506 -0
  1376. package/dist/single-house-view.mjs.map +1 -0
  1377. package/dist/site-image-viewer/batches.mjs +362 -0
  1378. package/dist/site-image-viewer/batches.mjs.map +1 -0
  1379. package/dist/site-image-viewer/blocks-zone-1a.mjs +1815 -0
  1380. package/dist/site-image-viewer/blocks-zone-1a.mjs.map +1 -0
  1381. package/dist/site-image-viewer/blocks-zone-1b.mjs +2623 -0
  1382. package/dist/site-image-viewer/blocks-zone-1b.mjs.map +1 -0
  1383. package/dist/site-image-viewer/legend-items.d.mts +6 -0
  1384. package/dist/site-image-viewer/legend-items.d.mts.map +1 -0
  1385. package/dist/site-image-viewer/legend-items.mjs +104 -0
  1386. package/dist/site-image-viewer/legend-items.mjs.map +1 -0
  1387. package/dist/site-image-viewer/milestone-ramp.d.mts +81 -0
  1388. package/dist/site-image-viewer/milestone-ramp.d.mts.map +1 -0
  1389. package/dist/site-image-viewer/milestone-ramp.mjs +112 -0
  1390. package/dist/site-image-viewer/milestone-ramp.mjs.map +1 -0
  1391. package/dist/site-image-viewer/phases.mjs +60 -0
  1392. package/dist/site-image-viewer/phases.mjs.map +1 -0
  1393. package/dist/site-image-viewer/site-legend.d.mts +20 -0
  1394. package/dist/site-image-viewer/site-legend.d.mts.map +1 -0
  1395. package/dist/site-image-viewer/site-legend.mjs +113 -0
  1396. package/dist/site-image-viewer/site-legend.mjs.map +1 -0
  1397. package/dist/site-image-viewer/types.d.mts +32 -0
  1398. package/dist/site-image-viewer/types.d.mts.map +1 -0
  1399. package/dist/site-image-viewer/types.mjs +1 -0
  1400. package/dist/site-image-viewer/villa-hover-card.d.mts +15 -0
  1401. package/dist/site-image-viewer/villa-hover-card.d.mts.map +1 -0
  1402. package/dist/site-image-viewer/villa-hover-card.mjs +48 -0
  1403. package/dist/site-image-viewer/villa-hover-card.mjs.map +1 -0
  1404. package/dist/site-image-viewer/villas.mjs +34494 -0
  1405. package/dist/site-image-viewer/villas.mjs.map +1 -0
  1406. package/dist/site-image-viewer/zone1b-villas.mjs +36211 -0
  1407. package/dist/site-image-viewer/zone1b-villas.mjs.map +1 -0
  1408. package/dist/site-image-viewer/zones-marketing.mjs +114 -0
  1409. package/dist/site-image-viewer/zones-marketing.mjs.map +1 -0
  1410. package/dist/site-image-viewer/zones.mjs +114 -0
  1411. package/dist/site-image-viewer/zones.mjs.map +1 -0
  1412. package/dist/site-image-viewer-fixtures.d.mts +44 -0
  1413. package/dist/site-image-viewer-fixtures.d.mts.map +1 -0
  1414. package/dist/site-image-viewer-fixtures.mjs +112 -0
  1415. package/dist/site-image-viewer-fixtures.mjs.map +1 -0
  1416. package/dist/site-image-viewer.d.mts +98 -0
  1417. package/dist/site-image-viewer.d.mts.map +1 -0
  1418. package/dist/site-image-viewer.mjs +501 -0
  1419. package/dist/site-image-viewer.mjs.map +1 -0
  1420. package/dist/site-panel.d.mts +123 -0
  1421. package/dist/site-panel.d.mts.map +1 -0
  1422. package/dist/site-panel.mjs +1413 -0
  1423. package/dist/site-panel.mjs.map +1 -0
  1424. package/dist/site-reality-viewer.d.mts +46 -0
  1425. package/dist/site-reality-viewer.d.mts.map +1 -0
  1426. package/dist/site-reality-viewer.mjs +436 -0
  1427. package/dist/site-reality-viewer.mjs.map +1 -0
  1428. package/dist/site-toolbar.d.mts +54 -0
  1429. package/dist/site-toolbar.d.mts.map +1 -0
  1430. package/dist/site-toolbar.mjs +110 -0
  1431. package/dist/site-toolbar.mjs.map +1 -0
  1432. package/dist/skeleton.d.mts +6 -0
  1433. package/dist/skeleton.d.mts.map +1 -0
  1434. package/dist/skeleton.mjs +14 -0
  1435. package/dist/skeleton.mjs.map +1 -0
  1436. package/dist/slider.d.mts +8 -0
  1437. package/dist/slider.d.mts.map +1 -0
  1438. package/dist/slider.mjs +20 -0
  1439. package/dist/slider.mjs.map +1 -0
  1440. package/dist/sonner.d.mts +8 -0
  1441. package/dist/sonner.d.mts.map +1 -0
  1442. package/dist/sonner.mjs +20 -0
  1443. package/dist/sonner.mjs.map +1 -0
  1444. package/dist/spinner.d.mts +12 -0
  1445. package/dist/spinner.d.mts.map +1 -0
  1446. package/dist/spinner.mjs +38 -0
  1447. package/dist/spinner.mjs.map +1 -0
  1448. package/dist/stack.d.mts +18 -0
  1449. package/dist/stack.d.mts.map +1 -0
  1450. package/dist/stack.mjs +61 -0
  1451. package/dist/stack.mjs.map +1 -0
  1452. package/dist/stage-content.d.mts +13 -0
  1453. package/dist/stage-content.d.mts.map +1 -0
  1454. package/dist/stage-content.mjs +664 -0
  1455. package/dist/stage-content.mjs.map +1 -0
  1456. package/dist/status-dot.d.mts +18 -0
  1457. package/dist/status-dot.d.mts.map +1 -0
  1458. package/dist/status-dot.mjs +89 -0
  1459. package/dist/status-dot.mjs.map +1 -0
  1460. package/dist/stepper.d.mts +19 -0
  1461. package/dist/stepper.d.mts.map +1 -0
  1462. package/dist/stepper.mjs +113 -0
  1463. package/dist/stepper.mjs.map +1 -0
  1464. package/dist/styles.css +1 -0
  1465. package/dist/styles.tw4.css +1 -0
  1466. package/dist/switch.d.mts +12 -0
  1467. package/dist/switch.d.mts.map +1 -0
  1468. package/dist/switch.mjs +17 -0
  1469. package/dist/switch.mjs.map +1 -0
  1470. package/dist/tab-list.d.mts +33 -0
  1471. package/dist/tab-list.d.mts.map +1 -0
  1472. package/dist/tab-list.mjs +90 -0
  1473. package/dist/tab-list.mjs.map +1 -0
  1474. package/dist/table.d.mts +14 -0
  1475. package/dist/table.d.mts.map +1 -0
  1476. package/dist/table.mjs +60 -0
  1477. package/dist/table.mjs.map +1 -0
  1478. package/dist/tabs.d.mts +42 -0
  1479. package/dist/tabs.d.mts.map +1 -0
  1480. package/dist/tabs.mjs +258 -0
  1481. package/dist/tabs.mjs.map +1 -0
  1482. package/dist/task-monitor.d.mts +70 -0
  1483. package/dist/task-monitor.d.mts.map +1 -0
  1484. package/dist/task-monitor.mjs +319 -0
  1485. package/dist/task-monitor.mjs.map +1 -0
  1486. package/dist/text.d.mts +18 -0
  1487. package/dist/text.d.mts.map +1 -0
  1488. package/dist/text.mjs +60 -0
  1489. package/dist/text.mjs.map +1 -0
  1490. package/dist/textarea.d.mts +7 -0
  1491. package/dist/textarea.d.mts.map +1 -0
  1492. package/dist/textarea.mjs +15 -0
  1493. package/dist/textarea.mjs.map +1 -0
  1494. package/dist/thinking-pill.d.mts +15 -0
  1495. package/dist/thinking-pill.d.mts.map +1 -0
  1496. package/dist/thinking-pill.mjs +28 -0
  1497. package/dist/thinking-pill.mjs.map +1 -0
  1498. package/dist/thumbnail.d.mts +20 -0
  1499. package/dist/thumbnail.d.mts.map +1 -0
  1500. package/dist/thumbnail.mjs +81 -0
  1501. package/dist/thumbnail.mjs.map +1 -0
  1502. package/dist/time-input.d.mts +15 -0
  1503. package/dist/time-input.d.mts.map +1 -0
  1504. package/dist/time-input.mjs +21 -0
  1505. package/dist/time-input.mjs.map +1 -0
  1506. package/dist/time-scrubber.d.mts +93 -0
  1507. package/dist/time-scrubber.d.mts.map +1 -0
  1508. package/dist/time-scrubber.mjs +420 -0
  1509. package/dist/time-scrubber.mjs.map +1 -0
  1510. package/dist/timeline-range-selector.d.mts +30 -0
  1511. package/dist/timeline-range-selector.d.mts.map +1 -0
  1512. package/dist/timeline-range-selector.mjs +232 -0
  1513. package/dist/timeline-range-selector.mjs.map +1 -0
  1514. package/dist/timestamp-picker.d.mts +32 -0
  1515. package/dist/timestamp-picker.d.mts.map +1 -0
  1516. package/dist/timestamp-picker.mjs +143 -0
  1517. package/dist/timestamp-picker.mjs.map +1 -0
  1518. package/dist/timestamp.d.mts +15 -0
  1519. package/dist/timestamp.d.mts.map +1 -0
  1520. package/dist/timestamp.mjs +61 -0
  1521. package/dist/timestamp.mjs.map +1 -0
  1522. package/dist/toast.d.mts +18 -0
  1523. package/dist/toast.d.mts.map +1 -0
  1524. package/dist/toast.mjs +59 -0
  1525. package/dist/toast.mjs.map +1 -0
  1526. package/dist/toaster.d.mts +5 -0
  1527. package/dist/toaster.d.mts.map +1 -0
  1528. package/dist/toaster.mjs +23 -0
  1529. package/dist/toaster.mjs.map +1 -0
  1530. package/dist/toggle-group.d.mts +16 -0
  1531. package/dist/toggle-group.d.mts.map +1 -0
  1532. package/dist/toggle-group.mjs +41 -0
  1533. package/dist/toggle-group.mjs.map +1 -0
  1534. package/dist/toggle.d.mts +16 -0
  1535. package/dist/toggle.d.mts.map +1 -0
  1536. package/dist/toggle.mjs +38 -0
  1537. package/dist/toggle.mjs.map +1 -0
  1538. package/dist/tokenizer.d.mts +23 -0
  1539. package/dist/tokenizer.d.mts.map +1 -0
  1540. package/dist/tokenizer.mjs +87 -0
  1541. package/dist/tokenizer.mjs.map +1 -0
  1542. package/dist/tones.d.mts +59 -0
  1543. package/dist/tones.d.mts.map +1 -0
  1544. package/dist/tones.mjs +177 -0
  1545. package/dist/tones.mjs.map +1 -0
  1546. package/dist/tool-call.d.mts +29 -0
  1547. package/dist/tool-call.d.mts.map +1 -0
  1548. package/dist/tool-call.mjs +89 -0
  1549. package/dist/tool-call.mjs.map +1 -0
  1550. package/dist/toolbar-color-picker.d.mts +50 -0
  1551. package/dist/toolbar-color-picker.d.mts.map +1 -0
  1552. package/dist/toolbar-color-picker.mjs +238 -0
  1553. package/dist/toolbar-color-picker.mjs.map +1 -0
  1554. package/dist/toolbar-pager.d.mts +17 -0
  1555. package/dist/toolbar-pager.d.mts.map +1 -0
  1556. package/dist/toolbar-pager.mjs +40 -0
  1557. package/dist/toolbar-pager.mjs.map +1 -0
  1558. package/dist/toolbar-stats.d.mts +34 -0
  1559. package/dist/toolbar-stats.d.mts.map +1 -0
  1560. package/dist/toolbar-stats.mjs +53 -0
  1561. package/dist/toolbar-stats.mjs.map +1 -0
  1562. package/dist/toolbar.d.mts +98 -0
  1563. package/dist/toolbar.d.mts.map +1 -0
  1564. package/dist/toolbar.mjs +86 -0
  1565. package/dist/toolbar.mjs.map +1 -0
  1566. package/dist/tooltip.d.mts +30 -0
  1567. package/dist/tooltip.d.mts.map +1 -0
  1568. package/dist/tooltip.mjs +83 -0
  1569. package/dist/tooltip.mjs.map +1 -0
  1570. package/dist/tree-list.d.mts +38 -0
  1571. package/dist/tree-list.d.mts.map +1 -0
  1572. package/dist/tree-list.mjs +95 -0
  1573. package/dist/tree-list.mjs.map +1 -0
  1574. package/dist/tree-row.d.mts +84 -0
  1575. package/dist/tree-row.d.mts.map +1 -0
  1576. package/dist/tree-row.mjs +150 -0
  1577. package/dist/tree-row.mjs.map +1 -0
  1578. package/dist/trend-chart.d.mts +28 -0
  1579. package/dist/trend-chart.d.mts.map +1 -0
  1580. package/dist/trend-chart.mjs +33 -0
  1581. package/dist/trend-chart.mjs.map +1 -0
  1582. package/dist/turn-timer.d.mts +23 -0
  1583. package/dist/turn-timer.d.mts.map +1 -0
  1584. package/dist/turn-timer.mjs +51 -0
  1585. package/dist/turn-timer.mjs.map +1 -0
  1586. package/dist/typeahead-item.d.mts +34 -0
  1587. package/dist/typeahead-item.d.mts.map +1 -0
  1588. package/dist/typeahead-item.mjs +74 -0
  1589. package/dist/typeahead-item.mjs.map +1 -0
  1590. package/dist/types/chat.d.mts +66 -0
  1591. package/dist/types/chat.d.mts.map +1 -0
  1592. package/dist/types/chat.mjs +1 -0
  1593. package/dist/types.d.mts +44 -0
  1594. package/dist/types.d.mts.map +1 -0
  1595. package/dist/types.mjs +49 -0
  1596. package/dist/types.mjs.map +1 -0
  1597. package/dist/typography.d.mts +17 -0
  1598. package/dist/typography.d.mts.map +1 -0
  1599. package/dist/typography.mjs +75 -0
  1600. package/dist/typography.mjs.map +1 -0
  1601. package/dist/use-debounced-value.d.mts +11 -0
  1602. package/dist/use-debounced-value.d.mts.map +1 -0
  1603. package/dist/use-debounced-value.mjs +25 -0
  1604. package/dist/use-debounced-value.mjs.map +1 -0
  1605. package/dist/use-document-dir.d.mts +15 -0
  1606. package/dist/use-document-dir.d.mts.map +1 -0
  1607. package/dist/use-document-dir.mjs +33 -0
  1608. package/dist/use-document-dir.mjs.map +1 -0
  1609. package/dist/use-persistent-state.d.mts +9 -0
  1610. package/dist/use-persistent-state.d.mts.map +1 -0
  1611. package/dist/use-persistent-state.mjs +29 -0
  1612. package/dist/use-persistent-state.mjs.map +1 -0
  1613. package/dist/use-toast.d.mts +47 -0
  1614. package/dist/use-toast.d.mts.map +1 -0
  1615. package/dist/use-toast.mjs +119 -0
  1616. package/dist/use-toast.mjs.map +1 -0
  1617. package/dist/vertical-zoom-tools.d.mts +27 -0
  1618. package/dist/vertical-zoom-tools.d.mts.map +1 -0
  1619. package/dist/vertical-zoom-tools.mjs +66 -0
  1620. package/dist/vertical-zoom-tools.mjs.map +1 -0
  1621. package/dist/view-tab-bar.d.mts +75 -0
  1622. package/dist/view-tab-bar.d.mts.map +1 -0
  1623. package/dist/view-tab-bar.mjs +80 -0
  1624. package/dist/view-tab-bar.mjs.map +1 -0
  1625. package/dist/viewer-toolbar.d.mts +41 -0
  1626. package/dist/viewer-toolbar.d.mts.map +1 -0
  1627. package/dist/viewer-toolbar.mjs +271 -0
  1628. package/dist/viewer-toolbar.mjs.map +1 -0
  1629. package/dist/violation-list.d.mts +26 -0
  1630. package/dist/violation-list.d.mts.map +1 -0
  1631. package/dist/violation-list.mjs +53 -0
  1632. package/dist/violation-list.mjs.map +1 -0
  1633. package/dist/walkthrough-modal.d.mts +12 -0
  1634. package/dist/walkthrough-modal.d.mts.map +1 -0
  1635. package/dist/walkthrough-modal.mjs +28 -0
  1636. package/dist/walkthrough-modal.mjs.map +1 -0
  1637. package/dist/walkthrough-tile.d.mts +17 -0
  1638. package/dist/walkthrough-tile.d.mts.map +1 -0
  1639. package/dist/walkthrough-tile.mjs +75 -0
  1640. package/dist/walkthrough-tile.mjs.map +1 -0
  1641. package/dist/week-selector.d.mts +45 -0
  1642. package/dist/week-selector.d.mts.map +1 -0
  1643. package/dist/week-selector.mjs +101 -0
  1644. package/dist/week-selector.mjs.map +1 -0
  1645. package/dist/widget-card.d.mts +18 -0
  1646. package/dist/widget-card.d.mts.map +1 -0
  1647. package/dist/widget-card.mjs +46 -0
  1648. package/dist/widget-card.mjs.map +1 -0
  1649. package/dist/wizard-dialog.d.mts +68 -0
  1650. package/dist/wizard-dialog.d.mts.map +1 -0
  1651. package/dist/wizard-dialog.mjs +108 -0
  1652. package/dist/wizard-dialog.mjs.map +1 -0
  1653. package/dist/work-item-card.d.mts +38 -0
  1654. package/dist/work-item-card.d.mts.map +1 -0
  1655. package/dist/work-item-card.mjs +231 -0
  1656. package/dist/work-item-card.mjs.map +1 -0
  1657. package/dist/worker-profile.d.mts +244 -0
  1658. package/dist/worker-profile.d.mts.map +1 -0
  1659. package/dist/worker-profile.mjs +621 -0
  1660. package/dist/worker-profile.mjs.map +1 -0
  1661. package/dist/zoom-tools.d.mts +29 -0
  1662. package/dist/zoom-tools.d.mts.map +1 -0
  1663. package/dist/zoom-tools.mjs +94 -0
  1664. package/dist/zoom-tools.mjs.map +1 -0
  1665. package/package.json +1792 -0
  1666. package/skills/core-ui-charts/SKILL.md +243 -0
  1667. package/skills/core-ui-chat/SKILL.md +260 -0
  1668. package/skills/core-ui-components/SKILL.md +299 -0
  1669. package/skills/core-ui-composition/SKILL.md +186 -0
  1670. package/skills/core-ui-data-table/SKILL.md +243 -0
  1671. package/skills/core-ui-forms/SKILL.md +289 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observations-map.mjs","names":[],"sources":["../src/observations-map.tsx"],"sourcesContent":["import {cn} from \"@corensystem/coren-utils\";\nimport {RotateCcw} from \"lucide-react\";\nimport mapboxgl from \"mapbox-gl\";\nimport \"mapbox-gl/dist/mapbox-gl.css\";\nimport * as React from \"react\";\n\nimport {FLOAT_SHADOW} from \"./float-shadow\";\nimport {MAPBOX_TOKEN} from \"./mapbox-token\";\nimport {TimeScrubber, type TimeScrubberProps} from \"./time-scrubber\";\n\nconst BLUEPRINT_SOURCE_ID = \"observations-blueprint\";\nconst BLUEPRINT_LAYER_ID = \"observations-blueprint-raster\";\nconst FOOTPRINT_SOURCE_ID = \"observations-blueprint-footprint\";\nconst FOOTPRINT_FILL_ID = \"observations-blueprint-footprint-fill\";\nconst FOOTPRINT_LINE_ID = \"observations-blueprint-footprint-line\";\nconst ZONES_SOURCE_ID = \"observations-zones\";\nconst ZONES_FILL_ID = \"observations-zones-fill\";\nconst ZONES_LABEL_ID = \"observations-zones-label\";\nconst ZONES_SELECTED_ID = \"observations-zones-selected\";\nconst COVERAGE_SOURCE_ID = \"observations-coverage\";\nconst COVERAGE_FILL_ID = \"observations-coverage-fill\";\nconst COVERAGE_LINE_ID = \"observations-coverage-line\";\nconst TRACK_SOURCE_ID = \"observations-track\";\nconst TRACK_CORRIDOR_ID = \"observations-track-corridor\";\nconst TRACK_LINE_ID = \"observations-track-line\";\nconst TRACK_DISC_SOURCE_ID = \"observations-track-disc\";\nconst TRACK_DISC_FILL_ID = \"observations-track-disc-fill\";\nconst TRACK_DISC_LINE_ID = \"observations-track-disc-line\";\n/**\n * Emphasis while a zone selection is live: the selected zone is lifted and everything else fades back.\n * The fade is deliberately strong — the point is that the selection stands alone — but stops short of\n * zero so the surrounding geometry is still faintly readable.\n */\nconst ZONE_SELECTED_FILL_BOOST = 2;\nconst ZONE_SELECTED_FILL_MAX = 0.6;\nconst ZONE_UNSELECTED_FILL_DIM = 0.25;\nconst ZONE_UNSELECTED_LABEL_DIM = 0.2;\n/** Fade duration in ms, so selecting reads as a fade rather than a snap. */\nconst ZONE_FADE_MS = 350;\n\n/** A `[longitude, latitude]` pair, in the order Mapbox expects. */\nexport type LngLat = [number, number];\n\n/**\n * The four georeferenced corners of a blueprint, in Mapbox image-source order:\n * `[top-left, top-right, bottom-right, bottom-left]` — i.e. clockwise from the\n * north-west corner. Mapbox is strict about this order; a rotated array renders\n * the plan flipped or sheared.\n */\nexport type BlueprintCorners = [LngLat, LngLat, LngLat, LngLat];\n\n/**\n * Corners of the default site blueprint (Eastern Province, KSA), already\n * normalized into Mapbox order: NW, NE, SE, SW.\n */\nconst DEFAULT_BLUEPRINT_CORNERS: BlueprintCorners = [\n\t[49.592229, 26.883951], // top-left / NW\n\t[49.805313, 26.885901], // top-right / NE\n\t[49.8069796, 26.7313363], // bottom-right / SE\n\t[49.5941116, 26.729402], // bottom-left / SW\n];\n\nexport interface MapZone {\n\t/** Stable identity — passed back on select. */\n\tid: string | number;\n\t/** Label drawn at the zone's centre. Omit to render the polygon unlabelled. */\n\tname?: string;\n\t/**\n\t * Ring of `[longitude, latitude]` points. The ring may repeat its first point at the end, and may\n\t * carry consecutive duplicates — both are tolerated and cleaned up before drawing.\n\t */\n\tcoordinates: LngLat[];\n\t/** Fill and outline colour, any CSS colour. Default `#f97316`. */\n\tcolor?: string;\n\t/** Draw the heavier outline used for restricted areas. Default false. */\n\trestricted?: boolean;\n}\n\nexport interface Observation {\n\t/** Stable identity — used as the React key and passed back on select. */\n\tid: string;\n\t/** Where the observation sits, as `[longitude, latitude]`. */\n\tcoordinates: LngLat;\n\t/** Popup title. Omit to render a marker with no popup. */\n\tlabel?: string;\n\t/** Secondary popup line, e.g. the trade or the reporter. */\n\tdescription?: string;\n\t/** Marker fill. Default `#f97316` (Core orange). */\n\tcolor?: string;\n}\n\n/**\n * Filled hazard mark, built from lucide's `triangle-alert` outline. Lucide ships outline-only, so the\n * solid variant is authored here: the body takes the glyph fill (white) and the exclamation is knocked\n * back out in `currentColor`, which {@link badgeElement} sets to the badge's own colour.\n *\n * Markers are plain DOM — mounting a React root per pin would cost hundreds of roots on a busy day —\n * so glyphs ship as markup rather than components.\n */\nconst HAZARD_ICON =\n\t'<path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/>' +\n\t'<rect x=\"11\" y=\"9\" width=\"2\" height=\"5.4\" rx=\"1\" fill=\"currentColor\"/>' +\n\t'<circle cx=\"12\" cy=\"17.4\" r=\"1.15\" fill=\"currentColor\"/>';\n\n/**\n * Filled video camera, built from lucide's `video` outline — a body and a lens barrel that both close\n * cleanly, with the lens knocked out in `currentColor`. Reads as a live feed rather than a stills\n * camera, which is what these actually are.\n */\nconst CAMERA_ICON =\n\t'<rect x=\"2\" y=\"6\" width=\"14\" height=\"12\" rx=\"2.5\"/>' +\n\t'<path d=\"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5z\"/>' +\n\t'<circle cx=\"9\" cy=\"12\" r=\"2.6\" fill=\"currentColor\"/>';\n\n/**\n * Filled guard mark, built from lucide's `shield-user`: a shield body that fills, with the head and\n * shoulders knocked back out in `currentColor`.\n */\nconst RESPONDER_ICON =\n\t'<path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"/>' +\n\t'<circle cx=\"12\" cy=\"10.2\" r=\"2.9\" fill=\"currentColor\"/>' +\n\t'<path d=\"M6.9 18.5a5.6 5.6 0 0 1 10.2 0\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"/>';\n\nexport {HAZARD_ICON, CAMERA_ICON, RESPONDER_ICON};\n\nexport interface MapResponder {\n\t/** Stable identity — passed back on select. */\n\tid: string | number;\n\t/** Where the responder is, as `[longitude, latitude]`. */\n\tcoordinates: LngLat;\n\t/** Responder name, used for the marker tooltip. */\n\tname?: string;\n\t/** Marks them as on shift; offline responders draw at reduced strength. */\n\tonline?: boolean;\n\t/** Badge body colour. Default `#2f6b63` — distinct from cameras and from every status. */\n\tcolor?: string;\n}\n\nexport interface MapCamera {\n\t/** Stable identity — passed back on select. */\n\tid: string | number;\n\t/** Where the camera sits, as `[longitude, latitude]`. */\n\tcoordinates: LngLat;\n\t/** Camera name, used for the tooltip and popup title. */\n\tname?: string;\n\t/**\n\t * Violations attributed to this camera. Rendered as an always-on count badge, the way an alert icon\n\t * carries its notification number — one camera commonly accounts for many violations.\n\t */\n\tviolations?: number;\n\t/** Badge body colour. Default `#3d4a5c` — a muted slate-blue that sits back rather than competing with the violations. */\n\tcolor?: string;\n}\n\nexport interface ObservationsMapProps extends React.HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * URL of the blueprint image to drape over the map. Until one is supplied the\n\t * component draws the footprint outline from `corners` so the placement is\n\t * still verifiable.\n\t */\n\tblueprintUrl?: string;\n\t/** Georeferenced corners of the blueprint. Default: the built-in site corners. */\n\tcorners?: BlueprintCorners;\n\t/** Blueprint opacity, 0–1. Default `0.85`. */\n\tblueprintOpacity?: number;\n\t/** Toggle the blueprint (and its footprint) without tearing the map down. Default `true`. */\n\tshowBlueprint?: boolean;\n\t/** Zone polygons drawn over the blueprint, each in its own colour. */\n\tzones?: MapZone[];\n\t/** Toggle the zone polygons without tearing the map down. Default `true`. */\n\tshowZones?: boolean;\n\t/** Zone fill opacity, 0–1. Default `0.3`. */\n\tzoneOpacity?: number;\n\t/** Draw each zone's `name` at its centre. Default `true`. */\n\tshowZoneLabels?: boolean;\n\t/**\n\t * How zones are coloured. `payload` uses each zone's own `color`; `neutral` replaces them with a\n\t * quiet grey ramp, so the only meaningful colour on the map is the observation status. Default\n\t * `payload`.\n\t */\n\tzoneColorMode?: \"payload\" | \"neutral\";\n\t/** Fires when a zone polygon is clicked. */\n\tonZoneSelect?: (zone: MapZone) => void;\n\t/**\n\t * Zones to treat as selected: the map flies to fit them, and they get a marching-ants outline so the\n\t * selection is legible even when every other zone is still drawn for context. Empty or omitted\n\t * leaves the view alone.\n\t */\n\tselectedZoneIds?: (string | number)[];\n\t/** Pixel padding used when flying to the selection. Default `80`. */\n\tselectionPadding?: number;\n\t/**\n\t * Show a control that returns the camera to the view the map opened on, appearing only once the\n\t * view has actually moved. Default `true`.\n\t */\n\tshowResetView?: boolean;\n\t/** Label on the reset control. Default \"Reset view\". */\n\tresetViewLabel?: string;\n\t/**\n\t * Width of the reset control in px, matched to a collapsed `MapControlPanel` so the row of floating\n\t * controls reads as one set of modules. Default `160`.\n\t */\n\tresetViewWidth?: number;\n\t/** Observations to pin on top of the blueprint. */\n\tobservations?: Observation[];\n\t/** Fires when a marker is clicked. */\n\tonObservationSelect?: (observation: Observation) => void;\n\t/**\n\t * Inner SVG markup for the glyph inside each observation marker, drawn on a 24x24 viewBox. Paths\n\t * inherit a white fill; use `currentColor` for detail that should read as knocked out of the badge.\n\t * Defaults to a filled hazard mark — the sign for a safety violation.\n\t */\n\tobservationIcon?: string;\n\t/** Marker badge size in px. Default `20`. */\n\tobservationMarkerSize?: number;\n\t/** Cameras pinned on the map, each showing its violation count. */\n\tcameras?: MapCamera[];\n\t/** Toggle the camera markers. Default `true`. */\n\tshowCameras?: boolean;\n\t/** Fires when a camera marker is clicked. */\n\tonCameraSelect?: (camera: MapCamera) => void;\n\t/** Inner SVG markup for the camera glyph, same contract as `observationIcon`. Defaults to a filled camera. */\n\tcameraIcon?: string;\n\t/** Camera badge size in px. Default `20`, matching an observation — shape, not size, distinguishes them. */\n\tcameraMarkerSize?: number;\n\t/** Safety responders pinned on the map. */\n\tresponders?: MapResponder[];\n\t/** Toggle the responder markers. Default `true`. */\n\tshowResponders?: boolean;\n\t/** Fires when a responder marker is clicked. */\n\tonResponderSelect?: (responder: MapResponder) => void;\n\t/** Inner SVG markup for the responder glyph. Defaults to a filled guard mark. */\n\tresponderIcon?: string;\n\t/** Responder badge size in px. Default `20`, matching the others. */\n\tresponderMarkerSize?: number;\n\t/**\n\t * A coverage radius drawn around a point — the area a selected responder covers. Given in metres, so\n\t * it stays true on the ground as the map zooms.\n\t */\n\tcoverage?: {center: LngLat; radiusMeters: number; color?: string};\n\t/**\n\t * A responder's path through the selected window, as one segment per unbroken run of contact. Drawn\n\t * as a thin line wrapped in a corridor of `radiusMeters` — the ground they could reach along it. A\n\t * moving responder has no single coverage circle, so the corridor is the honest answer.\n\t *\n\t * Segments rather than one path because contact drops: joining the last point before a gap to the\n\t * first point after it would draw a walk that may never have happened, and would claim coverage over\n\t * ground nobody was on. A gap is drawn as a gap.\n\t */\n\ttrack?: {segments: LngLat[][]; radiusMeters?: number; color?: string};\n\t/**\n\t * Ids to keep at full strength — everything else on the map fades back. Use it to focus a selection:\n\t * pass the selected observation, or a camera together with the violations it caught. Empty or\n\t * omitted dims nothing.\n\t */\n\tfocusedIds?: (string | number)[];\n\t/** Opacity applied to everything outside `focusedIds`. Default `0.2`. */\n\tdimOpacity?: number;\n\t/**\n\t * Card shown while a marker is hovered. The widget tracks what is under the cursor and places the\n\t * card above it; the caller only supplies its content, so each kind of marker can say something\n\t * different. Return null to show nothing for that kind.\n\t */\n\trenderHoverCard?: (hovered: {kind: \"observation\" | \"camera\" | \"responder\"; id: string | number}) => React.ReactNode;\n\t/**\n\t * Fires when the map itself is clicked rather than a marker — the \"clicked outside\" signal for a\n\t * floating panel. Marker clicks never reach the canvas, so they do not trigger it.\n\t */\n\tonBackgroundClick?: () => void;\n\t/**\n\t * Fires as the camera moves, with the values needed to restore this exact view: `center`, `zoom`,\n\t * `bearing` (right-drag rotates) and `pitch` (right-drag up/down tilts). Feed them back as\n\t * `center` / `zoom` / `bearing` / `pitch` to open on a chosen framing.\n\t */\n\tonViewChange?: (view: {center: [number, number]; zoom: number; bearing: number; pitch: number}) => void;\n\t/** Initial bearing in degrees. Default `0`. */\n\tbearing?: number;\n\t/** Initial pitch in degrees, 0–85. Default `0`. */\n\tpitch?: number;\n\t/**\n\t * What to frame on first load, ignoring `center` / `zoom`. `\"zones\"` is usually what you want when\n\t * zones cover a small part of a large site — the blueprint footprint here is ~21km across while its\n\t * zones sit inside ~2km of it, so framing the footprint renders them near-invisible. Falls back to\n\t * the blueprint when there are no zones. Default `\"blueprint\"`.\n\t */\n\tfitTo?: \"blueprint\" | \"zones\" | \"none\";\n\t/** Pixel padding used when fitting to the blueprint. Default `40`. */\n\tfitPadding?: number;\n\t/** Initial center, used only when `fitToBlueprint` is false. */\n\tcenter?: LngLat;\n\t/** Initial zoom, used only when `fitToBlueprint` is false. */\n\tzoom?: number;\n\t/** Mapbox style URL. Default satellite streets — a site plan reads best over imagery. */\n\tmapStyle?: string;\n\t/**\n\t * Fill the parent's height instead of the default 500px. The parent must be height-constrained\n\t * (e.g. a `h-dvh` flex column) — `height: 100%` of an auto-height parent collapses to nothing.\n\t */\n\tfullHeight?: boolean;\n\t/**\n\t * Floating content in the bottom-right corner — typically a `MapLegend`. It sits above the timeline\n\t * by default; set `legendInline` once the timeline is collapsed and narrow enough to share the row.\n\t */\n\tlegend?: React.ReactNode;\n\t/** Place the legend on the timeline's own row rather than above it. Default false. */\n\tlegendInline?: boolean;\n\t/**\n\t * Floating content pinned to the map's top-left corner — typically a `MapControlPanel`. The widget\n\t * owns only the placement; the controls stay in the caller's hands.\n\t */\n\tcontrols?: React.ReactNode;\n\t/**\n\t * Floating content pinned to the map's top-right corner — typically an `ObservationDetailPanel`\n\t * for whichever observation is selected. Sized by the content, so give it a fixed width.\n\t */\n\tdetail?: React.ReactNode;\n\t/**\n\t * Float a {@link TimeScrubber} along the bottom of the map. Pass the scrubber's own props — the\n\t * widget only owns the placement, so the timeline behaves exactly as it does elsewhere. Filtering\n\t * `observations` by the cursor time is the caller's job; the map just renders what it is handed.\n\t */\n\ttimeline?: TimeScrubberProps;\n\tstyle?: React.CSSProperties;\n}\n\nfunction boundsOf(corners: BlueprintCorners) {\n\treturn corners.reduce((bounds, corner) => bounds.extend(corner), new mapboxgl.LngLatBounds(corners[0], corners[0]));\n}\n\n/**\n * Turn a raw ring into one GeoJSON is willing to draw: drop consecutive duplicate points (the spaces\n * API repeats the closing point two or three times on some zones), then close the ring explicitly.\n * Returns null for anything that can't form a triangle.\n */\n/** Mapbox filter matching only the selected zones; `false` when nothing is selected. */\nfunction selectionFilter(ids: (string | number)[] | undefined): mapboxgl.FilterSpecification {\n\tif (!ids || ids.length === 0) return [\"==\", [\"literal\", 1], [\"literal\", 0]];\n\treturn [\"in\", [\"get\", \"zoneId\"], [\"literal\", ids.map(String)]];\n}\n\n/**\n * The marching-ants dash cycle. A dash array cannot be interpolated, so the motion comes from stepping\n * through pre-computed patterns — and it has to be the *full* fourteen-step cycle: the first seven\n * only slide the dash halfway, so stopping there snaps back to the start and reads as a stutter rather\n * than travel. Step fourteen lands exactly where step one begins, so the loop is seamless.\n */\nconst ANT_DASHES: number[][] = [\n\t[0, 4, 3],\n\t[0.5, 4, 2.5],\n\t[1, 4, 2],\n\t[1.5, 4, 1.5],\n\t[2, 4, 1],\n\t[2.5, 4, 0.5],\n\t[3, 4, 0],\n\t[0, 0.5, 3, 3.5],\n\t[0, 1, 3, 3],\n\t[0, 1.5, 3, 2.5],\n\t[0, 2, 3, 2],\n\t[0, 2.5, 3, 1.5],\n\t[0, 3, 3, 1],\n\t[0, 3.5, 3, 0.5],\n];\n\n/**\n * A circle of `radiusMeters` around `center`, as a polygon. Longitude degrees shrink with latitude, so\n * the x radius is divided by cos(lat) — skip that and the circle reads as an ellipse away from the\n * equator.\n */\n/**\n * Ground metres per screen pixel at a given zoom and latitude. Mapbox GL tiles are 512px, so the\n * constant is the equator's circumference over 512 — not the 256px figure quoted in most Web Mercator\n * references, which yields double the true scale and a corridor half the width it should be.\n */\nfunction metresPerPixel(latitude: number, zoom: number) {\n\treturn (78271.516964 * Math.cos((latitude * Math.PI) / 180)) / 2 ** zoom;\n}\n\nfunction circlePolygon(center: LngLat, radiusMeters: number, steps = 72): GeoJSON.Feature<GeoJSON.Polygon> {\n\tconst [lng, lat] = center;\n\tconst dLat = radiusMeters / 110574;\n\tconst dLng = radiusMeters / (111320 * Math.cos((lat * Math.PI) / 180));\n\tconst ring: [number, number][] = [];\n\tfor (let i = 0; i <= steps; i++) {\n\t\tconst angle = (i / steps) * Math.PI * 2;\n\t\tring.push([lng + dLng * Math.cos(angle), lat + dLat * Math.sin(angle)]);\n\t}\n\treturn {type: \"Feature\", properties: {}, geometry: {type: \"Polygon\", coordinates: [ring]}};\n}\n\nfunction zonesBounds(zones: MapZone[]) {\n\tlet bounds: mapboxgl.LngLatBounds | null = null;\n\tfor (const zone of zones) {\n\t\tfor (const point of zone.coordinates) {\n\t\t\tbounds = bounds ? bounds.extend(point) : new mapboxgl.LngLatBounds(point, point);\n\t\t}\n\t}\n\treturn bounds;\n}\n\nfunction cleanRing(points: LngLat[]): LngLat[] | null {\n\tconst ring: LngLat[] = [];\n\tfor (const point of points) {\n\t\tconst last = ring[ring.length - 1];\n\t\tif (!last || last[0] !== point[0] || last[1] !== point[1]) ring.push(point);\n\t}\n\t// A closed ring's repeated last point is not a distinct vertex.\n\tconst first = ring[0];\n\tconst last = ring[ring.length - 1];\n\tif (ring.length > 1 && first[0] === last[0] && first[1] === last[1]) ring.pop();\n\tif (ring.length < 3) return null;\n\treturn [...ring, ring[0]];\n}\n\n/**\n * Neutral ramp for `zoneColorMode: \"neutral\"`. Several tones rather than one grey: 90 zones overlap\n * heavily, and a single fill would merge them into one shape. These stay quiet enough that the status\n * colours on the markers remain the only thing on the map that means something.\n */\nconst NEUTRAL_ZONE_COLORS = [\"#64748b\", \"#94a3b8\", \"#78716c\", \"#a8a29e\", \"#71717a\", \"#8b8b8b\"];\n\nfunction zonesData(zones: MapZone[], neutral: boolean): GeoJSON.FeatureCollection<GeoJSON.Polygon> {\n\tconst features: GeoJSON.Feature<GeoJSON.Polygon>[] = [];\n\tfor (const [index, zone] of zones.entries()) {\n\t\tconst ring = cleanRing(zone.coordinates);\n\t\tif (!ring) continue;\n\t\tconst color = neutral ? NEUTRAL_ZONE_COLORS[index % NEUTRAL_ZONE_COLORS.length] : (zone.color ?? \"#f97316\");\n\t\tfeatures.push({\n\t\t\ttype: \"Feature\",\n\t\t\tid: typeof zone.id === \"number\" ? zone.id : undefined,\n\t\t\tproperties: {\n\t\t\t\tzoneId: String(zone.id),\n\t\t\t\tname: zone.name ?? \"\",\n\t\t\t\tcolor,\n\t\t\t\trestricted: zone.restricted === true,\n\t\t\t},\n\t\t\tgeometry: {type: \"Polygon\", coordinates: [ring]},\n\t\t});\n\t}\n\treturn {type: \"FeatureCollection\", features};\n}\n\n/**\n * The shared marker chrome: a rounded-square badge with a light ring, a soft shadow and a centred\n * glyph. Plain DOM on purpose — a busy day puts hundreds of these on the map, and a React root each\n * would be untenable.\n */\nfunction badgeElement(size: number, color: string, icon: string, round = false) {\n\tconst element = document.createElement(\"div\");\n\t// Ring scales with the badge, floored so it stays visible on a small marker.\n\tconst ring = Math.max(1.5, Math.round(size * 0.06 * 2) / 2);\n\t// No `position` here: mapbox-gl.css positions `.mapboxgl-marker` absolutely, and an inline\n\t// `position:relative` would override it and drop every marker into normal document flow. The\n\t// count badge below anchors against that mapbox-owned positioning instead.\n\telement.style.cssText = [\n\t\t`width:${size}px`,\n\t\t`height:${size}px`,\n\t\t`border-radius:${round ? \"50%\" : `${Math.round(size * 0.3)}px`}`,\n\t\t`background:${color}`,\n\t\t`border:${ring}px solid rgba(255,255,255,0.92)`,\n\t\t\"box-shadow:0 1px 4px rgba(0,0,0,0.35)\",\n\t\t\"display:flex\",\n\t\t\"align-items:center\",\n\t\t\"justify-content:center\",\n\t\t\"cursor:pointer\",\n\t\t\"box-sizing:border-box\",\n\t\t// Knockouts inside the glyph read as holes: `currentColor` resolves to the badge body.\n\t\t`color:${color}`,\n\t].join(\";\");\n\tconst glyph = Math.round(size * 0.58);\n\telement.innerHTML =\n\t\t`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${glyph}\" height=\"${glyph}\" viewBox=\"0 0 24 24\" ` +\n\t\t`fill=\"#fff\" stroke=\"none\" aria-hidden=\"true\">${icon}</svg>`;\n\treturn element;\n}\n\n/**\n * Notification-style count, pinned to the badge's top-right corner and always visible. Neutral rather\n * than alarm-coloured: the number says how many, not how bad — severity is the observation markers'\n * job. A single digit gets a true circle; longer counts widen into a pill.\n */\nfunction countBadge(count: number, size: number) {\n\tconst badge = document.createElement(\"span\");\n\tconst text = count > 99 ? \"99+\" : String(count);\n\tbadge.textContent = text;\n\tconst single = text.length === 1;\n\t// Everything scales off the badge it sits on — a fixed 16px chip swamps a 20px marker.\n\tconst box = Math.max(10, Math.round(size * 0.55));\n\tconst font = Math.max(8, Math.round(size * 0.42));\n\tconst offset = Math.round(size * 0.22);\n\tconst ring = Math.max(1, Math.round(size * 0.06 * 2) / 2);\n\tbadge.style.cssText = [\n\t\t\"position:absolute\",\n\t\t`top:-${offset}px`,\n\t\t`right:-${offset}px`,\n\t\t`height:${box}px`,\n\t\tsingle ? `width:${box}px` : `min-width:${box}px`,\n\t\tsingle ? \"padding:0\" : `padding:0 ${Math.round(box * 0.28)}px`,\n\t\t\"border-radius:999px\",\n\t\t\"background:#f8fafc\",\n\t\t\"color:#0f172a\",\n\t\t`font:600 ${font}px/${box}px ui-sans-serif,system-ui,sans-serif`,\n\t\t\"text-align:center\",\n\t\t`border:${ring}px solid rgba(15,23,42,0.25)`,\n\t\t\"box-sizing:content-box\",\n\t\t\"pointer-events:none\",\n\t].join(\";\");\n\treturn badge;\n}\n\nfunction footprintData(corners: BlueprintCorners): GeoJSON.Feature<GeoJSON.Polygon> {\n\treturn {\n\t\ttype: \"Feature\",\n\t\tproperties: {},\n\t\tgeometry: {type: \"Polygon\", coordinates: [[...corners, corners[0]]]},\n\t};\n}\n\n/**\n * Mapbox map that drapes a georeferenced blueprint over the basemap and pins observations on top of\n * it. The blueprint is an image source anchored by its four corners, so it stays locked to the ground\n * as the map pans and zooms. Pass `blueprintUrl` once the plan image exists; until then the component\n * renders the footprint outline so the corner coordinates can be checked against the basemap.\n */\nconst ObservationsMap = React.forwardRef<HTMLDivElement, ObservationsMapProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tblueprintUrl,\n\t\t\tcorners = DEFAULT_BLUEPRINT_CORNERS,\n\t\t\tblueprintOpacity = 0.85,\n\t\t\tshowBlueprint = true,\n\t\t\tzones = [],\n\t\t\tshowZones = true,\n\t\t\tzoneOpacity = 0.3,\n\t\t\tshowZoneLabels = true,\n\t\t\tzoneColorMode = \"payload\",\n\t\t\tonZoneSelect,\n\t\t\tselectedZoneIds,\n\t\t\tselectionPadding = 80,\n\t\t\tshowResetView = true,\n\t\t\tresetViewLabel = \"Reset view\",\n\t\t\tresetViewWidth = 160,\n\t\t\tobservations = [],\n\t\t\tonObservationSelect,\n\t\t\tobservationIcon = HAZARD_ICON,\n\t\t\tobservationMarkerSize = 20,\n\t\t\tcameras = [],\n\t\t\tshowCameras = true,\n\t\t\tonCameraSelect,\n\t\t\tcameraIcon = CAMERA_ICON,\n\t\t\tcameraMarkerSize = 20,\n\t\t\tresponders = [],\n\t\t\tshowResponders = true,\n\t\t\tonResponderSelect,\n\t\t\tresponderIcon = RESPONDER_ICON,\n\t\t\tresponderMarkerSize = 20,\n\t\t\tcoverage,\n\t\t\ttrack,\n\t\t\tfocusedIds,\n\t\t\tdimOpacity = 0.2,\n\t\t\trenderHoverCard,\n\t\t\tonBackgroundClick,\n\t\t\tonViewChange,\n\t\t\tbearing = 0,\n\t\t\tpitch = 0,\n\t\t\tfitTo = \"blueprint\",\n\t\t\tfitPadding = 40,\n\t\t\tcenter,\n\t\t\tzoom = 13,\n\t\t\tmapStyle = \"mapbox://styles/mapbox/satellite-streets-v12\",\n\t\t\tfullHeight = false,\n\t\t\tcontrols,\n\t\t\tlegend,\n\t\t\tlegendInline = false,\n\t\t\tdetail,\n\t\t\ttimeline,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst rootRef = React.useRef<HTMLDivElement>(null);\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\t\tconst mapRef = React.useRef<mapboxgl.Map | null>(null);\n\t\tconst markersRef = React.useRef<{id: string | number; marker: mapboxgl.Marker}[]>([]);\n\t\tconst cameraMarkersRef = React.useRef<{id: string | number; marker: mapboxgl.Marker}[]>([]);\n\t\tconst responderMarkersRef = React.useRef<{id: string | number; marker: mapboxgl.Marker; at: LngLat}[]>([]);\n\t\t// The view the map opened on — where a cleared selection flies back to.\n\t\tconst homeViewRef = React.useRef<{center: mapboxgl.LngLat; zoom: number; bearing: number; pitch: number} | null>(\n\t\t\tnull,\n\t\t);\n\t\t// Selection size on the previous render, so \"cleared\" can be told apart from \"never had one\".\n\t\tconst hadSelectionRef = React.useRef(false);\n\t\t// What the cursor is over, and where on screen to put its card.\n\t\tconst [hovered, setHovered] = React.useState<{\n\t\t\tkind: \"observation\" | \"camera\" | \"responder\";\n\t\t\tid: string | number;\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t} | null>(null);\n\n\t\t// Whether the camera has left the view it opened on — drives the reset control.\n\t\tconst [viewMoved, setViewMoved] = React.useState(false);\n\n\t\t// Latest props, so the map callbacks below never close over a stale render.\n\t\tconst latest = React.useRef({\n\t\t\tblueprintUrl,\n\t\t\tcorners,\n\t\t\tblueprintOpacity,\n\t\t\tshowBlueprint,\n\t\t\tzones,\n\t\t\tshowZones,\n\t\t\tzoneOpacity,\n\t\t\tshowZoneLabels,\n\t\t\tzoneColorMode,\n\t\t\tonZoneSelect,\n\t\t\tselectedZoneIds,\n\t\t\tfocusedIds,\n\t\t\tdimOpacity,\n\t\t\tonBackgroundClick,\n\t\t\tonViewChange,\n\t\t\tresponderMarkerSize,\n\t\t\tcoverage,\n\t\t\ttrack,\n\t\t});\n\t\tlatest.current = {\n\t\t\tblueprintUrl,\n\t\t\tcorners,\n\t\t\tblueprintOpacity,\n\t\t\tshowBlueprint,\n\t\t\tzones,\n\t\t\tshowZones,\n\t\t\tzoneOpacity,\n\t\t\tshowZoneLabels,\n\t\t\tzoneColorMode,\n\t\t\tonZoneSelect,\n\t\t\tselectedZoneIds,\n\t\t\tfocusedIds,\n\t\t\tdimOpacity,\n\t\t\tonBackgroundClick,\n\t\t\tonViewChange,\n\t\t\tresponderMarkerSize,\n\t\t\tcoverage,\n\t\t\ttrack,\n\t\t};\n\n\t\tReact.useImperativeHandle(ref, () => rootRef.current!);\n\n\t\t/**\n\t\t * Fade everything outside `focusedIds` — markers via their own element opacity, layers via their\n\t\t * paint properties. Applied after every marker/layer rebuild as well as on focus changes, since\n\t\t * a rebuild produces fresh elements that know nothing about the current selection.\n\t\t */\n\t\tconst applyFocus = React.useCallback(() => {\n\t\t\tconst {focusedIds: focus, dimOpacity: dim, zoneOpacity: zoneFill, blueprintOpacity: bp} = latest.current;\n\t\t\tconst focused = focus && focus.length > 0 ? new Set(focus.map(String)) : null;\n\t\t\tconst factor = focused ? dim : 1;\n\n\t\t\tfor (const {id, marker} of [...markersRef.current, ...cameraMarkersRef.current, ...responderMarkersRef.current]) {\n\t\t\t\tconst lit = !focused || focused.has(String(id));\n\t\t\t\tconst element = marker.getElement();\n\t\t\t\t// Fade with `filter`, not `opacity`: mapbox-gl writes `style.opacity` on every render frame\n\t\t\t\t// for terrain occlusion, so anything set there is clobbered within a frame.\n\t\t\t\telement.style.filter = lit ? \"\" : `opacity(${dim})`;\n\t\t\t\t// A faded marker should not intercept clicks meant for what is still in focus.\n\t\t\t\telement.style.pointerEvents = lit ? \"\" : \"none\";\n\t\t\t}\n\n\t\t\tconst map = mapRef.current;\n\t\t\t// No isStyleLoaded() guard here: with a live style it stays false for long stretches while tiles\n\t\t\t// load, which silently skipped every layer update below. Each setPaintProperty is already\n\t\t\t// guarded by its own getLayer check, which is the condition that actually matters.\n\t\t\tif (!map) return;\n\n\t\t\t// With a zone selection live, the unselected zones fade back so the chosen ones carry the view.\n\t\t\t// Data-driven rather than a whole-layer opacity, since it has to differ per feature.\n\t\t\tconst selected = latest.current.selectedZoneIds;\n\t\t\tconst hasSelection = selected != null && selected.length > 0;\n\t\t\tconst zoneDim = (lit: number, dim: number) =>\n\t\t\t\thasSelection ? ([\"case\", selectionFilter(selected), lit, lit * dim] as unknown as number) : lit;\n\n\t\t\tif (map.getLayer(ZONES_FILL_ID)) {\n\t\t\t\tconst lit = zoneFill * factor;\n\t\t\t\tmap.setPaintProperty(ZONES_FILL_ID, \"fill-opacity-transition\", {duration: ZONE_FADE_MS, delay: 0});\n\t\t\t\tmap.setPaintProperty(\n\t\t\t\t\tZONES_FILL_ID,\n\t\t\t\t\t\"fill-opacity\",\n\t\t\t\t\thasSelection\n\t\t\t\t\t\t? ([\n\t\t\t\t\t\t\t\t\"case\",\n\t\t\t\t\t\t\t\tselectionFilter(selected),\n\t\t\t\t\t\t\t\tMath.min(lit * ZONE_SELECTED_FILL_BOOST, ZONE_SELECTED_FILL_MAX),\n\t\t\t\t\t\t\t\tlit * ZONE_UNSELECTED_FILL_DIM,\n\t\t\t\t\t\t\t] as unknown as number)\n\t\t\t\t\t\t: lit,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (map.getLayer(ZONES_LABEL_ID)) {\n\t\t\t\tmap.setPaintProperty(ZONES_LABEL_ID, \"text-opacity-transition\", {duration: ZONE_FADE_MS, delay: 0});\n\t\t\t\tmap.setPaintProperty(ZONES_LABEL_ID, \"text-opacity\", zoneDim(factor, ZONE_UNSELECTED_LABEL_DIM));\n\t\t\t}\n\t\t\tif (map.getLayer(BLUEPRINT_LAYER_ID)) map.setPaintProperty(BLUEPRINT_LAYER_ID, \"raster-opacity\", bp * factor);\n\t\t\tif (map.getLayer(FOOTPRINT_FILL_ID)) map.setPaintProperty(FOOTPRINT_FILL_ID, \"fill-opacity\", 0.12 * factor);\n\t\t\tif (map.getLayer(FOOTPRINT_LINE_ID)) map.setPaintProperty(FOOTPRINT_LINE_ID, \"line-opacity\", factor);\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tapplyFocus();\n\t\t}, [focusedIds, dimOpacity, applyFocus]);\n\n\t\t/**\n\t\t * Cameras and responders are both posted to places rather than events, so they routinely share a\n\t\t * coordinate — and one badge then sits exactly on the other, leaving the lower one unclickable.\n\t\t * Nudge the responder clear when that happens.\n\t\t *\n\t\t * The test is in pixels, not degrees: badges are a fixed pixel size, so a geographic offset that\n\t\t * separates them at site zoom leaves them overlapping when zoomed out. Re-run on zoom for the\n\t\t * same reason.\n\t\t */\n\t\t/**\n\t\t * The corridor is a stroked line, so its width is in pixels — recomputed from metres at the\n\t\t * current zoom and latitude, and re-applied on zoom so the ground it covers stays constant.\n\t\t */\n\t\tconst corridorWidth = React.useCallback(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tconst spread = latest.current.track;\n\t\t\tif (!map || !spread) return 0;\n\t\t\tconst radius = spread.radiusMeters ?? 0;\n\t\t\treturn (radius * 2) / metresPerPixel(map.getCenter().lat, map.getZoom());\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\t\t\tconst resize = () => {\n\t\t\t\tif (map.getLayer(TRACK_CORRIDOR_ID)) map.setPaintProperty(TRACK_CORRIDOR_ID, \"line-width\", corridorWidth());\n\t\t\t};\n\t\t\tresize();\n\t\t\tmap.on(\"zoom\", resize);\n\t\t\treturn () => {\n\t\t\t\tmap.off(\"zoom\", resize);\n\t\t\t};\n\t\t}, [corridorWidth, track]);\n\n\t\t/**\n\t\t * Wire hover on a marker. The point is taken once, in the map root's own coordinates — the card is\n\t\t * dismissed by leaving the marker, so it never needs to track a moving map.\n\t\t */\n\t\tconst bindHover = React.useCallback(\n\t\t\t(element: HTMLElement, kind: \"observation\" | \"camera\" | \"responder\", id: string | number) => {\n\t\t\t\telement.addEventListener(\"mouseenter\", () => {\n\t\t\t\t\tconst root = rootRef.current;\n\t\t\t\t\tif (!root) return;\n\t\t\t\t\tconst marker = element.getBoundingClientRect();\n\t\t\t\t\tconst bounds = root.getBoundingClientRect();\n\t\t\t\t\tsetHovered({\n\t\t\t\t\t\tkind,\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tx: marker.x - bounds.x + marker.width / 2,\n\t\t\t\t\t\ty: marker.y - bounds.y,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\telement.addEventListener(\"mouseleave\", () => setHovered(null));\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst separateResponders = React.useCallback(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\t\t\tconst cameraPoints = cameraMarkersRef.current.map((entry) => map.project(entry.marker.getLngLat()));\n\t\t\tif (cameraPoints.length === 0) {\n\t\t\t\tfor (const entry of responderMarkersRef.current) entry.marker.setLngLat(entry.at);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst gap = latest.current.responderMarkerSize + 6;\n\t\t\t// A focused responder is never nudged: its coverage and track are drawn at its true position, so\n\t\t\t// a displaced badge would sit off-centre in its own circle and read as pointing at the camera.\n\t\t\tconst focused = latest.current.focusedIds;\n\t\t\tconst pinned = focused && focused.length > 0 ? new Set(focused.map(String)) : null;\n\n\t\t\tfor (const entry of responderMarkersRef.current) {\n\t\t\t\tconst point = map.project(entry.at);\n\t\t\t\tconst clashes =\n\t\t\t\t\t!pinned?.has(String(entry.id)) && cameraPoints.some((c) => Math.hypot(c.x - point.x, c.y - point.y) < gap);\n\t\t\t\tentry.marker.setLngLat(clashes ? map.unproject([point.x + gap, point.y - gap * 0.5]) : entry.at);\n\t\t\t}\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tseparateResponders();\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\t\t\t// The offset is a pixel distance, so it has to be re-laid whenever the projection changes.\n\t\t\tmap.on(\"zoom\", separateResponders);\n\t\t\tmap.on(\"rotate\", separateResponders);\n\t\t\tmap.on(\"pitch\", separateResponders);\n\t\t\treturn () => {\n\t\t\t\tmap.off(\"zoom\", separateResponders);\n\t\t\t\tmap.off(\"rotate\", separateResponders);\n\t\t\t\tmap.off(\"pitch\", separateResponders);\n\t\t\t};\n\t\t}, [separateResponders]);\n\n\t\t// Fly to the selection whenever it changes, and back to the opening view when it is cleared.\n\t\tReact.useEffect(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\t\t\tconst selection = selectedZoneIds ?? [];\n\n\t\t\tif (selection.length === 0) {\n\t\t\t\t// Only on the transition out of a selection — not on mount, when there never was one.\n\t\t\t\tif (hadSelectionRef.current && homeViewRef.current) map.easeTo({...homeViewRef.current, duration: 700});\n\t\t\t\thadSelectionRef.current = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\thadSelectionRef.current = true;\n\t\t\tconst chosen = new Set(selection.map(String));\n\t\t\tconst bounds = zonesBounds(zones.filter((z) => chosen.has(String(z.id))));\n\t\t\tif (bounds) map.fitBounds(bounds, {padding: selectionPadding, duration: 700, maxZoom: 17});\n\t\t}, [selectedZoneIds, zones, selectionPadding]);\n\n\t\t// Keep the highlight layer's filter in step without rebuilding every zone layer, and re-apply the\n\t\t// fade so the unselected zones drop back the moment the selection changes.\n\t\tReact.useEffect(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (map?.getLayer(ZONES_SELECTED_ID)) map.setFilter(ZONES_SELECTED_ID, selectionFilter(selectedZoneIds));\n\t\t\tapplyFocus();\n\t\t}, [selectedZoneIds, applyFocus]);\n\n\t\t// March the ants. Only runs while something is selected — an idle timer repainting a hidden layer\n\t\t// would keep the map busy for nothing.\n\t\tReact.useEffect(() => {\n\t\t\tif (!selectedZoneIds || selectedZoneIds.length === 0) return;\n\t\t\tlet step = 0;\n\t\t\tconst timer = setInterval(() => {\n\t\t\t\tconst map = mapRef.current;\n\t\t\t\tif (!map?.getLayer(ZONES_SELECTED_ID)) return;\n\t\t\t\tstep = (step + 1) % ANT_DASHES.length;\n\t\t\t\tmap.setPaintProperty(ZONES_SELECTED_ID, \"line-dasharray\", ANT_DASHES[step]);\n\t\t\t}, 55);\n\t\t\treturn () => clearInterval(timer);\n\t\t}, [selectedZoneIds]);\n\n\t\t/**\n\t\t * Rebuild the blueprint and zone layers from scratch, blueprint first so the zones sit above it.\n\t\t * `setStyle` wipes every custom layer, and an image source cannot swap between \"no image\" and \"an\n\t\t * image\", so a teardown/rebuild is the only reliable path — it is cheap, it keeps every state in\n\t\t * one code path, and it is what guarantees the draw order after any of them changes.\n\t\t */\n\t\tconst applyOverlays = React.useCallback(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\t\t\t// `style.load` fires before the style reports itself loaded, and addLayer throws until it is.\n\t\t\t// Bailing here is what dropped every overlay on a basemap change — retry once the map settles.\n\t\t\tif (!map.isStyleLoaded()) {\n\t\t\t\tmap.once(\"idle\", applyOverlays);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst {blueprintUrl: url, corners: pts, blueprintOpacity: opacity, showBlueprint: visible} = latest.current;\n\n\t\t\tfor (const id of [\n\t\t\t\tTRACK_DISC_LINE_ID,\n\t\t\t\tTRACK_DISC_FILL_ID,\n\t\t\t\tTRACK_LINE_ID,\n\t\t\t\tTRACK_CORRIDOR_ID,\n\t\t\t\tCOVERAGE_LINE_ID,\n\t\t\t\tCOVERAGE_FILL_ID,\n\t\t\t\tZONES_SELECTED_ID,\n\t\t\t\tZONES_LABEL_ID,\n\t\t\t\tZONES_FILL_ID,\n\t\t\t]) {\n\t\t\t\tif (map.getLayer(id)) map.removeLayer(id);\n\t\t\t}\n\t\t\tif (map.getSource(ZONES_SOURCE_ID)) map.removeSource(ZONES_SOURCE_ID);\n\t\t\tif (map.getSource(COVERAGE_SOURCE_ID)) map.removeSource(COVERAGE_SOURCE_ID);\n\t\t\tif (map.getSource(TRACK_SOURCE_ID)) map.removeSource(TRACK_SOURCE_ID);\n\t\t\tif (map.getSource(TRACK_DISC_SOURCE_ID)) map.removeSource(TRACK_DISC_SOURCE_ID);\n\n\t\t\tfor (const id of [BLUEPRINT_LAYER_ID, FOOTPRINT_FILL_ID, FOOTPRINT_LINE_ID]) {\n\t\t\t\tif (map.getLayer(id)) map.removeLayer(id);\n\t\t\t}\n\t\t\tfor (const id of [BLUEPRINT_SOURCE_ID, FOOTPRINT_SOURCE_ID]) {\n\t\t\t\tif (map.getSource(id)) map.removeSource(id);\n\t\t\t}\n\n\t\t\tconst visibility = visible ? \"visible\" : \"none\";\n\n\t\t\tif (url) {\n\t\t\t\tmap.addSource(BLUEPRINT_SOURCE_ID, {type: \"image\", url, coordinates: pts});\n\t\t\t\tmap.addLayer({\n\t\t\t\t\tid: BLUEPRINT_LAYER_ID,\n\t\t\t\t\ttype: \"raster\",\n\t\t\t\t\tsource: BLUEPRINT_SOURCE_ID,\n\t\t\t\t\tlayout: {visibility},\n\t\t\t\t\t// No cross-fade: a blueprint should snap into place, not dissolve.\n\t\t\t\t\tpaint: {\"raster-opacity\": opacity, \"raster-fade-duration\": 0},\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// No image yet — show the footprint so the corners are still verifiable on the basemap.\n\t\t\t\tmap.addSource(FOOTPRINT_SOURCE_ID, {type: \"geojson\", data: footprintData(pts)});\n\t\t\t\tmap.addLayer({\n\t\t\t\t\tid: FOOTPRINT_FILL_ID,\n\t\t\t\t\ttype: \"fill\",\n\t\t\t\t\tsource: FOOTPRINT_SOURCE_ID,\n\t\t\t\t\tlayout: {visibility},\n\t\t\t\t\tpaint: {\"fill-color\": \"#f97316\", \"fill-opacity\": 0.12},\n\t\t\t\t});\n\t\t\t\tmap.addLayer({\n\t\t\t\t\tid: FOOTPRINT_LINE_ID,\n\t\t\t\t\ttype: \"line\",\n\t\t\t\t\tsource: FOOTPRINT_SOURCE_ID,\n\t\t\t\t\tlayout: {visibility},\n\t\t\t\t\tpaint: {\"line-color\": \"#f97316\", \"line-width\": 2, \"line-dasharray\": [3, 2]},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst {zones: zoneList, showZones: zonesVisible, zoneOpacity: zoneFill, showZoneLabels: labels} = latest.current;\n\t\t\tif (!zoneList.length) return;\n\n\t\t\tconst zoneVisibility = zonesVisible ? \"visible\" : \"none\";\n\t\t\tmap.addSource(ZONES_SOURCE_ID, {\n\t\t\t\ttype: \"geojson\",\n\t\t\t\tdata: zonesData(zoneList, latest.current.zoneColorMode === \"neutral\"),\n\t\t\t});\n\t\t\tmap.addLayer({\n\t\t\t\tid: ZONES_FILL_ID,\n\t\t\t\ttype: \"fill\",\n\t\t\t\tsource: ZONES_SOURCE_ID,\n\t\t\t\tlayout: {visibility: zoneVisibility},\n\t\t\t\t// Each zone carries its own colour in the payload, so read it off the feature.\n\t\t\t\tpaint: {\"fill-color\": [\"get\", \"color\"], \"fill-opacity\": zoneFill},\n\t\t\t});\n\t\t\tmap.addLayer({\n\t\t\t\tid: ZONES_LABEL_ID,\n\t\t\t\ttype: \"symbol\",\n\t\t\t\tsource: ZONES_SOURCE_ID,\n\t\t\t\tlayout: {\n\t\t\t\t\tvisibility: labels && zonesVisible ? \"visible\" : \"none\",\n\t\t\t\t\t\"text-field\": [\"get\", \"name\"],\n\t\t\t\t\t\"text-size\": 11,\n\t\t\t\t\t// Zones are long thin corridors; let the label ride the polygon rather than overflow it.\n\t\t\t\t\t\"text-max-width\": 10,\n\t\t\t\t\t\"symbol-placement\": \"point\",\n\t\t\t\t},\n\t\t\t\tpaint: {\"text-color\": \"#ffffff\", \"text-halo-color\": \"rgba(0,0,0,0.65)\", \"text-halo-width\": 1.4},\n\t\t\t});\n\n\t\t\t// Marching-ants outline for the current selection. Its own layer so the dash can animate without\n\t\t\t// touching the base zone styling, and it draws last so it sits above every other zone.\n\t\t\tmap.addLayer({\n\t\t\t\tid: ZONES_SELECTED_ID,\n\t\t\t\ttype: \"line\",\n\t\t\t\tsource: ZONES_SOURCE_ID,\n\t\t\t\tfilter: selectionFilter(latest.current.selectedZoneIds),\n\t\t\t\tpaint: {\"line-color\": \"#ffffff\", \"line-width\": 2.5, \"line-dasharray\": [0, 4, 3]},\n\t\t\t});\n\n\t\t\t// Coverage sits above the zones — it describes a person, not the ground.\n\t\t\tconst cover = latest.current.coverage;\n\t\t\tif (cover) {\n\t\t\t\tconst tint = cover.color ?? \"#2f6b63\";\n\t\t\t\tmap.addSource(COVERAGE_SOURCE_ID, {\n\t\t\t\t\ttype: \"geojson\",\n\t\t\t\t\tdata: circlePolygon(cover.center, cover.radiusMeters),\n\t\t\t\t});\n\t\t\t\tmap.addLayer({\n\t\t\t\t\tid: COVERAGE_FILL_ID,\n\t\t\t\t\ttype: \"fill\",\n\t\t\t\t\tsource: COVERAGE_SOURCE_ID,\n\t\t\t\t\tpaint: {\"fill-color\": tint, \"fill-opacity\": 0.15},\n\t\t\t\t});\n\t\t\t\tmap.addLayer({\n\t\t\t\t\tid: COVERAGE_LINE_ID,\n\t\t\t\t\ttype: \"line\",\n\t\t\t\t\tsource: COVERAGE_SOURCE_ID,\n\t\t\t\t\tpaint: {\"line-color\": tint, \"line-width\": 1.5, \"line-dasharray\": [3, 2]},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst path = latest.current.track;\n\t\t\t// Each run is deduped; a run where they never moved collapses to one point, and a zero-length\n\t\t\t// line strokes to nothing — so it is nudged into a hair-length segment, which the round cap\n\t\t\t// renders as exactly the disc it should be. One geometry type, no special-cased layers.\n\t\t\tconst deduped = (path?.segments ?? [])\n\t\t\t\t.map((run) => run.filter((p, i, all) => i === 0 || p[0] !== all[i - 1][0] || p[1] !== all[i - 1][1]))\n\t\t\t\t.filter((run) => run.length > 0);\n\t\t\t// A run where they never moved has no line to stroke. It cannot be faked with a very short\n\t\t\t// segment either — mapbox drops a line below about a metre as too small to tile, and the\n\t\t\t// coverage silently disappears. Those runs are drawn as discs instead.\n\t\t\tconst runs = deduped.filter((run) => run.length > 1);\n\t\t\tconst stood = deduped.filter((run) => run.length === 1).map((run) => run[0]);\n\n\t\t\tif (path && stood.length > 0) {\n\t\t\t\tconst tint = path.color ?? \"#2f6b63\";\n\t\t\t\tmap.addSource(TRACK_DISC_SOURCE_ID, {\n\t\t\t\t\ttype: \"geojson\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttype: \"FeatureCollection\",\n\t\t\t\t\t\tfeatures: stood.map((point) => circlePolygon(point, path.radiusMeters ?? 0)),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tmap.addLayer({\n\t\t\t\t\tid: TRACK_DISC_FILL_ID,\n\t\t\t\t\ttype: \"fill\",\n\t\t\t\t\tsource: TRACK_DISC_SOURCE_ID,\n\t\t\t\t\tpaint: {\"fill-color\": tint, \"fill-opacity\": 0.15},\n\t\t\t\t});\n\t\t\t\t// The outline is only drawn when a disc is the whole story. Beside a corridor it reads as a\n\t\t\t\t// separate object rather than the same coverage, so a standing run there is fill alone —\n\t\t\t\t// exactly what the corridor is.\n\t\t\t\tif (runs.length === 0) {\n\t\t\t\t\tmap.addLayer({\n\t\t\t\t\t\tid: TRACK_DISC_LINE_ID,\n\t\t\t\t\t\ttype: \"line\",\n\t\t\t\t\t\tsource: TRACK_DISC_SOURCE_ID,\n\t\t\t\t\t\tpaint: {\"line-color\": tint, \"line-width\": 1.5, \"line-dasharray\": [3, 2]},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (path && runs.length > 0) {\n\t\t\t\tconst tint = path.color ?? \"#2f6b63\";\n\t\t\t\tmap.addSource(TRACK_SOURCE_ID, {\n\t\t\t\t\ttype: \"geojson\",\n\t\t\t\t\tdata: {type: \"Feature\", properties: {}, geometry: {type: \"MultiLineString\", coordinates: runs}},\n\t\t\t\t});\n\t\t\t\t// The corridor is the path stroked at twice the radius with round caps and joins — which is\n\t\t\t\t// exactly the ground within `radiusMeters` of the path, without any buffer geometry.\n\t\t\t\tmap.addLayer({\n\t\t\t\t\tid: TRACK_CORRIDOR_ID,\n\t\t\t\t\ttype: \"line\",\n\t\t\t\t\tsource: TRACK_SOURCE_ID,\n\t\t\t\t\tlayout: {\"line-cap\": \"round\", \"line-join\": \"round\"},\n\t\t\t\t\tpaint: {\"line-color\": tint, \"line-opacity\": 0.15, \"line-width\": corridorWidth()},\n\t\t\t\t});\n\t\t\t\tmap.addLayer({\n\t\t\t\t\tid: TRACK_LINE_ID,\n\t\t\t\t\ttype: \"line\",\n\t\t\t\t\tsource: TRACK_SOURCE_ID,\n\t\t\t\t\tlayout: {\"line-cap\": \"round\", \"line-join\": \"round\"},\n\t\t\t\t\tpaint: {\"line-color\": tint, \"line-width\": 1.5, \"line-dasharray\": [2, 2], \"line-opacity\": 0.9},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tapplyFocus();\n\t\t}, [applyFocus, corridorWidth]);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!containerRef.current || mapRef.current) return;\n\n\t\t\tmapboxgl.accessToken = MAPBOX_TOKEN;\n\n\t\t\tconst map = new mapboxgl.Map({\n\t\t\t\tcontainer: containerRef.current,\n\t\t\t\tstyle: mapStyle,\n\t\t\t\tcenter: center ?? boundsOf(corners).getCenter(),\n\t\t\t\tzoom,\n\t\t\t\tbearing,\n\t\t\t\tpitch,\n\t\t\t});\n\t\t\tmapRef.current = map;\n\n\t\t\tif (fitTo !== \"none\") {\n\t\t\t\tconst target = (fitTo === \"zones\" && zonesBounds(zones)) || boundsOf(corners);\n\t\t\t\tmap.fitBounds(target, {padding: fitPadding, duration: 0});\n\t\t\t}\n\n\t\t\t// Captured after the opening fit, so it is the view the user actually starts from.\n\t\t\thomeViewRef.current = {\n\t\t\t\tcenter: map.getCenter(),\n\t\t\t\tzoom: map.getZoom(),\n\t\t\t\tbearing: map.getBearing(),\n\t\t\t\tpitch: map.getPitch(),\n\t\t\t};\n\n\t\t\tconst emitView = () =>\n\t\t\t\tlatest.current.onViewChange?.({\n\t\t\t\t\tcenter: [Number(map.getCenter().lng.toFixed(6)), Number(map.getCenter().lat.toFixed(6))],\n\t\t\t\t\tzoom: Number(map.getZoom().toFixed(2)),\n\t\t\t\t\tbearing: Number(map.getBearing().toFixed(1)),\n\t\t\t\t\tpitch: Number(map.getPitch().toFixed(1)),\n\t\t\t\t});\n\t\t\tmap.on(\"move\", emitView);\n\n\t\t\t// A small tolerance so a nudge does not count as having moved.\n\t\t\tconst checkMoved = () => {\n\t\t\t\tconst home = homeViewRef.current;\n\t\t\t\tif (!home) return;\n\t\t\t\tconst moved =\n\t\t\t\t\tmap.getCenter().distanceTo(home.center) > 40 ||\n\t\t\t\t\tMath.abs(map.getZoom() - home.zoom) > 0.15 ||\n\t\t\t\t\tMath.abs(map.getBearing() - home.bearing) > 1 ||\n\t\t\t\t\tMath.abs(map.getPitch() - home.pitch) > 1;\n\t\t\t\tsetViewMoved(moved);\n\t\t\t};\n\t\t\tmap.on(\"moveend\", checkMoved);\n\t\t\t// The initial fitBounds happens before this listener exists, so publish the opening view once.\n\t\t\temitView();\n\n\t\t\tmap.on(\"load\", applyOverlays);\n\t\t\t// setStyle drops every custom layer; re-add them once the new style settles.\n\t\t\tmap.on(\"style.load\", applyOverlays);\n\n\t\t\treturn () => {\n\t\t\t\tmap.off(\"move\", emitView);\n\t\t\t\tmap.off(\"moveend\", checkMoved);\n\t\t\t\tfor (const entry of markersRef.current) entry.marker.remove();\n\t\t\t\tmarkersRef.current = [];\n\t\t\t\tfor (const entry of cameraMarkersRef.current) entry.marker.remove();\n\t\t\t\tcameraMarkersRef.current = [];\n\t\t\t\tfor (const entry of responderMarkersRef.current) entry.marker.remove();\n\t\t\t\tresponderMarkersRef.current = [];\n\t\t\t\tmap.remove();\n\t\t\t\tmapRef.current = null;\n\t\t\t};\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tmapRef.current?.setStyle(mapStyle);\n\t\t}, [mapStyle]);\n\n\t\tReact.useEffect(() => {\n\t\t\tapplyOverlays();\n\t\t}, [blueprintUrl, corners, zones, zoneColorMode, coverage, track, applyOverlays]);\n\n\t\t// Routed through applyFocus so a live opacity change respects any active dim factor.\n\t\tReact.useEffect(() => {\n\t\t\tapplyFocus();\n\t\t}, [blueprintOpacity, applyFocus]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\t\t\tconst visibility = showBlueprint ? \"visible\" : \"none\";\n\t\t\tfor (const id of [BLUEPRINT_LAYER_ID, FOOTPRINT_FILL_ID, FOOTPRINT_LINE_ID]) {\n\t\t\t\tif (map.getLayer(id)) map.setLayoutProperty(id, \"visibility\", visibility);\n\t\t\t}\n\t\t}, [showBlueprint]);\n\n\t\tReact.useEffect(() => {\n\t\t\tapplyFocus();\n\t\t}, [zoneOpacity, applyFocus]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\t\t\tconst visibility = showZones ? \"visible\" : \"none\";\n\t\t\tfor (const id of [ZONES_FILL_ID]) {\n\t\t\t\tif (map.getLayer(id)) map.setLayoutProperty(id, \"visibility\", visibility);\n\t\t\t}\n\t\t\tif (map.getLayer(ZONES_LABEL_ID)) {\n\t\t\t\tmap.setLayoutProperty(ZONES_LABEL_ID, \"visibility\", showZoneLabels && showZones ? \"visible\" : \"none\");\n\t\t\t}\n\t\t}, [showZones, showZoneLabels]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\n\t\t\t// Delegated to the layer rather than per-feature, so it survives every overlay rebuild.\n\t\t\tconst onClick = (event: mapboxgl.MapMouseEvent & {features?: GeoJSON.Feature[]}) => {\n\t\t\t\t// Markers sit inside the canvas container, so a marker click also fires this layer handler\n\t\t\t\t// for whatever polygon happens to be underneath. Clicking a violation must not select its\n\t\t\t\t// zone as well — the same guard the background handler needs.\n\t\t\t\tconst target = event.originalEvent?.target as HTMLElement | null;\n\t\t\t\tif (target?.closest?.(\".mapboxgl-marker\")) return;\n\t\t\t\tconst id = event.features?.[0]?.properties?.zoneId;\n\t\t\t\tif (id == null) return;\n\t\t\t\tconst zone = latest.current.zones.find((z) => String(z.id) === id);\n\t\t\t\tif (zone) latest.current.onZoneSelect?.(zone);\n\t\t\t};\n\t\t\tconst enter = () => {\n\t\t\t\tmap.getCanvas().style.cursor = \"pointer\";\n\t\t\t};\n\t\t\tconst leave = () => {\n\t\t\t\tmap.getCanvas().style.cursor = \"\";\n\t\t\t};\n\n\t\t\t// Markers live inside mapbox's canvas container, so a marker click bubbles up and fires the map's\n\t\t\t// own click too. Without this guard the background handler clears the selection the marker just\n\t\t\t// made, and nothing ever opens.\n\t\t\tconst onBackground = (event: mapboxgl.MapMouseEvent) => {\n\t\t\t\tconst target = event.originalEvent?.target as HTMLElement | null;\n\t\t\t\tif (target?.closest?.(\".mapboxgl-marker\")) return;\n\t\t\t\tlatest.current.onBackgroundClick?.();\n\t\t\t};\n\n\t\t\tmap.on(\"click\", onBackground);\n\t\t\tmap.on(\"click\", ZONES_FILL_ID, onClick);\n\t\t\tmap.on(\"mouseenter\", ZONES_FILL_ID, enter);\n\t\t\tmap.on(\"mouseleave\", ZONES_FILL_ID, leave);\n\t\t\treturn () => {\n\t\t\t\tmap.off(\"click\", onBackground);\n\t\t\t\tmap.off(\"click\", ZONES_FILL_ID, onClick);\n\t\t\t\tmap.off(\"mouseenter\", ZONES_FILL_ID, enter);\n\t\t\t\tmap.off(\"mouseleave\", ZONES_FILL_ID, leave);\n\t\t\t};\n\t\t}, []);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\n\t\t\tfor (const entry of markersRef.current) entry.marker.remove();\n\n\t\t\tconst size = observationMarkerSize;\n\n\t\t\tmarkersRef.current = observations.map((observation) => {\n\t\t\t\t// A circular badge, not a teardrop pin: the glyph stays upright and readable, and the marker\n\t\t\t\t// centres on its coordinate instead of pointing at it from above. Round for observations,\n\t\t\t\t// square for cameras — at the same size, shape is what tells the two apart.\n\t\t\t\tconst element = badgeElement(size, observation.color ?? \"#f97316\", observationIcon, true);\n\t\t\t\tif (observation.label) element.title = observation.label;\n\n\t\t\t\t// No popup: the detail panel carries the record, and a bubble over the pin would cover the\n\t\t\t\t// very markers the selection is meant to be read against.\n\t\t\t\tconst marker = new mapboxgl.Marker({element, anchor: \"center\"}).setLngLat(observation.coordinates);\n\t\t\t\telement.addEventListener(\"click\", () => onObservationSelect?.(observation));\n\t\t\t\tbindHover(element, \"observation\", observation.id);\n\t\t\t\treturn {id: observation.id, marker: marker.addTo(map)};\n\t\t\t});\n\t\t\tapplyFocus();\n\t\t}, [observations, onObservationSelect, observationIcon, observationMarkerSize, applyFocus, bindHover]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\n\t\t\tfor (const entry of cameraMarkersRef.current) entry.marker.remove();\n\t\t\tif (!showCameras) {\n\t\t\t\tcameraMarkersRef.current = [];\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcameraMarkersRef.current = cameras.map((camera) => {\n\t\t\t\t// Deliberately quiet: a camera is context, not a finding. Desaturated and dark, so it stays\n\t\t\t\t// legible without pulling attention from the status-coloured violations.\n\t\t\t\tconst element = badgeElement(cameraMarkerSize, camera.color ?? \"#3d4a5c\", cameraIcon);\n\t\t\t\tconst violations = camera.violations ?? 0;\n\t\t\t\tif (violations > 0) element.appendChild(countBadge(violations, cameraMarkerSize));\n\t\t\t\telement.title = camera.name\n\t\t\t\t\t? `${camera.name} — ${violations} violation${violations === 1 ? \"\" : \"s\"}`\n\t\t\t\t\t: `${violations} violations`;\n\n\t\t\t\tconst marker = new mapboxgl.Marker({element, anchor: \"center\"}).setLngLat(camera.coordinates);\n\t\t\t\telement.addEventListener(\"click\", () => onCameraSelect?.(camera));\n\t\t\t\tbindHover(element, \"camera\", camera.id);\n\t\t\t\treturn {id: camera.id, marker: marker.addTo(map)};\n\t\t\t});\n\t\t\tapplyFocus();\n\t\t\tseparateResponders();\n\t\t}, [cameras, showCameras, onCameraSelect, cameraIcon, cameraMarkerSize, applyFocus, separateResponders, bindHover]);\n\n\t\tReact.useEffect(() => {\n\t\t\tconst map = mapRef.current;\n\t\t\tif (!map) return;\n\n\t\t\tfor (const entry of responderMarkersRef.current) entry.marker.remove();\n\t\t\tif (!showResponders) {\n\t\t\t\tresponderMarkersRef.current = [];\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresponderMarkersRef.current = responders.map((responder) => {\n\t\t\t\t// Square like a camera — both are fixed site infrastructure rather than findings — but in a\n\t\t\t\t// different hue, so the two are told apart by colour and glyph.\n\t\t\t\tconst element = badgeElement(responderMarkerSize, responder.color ?? \"#2f6b63\", responderIcon);\n\t\t\t\t// Off shift reads as receded rather than absent; they are still on site.\n\t\t\t\tif (responder.online === false) element.style.opacity = \"0.55\";\n\t\t\t\tif (responder.name) element.title = responder.name;\n\t\t\t\tconst marker = new mapboxgl.Marker({element, anchor: \"center\"}).setLngLat(responder.coordinates);\n\t\t\t\telement.addEventListener(\"click\", () => onResponderSelect?.(responder));\n\t\t\t\tbindHover(element, \"responder\", responder.id);\n\t\t\t\treturn {id: responder.id, marker: marker.addTo(map), at: responder.coordinates};\n\t\t\t});\n\t\t\tapplyFocus();\n\t\t\tseparateResponders();\n\t\t}, [\n\t\t\tresponders,\n\t\t\tshowResponders,\n\t\t\tonResponderSelect,\n\t\t\tresponderIcon,\n\t\t\tresponderMarkerSize,\n\t\t\tapplyFocus,\n\t\t\tseparateResponders,\n\t\t\tbindHover,\n\t\t]);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={rootRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"wwc:relative wwc:w-full wwc:overflow-hidden wwc:rounded-lg\",\n\t\t\t\t\t// min-h-0 lets the map shrink inside a flex column instead of being pinned to its content.\n\t\t\t\t\tfullHeight ? \"wwc:h-full wwc:min-h-0\" : \"wwc:h-[500px]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={style}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* The map fills the root rather than being it, so the timeline can float above the canvas.\n\t\t\t\t Sized, not positioned: mapbox-gl.css declares `.mapboxgl-map { position: relative }` and loads\n\t\t\t\t after the utilities, so an `absolute inset-0` container would be overridden and collapse to 0. */}\n\t\t\t\t<div ref={containerRef} className=\"wwc:h-full wwc:w-full\" />\n\n\t\t\t\t{/* The reset control rides alongside the controls rather than floating on its own, so it sits\n\t\t\t\t beside whatever the caller put in the corner without needing to know its width. */}\n\t\t\t\t{(controls || (showResetView && viewMoved)) && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"wwc:absolute wwc:left-3 wwc:top-3 wwc:z-20 wwc:flex wwc:items-start wwc:gap-2\",\n\t\t\t\t\t\t\t// Bounded above the timeline and scrolling, so a tall stack of panels runs out of room\n\t\t\t\t\t\t\t// rather than sliding underneath it.\n\t\t\t\t\t\t\t\"wwc:overflow-y-auto\",\n\t\t\t\t\t\t\tlegendInline ? \"wwc:bottom-12\" : \"wwc:bottom-28\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{controls}\n\t\t\t\t\t\t{showResetView && viewMoved && (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tif (homeViewRef.current) mapRef.current?.easeTo({...homeViewRef.current, duration: 700});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tstyle={{width: resetViewWidth}}\n\t\t\t\t\t\t\t\t// Same padding, radius, surface and inner row height as a collapsed panel header, so the\n\t\t\t\t\t\t\t\t// three float as one set rather than three sizes.\n\t\t\t\t\t\t\t\tclassName={`wwc:flex wwc:shrink-0 wwc:items-center wwc:gap-1.5 wwc:rounded-lg wwc:border wwc:border-border wwc:bg-card wwc:px-2.5 wwc:py-1.5 wwc:text-xs wwc:font-medium wwc:text-muted-foreground wwc:transition-colors wwc:hover:bg-accent ${FLOAT_SHADOW}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span className=\"wwc:flex wwc:h-6 wwc:items-center wwc:gap-1.5\">\n\t\t\t\t\t\t\t\t\t<RotateCcw className=\"wwc:h-3.5 wwc:w-3.5\" />\n\t\t\t\t\t\t\t\t\t{resetViewLabel}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{hovered && renderHoverCard && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"wwc:pointer-events-none wwc:absolute wwc:z-30 wwc:-translate-x-1/2 wwc:-translate-y-full\"\n\t\t\t\t\t\tstyle={{left: hovered.x, top: hovered.y - 8}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{renderHoverCard({kind: hovered.kind, id: hovered.id})}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{legend && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"wwc:absolute wwc:right-3 wwc:z-20\",\n\t\t\t\t\t\t\t// A collapsed timeline gives up the right of its row, so the legend can drop into it.\n\t\t\t\t\t\t\tlegendInline ? \"wwc:bottom-3\" : \"wwc:bottom-24\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{legend}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* The panel caps its own height, so the wrapper only has to place it. */}\n\t\t\t\t{detail && <div className=\"wwc:absolute wwc:right-3 wwc:top-3 wwc:z-20\">{detail}</div>}\n\n\t\t\t\t{timeline && (\n\t\t\t\t\t<div className=\"wwc:absolute wwc:inset-x-3 wwc:bottom-3 wwc:z-10\">\n\t\t\t\t\t\t<TimeScrubber {...timeline} className={cn(\"wwc:bg-card\", timeline.className)} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\nObservationsMap.displayName = \"ObservationsMap\";\n\nexport {DEFAULT_BLUEPRINT_CORNERS, ObservationsMap};\n"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ //#region src/operations-drawer.d.ts
2
+ /** A single operation line in the drawer's table. */
3
+ export interface OperationRow {
4
+ /** Operation name — the bold first line (e.g. "Backfill"). */
5
+ name: string;
6
+ /** Operation code — the muted second line (e.g. "BF-01"). */
7
+ code: string;
8
+ /** Weight of the operation. */
9
+ wt: string;
10
+ /** Previous progress. */
11
+ prev: string;
12
+ /** Budget at completion. */
13
+ bac: string;
14
+ /** Earned value. */
15
+ ev: string;
16
+ /** Editable progress value shown in the input (e.g. "100%"). */
17
+ progress: string;
18
+ /** Called when the progress input changes. */
19
+ onProgressChange?: (value: string) => void;
20
+ }
21
+ export interface OperationsDrawerProps {
22
+ /** Bold title — the object identifier (e.g. "2266-DP1-R-SS"). */
23
+ title: string;
24
+ /** Full WBS path, shown muted under the title. */
25
+ wbs: string;
26
+ /** Overall completion percentage (0–100) for the header bar. */
27
+ progress: number;
28
+ /** Optional pager shown beside the title (e.g. 1 of 4). */
29
+ page?: {
30
+ current: number;
31
+ total: number;
32
+ };
33
+ /** Operation rows for the table. */
34
+ rows: OperationRow[];
35
+ onWalkthrough?: () => void;
36
+ onClose?: () => void;
37
+ onPrev?: () => void;
38
+ onNext?: () => void;
39
+ onDiscard?: () => void;
40
+ onSave?: () => void;
41
+ className?: string;
42
+ }
43
+ /**
44
+ * A drawer for reviewing and editing the operations under a single object: a header (identifier, WBS
45
+ * path, overall progress, and a walkthrough button), a compact per-operation table with an editable
46
+ * progress field, and a discard / save footer (Save is disabled until a progress value changes).
47
+ * Composed from Core Table, Progress, Input, and Button.
48
+ */
49
+ export declare function OperationsDrawer({ title, wbs, progress, page, rows, onWalkthrough, onClose, onPrev, onNext, onDiscard, onSave, className }: OperationsDrawerProps): import("react/jsx-runtime").JSX.Element;
50
+ //#endregion
51
+ //# sourceMappingURL=operations-drawer.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations-drawer.d.mts","names":[],"sources":["../src/operations-drawer.tsx"],"mappings":";;iBAUiB;;EAEhB;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA,oBAAoB;;iBAGJ;;EAEhB;;EAEA;;EAEA;;EAEA;IAAQ;IAAiB;;;EAEzB,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;;;;;;;;wBAYe,mBACf,OACA,KACA,UACA,MACA,MACA,eACA,SACA,QACA,QACA,WACA,QACA,aACE,oDAAqB,IAAA"}
@@ -0,0 +1,193 @@
1
+ import { Button } from "./button.mjs";
2
+ import { Input } from "./input.mjs";
3
+ import { Table as Table$1, TableBody, TableCell, TableHead, TableHeader, TableRow } from "./table.mjs";
4
+ import { Progress } from "./progress.mjs";
5
+ import { cn } from "@corensystem/coren-utils";
6
+ import { ChevronLeft, ChevronRight, Video, X } from "lucide-react";
7
+ import { useRef } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/operations-drawer.tsx
10
+ const numericHead = "wwc:h-9 wwc:w-12 wwc:px-1.5 wwc:text-center wwc:text-[11px] wwc:uppercase wwc:tracking-wide";
11
+ const numericCell = "wwc:px-1.5 wwc:text-center wwc:text-xs wwc:text-foreground";
12
+ /**
13
+ * A drawer for reviewing and editing the operations under a single object: a header (identifier, WBS
14
+ * path, overall progress, and a walkthrough button), a compact per-operation table with an editable
15
+ * progress field, and a discard / save footer (Save is disabled until a progress value changes).
16
+ * Composed from Core Table, Progress, Input, and Button.
17
+ */
18
+ function OperationsDrawer({ title, wbs, progress, page, rows, onWalkthrough, onClose, onPrev, onNext, onDiscard, onSave, className }) {
19
+ const rowsKey = rows.map((r) => r.code).join("|");
20
+ const snapshotKey = useRef("");
21
+ const initialByCode = useRef({});
22
+ if (snapshotKey.current !== rowsKey) {
23
+ snapshotKey.current = rowsKey;
24
+ initialByCode.current = Object.fromEntries(rows.map((r) => [r.code, r.progress]));
25
+ }
26
+ const dirty = rows.some((r) => r.progress !== initialByCode.current[r.code]);
27
+ return /* @__PURE__ */ jsxs("div", {
28
+ className: cn("wwc:flex wwc:h-full wwc:w-[440px] wwc:max-w-full wwc:flex-col wwc:overflow-hidden wwc:rounded-b-lg wwc:border wwc:border-border wwc:bg-background wwc:shadow-lg", className),
29
+ children: [
30
+ /* @__PURE__ */ jsxs("div", {
31
+ className: "wwc:flex wwc:flex-col wwc:gap-3 wwc:px-5 wwc:py-4",
32
+ children: [
33
+ /* @__PURE__ */ jsxs("div", {
34
+ className: "wwc:flex wwc:items-center wwc:justify-between wwc:gap-2",
35
+ children: [/* @__PURE__ */ jsx("h2", {
36
+ className: "wwc:truncate wwc:text-sm wwc:font-bold wwc:text-foreground",
37
+ children: title
38
+ }), /* @__PURE__ */ jsxs("div", {
39
+ className: "wwc:flex wwc:shrink-0 wwc:items-center wwc:gap-1",
40
+ children: [page && /* @__PURE__ */ jsxs("div", {
41
+ className: "wwc:flex wwc:items-center wwc:text-muted-foreground",
42
+ children: [
43
+ /* @__PURE__ */ jsx(Button, {
44
+ variant: "ghost",
45
+ size: "sm",
46
+ icon: true,
47
+ "aria-label": "Previous object",
48
+ onClick: onPrev,
49
+ children: /* @__PURE__ */ jsx(ChevronLeft, {})
50
+ }),
51
+ /* @__PURE__ */ jsxs("span", {
52
+ className: "wwc:tabular-nums wwc:text-xs",
53
+ children: [
54
+ page.current,
55
+ " / ",
56
+ page.total
57
+ ]
58
+ }),
59
+ /* @__PURE__ */ jsx(Button, {
60
+ variant: "ghost",
61
+ size: "sm",
62
+ icon: true,
63
+ "aria-label": "Next object",
64
+ onClick: onNext,
65
+ children: /* @__PURE__ */ jsx(ChevronRight, {})
66
+ })
67
+ ]
68
+ }), /* @__PURE__ */ jsx(Button, {
69
+ variant: "ghost",
70
+ size: "sm",
71
+ icon: true,
72
+ "aria-label": "Close",
73
+ onClick: onClose,
74
+ children: /* @__PURE__ */ jsx(X, {})
75
+ })]
76
+ })]
77
+ }),
78
+ /* @__PURE__ */ jsx("p", {
79
+ className: "wwc:text-xs wwc:text-muted-foreground",
80
+ children: wbs
81
+ }),
82
+ /* @__PURE__ */ jsxs("div", {
83
+ className: "wwc:flex wwc:items-center wwc:gap-3",
84
+ children: [/* @__PURE__ */ jsx(Progress, {
85
+ value: progress,
86
+ className: "wwc:h-1.5 wwc:flex-1"
87
+ }), /* @__PURE__ */ jsxs("span", {
88
+ className: "wwc:shrink-0 wwc:text-xs wwc:font-semibold wwc:text-muted-foreground",
89
+ children: [progress, "%"]
90
+ })]
91
+ }),
92
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(Button, {
93
+ variant: "outline",
94
+ size: "sm",
95
+ onClick: onWalkthrough,
96
+ children: [/* @__PURE__ */ jsx(Video, {}), "Walkthrough"]
97
+ }) })
98
+ ]
99
+ }),
100
+ /* @__PURE__ */ jsx("div", {
101
+ className: "wwc:min-h-0 wwc:flex-1 wwc:overflow-y-auto wwc:border-t wwc:border-border",
102
+ children: /* @__PURE__ */ jsxs(Table$1, { children: [/* @__PURE__ */ jsx(TableHeader, {
103
+ className: "wwc:bg-muted",
104
+ children: /* @__PURE__ */ jsxs(TableRow, {
105
+ className: "wwc:hover:bg-muted",
106
+ children: [
107
+ /* @__PURE__ */ jsx(TableHead, {
108
+ className: "wwc:h-9 wwc:px-4 wwc:text-[11px] wwc:uppercase wwc:tracking-wide",
109
+ children: "Operation"
110
+ }),
111
+ /* @__PURE__ */ jsx(TableHead, {
112
+ className: numericHead,
113
+ children: "WT"
114
+ }),
115
+ /* @__PURE__ */ jsx(TableHead, {
116
+ className: numericHead,
117
+ children: "Prev"
118
+ }),
119
+ /* @__PURE__ */ jsx(TableHead, {
120
+ className: numericHead,
121
+ children: "BAC"
122
+ }),
123
+ /* @__PURE__ */ jsx(TableHead, {
124
+ className: numericHead,
125
+ children: "EV"
126
+ }),
127
+ /* @__PURE__ */ jsx(TableHead, {
128
+ className: "wwc:h-9 wwc:w-[88px] wwc:px-3 wwc:text-right wwc:text-[11px] wwc:uppercase wwc:tracking-wide",
129
+ children: "Progress"
130
+ })
131
+ ]
132
+ })
133
+ }), /* @__PURE__ */ jsx(TableBody, { children: rows.map((row) => /* @__PURE__ */ jsxs(TableRow, { children: [
134
+ /* @__PURE__ */ jsx(TableCell, {
135
+ className: "wwc:px-4 wwc:py-2.5",
136
+ children: /* @__PURE__ */ jsxs("div", {
137
+ className: "wwc:flex wwc:flex-col",
138
+ children: [/* @__PURE__ */ jsx("span", {
139
+ className: "wwc:truncate wwc:text-xs wwc:font-semibold wwc:text-foreground",
140
+ title: row.name,
141
+ children: row.name
142
+ }), /* @__PURE__ */ jsx("span", {
143
+ className: "wwc:text-[11px] wwc:text-muted-foreground",
144
+ children: row.code
145
+ })]
146
+ })
147
+ }),
148
+ /* @__PURE__ */ jsx(TableCell, {
149
+ className: numericCell,
150
+ children: row.wt
151
+ }),
152
+ /* @__PURE__ */ jsx(TableCell, {
153
+ className: numericCell,
154
+ children: row.prev
155
+ }),
156
+ /* @__PURE__ */ jsx(TableCell, {
157
+ className: numericCell,
158
+ children: row.bac
159
+ }),
160
+ /* @__PURE__ */ jsx(TableCell, {
161
+ className: numericCell,
162
+ children: row.ev
163
+ }),
164
+ /* @__PURE__ */ jsx(TableCell, {
165
+ className: "wwc:px-3 wwc:py-2.5",
166
+ children: /* @__PURE__ */ jsx(Input, {
167
+ value: row.progress,
168
+ onChange: (e) => row.onProgressChange?.(e.target.value),
169
+ "aria-label": `${row.name} progress`,
170
+ className: "wwc:ml-auto wwc:h-8 wwc:w-14 wwc:px-2 wwc:text-center wwc:text-xs"
171
+ })
172
+ })
173
+ ] }, row.code)) })] })
174
+ }),
175
+ /* @__PURE__ */ jsxs("div", {
176
+ className: "wwc:flex wwc:items-center wwc:justify-between wwc:border-t wwc:border-border wwc:px-5 wwc:py-3",
177
+ children: [/* @__PURE__ */ jsx(Button, {
178
+ variant: "ghost",
179
+ onClick: onDiscard,
180
+ children: "Discard"
181
+ }), /* @__PURE__ */ jsx(Button, {
182
+ onClick: onSave,
183
+ disabled: !dirty,
184
+ children: "Save changes"
185
+ })]
186
+ })
187
+ ]
188
+ });
189
+ }
190
+ //#endregion
191
+ export { OperationsDrawer };
192
+
193
+ //# sourceMappingURL=operations-drawer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations-drawer.mjs","names":["Table"],"sources":["../src/operations-drawer.tsx"],"sourcesContent":["import {cn} from \"@corensystem/coren-utils\";\nimport {ChevronLeft, ChevronRight, Video, X} from \"lucide-react\";\nimport {useRef} from \"react\";\n\nimport {Button} from \"./button\";\nimport {Input} from \"./input\";\nimport {Progress} from \"./progress\";\nimport {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from \"./table\";\n\n/** A single operation line in the drawer's table. */\nexport interface OperationRow {\n\t/** Operation name — the bold first line (e.g. \"Backfill\"). */\n\tname: string;\n\t/** Operation code — the muted second line (e.g. \"BF-01\"). */\n\tcode: string;\n\t/** Weight of the operation. */\n\twt: string;\n\t/** Previous progress. */\n\tprev: string;\n\t/** Budget at completion. */\n\tbac: string;\n\t/** Earned value. */\n\tev: string;\n\t/** Editable progress value shown in the input (e.g. \"100%\"). */\n\tprogress: string;\n\t/** Called when the progress input changes. */\n\tonProgressChange?: (value: string) => void;\n}\n\nexport interface OperationsDrawerProps {\n\t/** Bold title — the object identifier (e.g. \"2266-DP1-R-SS\"). */\n\ttitle: string;\n\t/** Full WBS path, shown muted under the title. */\n\twbs: string;\n\t/** Overall completion percentage (0–100) for the header bar. */\n\tprogress: number;\n\t/** Optional pager shown beside the title (e.g. 1 of 4). */\n\tpage?: {current: number; total: number};\n\t/** Operation rows for the table. */\n\trows: OperationRow[];\n\tonWalkthrough?: () => void;\n\tonClose?: () => void;\n\tonPrev?: () => void;\n\tonNext?: () => void;\n\tonDiscard?: () => void;\n\tonSave?: () => void;\n\tclassName?: string;\n}\n\nconst numericHead = \"wwc:h-9 wwc:w-12 wwc:px-1.5 wwc:text-center wwc:text-[11px] wwc:uppercase wwc:tracking-wide\";\nconst numericCell = \"wwc:px-1.5 wwc:text-center wwc:text-xs wwc:text-foreground\";\n\n/**\n * A drawer for reviewing and editing the operations under a single object: a header (identifier, WBS\n * path, overall progress, and a walkthrough button), a compact per-operation table with an editable\n * progress field, and a discard / save footer (Save is disabled until a progress value changes).\n * Composed from Core Table, Progress, Input, and Button.\n */\nexport function OperationsDrawer({\n\ttitle,\n\twbs,\n\tprogress,\n\tpage,\n\trows,\n\tonWalkthrough,\n\tonClose,\n\tonPrev,\n\tonNext,\n\tonDiscard,\n\tonSave,\n\tclassName,\n}: OperationsDrawerProps) {\n\t// Snapshot the progress values first seen for this set of operations; Save enables only once a value\n\t// diverges from that snapshot. A new operation set (e.g. paging to another object) re-snapshots.\n\tconst rowsKey = rows.map((r) => r.code).join(\"|\");\n\tconst snapshotKey = useRef(\"\");\n\tconst initialByCode = useRef<Record<string, string>>({});\n\tif (snapshotKey.current !== rowsKey) {\n\t\tsnapshotKey.current = rowsKey;\n\t\tinitialByCode.current = Object.fromEntries(rows.map((r) => [r.code, r.progress]));\n\t}\n\tconst dirty = rows.some((r) => r.progress !== initialByCode.current[r.code]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"wwc:flex wwc:h-full wwc:w-[440px] wwc:max-w-full wwc:flex-col wwc:overflow-hidden wwc:rounded-b-lg wwc:border wwc:border-border wwc:bg-background wwc:shadow-lg\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{/* Header */}\n\t\t\t<div className=\"wwc:flex wwc:flex-col wwc:gap-3 wwc:px-5 wwc:py-4\">\n\t\t\t\t<div className=\"wwc:flex wwc:items-center wwc:justify-between wwc:gap-2\">\n\t\t\t\t\t<h2 className=\"wwc:truncate wwc:text-sm wwc:font-bold wwc:text-foreground\">{title}</h2>\n\t\t\t\t\t<div className=\"wwc:flex wwc:shrink-0 wwc:items-center wwc:gap-1\">\n\t\t\t\t\t\t{page && (\n\t\t\t\t\t\t\t<div className=\"wwc:flex wwc:items-center wwc:text-muted-foreground\">\n\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\" icon aria-label=\"Previous object\" onClick={onPrev}>\n\t\t\t\t\t\t\t\t\t<ChevronLeft />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t<span className=\"wwc:tabular-nums wwc:text-xs\">\n\t\t\t\t\t\t\t\t\t{page.current} / {page.total}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\" icon aria-label=\"Next object\" onClick={onNext}>\n\t\t\t\t\t\t\t\t\t<ChevronRight />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\" icon aria-label=\"Close\" onClick={onClose}>\n\t\t\t\t\t\t\t<X />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<p className=\"wwc:text-xs wwc:text-muted-foreground\">{wbs}</p>\n\n\t\t\t\t<div className=\"wwc:flex wwc:items-center wwc:gap-3\">\n\t\t\t\t\t<Progress value={progress} className=\"wwc:h-1.5 wwc:flex-1\" />\n\t\t\t\t\t<span className=\"wwc:shrink-0 wwc:text-xs wwc:font-semibold wwc:text-muted-foreground\">{progress}%</span>\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" onClick={onWalkthrough}>\n\t\t\t\t\t\t<Video />\n\t\t\t\t\t\tWalkthrough\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Operations table */}\n\t\t\t<div className=\"wwc:min-h-0 wwc:flex-1 wwc:overflow-y-auto wwc:border-t wwc:border-border\">\n\t\t\t\t<Table>\n\t\t\t\t\t<TableHeader className=\"wwc:bg-muted\">\n\t\t\t\t\t\t<TableRow className=\"wwc:hover:bg-muted\">\n\t\t\t\t\t\t\t<TableHead className=\"wwc:h-9 wwc:px-4 wwc:text-[11px] wwc:uppercase wwc:tracking-wide\">\n\t\t\t\t\t\t\t\tOperation\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t\t<TableHead className={numericHead}>WT</TableHead>\n\t\t\t\t\t\t\t<TableHead className={numericHead}>Prev</TableHead>\n\t\t\t\t\t\t\t<TableHead className={numericHead}>BAC</TableHead>\n\t\t\t\t\t\t\t<TableHead className={numericHead}>EV</TableHead>\n\t\t\t\t\t\t\t<TableHead className=\"wwc:h-9 wwc:w-[88px] wwc:px-3 wwc:text-right wwc:text-[11px] wwc:uppercase wwc:tracking-wide\">\n\t\t\t\t\t\t\t\tProgress\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t</TableHeader>\n\t\t\t\t\t<TableBody>\n\t\t\t\t\t\t{rows.map((row) => (\n\t\t\t\t\t\t\t<TableRow key={row.code}>\n\t\t\t\t\t\t\t\t<TableCell className=\"wwc:px-4 wwc:py-2.5\">\n\t\t\t\t\t\t\t\t\t<div className=\"wwc:flex wwc:flex-col\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"wwc:truncate wwc:text-xs wwc:font-semibold wwc:text-foreground\" title={row.name}>\n\t\t\t\t\t\t\t\t\t\t\t{row.name}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t<span className=\"wwc:text-[11px] wwc:text-muted-foreground\">{row.code}</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t\t<TableCell className={numericCell}>{row.wt}</TableCell>\n\t\t\t\t\t\t\t\t<TableCell className={numericCell}>{row.prev}</TableCell>\n\t\t\t\t\t\t\t\t<TableCell className={numericCell}>{row.bac}</TableCell>\n\t\t\t\t\t\t\t\t<TableCell className={numericCell}>{row.ev}</TableCell>\n\t\t\t\t\t\t\t\t<TableCell className=\"wwc:px-3 wwc:py-2.5\">\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\tvalue={row.progress}\n\t\t\t\t\t\t\t\t\t\tonChange={(e) => row.onProgressChange?.(e.target.value)}\n\t\t\t\t\t\t\t\t\t\taria-label={`${row.name} progress`}\n\t\t\t\t\t\t\t\t\t\tclassName=\"wwc:ml-auto wwc:h-8 wwc:w-14 wwc:px-2 wwc:text-center wwc:text-xs\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t\t</TableRow>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableBody>\n\t\t\t\t</Table>\n\t\t\t</div>\n\n\t\t\t{/* Footer */}\n\t\t\t<div className=\"wwc:flex wwc:items-center wwc:justify-between wwc:border-t wwc:border-border wwc:px-5 wwc:py-3\">\n\t\t\t\t<Button variant=\"ghost\" onClick={onDiscard}>\n\t\t\t\t\tDiscard\n\t\t\t\t</Button>\n\t\t\t\t<Button onClick={onSave} disabled={!dirty}>\n\t\t\t\t\tSave changes\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import * as React from "react";
2
+ //#region src/outline.d.ts
3
+ export interface OutlineItem {
4
+ id: string;
5
+ label: string;
6
+ level: number;
7
+ children?: OutlineItem[];
8
+ }
9
+ export interface OutlineProps extends React.HTMLAttributes<HTMLElement> {
10
+ /** Outline items (headings) */
11
+ items: OutlineItem[];
12
+ /** Currently active item ID */
13
+ activeId?: string;
14
+ /** Callback when an item is clicked */
15
+ onItemClick?: (id: string) => void;
16
+ /** Maximum nesting level to display */
17
+ maxLevel?: number;
18
+ /** Indent per level in pixels */
19
+ indentSize?: number;
20
+ /** Show connecting lines */
21
+ showLines?: boolean;
22
+ }
23
+ /** Document outline navigation component for table of contents. */
24
+ declare const Outline: React.ForwardRefExoticComponent<OutlineProps & React.RefAttributes<HTMLElement>>;
25
+ //#endregion
26
+ export { Outline };
27
+ //# sourceMappingURL=outline.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline.d.mts","names":[],"sources":["../src/outline.tsx"],"mappings":";;iBAGiB;EAChB;EACA;EACA;EACA,WAAW;;iBAGK,qBAAqB,MAAM,eAAe;;EAE1D,OAAO;;EAEP;;EAEA,eAAe;;EAEf;;EAEA;;EAEA;;;cAIK,SAAO,MAAA,0BAAA,eAAA,MAAA,cAAA"}
@@ -0,0 +1,47 @@
1
+ import { cn } from "@corensystem/coren-utils";
2
+ import * as React from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/outline.tsx
5
+ /** Document outline navigation component for table of contents. */
6
+ const Outline = React.forwardRef(({ className, items, activeId, onItemClick, maxLevel = 6, indentSize = 16, showLines = false, ...props }, ref) => {
7
+ const renderItem = (item) => {
8
+ if (item.level > maxLevel) return null;
9
+ const isActive = item.id === activeId;
10
+ const indent = (item.level - 1) * indentSize;
11
+ return /* @__PURE__ */ jsxs("li", {
12
+ className: "wwc:relative",
13
+ children: [
14
+ showLines && item.level > 1 && /* @__PURE__ */ jsx("div", {
15
+ className: "wwc:absolute wwc:left-0 wwc:top-0 wwc:bottom-0 wwc:border-l wwc:border-border",
16
+ style: { left: `${indent - indentSize / 2}px` }
17
+ }),
18
+ /* @__PURE__ */ jsx("button", {
19
+ type: "button",
20
+ onClick: () => onItemClick?.(item.id),
21
+ className: cn("wwc:w-full wwc:text-left wwc:py-1.5 wwc:px-2 wwc:rounded-md wwc:text-sm wwc:transition-colors", "hover:wwc:bg-accent hover:wwc:text-accent-foreground", isActive ? "wwc:bg-accent wwc:text-accent-foreground wwc:font-medium" : "wwc:text-muted-foreground"),
22
+ style: { paddingLeft: `${indent + 8}px` },
23
+ children: item.label
24
+ }),
25
+ item.children && item.children.length > 0 && /* @__PURE__ */ jsx("ul", {
26
+ className: "wwc:list-none wwc:m-0 wwc:p-0",
27
+ children: item.children.map(renderItem)
28
+ })
29
+ ]
30
+ }, item.id);
31
+ };
32
+ return /* @__PURE__ */ jsx("nav", {
33
+ ref,
34
+ className: cn("wwc:relative", className),
35
+ "aria-label": "Document outline",
36
+ ...props,
37
+ children: /* @__PURE__ */ jsx("ul", {
38
+ className: "wwc:list-none wwc:m-0 wwc:p-0 wwc:space-y-0.5",
39
+ children: items.map(renderItem)
40
+ })
41
+ });
42
+ });
43
+ Outline.displayName = "Outline";
44
+ //#endregion
45
+ export { Outline };
46
+
47
+ //# sourceMappingURL=outline.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline.mjs","names":[],"sources":["../src/outline.tsx"],"sourcesContent":["import {cn} from \"@corensystem/coren-utils\";\nimport * as React from \"react\";\n\nexport interface OutlineItem {\n\tid: string;\n\tlabel: string;\n\tlevel: number;\n\tchildren?: OutlineItem[];\n}\n\nexport interface OutlineProps extends React.HTMLAttributes<HTMLElement> {\n\t/** Outline items (headings) */\n\titems: OutlineItem[];\n\t/** Currently active item ID */\n\tactiveId?: string;\n\t/** Callback when an item is clicked */\n\tonItemClick?: (id: string) => void;\n\t/** Maximum nesting level to display */\n\tmaxLevel?: number;\n\t/** Indent per level in pixels */\n\tindentSize?: number;\n\t/** Show connecting lines */\n\tshowLines?: boolean;\n}\n\n/** Document outline navigation component for table of contents. */\nconst Outline = React.forwardRef<HTMLElement, OutlineProps>(\n\t({className, items, activeId, onItemClick, maxLevel = 6, indentSize = 16, showLines = false, ...props}, ref) => {\n\t\tconst renderItem = (item: OutlineItem) => {\n\t\t\tif (item.level > maxLevel) return null;\n\n\t\t\tconst isActive = item.id === activeId;\n\t\t\tconst indent = (item.level - 1) * indentSize;\n\n\t\t\treturn (\n\t\t\t\t<li key={item.id} className=\"wwc:relative\">\n\t\t\t\t\t{showLines && item.level > 1 && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"wwc:absolute wwc:left-0 wwc:top-0 wwc:bottom-0 wwc:border-l wwc:border-border\"\n\t\t\t\t\t\t\tstyle={{left: `${indent - indentSize / 2}px`}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => onItemClick?.(item.id)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"wwc:w-full wwc:text-left wwc:py-1.5 wwc:px-2 wwc:rounded-md wwc:text-sm wwc:transition-colors\",\n\t\t\t\t\t\t\t\"hover:wwc:bg-accent hover:wwc:text-accent-foreground\",\n\t\t\t\t\t\t\tisActive ? \"wwc:bg-accent wwc:text-accent-foreground wwc:font-medium\" : \"wwc:text-muted-foreground\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{paddingLeft: `${indent + 8}px`}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</button>\n\t\t\t\t\t{item.children && item.children.length > 0 && (\n\t\t\t\t\t\t<ul className=\"wwc:list-none wwc:m-0 wwc:p-0\">{item.children.map(renderItem)}</ul>\n\t\t\t\t\t)}\n\t\t\t\t</li>\n\t\t\t);\n\t\t};\n\n\t\treturn (\n\t\t\t<nav ref={ref} className={cn(\"wwc:relative\", className)} aria-label=\"Document outline\" {...props}>\n\t\t\t\t<ul className=\"wwc:list-none wwc:m-0 wwc:p-0 wwc:space-y-0.5\">{items.map(renderItem)}</ul>\n\t\t\t</nav>\n\t\t);\n\t},\n);\nOutline.displayName = \"Outline\";\n\nexport {Outline};\n"],"mappings":";;;;;AA0BA,MAAM,UAAU,MAAM,YACpB,EAAC,WAAW,OAAO,UAAU,aAAa,WAAW,GAAG,aAAa,IAAI,YAAY,OAAO,GAAG,SAAQ,QAAQ;CAC/G,MAAM,cAAc,SAAsB;EACzC,IAAI,KAAK,QAAQ,UAAU,OAAO;EAElC,MAAM,WAAW,KAAK,OAAO;EAC7B,MAAM,UAAU,KAAK,QAAQ,KAAK;EAElC,OACC,qBAAC,MAAD;GAAkB,WAAU;GAA5B,UAAA;IACE,aAAa,KAAK,QAAQ,KAC1B,oBAAC,OAAD;KACC,WAAU;KACV,OAAO,EAAC,MAAM,GAAG,SAAS,aAAa,EAAE,IAAG;IAC5C,CAAA;IAEF,oBAAC,UAAD;KACC,MAAK;KACL,eAAe,cAAc,KAAK,EAAE;KACpC,WAAW,GACV,iGACA,wDACA,WAAW,6DAA6D,2BACzE;KACA,OAAO,EAAC,aAAa,GAAG,SAAS,EAAE,IAAG;KAErC,UAAA,KAAK;IACC,CAAA;IACP,KAAK,YAAY,KAAK,SAAS,SAAS,KACxC,oBAAC,MAAD;KAAI,WAAU;KAAiC,UAAA,KAAK,SAAS,IAAI,UAAU;IAAM,CAAA;GAE/E;EAtBK,GAAA,KAAK,EAsBV;CAEN;CAEA,OACC,oBAAC,OAAD;EAAU;EAAK,WAAW,GAAG,gBAAgB,SAAS;EAAG,cAAW;EAAmB,GAAI;EAC1F,UAAA,oBAAC,MAAD;GAAI,WAAU;GAAiD,UAAA,MAAM,IAAI,UAAU;EAAM,CAAA;CACrF,CAAA;AAEP,CACD;AACA,QAAQ,cAAc"}
@@ -0,0 +1,23 @@
1
+ import * as React from "react";
2
+ //#region src/overflow-list.d.ts
3
+ export interface OverflowListProps<T> {
4
+ /** Array of items to display */
5
+ items: T[];
6
+ /** Maximum number of items to show before overflow */
7
+ maxVisible?: number;
8
+ /** Render function for each item */
9
+ renderItem: (item: T, index: number) => React.ReactNode;
10
+ /** Render function for the overflow trigger */
11
+ renderOverflow?: (count: number) => React.ReactNode;
12
+ /** Render function for items in the overflow popover */
13
+ renderOverflowItem?: (item: T, index: number) => React.ReactNode;
14
+ /** className for the container */
15
+ className?: string;
16
+ /** className for the list */
17
+ listClassName?: string;
18
+ }
19
+ /** A list component that shows a subset of items and hides the rest in an overflow menu. */
20
+ declare function OverflowList<T>({ items, maxVisible, renderItem, renderOverflow, renderOverflowItem, className, listClassName }: OverflowListProps<T>): import("react/jsx-runtime").JSX.Element;
21
+ //#endregion
22
+ export { OverflowList };
23
+ //# sourceMappingURL=overflow-list.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overflow-list.d.mts","names":[],"sources":["../src/overflow-list.tsx"],"mappings":";;iBAKiB,kBAAkB;;EAElC,OAAO;;EAEP;;EAEA,aAAa,MAAM,GAAG,kBAAkB,MAAM;;EAE9C,kBAAkB,kBAAkB,MAAM;;EAE1C,sBAAsB,MAAM,GAAG,kBAAkB,MAAM;;EAEvD;;EAEA;;;iBAIQ,aAAa,KACrB,OACA,YACA,YACA,gBACA,oBACA,WACA,iBACE,kBAAkB,iCAAE,IAAA"}
@@ -0,0 +1,38 @@
1
+ import { Popover, PopoverContent, PopoverTrigger } from "./popover.mjs";
2
+ import { cn } from "@corensystem/coren-utils";
3
+ import * as React from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/overflow-list.tsx
6
+ /** A list component that shows a subset of items and hides the rest in an overflow menu. */
7
+ function OverflowList({ items, maxVisible = 3, renderItem, renderOverflow, renderOverflowItem, className, listClassName }) {
8
+ const visibleItems = items.slice(0, maxVisible);
9
+ const overflowItems = items.slice(maxVisible);
10
+ const hasOverflow = overflowItems.length > 0;
11
+ return /* @__PURE__ */ jsxs("div", {
12
+ className: cn("wwc:flex wwc:items-center wwc:gap-2", className),
13
+ children: [/* @__PURE__ */ jsx("div", {
14
+ className: cn("wwc:flex wwc:items-center wwc:gap-2", listClassName),
15
+ children: visibleItems.map((item, index) => /* @__PURE__ */ jsx(React.Fragment, { children: renderItem(item, index) }, index))
16
+ }), hasOverflow && /* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsx(PopoverTrigger, {
17
+ asChild: true,
18
+ children: /* @__PURE__ */ jsx("button", {
19
+ className: "wwc:text-sm wwc:text-muted-foreground wwc:hover:text-foreground wwc:transition-colors",
20
+ children: renderOverflow ? renderOverflow(overflowItems.length) : /* @__PURE__ */ jsxs("span", { children: [
21
+ "+",
22
+ overflowItems.length,
23
+ " more"
24
+ ] })
25
+ })
26
+ }), /* @__PURE__ */ jsx(PopoverContent, {
27
+ className: "wwc:w-auto wwc:p-2",
28
+ children: /* @__PURE__ */ jsx("div", {
29
+ className: "wwc:space-y-1",
30
+ children: overflowItems.map((item, index) => /* @__PURE__ */ jsx("div", { children: renderOverflowItem ? renderOverflowItem(item, index + maxVisible) : renderItem(item, index + maxVisible) }, index))
31
+ })
32
+ })] })]
33
+ });
34
+ }
35
+ //#endregion
36
+ export { OverflowList };
37
+
38
+ //# sourceMappingURL=overflow-list.mjs.map