@omnitron-dev/prism 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/README.md +216 -2
  2. package/THIRD-PARTY-NOTICES.txt +26 -0
  3. package/dist/accessibility/index.js +2 -0
  4. package/dist/accessibility/index.js.map +1 -1
  5. package/dist/auth/index.d.ts +4 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +4 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/blocks/auth-block/guards.d.ts +3 -2
  10. package/dist/blocks/auth-block/guards.d.ts.map +1 -1
  11. package/dist/blocks/dashboard-block/dashboard-block.d.ts.map +1 -1
  12. package/dist/blocks/dashboard-block/types.d.ts +4 -2
  13. package/dist/blocks/dashboard-block/types.d.ts.map +1 -1
  14. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts +2 -2
  15. package/dist/blocks/dashboard-block/use-dashboard-block.d.ts.map +1 -1
  16. package/dist/blocks/data-grid-block/data-grid-block.d.ts.map +1 -1
  17. package/dist/blocks/data-grid-block/types.d.ts +3 -0
  18. package/dist/blocks/data-grid-block/types.d.ts.map +1 -1
  19. package/dist/blocks/index.js +80 -253
  20. package/dist/blocks/index.js.map +1 -1
  21. package/dist/chunk-2AB7VGPW.js +447 -0
  22. package/dist/chunk-2AB7VGPW.js.map +1 -0
  23. package/dist/{chunk-WFD54GQQ.js → chunk-2E67PQ4T.js} +14 -573
  24. package/dist/chunk-2E67PQ4T.js.map +1 -0
  25. package/dist/chunk-2KG2NI73.js +84 -0
  26. package/dist/chunk-2KG2NI73.js.map +1 -0
  27. package/dist/chunk-2UYRW6X3.js +44 -0
  28. package/dist/chunk-2UYRW6X3.js.map +1 -0
  29. package/dist/chunk-36C5H56C.js +208 -0
  30. package/dist/chunk-36C5H56C.js.map +1 -0
  31. package/dist/chunk-36FOXX25.js +73 -0
  32. package/dist/chunk-36FOXX25.js.map +1 -0
  33. package/dist/chunk-3VSM7NZG.js +562 -0
  34. package/dist/chunk-3VSM7NZG.js.map +1 -0
  35. package/dist/chunk-4B2LTPK2.js +826 -0
  36. package/dist/chunk-4B2LTPK2.js.map +1 -0
  37. package/dist/chunk-4HUGZJKU.js +108 -0
  38. package/dist/chunk-4HUGZJKU.js.map +1 -0
  39. package/dist/chunk-4Q5L7LDG.js +74 -0
  40. package/dist/chunk-4Q5L7LDG.js.map +1 -0
  41. package/dist/{chunk-BRDWQVRT.js → chunk-4R7EZ7GQ.js} +3 -2
  42. package/dist/chunk-4R7EZ7GQ.js.map +1 -0
  43. package/dist/chunk-6IANOSMD.js +185 -0
  44. package/dist/chunk-6IANOSMD.js.map +1 -0
  45. package/dist/chunk-7ATBURW2.js +206 -0
  46. package/dist/chunk-7ATBURW2.js.map +1 -0
  47. package/dist/{chunk-6AHI4GSV.js → chunk-AATAOOSF.js} +4 -3
  48. package/dist/chunk-AATAOOSF.js.map +1 -0
  49. package/dist/chunk-AKLRKCYH.js +128 -0
  50. package/dist/chunk-AKLRKCYH.js.map +1 -0
  51. package/dist/chunk-CT46KJOR.js +133 -0
  52. package/dist/chunk-CT46KJOR.js.map +1 -0
  53. package/dist/{chunk-YQW43BDH.js → chunk-D4GFAJAZ.js} +1168 -6354
  54. package/dist/chunk-D4GFAJAZ.js.map +1 -0
  55. package/dist/chunk-D5J3KW6Q.js +106 -0
  56. package/dist/chunk-D5J3KW6Q.js.map +1 -0
  57. package/dist/chunk-DEPJRTVT.js +3 -0
  58. package/dist/{chunk-FU52GL2E.js.map → chunk-DEPJRTVT.js.map} +1 -1
  59. package/dist/{chunk-S6SEGBX6.js → chunk-DHTYHUYI.js} +85 -107
  60. package/dist/chunk-DHTYHUYI.js.map +1 -0
  61. package/dist/chunk-E7WM2RXA.js +249 -0
  62. package/dist/chunk-E7WM2RXA.js.map +1 -0
  63. package/dist/chunk-F6RZ7LW6.js +1271 -0
  64. package/dist/chunk-F6RZ7LW6.js.map +1 -0
  65. package/dist/chunk-FOGY3HA4.js +217 -0
  66. package/dist/chunk-FOGY3HA4.js.map +1 -0
  67. package/dist/chunk-G2GANYMW.js +139 -0
  68. package/dist/chunk-G2GANYMW.js.map +1 -0
  69. package/dist/chunk-I6DILPFE.js +293 -0
  70. package/dist/chunk-I6DILPFE.js.map +1 -0
  71. package/dist/chunk-IRYU3NTG.js +573 -0
  72. package/dist/chunk-IRYU3NTG.js.map +1 -0
  73. package/dist/chunk-JTIUGPW5.js +284 -0
  74. package/dist/chunk-JTIUGPW5.js.map +1 -0
  75. package/dist/{chunk-GUFHFEPZ.js → chunk-JZBSPDED.js} +2 -2
  76. package/dist/{chunk-GUFHFEPZ.js.map → chunk-JZBSPDED.js.map} +1 -1
  77. package/dist/chunk-KPY7TA4D.js +191 -0
  78. package/dist/chunk-KPY7TA4D.js.map +1 -0
  79. package/dist/{chunk-OBJ244BO.js → chunk-LFWKGNCX.js} +50 -656
  80. package/dist/chunk-LFWKGNCX.js.map +1 -0
  81. package/dist/chunk-LH4ZZZYB.js +37 -0
  82. package/dist/chunk-LH4ZZZYB.js.map +1 -0
  83. package/dist/chunk-NFJ7CPG3.js +13 -0
  84. package/dist/chunk-NFJ7CPG3.js.map +1 -0
  85. package/dist/chunk-NFPOIHD4.js +3 -0
  86. package/dist/{chunk-AYYFMTMI.js.map → chunk-NFPOIHD4.js.map} +1 -1
  87. package/dist/{chunk-XIXSSI3B.js → chunk-NJM5AVBM.js} +3 -2
  88. package/dist/chunk-NJM5AVBM.js.map +1 -0
  89. package/dist/{chunk-Z5OSPAOC.js → chunk-NSNM53WI.js} +196 -175
  90. package/dist/chunk-NSNM53WI.js.map +1 -0
  91. package/dist/chunk-NTREGTG7.js +31 -0
  92. package/dist/chunk-NTREGTG7.js.map +1 -0
  93. package/dist/{chunk-ADG4HZEP.js → chunk-OKJA6SJM.js} +4 -4
  94. package/dist/chunk-OKJA6SJM.js.map +1 -0
  95. package/dist/chunk-Q6JDNFSG.js +303 -0
  96. package/dist/chunk-Q6JDNFSG.js.map +1 -0
  97. package/dist/chunk-RPOGINR5.js +115 -0
  98. package/dist/chunk-RPOGINR5.js.map +1 -0
  99. package/dist/{chunk-ZTATTUH7.js → chunk-RSWVYIXK.js} +282 -683
  100. package/dist/chunk-RSWVYIXK.js.map +1 -0
  101. package/dist/chunk-SSEHL5VP.js +110 -0
  102. package/dist/chunk-SSEHL5VP.js.map +1 -0
  103. package/dist/chunk-TEIGUOWN.js +523 -0
  104. package/dist/chunk-TEIGUOWN.js.map +1 -0
  105. package/dist/{chunk-AYYFMTMI.js → chunk-TJ7DHXUX.js} +2 -2
  106. package/dist/chunk-TJ7DHXUX.js.map +1 -0
  107. package/dist/chunk-TZHWYT34.js +590 -0
  108. package/dist/chunk-TZHWYT34.js.map +1 -0
  109. package/dist/chunk-TZWHELY4.js +45 -0
  110. package/dist/chunk-TZWHELY4.js.map +1 -0
  111. package/dist/{chunk-BZOL7GMU.js → chunk-UEINJFLS.js} +7 -7
  112. package/dist/chunk-UEINJFLS.js.map +1 -0
  113. package/dist/chunk-URFQX3I6.js +129 -0
  114. package/dist/chunk-URFQX3I6.js.map +1 -0
  115. package/dist/chunk-VG6FOMOH.js +187 -0
  116. package/dist/chunk-VG6FOMOH.js.map +1 -0
  117. package/dist/chunk-VQVVHMPG.js +106 -0
  118. package/dist/chunk-VQVVHMPG.js.map +1 -0
  119. package/dist/{chunk-DRFNMZLG.js → chunk-VUKOT432.js} +3 -2
  120. package/dist/chunk-VUKOT432.js.map +1 -0
  121. package/dist/chunk-WD4N72DL.js +315 -0
  122. package/dist/chunk-WD4N72DL.js.map +1 -0
  123. package/dist/chunk-XBYMG4QK.js +119 -0
  124. package/dist/chunk-XBYMG4QK.js.map +1 -0
  125. package/dist/chunk-YHM6GIHV.js +3 -0
  126. package/dist/chunk-YHM6GIHV.js.map +1 -0
  127. package/dist/{chunk-SNZK5X6F.js → chunk-Z2AN43YU.js} +4 -2
  128. package/dist/chunk-Z2AN43YU.js.map +1 -0
  129. package/dist/chunk-ZNWHMQRM.js +171 -0
  130. package/dist/chunk-ZNWHMQRM.js.map +1 -0
  131. package/dist/{chunk-YSIG2XYH.js → chunk-ZRJYQN6Y.js} +2 -2
  132. package/dist/{chunk-YSIG2XYH.js.map → chunk-ZRJYQN6Y.js.map} +1 -1
  133. package/dist/{chunk-AD4W7HYC.js → chunk-ZYI3MHLE.js} +3 -2
  134. package/dist/chunk-ZYI3MHLE.js.map +1 -0
  135. package/dist/cli/index.js +66 -423
  136. package/dist/cli/index.js.map +1 -1
  137. package/dist/components/accordion/accordion.d.ts.map +1 -1
  138. package/dist/components/admin-filters/admin-data-table.d.ts +7 -1
  139. package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
  140. package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
  141. package/dist/components/admin-filters/index.js +8 -0
  142. package/dist/components/admin-filters/index.js.map +1 -0
  143. package/dist/components/alert/alert.d.ts.map +1 -1
  144. package/dist/components/alert/index.js +5 -0
  145. package/dist/components/alert/index.js.map +1 -0
  146. package/dist/components/animate/index.js +5 -0
  147. package/dist/components/animate/index.js.map +1 -0
  148. package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  149. package/dist/components/breadcrumbs/index.js +4 -0
  150. package/dist/components/breadcrumbs/index.js.map +1 -0
  151. package/dist/components/card/index.js +4 -0
  152. package/dist/components/card/index.js.map +1 -0
  153. package/dist/components/chart/chart.d.ts.map +1 -1
  154. package/dist/components/chart/index.css +52 -0
  155. package/dist/components/chart/index.css.map +1 -0
  156. package/dist/components/chart/index.js +5 -0
  157. package/dist/components/chart/index.js.map +1 -0
  158. package/dist/components/chart/types.d.ts +3 -1
  159. package/dist/components/chart/types.d.ts.map +1 -1
  160. package/dist/components/chart/use-chart.d.ts.map +1 -1
  161. package/dist/components/command-palette/command-palette.d.ts +3 -1
  162. package/dist/components/command-palette/command-palette.d.ts.map +1 -1
  163. package/dist/components/command-palette/index.js +4 -0
  164. package/dist/components/command-palette/index.js.map +1 -0
  165. package/dist/components/confirm-dialog/index.js +4 -0
  166. package/dist/components/confirm-dialog/index.js.map +1 -0
  167. package/dist/components/date-input/date-input.d.ts +28 -0
  168. package/dist/components/date-input/date-input.d.ts.map +1 -0
  169. package/dist/components/date-input/index.d.ts +3 -0
  170. package/dist/components/date-input/index.d.ts.map +1 -0
  171. package/dist/components/date-input/value.d.ts +9 -0
  172. package/dist/components/date-input/value.d.ts.map +1 -0
  173. package/dist/components/doc-layout/doc-sidebar.d.ts +4 -1
  174. package/dist/components/doc-layout/doc-sidebar.d.ts.map +1 -1
  175. package/dist/components/doc-layout/index.js +7 -0
  176. package/dist/components/doc-layout/index.js.map +1 -0
  177. package/dist/components/editor/editor.d.ts.map +1 -1
  178. package/dist/components/editor/icons/index.d.ts +32 -40
  179. package/dist/components/editor/icons/index.d.ts.map +1 -1
  180. package/dist/components/editor/index.js +4 -1
  181. package/dist/components/editor/index.js.map +1 -1
  182. package/dist/components/emoji-picker/index.js +2 -1
  183. package/dist/components/emoji-picker/index.js.map +1 -1
  184. package/dist/components/empty-content/empty-content.d.ts.map +1 -1
  185. package/dist/components/empty-content/index.js +4 -0
  186. package/dist/components/empty-content/index.js.map +1 -0
  187. package/dist/components/error-boundary/error-boundary.d.ts.map +1 -1
  188. package/dist/components/error-boundary/index.js +6 -0
  189. package/dist/components/error-boundary/index.js.map +1 -0
  190. package/dist/components/index.css +17 -10
  191. package/dist/components/index.css.map +1 -1
  192. package/dist/components/index.d.ts +5 -4
  193. package/dist/components/index.d.ts.map +1 -1
  194. package/dist/components/index.js +47 -11
  195. package/dist/components/index.js.map +1 -1
  196. package/dist/components/knowledge-graph/edge-labels.d.ts +14 -0
  197. package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -0
  198. package/dist/components/knowledge-graph/graph.d.ts +56 -0
  199. package/dist/components/knowledge-graph/graph.d.ts.map +1 -0
  200. package/dist/components/knowledge-graph/index.css +176 -0
  201. package/dist/components/knowledge-graph/index.css.map +1 -0
  202. package/dist/components/knowledge-graph/index.d.ts +3 -0
  203. package/dist/components/knowledge-graph/index.d.ts.map +1 -0
  204. package/dist/components/knowledge-graph/index.js +797 -0
  205. package/dist/components/knowledge-graph/index.js.map +1 -0
  206. package/dist/components/knowledge-graph/label-layout.d.ts +28 -0
  207. package/dist/components/knowledge-graph/label-layout.d.ts.map +1 -0
  208. package/dist/components/knowledge-graph/label-store.d.ts +15 -0
  209. package/dist/components/knowledge-graph/label-store.d.ts.map +1 -0
  210. package/dist/components/knowledge-graph/model.d.ts +92 -0
  211. package/dist/components/knowledge-graph/model.d.ts.map +1 -0
  212. package/dist/components/label/index.js +5 -0
  213. package/dist/components/label/index.js.map +1 -0
  214. package/dist/components/label/label.d.ts.map +1 -1
  215. package/dist/components/lightbox/lightbox.d.ts.map +1 -1
  216. package/dist/components/loading-screen/index.js +4 -0
  217. package/dist/components/loading-screen/index.js.map +1 -0
  218. package/dist/components/map/Map.d.ts +19 -43
  219. package/dist/components/map/Map.d.ts.map +1 -1
  220. package/dist/components/map/MapCoverageLayer.d.ts +1 -1
  221. package/dist/components/map/MapCoverageLayer.d.ts.map +1 -1
  222. package/dist/components/map/MapMarker.d.ts +1 -1
  223. package/dist/components/map/MapMarker.d.ts.map +1 -1
  224. package/dist/components/map/MapPlaceSearch.d.ts +33 -0
  225. package/dist/components/map/MapPlaceSearch.d.ts.map +1 -0
  226. package/dist/components/map/MapPointPicker.d.ts +21 -12
  227. package/dist/components/map/MapPointPicker.d.ts.map +1 -1
  228. package/dist/components/map/coordinates.d.ts +10 -0
  229. package/dist/components/map/coordinates.d.ts.map +1 -0
  230. package/dist/components/map/index.css +4 -0
  231. package/dist/components/map/index.css.map +1 -0
  232. package/dist/components/map/index.d.ts +7 -2
  233. package/dist/components/map/index.d.ts.map +1 -1
  234. package/dist/components/map/index.js +4 -0
  235. package/dist/components/map/index.js.map +1 -0
  236. package/dist/components/nav-card/nav-card.d.ts.map +1 -1
  237. package/dist/components/navigation-progress/index.js +4 -0
  238. package/dist/components/navigation-progress/index.js.map +1 -0
  239. package/dist/components/page-content/index.js +4 -0
  240. package/dist/components/page-content/index.js.map +1 -0
  241. package/dist/components/popover/index.js +4 -0
  242. package/dist/components/popover/index.js.map +1 -0
  243. package/dist/components/rail/rail.d.ts.map +1 -1
  244. package/dist/components/research/diagram-image.d.ts +11 -0
  245. package/dist/components/research/diagram-image.d.ts.map +1 -0
  246. package/dist/components/research/diagram.d.ts +8 -0
  247. package/dist/components/research/diagram.d.ts.map +1 -0
  248. package/dist/components/research/document.d.ts +33 -0
  249. package/dist/components/research/document.d.ts.map +1 -0
  250. package/dist/components/research/frontmatter.d.ts +15 -0
  251. package/dist/components/research/frontmatter.d.ts.map +1 -0
  252. package/dist/components/research/index.css +51 -0
  253. package/dist/components/research/index.css.map +1 -0
  254. package/dist/components/research/index.d.ts +3 -0
  255. package/dist/components/research/index.d.ts.map +1 -0
  256. package/dist/components/research/index.js +8 -0
  257. package/dist/components/research/index.js.map +1 -0
  258. package/dist/components/research/parse.d.ts +29 -0
  259. package/dist/components/research/parse.d.ts.map +1 -0
  260. package/dist/components/research-editor/block-commands.d.ts +20 -0
  261. package/dist/components/research-editor/block-commands.d.ts.map +1 -0
  262. package/dist/components/research-editor/block-controls.d.ts +13 -0
  263. package/dist/components/research-editor/block-controls.d.ts.map +1 -0
  264. package/dist/components/research-editor/editor.d.ts +75 -0
  265. package/dist/components/research-editor/editor.d.ts.map +1 -0
  266. package/dist/components/research-editor/extensions.d.ts +14 -0
  267. package/dist/components/research-editor/extensions.d.ts.map +1 -0
  268. package/dist/components/research-editor/index.css +332 -0
  269. package/dist/components/research-editor/index.css.map +1 -0
  270. package/dist/components/research-editor/index.d.ts +5 -0
  271. package/dist/components/research-editor/index.d.ts.map +1 -0
  272. package/dist/components/research-editor/index.js +1593 -0
  273. package/dist/components/research-editor/index.js.map +1 -0
  274. package/dist/components/research-editor/math-input.d.ts +32 -0
  275. package/dist/components/research-editor/math-input.d.ts.map +1 -0
  276. package/dist/components/research-editor/math-markup.d.ts +4 -0
  277. package/dist/components/research-editor/math-markup.d.ts.map +1 -0
  278. package/dist/components/research-editor/math-navigation.d.ts +6 -0
  279. package/dist/components/research-editor/math-navigation.d.ts.map +1 -0
  280. package/dist/components/research-editor/math-node.d.ts +11 -0
  281. package/dist/components/research-editor/math-node.d.ts.map +1 -0
  282. package/dist/components/research-editor/source.d.ts +19 -0
  283. package/dist/components/research-editor/source.d.ts.map +1 -0
  284. package/dist/components/scroll-to-top/index.js +4 -0
  285. package/dist/components/scroll-to-top/index.js.map +1 -0
  286. package/dist/components/scrollbar/scrollbar.d.ts +4 -2
  287. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
  288. package/dist/components/search-input/index.js +7 -0
  289. package/dist/components/search-input/index.js.map +1 -0
  290. package/dist/components/search-input/search-input.d.ts +3 -11
  291. package/dist/components/search-input/search-input.d.ts.map +1 -1
  292. package/dist/components/skeleton/index.js +4 -0
  293. package/dist/components/skeleton/index.js.map +1 -0
  294. package/dist/components/snackbar/index.js +6 -0
  295. package/dist/components/snackbar/index.js.map +1 -0
  296. package/dist/components/stepper/index.js +4 -0
  297. package/dist/components/stepper/index.js.map +1 -0
  298. package/dist/components/table/index.d.ts +1 -0
  299. package/dist/components/table/index.d.ts.map +1 -1
  300. package/dist/components/table/index.js +5 -0
  301. package/dist/components/table/index.js.map +1 -0
  302. package/dist/components/table/table-viewport.d.ts +13 -0
  303. package/dist/components/table/table-viewport.d.ts.map +1 -0
  304. package/dist/components/table/table.d.ts +3 -1
  305. package/dist/components/table/table.d.ts.map +1 -1
  306. package/dist/components/tabs/index.js +6 -0
  307. package/dist/components/tabs/index.js.map +1 -0
  308. package/dist/components/tabs/tabs.d.ts +12 -1
  309. package/dist/components/tabs/tabs.d.ts.map +1 -1
  310. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts +4 -3
  311. package/dist/components/tiptap-renderer/tiptap-renderer.d.ts.map +1 -1
  312. package/dist/core/index.d.ts +1 -1
  313. package/dist/core/index.d.ts.map +1 -1
  314. package/dist/core/index.js +12 -6
  315. package/dist/core/index.js.map +1 -1
  316. package/dist/core/provider.d.ts +7 -2
  317. package/dist/core/provider.d.ts.map +1 -1
  318. package/dist/forms/index.js +2 -0
  319. package/dist/forms/index.js.map +1 -1
  320. package/dist/forms/schema-provider.d.ts +3 -3
  321. package/dist/forms/schema-utils.d.ts +3 -3
  322. package/dist/hooks/index.js +14 -8
  323. package/dist/hooks/index.js.map +1 -1
  324. package/dist/hooks/use-config-from-query.d.ts +2 -0
  325. package/dist/hooks/use-config-from-query.d.ts.map +1 -1
  326. package/dist/hooks/use-image-dimensions.d.ts.map +1 -1
  327. package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -1
  328. package/dist/hooks/use-scroll-position.d.ts.map +1 -1
  329. package/dist/hooks/use-window-size.d.ts.map +1 -1
  330. package/dist/icons/context.d.ts +17 -0
  331. package/dist/icons/context.d.ts.map +1 -0
  332. package/dist/icons/controls.d.ts +51 -0
  333. package/dist/icons/controls.d.ts.map +1 -0
  334. package/dist/icons/index.d.ts +3 -0
  335. package/dist/icons/index.d.ts.map +1 -0
  336. package/dist/icons/index.js +5 -0
  337. package/dist/icons/index.js.map +1 -0
  338. package/dist/icons/theme.d.ts +4 -0
  339. package/dist/icons/theme.d.ts.map +1 -0
  340. package/dist/index.css +17 -10
  341. package/dist/index.css.map +1 -1
  342. package/dist/index.js +57 -20
  343. package/dist/index.js.map +1 -1
  344. package/dist/internal/research-parser.js +3 -0
  345. package/dist/internal/research-parser.js.map +1 -0
  346. package/dist/layouts/core/header-section.d.ts +1 -0
  347. package/dist/layouts/core/header-section.d.ts.map +1 -1
  348. package/dist/layouts/dashboard/labels.d.ts +12 -0
  349. package/dist/layouts/dashboard/labels.d.ts.map +1 -0
  350. package/dist/layouts/dashboard/layout.d.ts +9 -1
  351. package/dist/layouts/dashboard/layout.d.ts.map +1 -1
  352. package/dist/layouts/dashboard/sidenav.d.ts +7 -3
  353. package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
  354. package/dist/layouts/index.d.ts +5 -0
  355. package/dist/layouts/index.d.ts.map +1 -1
  356. package/dist/layouts/index.js +9 -3
  357. package/dist/layouts/index.js.map +1 -1
  358. package/dist/layouts/panel-layout.d.ts +35 -0
  359. package/dist/layouts/panel-layout.d.ts.map +1 -0
  360. package/dist/layouts/sidebar-toggle.d.ts +11 -0
  361. package/dist/layouts/sidebar-toggle.d.ts.map +1 -0
  362. package/dist/netron/index.js +2 -1
  363. package/dist/netron/index.js.map +1 -1
  364. package/dist/registry/index.js +1 -1
  365. package/dist/state/create-store.d.ts.map +1 -1
  366. package/dist/state/index.js +3 -2
  367. package/dist/state/index.js.map +1 -1
  368. package/dist/state/settings-version.d.ts.map +1 -1
  369. package/dist/state/stores/auth.d.ts +4 -16
  370. package/dist/state/stores/auth.d.ts.map +1 -1
  371. package/dist/state/stores/ui.d.ts +7 -105
  372. package/dist/state/stores/ui.d.ts.map +1 -1
  373. package/dist/theme/components/Button.d.ts.map +1 -1
  374. package/dist/theme/components/Chip.d.ts.map +1 -1
  375. package/dist/theme/components/Dialog.d.ts.map +1 -1
  376. package/dist/theme/components/FormControls.d.ts +3 -12
  377. package/dist/theme/components/FormControls.d.ts.map +1 -1
  378. package/dist/theme/components/TextField.d.ts.map +1 -1
  379. package/dist/theme/components/index.d.ts.map +1 -1
  380. package/dist/theme/components/theme-utils.d.ts +2 -2
  381. package/dist/theme/components/theme-utils.d.ts.map +1 -1
  382. package/dist/theme/create-theme.d.ts +5 -17
  383. package/dist/theme/create-theme.d.ts.map +1 -1
  384. package/dist/theme/index.js +8 -2
  385. package/dist/theme/index.js.map +1 -1
  386. package/dist/theme/mixins.d.ts +3 -1
  387. package/dist/theme/mixins.d.ts.map +1 -1
  388. package/dist/theme/palette/overrides.d.ts +24 -0
  389. package/dist/theme/palette/overrides.d.ts.map +1 -0
  390. package/dist/theme/semantic-surface.d.ts +8 -0
  391. package/dist/theme/semantic-surface.d.ts.map +1 -0
  392. package/dist/types/index.js +2 -2
  393. package/dist/ui/index.d.ts +18 -0
  394. package/dist/ui/index.d.ts.map +1 -0
  395. package/dist/ui/index.js +149 -0
  396. package/dist/ui/index.js.map +1 -0
  397. package/dist/utils/async-lock.d.ts.map +1 -1
  398. package/package.json +200 -47
  399. package/dist/chunk-6AHI4GSV.js.map +0 -1
  400. package/dist/chunk-AD4W7HYC.js.map +0 -1
  401. package/dist/chunk-ADG4HZEP.js.map +0 -1
  402. package/dist/chunk-BRDWQVRT.js.map +0 -1
  403. package/dist/chunk-BZOL7GMU.js.map +0 -1
  404. package/dist/chunk-DRFNMZLG.js.map +0 -1
  405. package/dist/chunk-FU52GL2E.js +0 -3
  406. package/dist/chunk-OBJ244BO.js.map +0 -1
  407. package/dist/chunk-S6SEGBX6.js.map +0 -1
  408. package/dist/chunk-SNZK5X6F.js.map +0 -1
  409. package/dist/chunk-WFD54GQQ.js.map +0 -1
  410. package/dist/chunk-XIXSSI3B.js.map +0 -1
  411. package/dist/chunk-YQW43BDH.js.map +0 -1
  412. package/dist/chunk-Z5OSPAOC.js.map +0 -1
  413. package/dist/chunk-ZTATTUH7.js.map +0 -1
