@12-apps/ui 6.22.0 → 6.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/NATIVE.md +1 -1
  2. package/components-catalog.md +7 -0
  3. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
  4. package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
  5. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +1 -1
  6. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +1 -1
  7. package/dist/_internal/components/data-display/Carousel/Carousel.js +2 -2
  8. package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
  9. package/dist/_internal/components/data-display/Chart/SpecChart.js +5 -5
  10. package/dist/_internal/components/data-display/Chart/chart-context.js +2 -2
  11. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  12. package/dist/_internal/components/data-display/Chip/Chip.js +3 -3
  13. package/dist/_internal/components/data-display/Chip/Chip.styles.js +2 -2
  14. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +1 -1
  15. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +26 -26
  16. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +30 -30
  17. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +1 -1
  18. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +5 -5
  19. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +10 -10
  20. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +1 -1
  21. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +22 -22
  22. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +10 -10
  23. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +3 -3
  24. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +4 -4
  25. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  26. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  27. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +3 -3
  28. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +3 -3
  29. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +31 -0
  30. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +23 -0
  31. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js.map +1 -0
  32. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +57 -0
  33. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js.map +1 -0
  34. package/dist/_internal/components/data-display/FleetMap/FleetMap.helpers.js +14 -0
  35. package/dist/_internal/components/data-display/FleetMap/FleetMap.helpers.js.map +1 -0
  36. package/dist/_internal/components/data-display/FleetMap/FleetMap.hooks.js +9 -0
  37. package/dist/_internal/components/data-display/FleetMap/FleetMap.hooks.js.map +1 -0
  38. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +46 -0
  39. package/dist/_internal/components/data-display/FleetMap/FleetMap.js.map +1 -0
  40. package/dist/_internal/components/data-display/FleetMap/FleetMap.types.js +1 -0
  41. package/dist/_internal/components/data-display/FleetMap/FleetMap.types.js.map +1 -0
  42. package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +14 -0
  43. package/dist/_internal/components/data-display/FleetMap/FleetRoster.js.map +1 -0
  44. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  45. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +2 -2
  46. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
  47. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +6 -6
  48. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  49. package/dist/_internal/components/data-display/Sheet/Sheet.js +3 -3
  50. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  51. package/dist/_internal/components/data-display/index.js +82 -62
  52. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  53. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +2 -2
  54. package/dist/_internal/components/feedback/index.js +14 -14
  55. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +3 -3
  56. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +5 -5
  57. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +2 -2
  58. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +2 -2
  59. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +4 -4
  60. package/dist/_internal/components/form/Command/Command.js +2 -2
  61. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +3 -3
  62. package/dist/_internal/components/form/PhoneInput/PhoneInput.hooks.js +2 -2
  63. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +3 -3
  64. package/dist/_internal/components/form/index.js +30 -30
  65. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +5 -5
  66. package/dist/_internal/components/form/total-form/Fields/index.js +9 -9
  67. package/dist/_internal/components/index.js +152 -133
  68. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +2 -2
  69. package/dist/_internal/components/layout/index.js +20 -20
  70. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +4 -4
  71. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  72. package/dist/_internal/components/navigation/index.js +12 -12
  73. package/dist/_internal/components/utility/index.js +4 -4
  74. package/dist/_internal/pt-BR.data-display.js +2 -2
  75. package/dist/_internal/user-avatar/user-avatar.js +3 -3
  76. package/dist/charts.js +5 -5
  77. package/dist/chunk-2RQINU5T.js +41 -0
  78. package/dist/chunk-2RQINU5T.js.map +1 -0
  79. package/dist/{chunk-VLHGBFR6.js → chunk-2UGJIKVA.js} +2 -2
  80. package/dist/{chunk-WMALDOF5.js → chunk-4G3FGCWX.js} +4 -4
  81. package/dist/{chunk-ZKR5B6YJ.js → chunk-4LRFGB3K.js} +2 -2
  82. package/dist/{chunk-ZOUWHGV3.js → chunk-4MGFUPQT.js} +4 -4
  83. package/dist/{chunk-VQAM2XZV.js → chunk-4XZXLB4I.js} +3 -3
  84. package/dist/chunk-5V4UPOWK.js +36 -0
  85. package/dist/chunk-5V4UPOWK.js.map +1 -0
  86. package/dist/{chunk-VIK3HAUQ.js → chunk-73NJCGQG.js} +2 -2
  87. package/dist/{chunk-PFV6RL4Q.js → chunk-ACFGEZ4Q.js} +3 -3
  88. package/dist/{chunk-U2YJCNRU.js → chunk-AJGYHDA5.js} +4 -4
  89. package/dist/{chunk-HKV4MQ2W.js → chunk-BLBOYCOV.js} +5 -5
  90. package/dist/{chunk-QZBUGUOY.js → chunk-BZTFPSWT.js} +4 -4
  91. package/dist/{chunk-7TZ6OC5T.js → chunk-CBTY36TU.js} +2 -2
  92. package/dist/chunk-CDCTLPMD.js +1 -0
  93. package/dist/chunk-CDCTLPMD.js.map +1 -0
  94. package/dist/chunk-CF3FAAPC.js +79 -0
  95. package/dist/chunk-CF3FAAPC.js.map +1 -0
  96. package/dist/{chunk-PMS3H3OO.js → chunk-DF2FFYZ7.js} +4 -4
  97. package/dist/{chunk-FPWB5ILF.js → chunk-DRHIIUDO.js} +5 -5
  98. package/dist/{chunk-WLQTHPMX.js → chunk-EJQW2IYW.js} +2 -2
  99. package/dist/{chunk-XFUNJYFT.js → chunk-EPNUVSNK.js} +7 -7
  100. package/dist/{chunk-MSUSZLRE.js → chunk-EWT3WMVY.js} +5 -5
  101. package/dist/chunk-F7VBGS4C.js +64 -0
  102. package/dist/chunk-F7VBGS4C.js.map +1 -0
  103. package/dist/{chunk-Q75SJ35X.js → chunk-GMTM6EN7.js} +3 -3
  104. package/dist/{chunk-6NZTYZP5.js → chunk-GVA5CYKP.js} +2 -2
  105. package/dist/{chunk-VR5HDUBK.js → chunk-HP2ODXNA.js} +2 -2
  106. package/dist/{chunk-7BYFC2MR.js → chunk-I7HYGIEJ.js} +6 -6
  107. package/dist/{chunk-UVGRRI7N.js → chunk-IPVYEPXO.js} +4 -4
  108. package/dist/{chunk-5ZTUP65G.js → chunk-JM64OEU6.js} +5 -5
  109. package/dist/{chunk-QFJRB27Q.js → chunk-KHWCX4LI.js} +2 -2
  110. package/dist/{chunk-TLMLEC4F.js → chunk-KW7H5O3K.js} +6 -6
  111. package/dist/{chunk-UU3QAKG6.js → chunk-L4U23SBX.js} +4 -4
  112. package/dist/chunk-MQNKRIGC.js +205 -0
  113. package/dist/chunk-MQNKRIGC.js.map +1 -0
  114. package/dist/{chunk-QWDEOITU.js → chunk-MYGNIFZC.js} +2 -2
  115. package/dist/{chunk-2MMEIN4T.js → chunk-N2TUX4A5.js} +4 -4
  116. package/dist/{chunk-KTK4A3IF.js → chunk-OIKQO73C.js} +7 -7
  117. package/dist/{chunk-REMK55JI.js → chunk-OLZTGVBT.js} +4 -4
  118. package/dist/{chunk-ZIYMBR7K.js → chunk-OTH7H3IP.js} +2 -2
  119. package/dist/{chunk-J4W4TQPC.js → chunk-QJRDDVZ2.js} +5 -5
  120. package/dist/{chunk-VNDOQEJ7.js → chunk-QRX5BYUQ.js} +4 -4
  121. package/dist/{chunk-XT7HMNBW.js → chunk-R6SNYC3D.js} +5 -5
  122. package/dist/{chunk-W2UTDN4T.js → chunk-RBGOGTT2.js} +4 -4
  123. package/dist/chunk-RQWZYD6H.js +1 -0
  124. package/dist/chunk-RQWZYD6H.js.map +1 -0
  125. package/dist/{chunk-EXJBPKGW.js → chunk-SHDIZSN5.js} +5 -5
  126. package/dist/{chunk-23FCBIUN.js → chunk-TNVO2DTB.js} +8 -8
  127. package/dist/{chunk-AGSBIUPV.js → chunk-TPLKJHNN.js} +4 -4
  128. package/dist/{chunk-U2AC4AQX.js → chunk-TU5EIKJA.js} +4 -4
  129. package/dist/chunk-TWQYDKCA.js +113 -0
  130. package/dist/chunk-TWQYDKCA.js.map +1 -0
  131. package/dist/{chunk-BGYLL467.js → chunk-TXHJX2NG.js} +4 -4
  132. package/dist/{chunk-E46PG577.js → chunk-URXT5TOY.js} +4 -4
  133. package/dist/{chunk-5NKUYCZD.js → chunk-VON4BFK4.js} +4 -4
  134. package/dist/{chunk-FL54G7PV.js → chunk-WIT3Y7JT.js} +2 -2
  135. package/dist/{chunk-DVUPIVI2.js → chunk-WQA4LIIK.js} +2 -2
  136. package/dist/{chunk-2UYR2OOE.js → chunk-YRUCIKPO.js} +4 -4
  137. package/dist/{chunk-QKIJ6YXZ.js → chunk-ZA4U5GDU.js} +4 -4
  138. package/dist/{chunk-OXQP3N6X.js → chunk-ZTZ6S5Q6.js} +4 -4
  139. package/dist/data-display/AsyncStateContainer.js +3 -3
  140. package/dist/data-display/Avatar.js +2 -2
  141. package/dist/data-display/CardKit.js +8 -8
  142. package/dist/data-display/Carousel.js +2 -2
  143. package/dist/data-display/Chart.js +5 -5
  144. package/dist/data-display/Chip.js +3 -3
  145. package/dist/data-display/DataGrid.js +1 -1
  146. package/dist/data-display/DataViews.js +33 -33
  147. package/dist/data-display/FleetMap.js +54 -0
  148. package/dist/data-display/FleetMap.js.map +1 -0
  149. package/dist/data-display/HoverCard.js +2 -2
  150. package/dist/data-display/Lightbox.js +2 -2
  151. package/dist/data-display/MapPreview.js +6 -6
  152. package/dist/data-display/Sheet.js +3 -3
  153. package/dist/data-display/Table.js +3 -3
  154. package/dist/feedback/ConfirmAction.js +3 -3
  155. package/dist/feedback/Modal.js +2 -2
  156. package/dist/feedback/StackedModal.js +2 -2
  157. package/dist/form/AddressAutocomplete.js +5 -5
  158. package/dist/form/CategorySelect.js +4 -4
  159. package/dist/form/Command.js +2 -2
  160. package/dist/form/DateRangePicker.js +5 -5
  161. package/dist/form/PhoneInput.js +3 -3
  162. package/dist/form/total-form.js +9 -9
  163. package/dist/layout/SettingsLayout.js +2 -2
  164. package/dist/locales.js +4 -4
  165. package/dist/navigation/AppHeader.js +6 -6
  166. package/dist/navigation/Pagination.js +2 -2
  167. package/dist/pt-BR.js +4 -4
  168. package/dist/types/components/data-display/FleetMap/FleetBody.d.ts +22 -0
  169. package/dist/types/components/data-display/FleetMap/FleetBody.d.ts.map +1 -0
  170. package/dist/types/components/data-display/FleetMap/FleetCanvas.d.ts +50 -0
  171. package/dist/types/components/data-display/FleetMap/FleetCanvas.d.ts.map +1 -0
  172. package/dist/types/components/data-display/FleetMap/FleetMap.d.ts +32 -0
  173. package/dist/types/components/data-display/FleetMap/FleetMap.d.ts.map +1 -0
  174. package/dist/types/components/data-display/FleetMap/FleetMap.fixtures.d.ts +23 -0
  175. package/dist/types/components/data-display/FleetMap/FleetMap.fixtures.d.ts.map +1 -0
  176. package/dist/types/components/data-display/FleetMap/FleetMap.helpers.d.ts +45 -0
  177. package/dist/types/components/data-display/FleetMap/FleetMap.helpers.d.ts.map +1 -0
  178. package/dist/types/components/data-display/FleetMap/FleetMap.hooks.d.ts +54 -0
  179. package/dist/types/components/data-display/FleetMap/FleetMap.hooks.d.ts.map +1 -0
  180. package/dist/types/components/data-display/FleetMap/FleetMap.types.d.ts +145 -0
  181. package/dist/types/components/data-display/FleetMap/FleetMap.types.d.ts.map +1 -0
  182. package/dist/types/components/data-display/FleetMap/FleetRoster.d.ts +15 -0
  183. package/dist/types/components/data-display/FleetMap/FleetRoster.d.ts.map +1 -0
  184. package/dist/types/components/data-display/FleetMap/index.d.ts +5 -0
  185. package/dist/types/components/data-display/FleetMap/index.d.ts.map +1 -0
  186. package/dist/types/components/data-display/index.d.ts +1 -0
  187. package/dist/types/components/data-display/index.d.ts.map +1 -1
  188. package/dist/user-avatar.js +3 -3
  189. package/package.json +5 -1
  190. package/src/components/data-display/FleetMap/FleetBody.tsx +96 -0
  191. package/src/components/data-display/FleetMap/FleetCanvas.tsx +80 -0
  192. package/src/components/data-display/FleetMap/FleetMap.fixtures.ts +70 -0
  193. package/src/components/data-display/FleetMap/FleetMap.helpers.ts +85 -0
  194. package/src/components/data-display/FleetMap/FleetMap.hooks.ts +164 -0
  195. package/src/components/data-display/FleetMap/FleetMap.md +182 -0
  196. package/src/components/data-display/FleetMap/FleetMap.tsx +169 -0
  197. package/src/components/data-display/FleetMap/FleetMap.types.ts +148 -0
  198. package/src/components/data-display/FleetMap/FleetRoster.tsx +321 -0
  199. package/src/components/data-display/FleetMap/index.ts +9 -0
  200. package/src/components/data-display/FleetMap/tests.md +79 -0
  201. package/src/components/data-display/FleetMap/track.md +50 -0
  202. package/src/components/data-display/index.ts +1 -0
  203. package/src/components/feedback/ConfirmAction/ConfirmAction.md +10 -4
  204. package/dist/chunk-X3HL5C6H.js +0 -1
  205. /package/dist/{chunk-X3HL5C6H.js.map → _internal/components/data-display/FleetMap/FleetBody.js.map} +0 -0
  206. /package/dist/{chunk-VLHGBFR6.js.map → chunk-2UGJIKVA.js.map} +0 -0
  207. /package/dist/{chunk-WMALDOF5.js.map → chunk-4G3FGCWX.js.map} +0 -0
  208. /package/dist/{chunk-ZKR5B6YJ.js.map → chunk-4LRFGB3K.js.map} +0 -0
  209. /package/dist/{chunk-ZOUWHGV3.js.map → chunk-4MGFUPQT.js.map} +0 -0
  210. /package/dist/{chunk-VQAM2XZV.js.map → chunk-4XZXLB4I.js.map} +0 -0
  211. /package/dist/{chunk-VIK3HAUQ.js.map → chunk-73NJCGQG.js.map} +0 -0
  212. /package/dist/{chunk-PFV6RL4Q.js.map → chunk-ACFGEZ4Q.js.map} +0 -0
  213. /package/dist/{chunk-U2YJCNRU.js.map → chunk-AJGYHDA5.js.map} +0 -0
  214. /package/dist/{chunk-HKV4MQ2W.js.map → chunk-BLBOYCOV.js.map} +0 -0
  215. /package/dist/{chunk-QZBUGUOY.js.map → chunk-BZTFPSWT.js.map} +0 -0
  216. /package/dist/{chunk-7TZ6OC5T.js.map → chunk-CBTY36TU.js.map} +0 -0
  217. /package/dist/{chunk-PMS3H3OO.js.map → chunk-DF2FFYZ7.js.map} +0 -0
  218. /package/dist/{chunk-FPWB5ILF.js.map → chunk-DRHIIUDO.js.map} +0 -0
  219. /package/dist/{chunk-WLQTHPMX.js.map → chunk-EJQW2IYW.js.map} +0 -0
  220. /package/dist/{chunk-XFUNJYFT.js.map → chunk-EPNUVSNK.js.map} +0 -0
  221. /package/dist/{chunk-MSUSZLRE.js.map → chunk-EWT3WMVY.js.map} +0 -0
  222. /package/dist/{chunk-Q75SJ35X.js.map → chunk-GMTM6EN7.js.map} +0 -0
  223. /package/dist/{chunk-6NZTYZP5.js.map → chunk-GVA5CYKP.js.map} +0 -0
  224. /package/dist/{chunk-VR5HDUBK.js.map → chunk-HP2ODXNA.js.map} +0 -0
  225. /package/dist/{chunk-7BYFC2MR.js.map → chunk-I7HYGIEJ.js.map} +0 -0
  226. /package/dist/{chunk-UVGRRI7N.js.map → chunk-IPVYEPXO.js.map} +0 -0
  227. /package/dist/{chunk-5ZTUP65G.js.map → chunk-JM64OEU6.js.map} +0 -0
  228. /package/dist/{chunk-QFJRB27Q.js.map → chunk-KHWCX4LI.js.map} +0 -0
  229. /package/dist/{chunk-TLMLEC4F.js.map → chunk-KW7H5O3K.js.map} +0 -0
  230. /package/dist/{chunk-UU3QAKG6.js.map → chunk-L4U23SBX.js.map} +0 -0
  231. /package/dist/{chunk-QWDEOITU.js.map → chunk-MYGNIFZC.js.map} +0 -0
  232. /package/dist/{chunk-2MMEIN4T.js.map → chunk-N2TUX4A5.js.map} +0 -0
  233. /package/dist/{chunk-KTK4A3IF.js.map → chunk-OIKQO73C.js.map} +0 -0
  234. /package/dist/{chunk-REMK55JI.js.map → chunk-OLZTGVBT.js.map} +0 -0
  235. /package/dist/{chunk-ZIYMBR7K.js.map → chunk-OTH7H3IP.js.map} +0 -0
  236. /package/dist/{chunk-J4W4TQPC.js.map → chunk-QJRDDVZ2.js.map} +0 -0
  237. /package/dist/{chunk-VNDOQEJ7.js.map → chunk-QRX5BYUQ.js.map} +0 -0
  238. /package/dist/{chunk-XT7HMNBW.js.map → chunk-R6SNYC3D.js.map} +0 -0
  239. /package/dist/{chunk-W2UTDN4T.js.map → chunk-RBGOGTT2.js.map} +0 -0
  240. /package/dist/{chunk-EXJBPKGW.js.map → chunk-SHDIZSN5.js.map} +0 -0
  241. /package/dist/{chunk-23FCBIUN.js.map → chunk-TNVO2DTB.js.map} +0 -0
  242. /package/dist/{chunk-AGSBIUPV.js.map → chunk-TPLKJHNN.js.map} +0 -0
  243. /package/dist/{chunk-U2AC4AQX.js.map → chunk-TU5EIKJA.js.map} +0 -0
  244. /package/dist/{chunk-BGYLL467.js.map → chunk-TXHJX2NG.js.map} +0 -0
  245. /package/dist/{chunk-E46PG577.js.map → chunk-URXT5TOY.js.map} +0 -0
  246. /package/dist/{chunk-5NKUYCZD.js.map → chunk-VON4BFK4.js.map} +0 -0
  247. /package/dist/{chunk-FL54G7PV.js.map → chunk-WIT3Y7JT.js.map} +0 -0
  248. /package/dist/{chunk-DVUPIVI2.js.map → chunk-WQA4LIIK.js.map} +0 -0
  249. /package/dist/{chunk-2UYR2OOE.js.map → chunk-YRUCIKPO.js.map} +0 -0
  250. /package/dist/{chunk-QKIJ6YXZ.js.map → chunk-ZA4U5GDU.js.map} +0 -0
  251. /package/dist/{chunk-OXQP3N6X.js.map → chunk-ZTZ6S5Q6.js.map} +0 -0
@@ -1,9 +1,3 @@
1
- import {
2
- useHoverCard
3
- } from "./chunk-SXYIXCUB.js";
4
- import {
5
- HoverCardContent
6
- } from "./chunk-O26MKGIC.js";
7
1
  import {
8
2
  arrowSx,
9
3
  cardSx,
@@ -11,6 +5,12 @@ import {
11
5
  getTransformOrigin,
12
6
  sideOf
13
7
  } from "./chunk-KSLNO5NG.js";
8
+ import {
9
+ useHoverCard
10
+ } from "./chunk-SXYIXCUB.js";
11
+ import {
12
+ HoverCardContent
13
+ } from "./chunk-O26MKGIC.js";
14
14
  import {
15
15
  withDefaults
16
16
  } from "./chunk-HPK33ACY.js";
@@ -158,4 +158,4 @@ HoverCard.displayName = "HoverCard";
158
158
  export {
159
159
  HoverCard
160
160
  };
161
- //# sourceMappingURL=chunk-XFUNJYFT.js.map
161
+ //# sourceMappingURL=chunk-EPNUVSNK.js.map
@@ -1,3 +1,7 @@
1
+ import {
2
+ resolveCommandProps,
3
+ useCommandPalette
4
+ } from "./chunk-6DN4ZULV.js";
1
5
  import {
2
6
  commandPaperStyles,
3
7
  commandSizeStyles
@@ -6,10 +10,6 @@ import {
6
10
  CommandEmpty,
7
11
  CommandLoading
8
12
  } from "./chunk-CMK4DJDR.js";
9
- import {
10
- resolveCommandProps,
11
- useCommandPalette
12
- } from "./chunk-6DN4ZULV.js";
13
13
 
14
14
  // src/components/form/Command/Command.tsx
15
15
  import CloseIcon from "@mui/icons-material/Close";
@@ -302,4 +302,4 @@ export {
302
302
  CommandList,
303
303
  CommandGroup
304
304
  };
305
- //# sourceMappingURL=chunk-MSUSZLRE.js.map
305
+ //# sourceMappingURL=chunk-EWT3WMVY.js.map
@@ -0,0 +1,64 @@
1
+ import {
2
+ mapCentre,
3
+ nextSelection,
4
+ rosterOrder
5
+ } from "./chunk-5V4UPOWK.js";
6
+
7
+ // src/components/data-display/FleetMap/FleetMap.hooks.ts
8
+ import React from "react";
9
+ function stepFor(event) {
10
+ if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return 0;
11
+ if (event.key === "ArrowDown") return 1;
12
+ if (event.key === "ArrowUp") return -1;
13
+ return 0;
14
+ }
15
+ function useSelection(selectedId, onSelect) {
16
+ const controlledRef = React.useRef(selectedId !== void 0);
17
+ const controlled = controlledRef.current;
18
+ const [own, setOwn] = React.useState(null);
19
+ const select = React.useCallback(
20
+ (id) => {
21
+ if (!controlled) setOwn(id);
22
+ onSelect?.(id);
23
+ },
24
+ [controlled, onSelect]
25
+ );
26
+ return { active: controlled ? selectedId ?? null : own, select, controlled };
27
+ }
28
+ function useFleetMap(units, selectedId, onSelect) {
29
+ const ordered = React.useMemo(() => rosterOrder(units), [units]);
30
+ const { active, select, controlled } = useSelection(selectedId, onSelect);
31
+ const raw = mapCentre(ordered, active);
32
+ const lat = raw === null ? null : Math.round(raw.lat * 1e6) / 1e6;
33
+ const lng = raw === null ? null : Math.round(raw.lng * 1e6) / 1e6;
34
+ const centre = React.useMemo(
35
+ () => lat === null || lng === null ? null : { lat, lng },
36
+ [lat, lng]
37
+ );
38
+ const onKeyDown = React.useCallback(
39
+ (event) => {
40
+ const step = stepFor(event);
41
+ if (step === 0) return;
42
+ if (controlled && !onSelect) return;
43
+ const next = nextSelection(ordered, active, step);
44
+ if (next === null) return;
45
+ event.preventDefault();
46
+ select(next);
47
+ },
48
+ [ordered, active, select, controlled, onSelect]
49
+ );
50
+ const markers = React.useMemo(
51
+ () => ordered.map((unit) => ({
52
+ position: { lat: unit.latitude, lng: unit.longitude },
53
+ title: unit.label,
54
+ onClick: () => select(unit.id)
55
+ })),
56
+ [ordered, select]
57
+ );
58
+ return { ordered, active, centre, select, markers, onKeyDown };
59
+ }
60
+
61
+ export {
62
+ useFleetMap
63
+ };
64
+ //# sourceMappingURL=chunk-F7VBGS4C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/FleetMap/FleetMap.hooks.ts"],"sourcesContent":["import React from 'react';\n\nimport { mapCentre, nextSelection, rosterOrder, type LatLng } from './FleetMap.helpers';\nimport type { FleetUnit } from './FleetMap.types';\n\n/**\n * Everything the board derives from its props, in one hook.\n *\n * Split out of the component so the component is layout and nothing else.\n *\n * The memos are honest about what they buy, which is less than it looks. `units`\n * arrives as a fresh array on every poll, so `ordered` and `markers` are\n * recomputed on every poll whatever these do — a new array is a new identity.\n * What they buy is stability across the renders a poll does NOT cause: a parent\n * re-render, a selection change (which re-runs `centre` but not `ordered`), a\n * theme flip. Sorting a fleet is cheap either way; this is tidiness, not a\n * measured win, and it should not be read as one.\n *\n * `centre` is the exception, and there it is load-bearing rather than tidy —\n * see {@link useFleetMap}.\n *\n * ## Selection works with, without, or half-way through a handler\n *\n * `selectedId` and `onSelect` are both optional, so all four combinations\n * arrive. Left purely controlled, the two useful ones broke: with neither prop\n * the roster was a listbox that answered nothing, and arrowing it called\n * `preventDefault` before a no-op `select`, so the keys did not move a\n * selection AND did not scroll the page either.\n *\n * So the hook keeps its own selection and defers to `selectedId` only when the\n * caller passes one — the ordinary controlled/uncontrolled split, the same one\n * an `<input>` makes. `onSelect` still fires either way, so a consumer can\n * observe the selection without owning it.\n */\n\n/** One pin, in the shape `MapPreview` takes. */\nexport interface FleetMarker {\n position: LatLng;\n title: string;\n onClick: () => void;\n}\n\nexport interface FleetMapState {\n /** The units, freshest first — see {@link rosterOrder}. */\n ordered: FleetUnit[];\n /**\n * The selection in force — the caller's when they own it, this hook's when\n * they do not. Everything downstream reads THIS and never the raw prop.\n */\n active: string | null;\n /** Where the map points, or `null` when there is nothing to show. */\n centre: LatLng | null;\n select: (id: string) => void;\n markers: FleetMarker[];\n onKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n}\n\n/** Which way an arrow moves the selection, or `0` when it is not ours. */\nfunction stepFor(event: React.KeyboardEvent<HTMLDivElement>): 1 | -1 | 0 {\n // A modified arrow is the PAGE's shortcut, not the roster's: Cmd+Down is\n // \"scroll to the end of the document\" on macOS, and Shift+Arrow extends a\n // selection. Capturing them would take a browser gesture away.\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return 0;\n if (event.key === 'ArrowDown') return 1;\n if (event.key === 'ArrowUp') return -1;\n return 0;\n}\n\n/**\n * Who owns the selection, decided ONCE on the first render.\n *\n * Exactly as React decides it for an `<input>`, and for the same reason.\n * `selectedId` is typed `string | null | undefined`, so `useState<string>()` —\n * the natural shape for a caller — hands us `undefined` on the first render and\n * again on every reset. Re-deriving the mode from the prop each time would make\n * the component change its own semantics mid-life: it starts uncontrolled,\n * silently becomes controlled the moment the caller's `onSelect` writes a value\n * back, and then silently un-becomes it when they clear — resurrecting whatever\n * was selected before the hand-off.\n *\n * Latched, `undefined` is unambiguous within each mode: to a controlled board it\n * is \"nobody is selected\", so clearing the caller's state clears the roster; to\n * an uncontrolled one it is simply the prop staying absent. A caller who wants\n * control passes `string | null` from the first render.\n */\nfunction useSelection(\n selectedId: string | null | undefined,\n onSelect: ((id: string) => void) | undefined,\n): { active: string | null; select: (id: string) => void; controlled: boolean } {\n const controlledRef = React.useRef(selectedId !== undefined);\n const controlled = controlledRef.current;\n const [own, setOwn] = React.useState<string | null>(null);\n\n const select = React.useCallback(\n (id: string) => {\n if (!controlled) setOwn(id);\n onSelect?.(id);\n },\n [controlled, onSelect],\n );\n\n return { active: controlled ? (selectedId ?? null) : own, select, controlled };\n}\n\nexport function useFleetMap(\n units: readonly FleetUnit[],\n selectedId: string | null | undefined,\n onSelect: ((id: string) => void) | undefined,\n): FleetMapState {\n const ordered = React.useMemo(() => rosterOrder(units), [units]);\n const { active, select, controlled } = useSelection(selectedId, onSelect);\n\n // Memoised on the COORDINATES and not the object, because `mapCentre` builds\n // a fresh literal every call and `MapPreview` re-centres from an effect keyed\n // on `center`'s identity. A poll that changes nothing would otherwise hand it\n // a new object, and the map would jump back to the centroid — throwing away a\n // pan the dispatcher had just made, on a timer, for as long as they watch it.\n //\n // ROUNDED, because keying on the raw numbers was not enough. `mapCentre`\n // sums over `ordered`, and floating-point addition is not associative — so\n // re-sorting the SAME coordinates can change the centroid's last bit.\n // `rosterOrder` sorts on `staleSeconds`, which moves on every poll, so rank\n // swaps are the ordinary case for a fleet that is standing still: measured\n // over 20k random three-rider fleets, a single adjacent swap changed the\n // centroid 17% of the time. Six decimals is ~11cm, far finer than a map\n // centre resolves and far coarser than the noise.\n const raw = mapCentre(ordered, active);\n const lat = raw === null ? null : Math.round(raw.lat * 1e6) / 1e6;\n const lng = raw === null ? null : Math.round(raw.lng * 1e6) / 1e6;\n const centre = React.useMemo(\n () => (lat === null || lng === null ? null : { lat, lng }),\n [lat, lng],\n );\n\n const onKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const step = stepFor(event);\n if (step === 0) return;\n // Nothing can move a CONTROLLED selection without a handler, so the keys\n // belong to the page. Swallowing them there left a keyboard user unable to\n // move the selection and unable to scroll past the roster.\n if (controlled && !onSelect) return;\n const next = nextSelection(ordered, active, step);\n // `preventDefault` only once a move is certain, so the page still scrolls\n // with the arrow keys when the list is empty and there is nothing to move.\n if (next === null) return;\n event.preventDefault();\n select(next);\n },\n [ordered, active, select, controlled, onSelect],\n );\n\n const markers = React.useMemo(\n () =>\n ordered.map((unit) => ({\n position: { lat: unit.latitude, lng: unit.longitude },\n title: unit.label,\n onClick: () => select(unit.id),\n })),\n [ordered, select],\n );\n\n return { ordered, active, centre, select, markers, onKeyDown };\n}\n"],"mappings":";;;;;;;AAAA,OAAO,WAAW;AA0DlB,SAAS,QAAQ,OAAwD;AAIvE,MAAI,MAAM,UAAU,MAAM,WAAW,MAAM,WAAW,MAAM,SAAU,QAAO;AAC7E,MAAI,MAAM,QAAQ,YAAa,QAAO;AACtC,MAAI,MAAM,QAAQ,UAAW,QAAO;AACpC,SAAO;AACT;AAmBA,SAAS,aACP,YACA,UAC8E;AAC9E,QAAM,gBAAgB,MAAM,OAAO,eAAe,MAAS;AAC3D,QAAM,aAAa,cAAc;AACjC,QAAM,CAAC,KAAK,MAAM,IAAI,MAAM,SAAwB,IAAI;AAExD,QAAM,SAAS,MAAM;AAAA,IACnB,CAAC,OAAe;AACd,UAAI,CAAC,WAAY,QAAO,EAAE;AAC1B,iBAAW,EAAE;AAAA,IACf;AAAA,IACA,CAAC,YAAY,QAAQ;AAAA,EACvB;AAEA,SAAO,EAAE,QAAQ,aAAc,cAAc,OAAQ,KAAK,QAAQ,WAAW;AAC/E;AAEO,SAAS,YACd,OACA,YACA,UACe;AACf,QAAM,UAAU,MAAM,QAAQ,MAAM,YAAY,KAAK,GAAG,CAAC,KAAK,CAAC;AAC/D,QAAM,EAAE,QAAQ,QAAQ,WAAW,IAAI,aAAa,YAAY,QAAQ;AAgBxE,QAAM,MAAM,UAAU,SAAS,MAAM;AACrC,QAAM,MAAM,QAAQ,OAAO,OAAO,KAAK,MAAM,IAAI,MAAM,GAAG,IAAI;AAC9D,QAAM,MAAM,QAAQ,OAAO,OAAO,KAAK,MAAM,IAAI,MAAM,GAAG,IAAI;AAC9D,QAAM,SAAS,MAAM;AAAA,IACnB,MAAO,QAAQ,QAAQ,QAAQ,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IACxD,CAAC,KAAK,GAAG;AAAA,EACX;AAEA,QAAM,YAAY,MAAM;AAAA,IACtB,CAAC,UAA+C;AAC9C,YAAM,OAAO,QAAQ,KAAK;AAC1B,UAAI,SAAS,EAAG;AAIhB,UAAI,cAAc,CAAC,SAAU;AAC7B,YAAM,OAAO,cAAc,SAAS,QAAQ,IAAI;AAGhD,UAAI,SAAS,KAAM;AACnB,YAAM,eAAe;AACrB,aAAO,IAAI;AAAA,IACb;AAAA,IACA,CAAC,SAAS,QAAQ,QAAQ,YAAY,QAAQ;AAAA,EAChD;AAEA,QAAM,UAAU,MAAM;AAAA,IACpB,MACE,QAAQ,IAAI,CAAC,UAAU;AAAA,MACrB,UAAU,EAAE,KAAK,KAAK,UAAU,KAAK,KAAK,UAAU;AAAA,MACpD,OAAO,KAAK;AAAA,MACZ,SAAS,MAAM,OAAO,KAAK,EAAE;AAAA,IAC/B,EAAE;AAAA,IACJ,CAAC,SAAS,MAAM;AAAA,EAClB;AAEA,SAAO,EAAE,SAAS,QAAQ,QAAQ,QAAQ,SAAS,UAAU;AAC/D;","names":[]}
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  useAddressAutocomplete
3
- } from "./chunk-ZOUWHGV3.js";
3
+ } from "./chunk-4MGFUPQT.js";
4
4
  import {
5
5
  AddressFallbackField
6
6
  } from "./chunk-HKKSZ7HG.js";