@@ -0,0 +1,562 @@
1
+ import { forwardRef, useRef, useState, useCallback, useEffect, useMemo } from 'react';
2
+ import { Box, Alert, LinearProgress, Stack, Paper, Typography, CircularProgress, Button, Autocomplete, TextField } from '@mui/material';
3
+ import { useTheme } from '@mui/material/styles';
4
+ import { Map as Map$1, NavigationControl, ScaleControl, Marker, Popup, Source, Layer } from 'react-map-gl/maplibre';
5
+ export { Layer, Popup, Source, useMap } from 'react-map-gl/maplibre';
6
+ import { addProtocol } from 'maplibre-gl';
7
+ import { Protocol } from 'pmtiles';
8
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
+
10
+ // src/components/map/Map.tsx
11
+ var protocol = new Protocol();
12
+ addProtocol("pmtiles", protocol.tile);
13
+ var messages = {
14
+ label: "Interactive map",
15
+ missingStyle: "A map source has not been configured.",
16
+ loading: "Loading map",
17
+ error: "Some map data could not be loaded. Check the connection or map source."
18
+ };
19
+ var world = { longitude: 0, latitude: 0, zoom: 1, bearing: 0, pitch: 0 };
20
+ var Map = forwardRef(function MapView({
21
+ styleUrl,
22
+ styles,
23
+ viewport,
24
+ initialViewport,
25
+ onViewportChange,
26
+ showNavigation = true,
27
+ showScale = true,
28
+ showAttribution = true,
29
+ style,
30
+ messages: overrides,
31
+ children,
32
+ onMove,
33
+ onLoad,
34
+ onError,
35
+ cooperativeGestures = true,
36
+ ...engine
37
+ }, forwardedRef) {
38
+ const theme = useTheme();
39
+ const copy = { ...messages, ...overrides };
40
+ const legacyStyle = typeof window !== "undefined" ? window.__MAP_STYLE_URL__ : void 0;
41
+ const mapStyle = styleUrl ?? styles?.[theme.palette.mode] ?? legacyStyle;
42
+ const initial = { ...world, ...initialViewport };
43
+ const host = useRef(null);
44
+ const map = useRef(null);
45
+ const [readyStyle, setReadyStyle] = useState();
46
+ const [error, setError] = useState(false);
47
+ const setMap = useCallback(
48
+ (value) => {
49
+ map.current = value;
50
+ if (typeof forwardedRef === "function") forwardedRef(value);
51
+ else if (forwardedRef) forwardedRef.current = value;
52
+ },
53
+ [forwardedRef]
54
+ );
55
+ useEffect(() => {
56
+ if (!host.current || typeof ResizeObserver === "undefined") return void 0;
57
+ const observer = new ResizeObserver(() => map.current?.resize());
58
+ observer.observe(host.current);
59
+ return () => observer.disconnect();
60
+ }, []);
61
+ useEffect(() => setError(false), [mapStyle]);
62
+ return /* @__PURE__ */ jsx(
63
+ Box,
64
+ {
65
+ ref: host,
66
+ role: "region",
67
+ "aria-label": copy.label,
68
+ style,
69
+ sx: {
70
+ width: "100%",
71
+ height: 400,
72
+ position: "relative",
73
+ borderRadius: 1,
74
+ overflow: "hidden",
75
+ bgcolor: "background.paper",
76
+ "& .maplibregl-ctrl-group, & .maplibregl-popup-content": {
77
+ bgcolor: "background.paper",
78
+ color: "text.primary",
79
+ boxShadow: theme.shadows[2],
80
+ borderRadius: 1,
81
+ border: 1,
82
+ borderColor: "divider"
83
+ },
84
+ "& .maplibregl-ctrl-group button": { color: "text.primary", borderColor: "divider" },
85
+ "& .maplibregl-ctrl-icon": { filter: theme.palette.mode === "dark" ? "invert(1)" : "none" },
86
+ "& .maplibregl-ctrl-attrib": { bgcolor: "background.paper", color: "text.secondary" },
87
+ "& .maplibregl-ctrl-attrib a": { color: "inherit" },
88
+ "& .maplibregl-ctrl-scale": {
89
+ bgcolor: "background.paper",
90
+ color: "text.primary",
91
+ borderColor: "text.secondary"
92
+ },
93
+ "& .maplibregl-ctrl button:focus-visible": {
94
+ outline: `2px solid ${theme.palette.primary.main}`,
95
+ outlineOffset: -2
96
+ }
97
+ },
98
+ children: !mapStyle ? /* @__PURE__ */ jsx(Alert, { severity: "info", sx: { m: 2 }, children: copy.missingStyle }) : /* @__PURE__ */ jsxs(Fragment, { children: [
99
+ /* @__PURE__ */ jsxs(
100
+ Map$1,
101
+ {
102
+ ...engine,
103
+ ref: setMap,
104
+ mapStyle,
105
+ cooperativeGestures,
106
+ ...viewport ? { ...initial, ...viewport } : {
107
+ initialViewState: initial,
108
+ ...engine.initialViewState ? { initialViewState: engine.initialViewState } : {}
109
+ },
110
+ onMove: (event) => {
111
+ onViewportChange?.(event.viewState);
112
+ onMove?.(event);
113
+ },
114
+ onLoad: (event) => {
115
+ setReadyStyle(mapStyle);
116
+ onLoad?.(event);
117
+ },
118
+ onIdle: (event) => {
119
+ setReadyStyle(mapStyle);
120
+ engine.onIdle?.(event);
121
+ },
122
+ onError: (event) => {
123
+ setError(true);
124
+ onError?.(event);
125
+ },
126
+ attributionControl: showAttribution ? engine.attributionControl ?? {} : false,
127
+ style: { width: "100%", height: "100%" },
128
+ children: [
129
+ showNavigation && /* @__PURE__ */ jsx(NavigationControl, { position: "top-right" }),
130
+ showScale && /* @__PURE__ */ jsx(ScaleControl, { position: "bottom-left" }),
131
+ children
132
+ ]
133
+ }
134
+ ),
135
+ readyStyle !== mapStyle && !error && /* @__PURE__ */ jsx(LinearProgress, { "aria-label": copy.loading, sx: { position: "absolute", top: 0, left: 0, right: 0 } }),
136
+ error && /* @__PURE__ */ jsx(
137
+ Alert,
138
+ {
139
+ severity: "warning",
140
+ onClose: () => setError(false),
141
+ sx: { position: "absolute", left: 8, right: 8, top: 8 },
142
+ children: copy.error
143
+ }
144
+ )
145
+ ] })
146
+ }
147
+ );
148
+ });
149
+ function MapMarker({ longitude, latitude, color, children, popup, anchor = "bottom", onClick }) {
150
+ const theme = useTheme();
151
+ const [open, setOpen] = useState(false);
152
+ const fill = color ?? theme.palette.primary.main;
153
+ const handleClick = (e) => {
154
+ e.originalEvent?.stopPropagation?.();
155
+ if (popup) setOpen((v) => !v);
156
+ onClick?.();
157
+ };
158
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
159
+ /* @__PURE__ */ jsx(Marker, { longitude, latitude, anchor, onClick: handleClick, children: children ?? /* @__PURE__ */ jsxs("svg", { width: "24", height: "32", viewBox: "0 0 24 32", "aria-hidden": true, style: { display: "block" }, children: [
160
+ /* @__PURE__ */ jsx("path", { d: "M12 0C5.4 0 0 5.4 0 12c0 9 12 20 12 20s12-11 12-20C24 5.4 18.6 0 12 0z", fill }),
161
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "4", fill: "#fff" })
162
+ ] }) }),
163
+ popup && open && /* @__PURE__ */ jsx(
164
+ Popup,
165
+ {
166
+ longitude,
167
+ latitude,
168
+ anchor: "top",
169
+ offset: [0, -32],
170
+ closeOnClick: false,
171
+ onClose: () => setOpen(false),
172
+ children: popup
173
+ }
174
+ )
175
+ ] });
176
+ }
177
+
178
+ // src/components/map/coordinates.ts
179
+ function isMapPoint(value) {
180
+ return Number.isFinite(value.lng) && Number.isFinite(value.lat) && value.lng >= -180 && value.lng <= 180 && value.lat >= -90 && value.lat <= 90;
181
+ }
182
+ function normalizeMapPoint(lng, lat) {
183
+ if (!Number.isFinite(lng) || !Number.isFinite(lat) || Math.abs(lat) > 90) return null;
184
+ return { lng: lng >= -180 && lng <= 180 ? lng : ((lng + 180) % 360 + 360) % 360 - 180, lat };
185
+ }
186
+ function mapCameraLatitude(latitude) {
187
+ return Math.max(-85.0511287798066, Math.min(85.0511287798066, latitude));
188
+ }
189
+ var defaults = {
190
+ placeholder: "Choose a point on the map, or move the map and select its centre.",
191
+ coordinates: "Coordinates",
192
+ place: "Place",
193
+ loading: "Finding place\u2026",
194
+ unknown: "No place name for this point",
195
+ chooseCenter: "Select map centre",
196
+ clear: "Clear selection",
197
+ marker: "Selected point"
198
+ };
199
+ function MapPointPicker({
200
+ value,
201
+ onChange,
202
+ onClear,
203
+ initialViewport,
204
+ selectionZoom = 10,
205
+ styleUrl,
206
+ height = 480,
207
+ geocodeResult,
208
+ geocodeLoading = false,
209
+ geocodeError,
210
+ placeholder,
211
+ labels,
212
+ readOnly = false,
213
+ showDetails = true,
214
+ mapProps
215
+ }) {
216
+ const copy = { ...defaults, ...labels, ...placeholder ? { placeholder } : {} };
217
+ const valid = value && isMapPoint(value) ? value : null;
218
+ const [camera, setCamera] = useState(() => ({
219
+ longitude: valid?.lng ?? 0,
220
+ latitude: valid ? mapCameraLatitude(valid.lat) : 0,
221
+ zoom: valid ? 10 : 1,
222
+ ...initialViewport
223
+ }));
224
+ const [loaded, setLoaded] = useState(false);
225
+ const longitude = valid?.lng;
226
+ const latitude = valid?.lat;
227
+ useEffect(() => {
228
+ if (longitude !== void 0 && latitude !== void 0)
229
+ setCamera((old) => ({
230
+ ...old,
231
+ longitude,
232
+ latitude: mapCameraLatitude(latitude),
233
+ zoom: Math.max(old.zoom, selectionZoom)
234
+ }));
235
+ }, [longitude, latitude, selectionZoom]);
236
+ function choose(lng, lat) {
237
+ const point = normalizeMapPoint(lng, lat);
238
+ if (point && !readOnly) onChange(point);
239
+ }
240
+ return /* @__PURE__ */ jsxs(Stack, { sx: { gap: 2, width: "100%" }, children: [
241
+ /* @__PURE__ */ jsxs(
242
+ Box,
243
+ {
244
+ sx: {
245
+ display: "grid",
246
+ gridTemplateColumns: showDetails ? { xs: "1fr", md: "minmax(0,1fr) 280px" } : "1fr",
247
+ gap: 2
248
+ },
249
+ children: [
250
+ /* @__PURE__ */ jsxs(
251
+ Map,
252
+ {
253
+ ...mapProps,
254
+ styleUrl,
255
+ viewport: camera,
256
+ onViewportChange: setCamera,
257
+ cursor: readOnly ? "grab" : "crosshair",
258
+ onClick: (event) => choose(event.lngLat.lng, event.lngLat.lat),
259
+ onLoad: (event) => {
260
+ setLoaded(true);
261
+ mapProps?.onLoad?.(event);
262
+ },
263
+ style: { ...mapProps?.style, height },
264
+ children: [
265
+ mapProps?.children,
266
+ valid && /* @__PURE__ */ jsx(
267
+ Marker,
268
+ {
269
+ longitude: valid.lng,
270
+ latitude: valid.lat,
271
+ anchor: "center",
272
+ draggable: !readOnly,
273
+ onDragEnd: (event) => choose(event.lngLat.lng, event.lngLat.lat),
274
+ children: /* @__PURE__ */ jsx(
275
+ Box,
276
+ {
277
+ role: "img",
278
+ "aria-label": copy.marker,
279
+ sx: {
280
+ width: 22,
281
+ height: 22,
282
+ borderRadius: "50%",
283
+ bgcolor: "primary.main",
284
+ border: "3px solid",
285
+ borderColor: "background.paper",
286
+ boxShadow: 2
287
+ }
288
+ }
289
+ )
290
+ }
291
+ )
292
+ ]
293
+ }
294
+ ),
295
+ showDetails && /* @__PURE__ */ jsx(Paper, { variant: "outlined", sx: { p: 2, minWidth: 0 }, children: valid ? /* @__PURE__ */ jsxs(Stack, { sx: { gap: 1.5 }, children: [
296
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "text.secondary", children: copy.coordinates }),
297
+ /* @__PURE__ */ jsxs(Typography, { variant: "body2", sx: { fontVariantNumeric: "tabular-nums" }, children: [
298
+ valid.lat.toFixed(5),
299
+ ", ",
300
+ valid.lng.toFixed(5)
301
+ ] }),
302
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "text.secondary", children: copy.place }),
303
+ geocodeLoading ? /* @__PURE__ */ jsxs(Stack, { direction: "row", sx: { gap: 1, alignItems: "center" }, role: "status", children: [
304
+ /* @__PURE__ */ jsx(CircularProgress, { size: 16 }),
305
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: copy.loading })
306
+ ] }) : geocodeError ? /* @__PURE__ */ jsx(Alert, { severity: "warning", children: geocodeError }) : /* @__PURE__ */ jsx(Box, { sx: { overflowWrap: "anywhere" }, children: geocodeResult ?? /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: copy.unknown }) })
307
+ ] }) : /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: copy.placeholder }) })
308
+ ]
309
+ }
310
+ ),
311
+ !readOnly && /* @__PURE__ */ jsxs(Stack, { direction: "row", sx: { gap: 1, flexWrap: "wrap" }, children: [
312
+ /* @__PURE__ */ jsx(Button, { type: "button", disabled: !loaded, onClick: () => choose(camera.longitude, camera.latitude), children: copy.chooseCenter }),
313
+ onClear && /* @__PURE__ */ jsx(Button, { type: "button", disabled: !value, onClick: onClear, children: copy.clear })
314
+ ] })
315
+ ] });
316
+ }
317
+ function MapCoverageLayer({ id, points, colorByStatus, radius = 6, showLabels = false }) {
318
+ const theme = useTheme();
319
+ const palette = useMemo(
320
+ () => ({
321
+ active: theme.palette.success.main,
322
+ pending: theme.palette.warning.main,
323
+ expired: theme.palette.text.disabled,
324
+ disabled: theme.palette.text.disabled,
325
+ retired: theme.palette.text.disabled,
326
+ ...colorByStatus ?? {}
327
+ }),
328
+ [theme, colorByStatus]
329
+ );
330
+ const geojson = useMemo(
331
+ () => ({
332
+ type: "FeatureCollection",
333
+ features: points.map((p) => ({
334
+ type: "Feature",
335
+ id: p.id,
336
+ geometry: {
337
+ type: "Point",
338
+ coordinates: [p.longitude, p.latitude]
339
+ },
340
+ properties: {
341
+ status: p.status ?? "active",
342
+ label: p.label ?? "",
343
+ color: palette[p.status ?? "active"] ?? theme.palette.primary.main
344
+ }
345
+ }))
346
+ }),
347
+ [points, palette, theme]
348
+ );
349
+ return /* @__PURE__ */ jsxs(Source, { id, type: "geojson", data: geojson, children: [
350
+ /* @__PURE__ */ jsx(
351
+ Layer,
352
+ {
353
+ id: `${id}-circles`,
354
+ type: "circle",
355
+ paint: {
356
+ "circle-radius": radius,
357
+ "circle-color": ["get", "color"],
358
+ "circle-stroke-color": theme.palette.background.paper,
359
+ "circle-stroke-width": 1.5
360
+ }
361
+ }
362
+ ),
363
+ showLabels && /* @__PURE__ */ jsx(
364
+ Layer,
365
+ {
366
+ id: `${id}-labels`,
367
+ type: "symbol",
368
+ minzoom: 11,
369
+ layout: {
370
+ "text-field": ["get", "label"],
371
+ "text-size": 11,
372
+ "text-offset": [0, 1.2],
373
+ "text-anchor": "top",
374
+ "text-font": ["Noto Sans Regular"]
375
+ },
376
+ paint: {
377
+ "text-color": theme.palette.text.primary,
378
+ "text-halo-color": theme.palette.background.paper,
379
+ "text-halo-width": 1
380
+ }
381
+ }
382
+ )
383
+ ] });
384
+ }
385
+ var defaults2 = {
386
+ label: "Find a place",
387
+ search: "Search",
388
+ clear: "Clear",
389
+ loading: "Searching\u2026",
390
+ empty: "No places found",
391
+ hint: "Enter a place and search",
392
+ error: "Place search is unavailable. Try again."
393
+ };
394
+ function MapPlaceSearch({
395
+ search,
396
+ onSelect,
397
+ mode = "submit",
398
+ debounceMs = 300,
399
+ minLength = 2,
400
+ limit = 8,
401
+ disabled = false,
402
+ labels
403
+ }) {
404
+ const copy = { ...defaults2, ...labels };
405
+ const [query, setQuery] = useState("");
406
+ const [results, setResults] = useState([]);
407
+ const [selected, setSelected] = useState(null);
408
+ const [loading, setLoading] = useState(false);
409
+ const [error, setError] = useState(false);
410
+ const [searched, setSearched] = useState(false);
411
+ const [open, setOpen] = useState(false);
412
+ const generation = useRef(0), active = useRef(null);
413
+ const highlighted = useRef(null);
414
+ const provider = useRef(search);
415
+ provider.current = search;
416
+ const validQuery = query.trim().length >= minLength && query.length <= 200;
417
+ const cancel = useCallback(() => {
418
+ generation.current++;
419
+ active.current?.abort();
420
+ active.current = null;
421
+ }, []);
422
+ const run = useCallback(async () => {
423
+ cancel();
424
+ if (!validQuery || disabled) return;
425
+ const id = generation.current;
426
+ const controller = new AbortController();
427
+ active.current = controller;
428
+ setLoading(true);
429
+ setError(false);
430
+ setSearched(true);
431
+ setOpen(true);
432
+ try {
433
+ const values = await provider.current(query.trim(), { signal: controller.signal, limit });
434
+ if (id !== generation.current || controller.signal.aborted) return;
435
+ if (!Array.isArray(values) || values.some((v) => !v || !v.id || !v.label || !v.point || !isMapPoint(v.point)))
436
+ throw new Error("Invalid geocoder response");
437
+ const ids = /* @__PURE__ */ new Set();
438
+ setResults(
439
+ values.filter((v) => {
440
+ if (ids.has(v.id)) return false;
441
+ ids.add(v.id);
442
+ return true;
443
+ }).slice(0, limit)
444
+ );
445
+ } catch {
446
+ if (id === generation.current && !controller.signal.aborted) {
447
+ setError(true);
448
+ setResults([]);
449
+ setOpen(false);
450
+ }
451
+ } finally {
452
+ if (id === generation.current) setLoading(false);
453
+ }
454
+ }, [cancel, validQuery, disabled, query, limit]);
455
+ useEffect(() => {
456
+ if (mode !== "autocomplete" || !validQuery || disabled || selected) return void 0;
457
+ const timer = setTimeout(() => void run(), debounceMs);
458
+ return () => clearTimeout(timer);
459
+ }, [run, validQuery, mode, debounceMs, disabled, selected]);
460
+ useEffect(() => {
461
+ if (disabled) {
462
+ cancel();
463
+ setLoading(false);
464
+ setOpen(false);
465
+ }
466
+ }, [disabled, cancel]);
467
+ useEffect(() => () => cancel(), [cancel]);
468
+ function input(value) {
469
+ cancel();
470
+ setQuery(value);
471
+ setSelected(null);
472
+ setResults([]);
473
+ setError(false);
474
+ setLoading(false);
475
+ setSearched(false);
476
+ highlighted.current = null;
477
+ }
478
+ return /* @__PURE__ */ jsxs(Box, { sx: { display: "grid", gap: 1 }, children: [
479
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "flex-start", gap: 1 }, children: [
480
+ /* @__PURE__ */ jsx(
481
+ Autocomplete,
482
+ {
483
+ sx: { flex: 1, minWidth: 0 },
484
+ disabled,
485
+ options: results,
486
+ value: selected,
487
+ inputValue: query,
488
+ open,
489
+ onOpen: () => setOpen(true),
490
+ onClose: () => setOpen(false),
491
+ onInputChange: (_, value, reason) => {
492
+ if (reason === "input" || reason === "clear") input(value);
493
+ },
494
+ onChange: (_, place) => {
495
+ if (place) {
496
+ cancel();
497
+ setLoading(false);
498
+ setSelected(place);
499
+ setQuery(place.label);
500
+ setOpen(false);
501
+ onSelect(place);
502
+ }
503
+ },
504
+ onHighlightChange: (_, option) => {
505
+ highlighted.current = option;
506
+ },
507
+ onKeyDown: (event) => {
508
+ if (event.key !== "Enter") return;
509
+ event.preventDefault();
510
+ if (!highlighted.current) {
511
+ event.defaultMuiPrevented = true;
512
+ void run();
513
+ }
514
+ },
515
+ getOptionLabel: (place) => place.label,
516
+ getOptionKey: (place) => place.id,
517
+ isOptionEqualToValue: (a, b) => a.id === b.id,
518
+ filterOptions: (options) => options,
519
+ loading,
520
+ loadingText: copy.loading,
521
+ clearText: copy.clear,
522
+ noOptionsText: searched ? copy.empty : copy.hint,
523
+ forcePopupIcon: false,
524
+ renderInput: (params) => /* @__PURE__ */ jsx(
525
+ TextField,
526
+ {
527
+ ...params,
528
+ label: copy.label,
529
+ slotProps: {
530
+ ...params.slotProps,
531
+ htmlInput: { ...params.slotProps.htmlInput, maxLength: 200 },
532
+ input: {
533
+ ...params.slotProps.input,
534
+ endAdornment: /* @__PURE__ */ jsxs(Fragment, { children: [
535
+ loading && /* @__PURE__ */ jsx(CircularProgress, { color: "inherit", size: 18 }),
536
+ params.slotProps.input.endAdornment
537
+ ] })
538
+ }
539
+ }
540
+ }
541
+ )
542
+ }
543
+ ),
544
+ mode === "submit" && /* @__PURE__ */ jsx(
545
+ Button,
546
+ {
547
+ type: "button",
548
+ variant: "outlined",
549
+ disabled: disabled || loading || !validQuery,
550
+ onClick: () => void run(),
551
+ sx: { minHeight: 40 },
552
+ children: copy.search
553
+ }
554
+ )
555
+ ] }),
556
+ error && /* @__PURE__ */ jsx(Alert, { severity: "warning", children: copy.error })
557
+ ] });
558
+ }
559
+
560
+ export { Map, MapCoverageLayer, MapMarker, MapPlaceSearch, MapPointPicker, isMapPoint, normalizeMapPoint };
561
+ //# sourceMappingURL=chunk-3VSM7NZG.js.map
562
+ //# sourceMappingURL=chunk-3VSM7NZG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/map/Map.tsx","../src/components/map/MapMarker.tsx","../src/components/map/coordinates.ts","../src/components/map/MapPointPicker.tsx","../src/components/map/MapCoverageLayer.tsx","../src/components/map/MapPlaceSearch.tsx"],"names":["ReactMapGL","useTheme","useState","jsxs","Fragment","jsx","useEffect","Box","Marker","Alert","defaults","useRef","useCallback","CircularProgress","Button"],"mappings":"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","file":"chunk-3VSM7NZG.js","sourcesContent":["'use client';\n\nimport './map.css';\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { Alert, Box, LinearProgress } from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport { Map as ReactMapGL, NavigationControl, ScaleControl } from 'react-map-gl/maplibre';\nimport type { MapProps as EngineProps, MapRef } from 'react-map-gl/maplibre';\nimport { addProtocol } from 'maplibre-gl';\nimport type { StyleSpecification } from 'maplibre-gl';\nimport { Protocol } from 'pmtiles';\n\n// Register before creating a map; style loading can begin before parent effects.\n// PMTiles maintains its own bounded archive/directory cache. Map instances do not\n// remove this shared protocol when another instance might still be using it.\nconst protocol = new Protocol();\naddProtocol('pmtiles', protocol.tile);\n\nexport interface MapViewport {\n longitude: number;\n latitude: number;\n zoom: number;\n bearing?: number;\n pitch?: number;\n}\nexport type MapStyle = string | StyleSpecification;\nexport interface MapMessages {\n label: string;\n missingStyle: string;\n loading: string;\n error: string;\n}\nconst messages: MapMessages = {\n label: 'Interactive map',\n missingStyle: 'A map source has not been configured.',\n loading: 'Loading map',\n error: 'Some map data could not be loaded. Check the connection or map source.',\n};\nexport interface MapProps extends Omit<EngineProps, 'mapStyle' | 'style' | 'children'> {\n /** Explicit style, or legacy host-injected window.__MAP_STYLE_URL__. No public fallback. */\n styleUrl?: MapStyle;\n /** Separate complete styles; selecting a theme does not rewrite provider layers. */\n styles?: { light: MapStyle; dark: MapStyle };\n viewport?: Partial<MapViewport>;\n initialViewport?: Partial<MapViewport>;\n onViewportChange?: (next: MapViewport) => void;\n showNavigation?: boolean;\n showScale?: boolean;\n showAttribution?: boolean;\n style?: CSSProperties;\n messages?: Partial<MapMessages>;\n children?: ReactNode;\n}\nconst world: MapViewport = { longitude: 0, latitude: 0, zoom: 1, bearing: 0, pitch: 0 };\n\n/** Provider-neutral MapLibre surface. Sources/layers/events remain fully typed. */\nexport const Map = forwardRef<MapRef, MapProps>(function MapView(\n {\n styleUrl,\n styles,\n viewport,\n initialViewport,\n onViewportChange,\n showNavigation = true,\n showScale = true,\n showAttribution = true,\n style,\n messages: overrides,\n children,\n onMove,\n onLoad,\n onError,\n cooperativeGestures = true,\n ...engine\n },\n forwardedRef\n) {\n const theme = useTheme();\n const copy = { ...messages, ...overrides };\n const legacyStyle =\n typeof window !== 'undefined' ? (window as Window & { __MAP_STYLE_URL__?: string }).__MAP_STYLE_URL__ : undefined;\n const mapStyle = styleUrl ?? styles?.[theme.palette.mode] ?? legacyStyle;\n const initial = { ...world, ...initialViewport };\n const host = useRef<HTMLDivElement>(null);\n const map = useRef<MapRef | null>(null);\n const [readyStyle, setReadyStyle] = useState<MapStyle>();\n const [error, setError] = useState(false);\n const setMap = useCallback(\n (value: MapRef | null) => {\n map.current = value;\n if (typeof forwardedRef === 'function') forwardedRef(value);\n else if (forwardedRef) forwardedRef.current = value;\n },\n [forwardedRef]\n );\n useEffect(() => {\n if (!host.current || typeof ResizeObserver === 'undefined') return undefined;\n const observer = new ResizeObserver(() => map.current?.resize());\n observer.observe(host.current);\n return () => observer.disconnect();\n }, []);\n useEffect(() => setError(false), [mapStyle]);\n return (\n <Box\n ref={host}\n role=\"region\"\n aria-label={copy.label}\n style={style}\n sx={{\n width: '100%',\n height: 400,\n position: 'relative',\n borderRadius: 1,\n overflow: 'hidden',\n bgcolor: 'background.paper',\n '& .maplibregl-ctrl-group, & .maplibregl-popup-content': {\n bgcolor: 'background.paper',\n color: 'text.primary',\n boxShadow: theme.shadows[2],\n borderRadius: 1,\n border: 1,\n borderColor: 'divider',\n },\n '& .maplibregl-ctrl-group button': { color: 'text.primary', borderColor: 'divider' },\n '& .maplibregl-ctrl-icon': { filter: theme.palette.mode === 'dark' ? 'invert(1)' : 'none' },\n '& .maplibregl-ctrl-attrib': { bgcolor: 'background.paper', color: 'text.secondary' },\n '& .maplibregl-ctrl-attrib a': { color: 'inherit' },\n '& .maplibregl-ctrl-scale': {\n bgcolor: 'background.paper',\n color: 'text.primary',\n borderColor: 'text.secondary',\n },\n '& .maplibregl-ctrl button:focus-visible': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: -2,\n },\n }}\n >\n {!mapStyle ? (\n <Alert severity=\"info\" sx={{ m: 2 }}>\n {copy.missingStyle}\n </Alert>\n ) : (\n <>\n <ReactMapGL\n {...engine}\n ref={setMap}\n mapStyle={mapStyle}\n cooperativeGestures={cooperativeGestures}\n {...(viewport\n ? { ...initial, ...viewport }\n : {\n initialViewState: initial,\n ...(engine.initialViewState ? { initialViewState: engine.initialViewState } : {}),\n })}\n onMove={(event) => {\n onViewportChange?.(event.viewState);\n onMove?.(event);\n }}\n onLoad={(event) => {\n setReadyStyle(mapStyle);\n onLoad?.(event);\n }}\n onIdle={(event) => {\n setReadyStyle(mapStyle);\n engine.onIdle?.(event);\n }}\n onError={(event) => {\n setError(true);\n onError?.(event);\n }}\n attributionControl={showAttribution ? (engine.attributionControl ?? {}) : false}\n style={{ width: '100%', height: '100%' }}\n >\n {showNavigation && <NavigationControl position=\"top-right\" />}\n {showScale && <ScaleControl position=\"bottom-left\" />}\n {children}\n </ReactMapGL>\n {readyStyle !== mapStyle && !error && (\n <LinearProgress aria-label={copy.loading} sx={{ position: 'absolute', top: 0, left: 0, right: 0 }} />\n )}\n {error && (\n <Alert\n severity=\"warning\"\n onClose={() => setError(false)}\n sx={{ position: 'absolute', left: 8, right: 8, top: 8 }}\n >\n {copy.error}\n </Alert>\n )}\n </>\n )}\n </Box>\n );\n});\n","'use client';\n\n/**\n * MapMarker Component\n *\n * Decorative marker pinned at `[longitude, latitude]` on the\n * parent `<Map>`. Renders a HugeIcons-styled pin by default;\n * pass `children` for a fully custom marker DOM. Optional\n * `popup` opens a Popup on click.\n *\n * @module components/map\n */\n\nimport { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Marker, Popup } from 'react-map-gl/maplibre';\nimport { useTheme } from '@mui/material/styles';\n\nexport interface MapMarkerProps {\n longitude: number;\n latitude: number;\n /** Marker fill colour. Defaults to theme primary. */\n color?: string;\n /** Custom DOM (overrides the default pin icon). */\n children?: ReactNode;\n /** Popup body shown on click. */\n popup?: ReactNode;\n /** Anchor side. Defaults to bottom (pin tip at coordinate). */\n anchor?: 'center' | 'top' | 'bottom' | 'left' | 'right';\n /** Click-through handler. */\n onClick?: () => void;\n}\n\nexport function MapMarker({ longitude, latitude, color, children, popup, anchor = 'bottom', onClick }: MapMarkerProps) {\n const theme = useTheme();\n const [open, setOpen] = useState(false);\n const fill = color ?? theme.palette.primary.main;\n\n const handleClick = (e: { originalEvent?: { stopPropagation?: () => void } }) => {\n e.originalEvent?.stopPropagation?.();\n if (popup) setOpen((v) => !v);\n onClick?.();\n };\n\n return (\n <>\n <Marker longitude={longitude} latitude={latitude} anchor={anchor} onClick={handleClick}>\n {children ?? (\n <svg width=\"24\" height=\"32\" viewBox=\"0 0 24 32\" aria-hidden style={{ display: 'block' }}>\n <path d=\"M12 0C5.4 0 0 5.4 0 12c0 9 12 20 12 20s12-11 12-20C24 5.4 18.6 0 12 0z\" fill={fill} />\n <circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"#fff\" />\n </svg>\n )}\n </Marker>\n {popup && open && (\n <Popup\n longitude={longitude}\n latitude={latitude}\n anchor=\"top\"\n offset={[0, -32]}\n closeOnClick={false}\n onClose={() => setOpen(false)}\n >\n {popup}\n </Popup>\n )}\n </>\n );\n}\n","/** WGS84 geographic coordinates. Camera constraints never alter the stored point. */\nexport interface MapPointPickerValue {\n lng: number;\n lat: number;\n}\nexport function isMapPoint(value: MapPointPickerValue): boolean {\n return (\n Number.isFinite(value.lng) &&\n Number.isFinite(value.lat) &&\n value.lng >= -180 &&\n value.lng <= 180 &&\n value.lat >= -90 &&\n value.lat <= 90\n );\n}\n/** MapLibre may emit a longitude in another world copy after panning. */\nexport function normalizeMapPoint(lng: number, lat: number): MapPointPickerValue | null {\n if (!Number.isFinite(lng) || !Number.isFinite(lat) || Math.abs(lat) > 90) return null;\n return { lng: lng >= -180 && lng <= 180 ? lng : ((((lng + 180) % 360) + 360) % 360) - 180, lat };\n}\nexport function mapCameraLatitude(latitude: number): number {\n return Math.max(-85.0511287798066, Math.min(85.0511287798066, latitude));\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { Marker } from 'react-map-gl/maplibre';\nimport { Stack, Paper, Typography, CircularProgress, Box, Button, Alert } from '@mui/material';\nimport { Map } from './Map.js';\nimport type { MapProps, MapViewport } from './Map.js';\nimport { isMapPoint, normalizeMapPoint, mapCameraLatitude } from './coordinates.js';\nimport type { MapPointPickerValue } from './coordinates.js';\nexport type { MapPointPickerValue } from './coordinates.js';\n\nexport interface MapPointPickerLabels {\n placeholder: string;\n coordinates: string;\n place: string;\n loading: string;\n unknown: string;\n chooseCenter: string;\n clear: string;\n marker: string;\n}\nconst defaults: MapPointPickerLabels = {\n placeholder: 'Choose a point on the map, or move the map and select its centre.',\n coordinates: 'Coordinates',\n place: 'Place',\n loading: 'Finding place…',\n unknown: 'No place name for this point',\n chooseCenter: 'Select map centre',\n clear: 'Clear selection',\n marker: 'Selected point',\n};\nexport interface MapPointPickerProps {\n value: MapPointPickerValue | null;\n onChange: (next: MapPointPickerValue) => void;\n onClear?: () => void;\n initialViewport?: Partial<MapViewport>;\n /** Minimum zoom when receiving a newly selected point. */\n selectionZoom?: number;\n styleUrl?: MapProps['styleUrl'];\n height?: number;\n geocodeResult?: ReactNode;\n geocodeLoading?: boolean;\n geocodeError?: ReactNode;\n placeholder?: string;\n labels?: Partial<MapPointPickerLabels>;\n readOnly?: boolean;\n showDetails?: boolean;\n /** MapLibre sources, overlays and interaction configuration are reusable. */\n mapProps?: Omit<MapProps, 'viewport' | 'onViewportChange' | 'onClick' | 'styleUrl' | 'initialViewport'>;\n}\nexport function MapPointPicker({\n value,\n onChange,\n onClear,\n initialViewport,\n selectionZoom = 10,\n styleUrl,\n height = 480,\n geocodeResult,\n geocodeLoading = false,\n geocodeError,\n placeholder,\n labels,\n readOnly = false,\n showDetails = true,\n mapProps,\n}: MapPointPickerProps) {\n const copy = { ...defaults, ...labels, ...(placeholder ? { placeholder } : {}) };\n const valid = value && isMapPoint(value) ? value : null;\n const [camera, setCamera] = useState<MapViewport>(() => ({\n longitude: valid?.lng ?? 0,\n latitude: valid ? mapCameraLatitude(valid.lat) : 0,\n zoom: valid ? 10 : 1,\n ...initialViewport,\n }));\n const [loaded, setLoaded] = useState(false);\n const longitude = valid?.lng;\n const latitude = valid?.lat;\n useEffect(() => {\n if (longitude !== undefined && latitude !== undefined)\n setCamera((old) => ({\n ...old,\n longitude,\n latitude: mapCameraLatitude(latitude),\n zoom: Math.max(old.zoom, selectionZoom),\n }));\n }, [longitude, latitude, selectionZoom]);\n function choose(lng: number, lat: number) {\n const point = normalizeMapPoint(lng, lat);\n if (point && !readOnly) onChange(point);\n }\n return (\n <Stack sx={{ gap: 2, width: '100%' }}>\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: showDetails ? { xs: '1fr', md: 'minmax(0,1fr) 280px' } : '1fr',\n gap: 2,\n }}\n >\n <Map\n {...mapProps}\n styleUrl={styleUrl}\n viewport={camera}\n onViewportChange={setCamera}\n cursor={readOnly ? 'grab' : 'crosshair'}\n onClick={(event) => choose(event.lngLat.lng, event.lngLat.lat)}\n onLoad={(event) => {\n setLoaded(true);\n mapProps?.onLoad?.(event);\n }}\n style={{ ...mapProps?.style, height }}\n >\n {mapProps?.children}\n {valid && (\n <Marker\n longitude={valid.lng}\n latitude={valid.lat}\n anchor=\"center\"\n draggable={!readOnly}\n onDragEnd={(event) => choose(event.lngLat.lng, event.lngLat.lat)}\n >\n <Box\n role=\"img\"\n aria-label={copy.marker}\n sx={{\n width: 22,\n height: 22,\n borderRadius: '50%',\n bgcolor: 'primary.main',\n border: '3px solid',\n borderColor: 'background.paper',\n boxShadow: 2,\n }}\n />\n </Marker>\n )}\n </Map>\n {showDetails && (\n <Paper variant=\"outlined\" sx={{ p: 2, minWidth: 0 }}>\n {valid ? (\n <Stack sx={{ gap: 1.5 }}>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {copy.coordinates}\n </Typography>\n <Typography variant=\"body2\" sx={{ fontVariantNumeric: 'tabular-nums' }}>\n {valid.lat.toFixed(5)}, {valid.lng.toFixed(5)}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {copy.place}\n </Typography>\n {geocodeLoading ? (\n <Stack direction=\"row\" sx={{ gap: 1, alignItems: 'center' }} role=\"status\">\n <CircularProgress size={16} />\n <Typography variant=\"body2\">{copy.loading}</Typography>\n </Stack>\n ) : geocodeError ? (\n <Alert severity=\"warning\">{geocodeError}</Alert>\n ) : (\n <Box sx={{ overflowWrap: 'anywhere' }}>\n {geocodeResult ?? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {copy.unknown}\n </Typography>\n )}\n </Box>\n )}\n </Stack>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {copy.placeholder}\n </Typography>\n )}\n </Paper>\n )}\n </Box>\n {!readOnly && (\n <Stack direction=\"row\" sx={{ gap: 1, flexWrap: 'wrap' }}>\n <Button type=\"button\" disabled={!loaded} onClick={() => choose(camera.longitude, camera.latitude)}>\n {copy.chooseCenter}\n </Button>\n {onClear && (\n <Button type=\"button\" disabled={!value} onClick={onClear}>\n {copy.clear}\n </Button>\n )}\n </Stack>\n )}\n </Stack>\n );\n}\n","'use client';\n\n/**\n * MapCoverageLayer Component\n *\n * Renders an array of typed points on the parent `<Map>` as\n * colour-coded circles. Designed for \"coverage\" use cases\n * (dead-drops by status, pickup points by enabled/disabled,\n * shops by tier). Uses a single MapLibre symbol layer driven by\n * an in-memory GeoJSON source so rendering scales to a few\n * thousand points without DOM thrash.\n *\n * For < ~200 points, prefer composing `<MapMarker>` directly —\n * it gives you click + popup affordances per marker. This layer\n * is for the \"show me the whole network\" view.\n *\n * @module components/map\n */\n\nimport { useMemo } from 'react';\nimport { Source, Layer } from 'react-map-gl/maplibre';\nimport { useTheme } from '@mui/material/styles';\n\nexport interface CoveragePoint {\n /** Unique id within the layer; used as feature id for clicks. */\n id: string;\n longitude: number;\n latitude: number;\n /** Free-form bucket; the layer maps it to a colour via\n * the `colorByStatus` prop. Default mapping covers the\n * generic 'active'/'pending'/'expired'/'disabled' buckets. */\n status?: string;\n /** Optional label shown next to the point when zoomed in. */\n label?: string;\n}\n\nexport interface MapCoverageLayerProps {\n id: string;\n points: CoveragePoint[];\n /** Map of status → colour. Override to project custom domain\n * semantics. Default uses theme palette. */\n colorByStatus?: Record<string, string>;\n /** Marker radius in pixels (zoom-stable). Default 6. */\n radius?: number;\n /** Show label text alongside each marker (zoom 12+). */\n showLabels?: boolean;\n}\n\nexport function MapCoverageLayer({ id, points, colorByStatus, radius = 6, showLabels = false }: MapCoverageLayerProps) {\n const theme = useTheme();\n\n const palette = useMemo<Record<string, string>>(\n () => ({\n active: theme.palette.success.main,\n pending: theme.palette.warning.main,\n expired: theme.palette.text.disabled,\n disabled: theme.palette.text.disabled,\n retired: theme.palette.text.disabled,\n ...(colorByStatus ?? {}),\n }),\n [theme, colorByStatus]\n );\n\n const geojson = useMemo(\n () => ({\n type: 'FeatureCollection' as const,\n features: points.map((p) => ({\n type: 'Feature' as const,\n id: p.id,\n geometry: {\n type: 'Point' as const,\n coordinates: [p.longitude, p.latitude],\n },\n properties: {\n status: p.status ?? 'active',\n label: p.label ?? '',\n color: palette[p.status ?? 'active'] ?? theme.palette.primary.main,\n },\n })),\n }),\n [points, palette, theme]\n );\n\n return (\n <Source id={id} type=\"geojson\" data={geojson}>\n <Layer\n id={`${id}-circles`}\n type=\"circle\"\n paint={{\n 'circle-radius': radius,\n 'circle-color': ['get', 'color'],\n 'circle-stroke-color': theme.palette.background.paper,\n 'circle-stroke-width': 1.5,\n }}\n />\n {showLabels && (\n <Layer\n id={`${id}-labels`}\n type=\"symbol\"\n minzoom={11}\n layout={{\n 'text-field': ['get', 'label'],\n 'text-size': 11,\n 'text-offset': [0, 1.2],\n 'text-anchor': 'top',\n 'text-font': ['Noto Sans Regular'],\n }}\n paint={{\n 'text-color': theme.palette.text.primary,\n 'text-halo-color': theme.palette.background.paper,\n 'text-halo-width': 1,\n }}\n />\n )}\n </Source>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { Alert, Autocomplete, Box, Button, CircularProgress, TextField } from '@mui/material';\nimport { isMapPoint } from './coordinates.js';\nimport type { MapPointPickerValue } from './coordinates.js';\n\nexport interface MapPlace {\n /** Provider-stable identifier, qualified with the provider name. */\n id: string;\n label: string;\n point: MapPointPickerValue;\n}\nexport interface MapPlaceSearchLabels {\n label: string;\n search: string;\n clear: string;\n loading: string;\n empty: string;\n hint: string;\n error: string;\n}\nconst defaults: MapPlaceSearchLabels = {\n label: 'Find a place',\n search: 'Search',\n clear: 'Clear',\n loading: 'Searching…',\n empty: 'No places found',\n hint: 'Enter a place and search',\n error: 'Place search is unavailable. Try again.',\n};\nexport interface MapPlaceSearchProps<T extends MapPlace = MapPlace> {\n /** Supply a Netron/API adapter. Prism makes no requests to a provider itself. */\n search: (query: string, options: { signal: AbortSignal; limit: number }) => Promise<readonly T[]>;\n onSelect: (place: T) => void;\n /** Explicit submission works with every geocoder; autocomplete must be provider-supported. */\n mode?: 'submit' | 'autocomplete';\n debounceMs?: number;\n minLength?: number;\n limit?: number;\n disabled?: boolean;\n labels?: Partial<MapPlaceSearchLabels>;\n}\nexport function MapPlaceSearch<T extends MapPlace>({\n search,\n onSelect,\n mode = 'submit',\n debounceMs = 300,\n minLength = 2,\n limit = 8,\n disabled = false,\n labels,\n}: MapPlaceSearchProps<T>) {\n const copy = { ...defaults, ...labels };\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<T[]>([]);\n const [selected, setSelected] = useState<T | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const [searched, setSearched] = useState(false);\n const [open, setOpen] = useState(false);\n const generation = useRef(0),\n active = useRef<AbortController | null>(null);\n const highlighted = useRef<T | null>(null);\n const provider = useRef(search);\n provider.current = search;\n const validQuery = query.trim().length >= minLength && query.length <= 200;\n const cancel = useCallback(() => {\n generation.current++;\n active.current?.abort();\n active.current = null;\n }, []);\n const run = useCallback(async () => {\n cancel();\n if (!validQuery || disabled) return;\n const id = generation.current;\n const controller = new AbortController();\n active.current = controller;\n setLoading(true);\n setError(false);\n setSearched(true);\n setOpen(true);\n try {\n const values = await provider.current(query.trim(), { signal: controller.signal, limit });\n if (id !== generation.current || controller.signal.aborted) return;\n if (!Array.isArray(values) || values.some((v) => !v || !v.id || !v.label || !v.point || !isMapPoint(v.point)))\n throw new Error('Invalid geocoder response');\n const ids = new Set<string>();\n setResults(\n values\n .filter((v) => {\n if (ids.has(v.id)) return false;\n ids.add(v.id);\n return true;\n })\n .slice(0, limit)\n );\n } catch {\n if (id === generation.current && !controller.signal.aborted) {\n setError(true);\n setResults([]);\n setOpen(false);\n }\n } finally {\n if (id === generation.current) setLoading(false);\n }\n }, [cancel, validQuery, disabled, query, limit]);\n useEffect(() => {\n if (mode !== 'autocomplete' || !validQuery || disabled || selected) return undefined;\n const timer = setTimeout(() => void run(), debounceMs);\n return () => clearTimeout(timer);\n }, [run, validQuery, mode, debounceMs, disabled, selected]);\n useEffect(() => {\n if (disabled) {\n cancel();\n setLoading(false);\n setOpen(false);\n }\n }, [disabled, cancel]);\n useEffect(() => () => cancel(), [cancel]);\n function input(value: string) {\n cancel();\n setQuery(value);\n setSelected(null);\n setResults([]);\n setError(false);\n setLoading(false);\n setSearched(false);\n highlighted.current = null;\n }\n return (\n <Box sx={{ display: 'grid', gap: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 1 }}>\n <Autocomplete<T, false, false, false>\n sx={{ flex: 1, minWidth: 0 }}\n disabled={disabled}\n options={results}\n value={selected}\n inputValue={query}\n open={open}\n onOpen={() => setOpen(true)}\n onClose={() => setOpen(false)}\n onInputChange={(_, value, reason) => {\n if (reason === 'input' || reason === 'clear') input(value);\n }}\n onChange={(_, place) => {\n if (place) {\n cancel();\n setLoading(false);\n setSelected(place);\n setQuery(place.label);\n setOpen(false);\n onSelect(place);\n }\n }}\n onHighlightChange={(_, option) => {\n highlighted.current = option;\n }}\n onKeyDown={(event) => {\n if (event.key !== 'Enter') return;\n event.preventDefault();\n if (!highlighted.current) {\n (event as typeof event & { defaultMuiPrevented: boolean }).defaultMuiPrevented = true;\n void run();\n }\n }}\n getOptionLabel={(place) => place.label}\n getOptionKey={(place) => place.id}\n isOptionEqualToValue={(a, b) => a.id === b.id}\n filterOptions={(options) => options}\n loading={loading}\n loadingText={copy.loading}\n clearText={copy.clear}\n noOptionsText={searched ? copy.empty : copy.hint}\n forcePopupIcon={false}\n renderInput={(params) => (\n <TextField\n {...params}\n label={copy.label}\n slotProps={{\n ...params.slotProps,\n htmlInput: { ...params.slotProps.htmlInput, maxLength: 200 },\n input: {\n ...params.slotProps.input,\n endAdornment: (\n <>\n {loading && <CircularProgress color=\"inherit\" size={18} />}\n {params.slotProps.input.endAdornment}\n </>\n ),\n },\n }}\n />\n )}\n />\n {mode === 'submit' && (\n <Button\n type=\"button\"\n variant=\"outlined\"\n disabled={disabled || loading || !validQuery}\n onClick={() => void run()}\n sx={{ minHeight: 40 }}\n >\n {copy.search}\n </Button>\n )}\n </Box>\n {error && <Alert severity=\"warning\">{copy.error}</Alert>}\n </Box>\n );\n}\n"]}