7
7
  import {
8
8
  AddressAutocompleteField
9
- } from "./chunk-TLMLEC4F.js";
9
+ } from "./chunk-KW7H5O3K.js";
10
10
  import {
11
11
  resolveAddressProps
12
12
  } from "./chunk-MTGEJRE4.js";
@@ -35,4 +35,4 @@ export {
35
35
  AddressAutocomplete,
36
36
  AddressAutocomplete_default
37
37
  };
38
- //# sourceMappingURL=chunk-Q75SJ35X.js.map
38
+ //# sourceMappingURL=chunk-GMTM6EN7.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Sheet
3
- } from "./chunk-ZIYMBR7K.js";
3
+ } from "./chunk-OTH7H3IP.js";
4
4
  import {
5
5
  Dialog
6
6
  } from "./chunk-YANLN6HP.js";
@@ -162,4 +162,4 @@ AppHeaderDetails.displayName = "AppHeaderDetails";
162
162
  export {
163
163
  AppHeaderDetails
164
164
  };
165
- //# sourceMappingURL=chunk-6NZTYZP5.js.map
165
+ //# sourceMappingURL=chunk-GVA5CYKP.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KHG57NAE.js";
4
4
  import {
5
5
  Pagination
6
- } from "./chunk-W2UTDN4T.js";
6
+ } from "./chunk-RBGOGTT2.js";
7
7
  import {
8
8
  default as default2
9
9
  } from "./chunk-6DPAWXZ3.js";
@@ -31,4 +31,4 @@ function DataViewsPagination({
31
31
  export {
32
32
  DataViewsPagination
33
33
  };
34
- //# sourceMappingURL=chunk-VR5HDUBK.js.map
34
+ //# sourceMappingURL=chunk-HP2ODXNA.js.map
@@ -1,8 +1,3 @@
1
- import {
2
- AVATAR_DEFAULTS,
3
- contentTypeOf,
4
- pickAvatarContent
5
- } from "./chunk-3ZVUNSFF.js";
6
1
  import {
7
2
  AvatarView
8
3
  } from "./chunk-4SQFO4GW.js";
@@ -12,6 +7,11 @@ import {
12
7
  GROUP_MAX,
13
8
  GROUP_OVERLAP
14
9
  } from "./chunk-FAITHWIO.js";
10
+ import {
11
+ AVATAR_DEFAULTS,
12
+ contentTypeOf,
13
+ pickAvatarContent
14
+ } from "./chunk-3ZVUNSFF.js";
15
15
 
16
16
  // src/components/data-display/Avatar/Avatar.tsx
17
17
  import BrokenImage from "@mui/icons-material/BrokenImage";
@@ -172,4 +172,4 @@ export {
172
172
  Avatar,
173
173
  AvatarGroup
174
174
  };
175
- //# sourceMappingURL=chunk-7BYFC2MR.js.map
175
+ //# sourceMappingURL=chunk-I7HYGIEJ.js.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ useDateRangePicker
3
+ } from "./chunk-OD4Z5G6G.js";
1
4
  import {
2
5
  DateRangeQuickList
3
6
  } from "./chunk-ZRHSIFWA.js";
@@ -7,9 +10,6 @@ import {
7
10
  import {
8
11
  DEFAULT_QUICK_RANGES
9
12
  } from "./chunk-QKLSHNOH.js";
10
- import {
11
- useDateRangePicker
12
- } from "./chunk-OD4Z5G6G.js";
13
13
  import {
14
14
  toLocalDay
15
15
  } from "./chunk-FRAVVI4A.js";
@@ -180,4 +180,4 @@ export {
180
180
  DateRangePicker,
181
181
  DateRangePicker_default
182
182
  };
183
- //# sourceMappingURL=chunk-UVGRRI7N.js.map
183
+ //# sourceMappingURL=chunk-IPVYEPXO.js.map
@@ -3,7 +3,10 @@ import {
3
3
  } from "./chunk-LMXWI3DD.js";
4
4
  import {
5
5
  CategoryPanel
6
- } from "./chunk-AGSBIUPV.js";
6
+ } from "./chunk-TPLKJHNN.js";
7
+ import {
8
+ useCategoryCommit
9
+ } from "./chunk-ZAB65STX.js";
7
10
  import {
8
11
  CategoryTrigger
9
12
  } from "./chunk-KIHQE5YA.js";
@@ -16,9 +19,6 @@ import {
16
19
  import {
17
20
  useCategoryKeyHandler
18
21
  } from "./chunk-ISH42UC7.js";
19
- import {
20
- useCategoryCommit
21
- } from "./chunk-ZAB65STX.js";
22
22
  import {
23
23
  summarizeSelection
24
24
  } from "./chunk-LR6MSKTT.js";
@@ -158,4 +158,4 @@ function CategorySelect(props) {
158
158
  export {
159
159
  CategorySelect
160
160
  };
161
- //# sourceMappingURL=chunk-5ZTUP65G.js.map
161
+ //# sourceMappingURL=chunk-JM64OEU6.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  MoreGroup,
3
3
  fieldClearing
4
- } from "./chunk-QWDEOITU.js";
4
+ } from "./chunk-MYGNIFZC.js";
5
5
  import {
6
6
  useDataViewsCopy
7
7
  } from "./chunk-KHG57NAE.js";
@@ -180,4 +180,4 @@ function MoreFilters({
180
180
  export {
181
181
  MoreFilters
182
182
  };
183
- //# sourceMappingURL=chunk-QFJRB27Q.js.map
183
+ //# sourceMappingURL=chunk-KHWCX4LI.js.map
@@ -1,3 +1,8 @@
1
+ import {
2
+ MIN_QUERY_LENGTH,
3
+ addressOptionLabel,
4
+ isSameAddressOption
5
+ } from "./chunk-MTGEJRE4.js";
1
6
  import {
2
7
  AddressSuggestionsPaper
3
8
  } from "./chunk-ST4YYVUK.js";
@@ -7,11 +12,6 @@ import {
7
12
  import {
8
13
  AddressInputField
9
14
  } from "./chunk-VXTYVJDK.js";
10
- import {
11
- MIN_QUERY_LENGTH,
12
- addressOptionLabel,
13
- isSameAddressOption
14
- } from "./chunk-MTGEJRE4.js";
15
15
 
16
16
  // src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx
17
17
  import Alert from "@mui/material/Alert/index.js";
@@ -89,4 +89,4 @@ var AddressAutocompleteField = ({
89
89
  export {
90
90
  AddressAutocompleteField
91
91
  };
92
- //# sourceMappingURL=chunk-TLMLEC4F.js.map
92
+ //# sourceMappingURL=chunk-KW7H5O3K.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  FilterDialog,
3
3
  GridFilterPanel
4
- } from "./chunk-5NKUYCZD.js";
4
+ } from "./chunk-VON4BFK4.js";
5
5
  import {
6
6
  DataViewsEmpty
7
7
  } from "./chunk-5OIH36KX.js";
8
8
  import {
9
9
  InlineFilterControls
10
- } from "./chunk-2MMEIN4T.js";
10
+ } from "./chunk-N2TUX4A5.js";
11
11
  import {
12
12
  GridHeaderRow
13
13
  } from "./chunk-JSH3HFDQ.js";
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-VNNG46TS.js";
17
17
  import {
18
18
  DataViewsPagination
19
- } from "./chunk-VR5HDUBK.js";
19
+ } from "./chunk-HP2ODXNA.js";
20
20
  import {
21
21
  toOverflowFields,
22
22
  useFilterOverflow
@@ -237,4 +237,4 @@ function GridShell(props) {
237
237
  export {
238
238
  GridShell
239
239
  };
240
- //# sourceMappingURL=chunk-UU3QAKG6.js.map
240
+ //# sourceMappingURL=chunk-L4U23SBX.js.map
@@ -0,0 +1,205 @@
1
+ import {
2
+ freshnessOf
3
+ } from "./chunk-5V4UPOWK.js";
4
+ import {
5
+ Skeleton
6
+ } from "./chunk-7VN7LFBA.js";
7
+
8
+ // src/components/data-display/FleetMap/FleetRoster.tsx
9
+ import Box from "@mui/material/Box/index.js";
10
+ import Stack from "@mui/material/Stack/index.js";
11
+ import Typography from "@mui/material/Typography/index.js";
12
+ import { useTheme } from "@mui/material/styles/index.js";
13
+ import React from "react";
14
+ import { jsx, jsxs } from "react/jsx-runtime";
15
+ function freshnessColor(freshness, theme) {
16
+ if (freshness === "live") return theme.palette.success.main;
17
+ if (freshness === "lagging") return theme.palette.warning.main;
18
+ return theme.palette.text.disabled;
19
+ }
20
+ function RowText({
21
+ unit,
22
+ copy,
23
+ freshness,
24
+ testId
25
+ }) {
26
+ const theme = useTheme();
27
+ const meta = [
28
+ copy.freshness[freshness],
29
+ copy.lastSeen(unit.staleSeconds),
30
+ unit.accuracyM == null ? null : copy.accuracy(unit.accuracyM)
31
+ ].filter((part) => Boolean(part)).join(" \xB7 ");
32
+ return /* @__PURE__ */ jsxs(Stack, { sx: { minWidth: 0, flexGrow: 1 }, children: [
33
+ /* @__PURE__ */ jsx(
34
+ Typography,
35
+ {
36
+ variant: "body2",
37
+ component: "p",
38
+ "data-testid": `${testId}-label`,
39
+ sx: { fontWeight: theme.typography.fontWeightMedium, overflowWrap: "anywhere" },
40
+ children: unit.label
41
+ }
42
+ ),
43
+ /* @__PURE__ */ jsx(
44
+ Typography,
45
+ {
46
+ variant: "caption",
47
+ component: "p",
48
+ "data-testid": `${testId}-meta`,
49
+ sx: { color: theme.palette.text.secondary },
50
+ children: meta
51
+ }
52
+ )
53
+ ] });
54
+ }
55
+ function useKeptInView(selected, position) {
56
+ const row = React.useRef(null);
57
+ React.useEffect(() => {
58
+ const box = row.current;
59
+ const list = box?.parentElement;
60
+ if (!selected || !box || !list) return;
61
+ const top = box.offsetTop - list.offsetTop;
62
+ if (top < list.scrollTop) {
63
+ list.scrollTop = top;
64
+ } else if (top + box.offsetHeight > list.scrollTop + list.clientHeight) {
65
+ list.scrollTop = top + box.offsetHeight - list.clientHeight;
66
+ }
67
+ }, [selected, position]);
68
+ return row;
69
+ }
70
+ function rowSx(theme, selected) {
71
+ const resting = selected ? theme.palette.action.selected : "transparent";
72
+ return {
73
+ display: "flex",
74
+ alignItems: "center",
75
+ gap: theme.spacing(1.5),
76
+ padding: theme.spacing(1, 1.5),
77
+ // `1`, not `theme.shape.borderRadius / 4`. MUI's `sx` reads a NUMBER here as
78
+ // a multiple of `theme.shape.borderRadius`, so dividing the theme value out
79
+ // and letting `sx` multiply it back in is quadratic: measured 4px on the
80
+ // default theme — which is why this looked right — and 36px on a host that
81
+ // sets its own radius to 12. In a package whose whole premise is being
82
+ // re-themed, only the multiple is portable.
83
+ borderRadius: 1,
84
+ cursor: "pointer",
85
+ backgroundColor: resting,
86
+ "&:hover": {
87
+ backgroundColor: selected ? theme.palette.action.selected : theme.palette.action.hover
88
+ }
89
+ };
90
+ }
91
+ function FleetRow({
92
+ unit,
93
+ copy,
94
+ freshness,
95
+ selected,
96
+ onSelect,
97
+ optionId,
98
+ position,
99
+ testId
100
+ }) {
101
+ const theme = useTheme();
102
+ const color = freshnessColor(freshness, theme);
103
+ const row = useKeptInView(selected, position);
104
+ return /* @__PURE__ */ jsxs(
105
+ Box,
106
+ {
107
+ ref: row,
108
+ role: "option",
109
+ "aria-selected": selected,
110
+ id: optionId,
111
+ "data-testid": testId,
112
+ "data-freshness": freshness,
113
+ onClick: () => onSelect(unit.id),
114
+ sx: rowSx(theme, selected),
115
+ children: [
116
+ /* @__PURE__ */ jsx(
117
+ Box,
118
+ {
119
+ "aria-hidden": "true",
120
+ "data-testid": `${testId}-dot`,
121
+ sx: {
122
+ width: 10,
123
+ height: 10,
124
+ borderRadius: "50%",
125
+ flexShrink: 0,
126
+ backgroundColor: color
127
+ }
128
+ }
129
+ ),
130
+ /* @__PURE__ */ jsx(RowText, { unit, copy, freshness, testId }),
131
+ unit.badge && /* @__PURE__ */ jsx(
132
+ Typography,
133
+ {
134
+ variant: "caption",
135
+ component: "span",
136
+ "data-testid": `${testId}-badge`,
137
+ sx: { color: theme.palette.text.secondary, flexShrink: 0 },
138
+ children: unit.badge
139
+ }
140
+ )
141
+ ]
142
+ }
143
+ );
144
+ }
145
+ function FirstLoad({ testId }) {
146
+ return /* @__PURE__ */ jsx(Stack, { spacing: 1, "data-testid": `${testId}-skeleton`, "aria-hidden": "true", children: [0, 1, 2].map((row) => /* @__PURE__ */ jsx(Skeleton, { variant: "rectangular", height: 44, borderRadius: 1 }, row)) });
147
+ }
148
+ function FleetRoster({
149
+ units,
150
+ copy,
151
+ selectedId,
152
+ onSelect,
153
+ laggingAfterSeconds,
154
+ staleAfterSeconds,
155
+ loading,
156
+ testId,
157
+ onKeyDown
158
+ }) {
159
+ const theme = useTheme();
160
+ const rowIdPrefix = React.useId();
161
+ const optionId = (id) => `${rowIdPrefix}-${id}`;
162
+ const active = units.some((unit) => unit.id === selectedId) ? selectedId : null;
163
+ if (loading && units.length === 0) return /* @__PURE__ */ jsx(FirstLoad, { testId });
164
+ return /* @__PURE__ */ jsx(
165
+ Box,
166
+ {
167
+ role: "listbox",
168
+ tabIndex: 0,
169
+ "aria-label": copy.rosterLabel,
170
+ "aria-activedescendant": active ? optionId(active) : void 0,
171
+ "data-testid": `${testId}-roster`,
172
+ onKeyDown,
173
+ sx: {
174
+ display: "flex",
175
+ flexDirection: "column",
176
+ gap: theme.spacing(0.5),
177
+ overflowY: "auto",
178
+ minWidth: 0,
179
+ "&:focus-visible": {
180
+ outline: `2px solid ${theme.palette.primary.main}`,
181
+ outlineOffset: 2
182
+ }
183
+ },
184
+ children: units.map((unit, index) => /* @__PURE__ */ jsx(
185
+ FleetRow,
186
+ {
187
+ unit,
188
+ copy,
189
+ freshness: freshnessOf(unit.staleSeconds, laggingAfterSeconds, staleAfterSeconds),
190
+ selected: unit.id === active,
191
+ onSelect,
192
+ optionId: optionId(unit.id),
193
+ position: index,
194
+ testId: `${testId}-${unit.id}`
195
+ },
196
+ unit.id
197
+ ))
198
+ }
199
+ );
200
+ }
201
+
202
+ export {
203
+ FleetRoster
204
+ };
205
+ //# sourceMappingURL=chunk-MQNKRIGC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/FleetMap/FleetRoster.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { useTheme, type SxProps, type Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { Skeleton } from '../../layout/Skeleton/Skeleton';\n\nimport { freshnessOf } from './FleetMap.helpers';\nimport type { FleetFreshness, FleetMapCopy, FleetUnit } from './FleetMap.types';\n\n/**\n * The roster beside the map — and the ACCESSIBLE half of this component.\n *\n * A map is a picture of positions and a screen reader cannot read a picture, so\n * the panel's information is carried by this list. That is not a consolation\n * prize: the list answers the questions a dispatcher actually asks — who is\n * reporting, how recently, and what are they carrying — and it answers them in\n * an order the map cannot express.\n *\n * The map beside it is a NAMED LANDMARK rather than an `aria-hidden` one, so a\n * reader can skip it in one gesture — see `FleetCanvas`, which carries the\n * reason it must not be hidden.\n */\n\n/** Each freshness draws from the semantic palette, never a hardcoded hex. */\nfunction freshnessColor(freshness: FleetFreshness, theme: Theme): string {\n if (freshness === 'live') return theme.palette.success.main;\n if (freshness === 'lagging') return theme.palette.warning.main;\n return theme.palette.text.disabled;\n}\n\n/**\n * A row's two lines of text — the name, and the one-line summary under it.\n *\n * Split out of `FleetRow` to keep that function under the size gate, and the\n * seam is the natural one: everything here is READ, nothing is interactive.\n */\nfunction RowText({\n unit,\n copy,\n freshness,\n testId,\n}: Pick<RowProps, 'unit' | 'copy' | 'freshness' | 'testId'>): React.JSX.Element {\n const theme = useTheme();\n\n // Dropped rather than rendered empty: a phone that reports no accuracy radius\n // would otherwise print a trailing separator with nothing after it.\n const meta = [\n copy.freshness[freshness],\n copy.lastSeen(unit.staleSeconds),\n unit.accuracyM == null ? null : copy.accuracy(unit.accuracyM),\n ]\n .filter((part): part is string => Boolean(part))\n .join(' · ');\n\n return (\n <Stack sx={{ minWidth: 0, flexGrow: 1 }}>\n <Typography\n variant=\"body2\"\n component=\"p\"\n data-testid={`${testId}-label`}\n sx={{ fontWeight: theme.typography.fontWeightMedium, overflowWrap: 'anywhere' }}\n >\n {unit.label}\n </Typography>\n <Typography\n variant=\"caption\"\n component=\"p\"\n data-testid={`${testId}-meta`}\n sx={{ color: theme.palette.text.secondary }}\n >\n {meta}\n </Typography>\n </Stack>\n );\n}\n\n/**\n * Keep the selected row visible INSIDE the roster.\n *\n * The roster caps its own height, so a dispatcher arrowing through a fleet of\n * thirty otherwise walks the selection below the fold with nothing moving —\n * `aria-activedescendant` follows, and a SIGHTED keyboard user sees no feedback\n * at all.\n *\n * Watches the row's POSITION as well as its selectedness, because the roster\n * re-sorts on every poll: a rider who stays selected while their staleness\n * moves them down the list would otherwise slide out of view with the effect\n * never re-running.\n *\n * Arithmetic rather than `scrollIntoView({ block: 'nearest' })` because that\n * walks every scrollable ancestor, the document included, and `nearest` only\n * spares an ancestor the row is already visible in — which is exactly false\n * when the panel is off screen. Re-running on every re-sort, it would yank the\n * whole page back to the map on a timer, and drag it there on mount for any\n * board rendered below the fold with a selection already set.\n */\nfunction useKeptInView(\n selected: boolean,\n position: number,\n): React.RefObject<HTMLDivElement | null> {\n const row = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n const box = row.current;\n const list = box?.parentElement;\n if (!selected || !box || !list) return;\n const top = box.offsetTop - list.offsetTop;\n if (top < list.scrollTop) {\n list.scrollTop = top;\n } else if (top + box.offsetHeight > list.scrollTop + list.clientHeight) {\n list.scrollTop = top + box.offsetHeight - list.clientHeight;\n }\n }, [selected, position]);\n\n return row;\n}\n\n/**\n * A row's own box, selected or not.\n *\n * Out of line because the hover rule needs the explanation more than the JSX\n * has room for: hover must never WEAKEN the selection. Written flat as\n * `'&:hover': { backgroundColor: action.hover }`, the pseudo-class wins on\n * specificity and repaints the selected row with the hover tint — measured at\n * `rgba(0,0,0,0.08)` idle against `rgba(0,0,0,0.04)` hovered, so pointing at\n * the selected row visually DESELECTED it and made it indistinguishable from\n * any other row under the cursor.\n */\nfunction rowSx(theme: Theme, selected: boolean): SxProps<Theme> {\n const resting = selected ? theme.palette.action.selected : 'transparent';\n return {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n padding: theme.spacing(1, 1.5),\n // `1`, not `theme.shape.borderRadius / 4`. MUI's `sx` reads a NUMBER here as\n // a multiple of `theme.shape.borderRadius`, so dividing the theme value out\n // and letting `sx` multiply it back in is quadratic: measured 4px on the\n // default theme — which is why this looked right — and 36px on a host that\n // sets its own radius to 12. In a package whose whole premise is being\n // re-themed, only the multiple is portable.\n borderRadius: 1,\n cursor: 'pointer',\n backgroundColor: resting,\n '&:hover': {\n backgroundColor: selected ? theme.palette.action.selected : theme.palette.action.hover,\n },\n };\n}\n\ninterface RowProps {\n unit: FleetUnit;\n copy: FleetMapCopy;\n freshness: FleetFreshness;\n selected: boolean;\n onSelect: (id: string) => void;\n /** The row's DOM id, which `aria-activedescendant` points at. */\n optionId: string;\n /** Where the row sits in the re-sorted roster — see the scroll effect. */\n position: number;\n testId: string;\n}\n\nfunction FleetRow({\n unit,\n copy,\n freshness,\n selected,\n onSelect,\n optionId,\n position,\n testId,\n}: RowProps): React.JSX.Element {\n const theme = useTheme();\n const color = freshnessColor(freshness, theme);\n const row = useKeptInView(selected, position);\n\n return (\n <Box\n ref={row}\n role=\"option\"\n aria-selected={selected}\n id={optionId}\n data-testid={testId}\n data-freshness={freshness}\n onClick={() => onSelect(unit.id)}\n sx={rowSx(theme, selected)}\n >\n {/* The dot repeats what the freshness word beside it already says, so it\n is hidden rather than read twice — and colour is never the only\n carrier of the state. */}\n <Box\n aria-hidden=\"true\"\n data-testid={`${testId}-dot`}\n sx={{\n width: 10,\n height: 10,\n borderRadius: '50%',\n flexShrink: 0,\n backgroundColor: color,\n }}\n />\n <RowText unit={unit} copy={copy} freshness={freshness} testId={testId} />\n {unit.badge && (\n <Typography\n variant=\"caption\"\n component=\"span\"\n data-testid={`${testId}-badge`}\n sx={{ color: theme.palette.text.secondary, flexShrink: 0 }}\n >\n {unit.badge}\n </Typography>\n )}\n </Box>\n );\n}\n\n/**\n * What stands in for the roster before any unit has landed.\n *\n * `aria-hidden`, because three grey bars are not information — the panel's\n * `aria-busy` and its optional announcement carry that. The radius is the same\n * MULTIPLE a real row uses rather than a raw pixel count: `Skeleton` forwards\n * the number into `sx`, where it scales with `theme.shape.borderRadius`, so a\n * literal `4` drew 16px against the rows' 4px on the default theme and 48px\n * against 12px on a re-themed host.\n */\nfunction FirstLoad({ testId }: { testId: string }): React.JSX.Element {\n return (\n <Stack spacing={1} data-testid={`${testId}-skeleton`} aria-hidden=\"true\">\n {[0, 1, 2].map((row) => (\n <Skeleton key={row} variant=\"rectangular\" height={44} borderRadius={1} />\n ))}\n </Stack>\n );\n}\n\nexport interface FleetRosterProps {\n units: readonly FleetUnit[];\n copy: FleetMapCopy;\n selectedId: string | null | undefined;\n onSelect: (id: string) => void;\n laggingAfterSeconds: number;\n staleAfterSeconds: number;\n loading: boolean;\n testId: string;\n onKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n}\n\nexport function FleetRoster({\n units,\n copy,\n selectedId,\n onSelect,\n laggingAfterSeconds,\n staleAfterSeconds,\n loading,\n testId,\n onKeyDown,\n}: FleetRosterProps): React.JSX.Element {\n const theme = useTheme();\n // Generated, not derived from `dataTestId`: two boards on one page filtered\n // from the same fleet would otherwise emit duplicate DOM ids and an ambiguous\n // `aria-activedescendant`. Same reason the heading uses one.\n const rowIdPrefix = React.useId();\n const optionId = (id: string): string => `${rowIdPrefix}-${id}`;\n\n // The selection is CONTROLLED, so it can name a unit that has since dropped\n // out of the freshness window — a courier ending their shift mid-poll. The\n // attribute must then be absent rather than pointing at an element that no\n // longer renders, which announces nothing and fails an axe audit. `mapCentre`\n // and `nextSelection` both handle the same case; this is the third place.\n const active = units.some((unit) => unit.id === selectedId) ? selectedId : null;\n\n // Only when there is nothing to show yet. Unmounting a populated listbox on\n // every poll destroys the focus inside it, so a dispatcher arrowing through\n // the roster is thrown back to the top of the page each time the data\n // refreshes — and the rows they were reading vanish and return.\n if (loading && units.length === 0) return <FirstLoad testId={testId} />;\n\n return (\n <Box\n role=\"listbox\"\n // A single tab stop with arrow keys inside, which is the listbox pattern:\n // a dispatcher tabbing past a fleet of thirty should not have to press it\n // thirty times to reach the map.\n tabIndex={0}\n aria-label={copy.rosterLabel}\n aria-activedescendant={active ? optionId(active) : undefined}\n data-testid={`${testId}-roster`}\n onKeyDown={onKeyDown}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n overflowY: 'auto',\n minWidth: 0,\n '&:focus-visible': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: 2,\n },\n }}\n >\n {units.map((unit, index) => (\n <FleetRow\n key={unit.id}\n unit={unit}\n copy={copy}\n freshness={freshnessOf(unit.staleSeconds, laggingAfterSeconds, staleAfterSeconds)}\n selected={unit.id === active}\n onSelect={onSelect}\n optionId={optionId(unit.id)}\n position={index}\n testId={`${testId}-${unit.id}`}\n />\n ))}\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RangeBounds
3
- } from "./chunk-QZBUGUOY.js";
3
+ } from "./chunk-BZTFPSWT.js";
4
4
  import {
5
5
  isRangeSet
6
6
  } from "./chunk-GCZJH4XL.js";
@@ -188,4 +188,4 @@ export {
188
188
  fieldClearing,
189
189
  MoreGroup
190
190
  };
191
- //# sourceMappingURL=chunk-QWDEOITU.js.map
191
+ //# sourceMappingURL=chunk-MYGNIFZC.js.map
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-5WNQJ5KS.js";
5
5
  import {
6
6
  PillControl
7
- } from "./chunk-WLQTHPMX.js";
7
+ } from "./chunk-EJQW2IYW.js";
8
8
  import {
9
9
  MoreFilters
10
- } from "./chunk-QFJRB27Q.js";
10
+ } from "./chunk-KHWCX4LI.js";
11
11
  import {
12
12
  RangePill
13
- } from "./chunk-QZBUGUOY.js";
13
+ } from "./chunk-BZTFPSWT.js";
14
14
  import {
15
15
  CollapsedSearch,
16
16
  InlineKeyword
@@ -220,4 +220,4 @@ function FilterSlots({
220
220
  export {
221
221
  InlineFilterControls
222
222
  };
223
- //# sourceMappingURL=chunk-2MMEIN4T.js.map
223
+ //# sourceMappingURL=chunk-N2TUX4A5.js.map
@@ -5,10 +5,16 @@ import {
5
5
  import {
6
6
  filterRows
7
7
  } from "./chunk-YGQX7BNI.js";
8
+ import {
9
+ useSelection
10
+ } from "./chunk-LLZWB32X.js";
8
11
  import {
9
12
  resolveScope,
10
13
  useScopeConfigChecks
11
14
  } from "./chunk-LYKV3C7B.js";
15
+ import {
16
+ useStateWriters
17
+ } from "./chunk-U5FOJBLG.js";
12
18
  import {
13
19
  computeActiveFilterCount,
14
20
  defaultSortFields
@@ -17,15 +23,9 @@ import {
17
23
  serverDerived,
18
24
  useServerQuery
19
25
  } from "./chunk-IMLIIW77.js";
20
- import {
21
- useSelection
22
- } from "./chunk-LLZWB32X.js";
23
26
  import {
24
27
  emptyViewState
25
28
  } from "./chunk-LHHAYZ55.js";
26
- import {
27
- useStateWriters
28
- } from "./chunk-U5FOJBLG.js";
29
29
 
30
30
  // src/components/data-display/DataViews/use-data-views-state.ts
31
31
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -172,4 +172,4 @@ function useDataViewsState({
172
172
  export {
173
173
  useDataViewsState
174
174
  };
175
- //# sourceMappingURL=chunk-KTK4A3IF.js.map
175
+ //# sourceMappingURL=chunk-OIKQO73C.js.map