@12-apps/ui 6.22.0 → 6.24.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 (347) hide show
  1. package/NATIVE.md +2 -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 +4 -4
  5. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  6. package/dist/_internal/components/data-display/Badge/Badge.js +2 -2
  7. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +1 -1
  8. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +1 -1
  9. package/dist/_internal/components/data-display/Carousel/Carousel.js +2 -2
  10. package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
  11. package/dist/_internal/components/data-display/Chart/SpecChart.js +7 -7
  12. package/dist/_internal/components/data-display/Chart/chart-context.js +2 -2
  13. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  14. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  15. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  16. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +41 -41
  17. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +47 -47
  18. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +1 -1
  19. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +4 -4
  20. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +3 -3
  21. package/dist/_internal/components/data-display/DataViews/base-list-card.js +6 -6
  22. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +5 -5
  23. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +3 -3
  24. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +10 -10
  25. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +6 -6
  26. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +36 -36
  27. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +11 -11
  28. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +3 -3
  29. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +4 -4
  30. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  31. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  32. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +2 -2
  33. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +6 -6
  34. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +1 -1
  35. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +5 -5
  36. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
  37. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +4 -4
  38. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +32 -0
  39. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +23 -0
  40. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js.map +1 -0
  41. package/dist/_internal/components/data-display/FleetMap/FleetMap.base.js +1 -0
  42. package/dist/_internal/components/data-display/FleetMap/FleetMap.base.js.map +1 -0
  43. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +57 -0
  44. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js.map +1 -0
  45. package/dist/_internal/components/data-display/FleetMap/FleetMap.helpers.js +14 -0
  46. package/dist/_internal/components/data-display/FleetMap/FleetMap.helpers.js.map +1 -0
  47. package/dist/_internal/components/data-display/FleetMap/FleetMap.hooks.js +9 -0
  48. package/dist/_internal/components/data-display/FleetMap/FleetMap.hooks.js.map +1 -0
  49. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +47 -0
  50. package/dist/_internal/components/data-display/FleetMap/FleetMap.js.map +1 -0
  51. package/dist/_internal/components/data-display/FleetMap/FleetMap.metrics.js +20 -0
  52. package/dist/_internal/components/data-display/FleetMap/FleetMap.metrics.js.map +1 -0
  53. package/dist/_internal/components/data-display/FleetMap/FleetMap.types.js +1 -0
  54. package/dist/_internal/components/data-display/FleetMap/FleetMap.types.js.map +1 -0
  55. package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +15 -0
  56. package/dist/_internal/components/data-display/FleetMap/FleetRoster.js.map +1 -0
  57. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  58. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +2 -2
  59. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
  60. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +6 -6
  61. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  62. package/dist/_internal/components/data-display/Sheet/Sheet.js +3 -3
  63. package/dist/_internal/components/data-display/Table/Table.js +3 -3
  64. package/dist/_internal/components/data-display/index.js +90 -69
  65. package/dist/_internal/components/feedback/Modal/Modal.js +2 -2
  66. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +2 -2
  67. package/dist/_internal/components/feedback/index.js +14 -14
  68. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +3 -3
  69. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +5 -5
  70. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +2 -2
  71. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +2 -2
  72. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +4 -4
  73. package/dist/_internal/components/form/Command/Command.js +2 -2
  74. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +3 -3
  75. package/dist/_internal/components/form/PhoneInput/PhoneInput.hooks.js +2 -2
  76. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +3 -3
  77. package/dist/_internal/components/form/index.js +30 -30
  78. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +5 -5
  79. package/dist/_internal/components/form/total-form/Fields/index.js +9 -9
  80. package/dist/_internal/components/index.js +160 -140
  81. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +2 -2
  82. package/dist/_internal/components/layout/index.js +20 -20
  83. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +4 -4
  84. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  85. package/dist/_internal/components/navigation/index.js +12 -12
  86. package/dist/_internal/components/utility/index.js +4 -4
  87. package/dist/_internal/platform/aria.js.map +1 -1
  88. package/dist/_internal/pt-BR.data-display.js +2 -2
  89. package/dist/_internal/user-avatar/user-avatar.js +5 -5
  90. package/dist/charts.js +10 -10
  91. package/dist/{chunk-WGRS4PGY.js → chunk-2C47DEVU.js} +4 -4
  92. package/dist/chunk-2RQINU5T.js +41 -0
  93. package/dist/chunk-2RQINU5T.js.map +1 -0
  94. package/dist/{chunk-WMALDOF5.js → chunk-4G3FGCWX.js} +4 -4
  95. package/dist/{chunk-ZOUWHGV3.js → chunk-4MGFUPQT.js} +4 -4
  96. package/dist/{chunk-QFJRB27Q.js → chunk-6LGWJFQK.js} +2 -2
  97. package/dist/{chunk-XSF6AXEU.js → chunk-6RZDDUSM.js} +2 -2
  98. package/dist/{chunk-VIK3HAUQ.js → chunk-73NJCGQG.js} +2 -2
  99. package/dist/{chunk-UU3QAKG6.js → chunk-B7DKSBAE.js} +14 -14
  100. package/dist/{chunk-3FLVIVOK.js → chunk-BHIGHSXA.js} +2 -2
  101. package/dist/{chunk-HKV4MQ2W.js → chunk-BLBOYCOV.js} +5 -5
  102. package/dist/chunk-BTQZ3EX3.js +45 -0
  103. package/dist/chunk-BTQZ3EX3.js.map +1 -0
  104. package/dist/{chunk-PFV6RL4Q.js → chunk-C6KTQF4F.js} +3 -3
  105. package/dist/chunk-CDCTLPMD.js +1 -0
  106. package/dist/chunk-CDCTLPMD.js.map +1 -0
  107. package/dist/{chunk-LYSSO6WC.js → chunk-CZPU5TW3.js} +4 -4
  108. package/dist/{chunk-PMS3H3OO.js → chunk-DF2FFYZ7.js} +4 -4
  109. package/dist/{chunk-QZBUGUOY.js → chunk-DFLTUI7W.js} +4 -4
  110. package/dist/{chunk-WLQTHPMX.js → chunk-EJQW2IYW.js} +2 -2
  111. package/dist/{chunk-VQAM2XZV.js → chunk-EMUBMZMA.js} +2 -2
  112. package/dist/{chunk-XFUNJYFT.js → chunk-EPNUVSNK.js} +7 -7
  113. package/dist/{chunk-MSUSZLRE.js → chunk-EWT3WMVY.js} +5 -5
  114. package/dist/{chunk-Q75SJ35X.js → chunk-GMTM6EN7.js} +3 -3
  115. package/dist/{chunk-R6SBP5M5.js → chunk-GOWBYHYW.js} +4 -4
  116. package/dist/{chunk-6NZTYZP5.js → chunk-GVA5CYKP.js} +2 -2
  117. package/dist/chunk-HMV4QMXS.js +219 -0
  118. package/dist/chunk-HMV4QMXS.js.map +1 -0
  119. package/dist/{chunk-VR5HDUBK.js → chunk-HP2ODXNA.js} +2 -2
  120. package/dist/{chunk-2MMEIN4T.js → chunk-I3E2QHTH.js} +4 -4
  121. package/dist/{chunk-UVGRRI7N.js → chunk-IPVYEPXO.js} +4 -4
  122. package/dist/{chunk-5ZTUP65G.js → chunk-JM64OEU6.js} +5 -5
  123. package/dist/{chunk-7BYFC2MR.js → chunk-JUHUKZGU.js} +7 -7
  124. package/dist/chunk-JZXWCEH5.js +116 -0
  125. package/dist/chunk-JZXWCEH5.js.map +1 -0
  126. package/dist/{chunk-DVUPIVI2.js → chunk-KT6HWAEN.js} +4 -4
  127. package/dist/{chunk-TLMLEC4F.js → chunk-KW7H5O3K.js} +6 -6
  128. package/dist/{chunk-VLHGBFR6.js → chunk-MZQTHSLN.js} +3 -3
  129. package/dist/{chunk-4SQFO4GW.js → chunk-NA7MIEG6.js} +7 -7
  130. package/dist/{chunk-QWDEOITU.js → chunk-O4VCZTK4.js} +2 -2
  131. package/dist/{chunk-LS4FMSHY.js → chunk-OAYX4XN7.js} +4 -4
  132. package/dist/{chunk-Y5UCOBQN.js → chunk-OGGHD64H.js} +4 -4
  133. package/dist/{chunk-7TZ6OC5T.js → chunk-OH3YGJT5.js} +2 -2
  134. package/dist/{chunk-REMK55JI.js → chunk-OLZTGVBT.js} +4 -4
  135. package/dist/{chunk-VNNG46TS.js → chunk-ORSLFKKZ.js} +6 -6
  136. package/dist/{chunk-ZIYMBR7K.js → chunk-OTH7H3IP.js} +2 -2
  137. package/dist/{chunk-5NKUYCZD.js → chunk-PN5CQKA2.js} +4 -4
  138. package/dist/{chunk-J4W4TQPC.js → chunk-QJRDDVZ2.js} +5 -5
  139. package/dist/{chunk-VNDOQEJ7.js → chunk-QRX5BYUQ.js} +4 -4
  140. package/dist/{chunk-XT7HMNBW.js → chunk-R6SNYC3D.js} +5 -5
  141. package/dist/{chunk-W2UTDN4T.js → chunk-RBGOGTT2.js} +4 -4
  142. package/dist/chunk-RP5FK3SO.js +79 -0
  143. package/dist/chunk-RP5FK3SO.js.map +1 -0
  144. package/dist/{chunk-X5MPHXG5.js → chunk-RPWEXIAW.js} +6 -6
  145. package/dist/chunk-RQWZYD6H.js +1 -0
  146. package/dist/chunk-RQWZYD6H.js.map +1 -0
  147. package/dist/{chunk-EXJBPKGW.js → chunk-SHDIZSN5.js} +5 -5
  148. package/dist/{chunk-23FCBIUN.js → chunk-TNVO2DTB.js} +8 -8
  149. package/dist/{chunk-AGSBIUPV.js → chunk-TPLKJHNN.js} +4 -4
  150. package/dist/{chunk-YQ6TNHAC.js → chunk-TTLI6PF7.js} +5 -5
  151. package/dist/{chunk-U2AC4AQX.js → chunk-TU5EIKJA.js} +4 -4
  152. package/dist/{chunk-KTK4A3IF.js → chunk-TX5V42AY.js} +11 -11
  153. package/dist/{chunk-BGYLL467.js → chunk-TXHJX2NG.js} +4 -4
  154. package/dist/{chunk-FL54G7PV.js → chunk-WIT3Y7JT.js} +2 -2
  155. package/dist/{chunk-W7Y6RA6W.js → chunk-WR5JFDQ5.js} +4 -4
  156. package/dist/chunk-XPMGFAJ3.js +36 -0
  157. package/dist/chunk-XPMGFAJ3.js.map +1 -0
  158. package/dist/{chunk-2UYR2OOE.js → chunk-YRUCIKPO.js} +4 -4
  159. package/dist/{chunk-AEGXHZQT.js → chunk-YW5T6KZ5.js} +7 -7
  160. package/dist/{chunk-QKIJ6YXZ.js → chunk-ZA4U5GDU.js} +4 -4
  161. package/dist/chunk-ZCPSND5Y.js +64 -0
  162. package/dist/chunk-ZCPSND5Y.js.map +1 -0
  163. package/dist/{chunk-ZKR5B6YJ.js → chunk-ZRPGVHTR.js} +2 -2
  164. package/dist/{chunk-OXQP3N6X.js → chunk-ZTZ6S5Q6.js} +4 -4
  165. package/dist/data-display/AsyncStateContainer.js +3 -3
  166. package/dist/data-display/Avatar.js +4 -4
  167. package/dist/data-display/Badge.js +2 -2
  168. package/dist/data-display/CardKit.js +11 -11
  169. package/dist/data-display/Carousel.js +2 -2
  170. package/dist/data-display/Chart.js +10 -10
  171. package/dist/data-display/DataGrid.js +2 -2
  172. package/dist/data-display/DataViews.js +68 -68
  173. package/dist/data-display/FleetMap.js +55 -0
  174. package/dist/data-display/FleetMap.js.map +1 -0
  175. package/dist/data-display/HoverCard.js +2 -2
  176. package/dist/data-display/Lightbox.js +2 -2
  177. package/dist/data-display/MapPreview.js +6 -6
  178. package/dist/data-display/Sheet.js +3 -3
  179. package/dist/data-display/Table.js +3 -3
  180. package/dist/feedback/ConfirmAction.js +3 -3
  181. package/dist/feedback/Modal.js +2 -2
  182. package/dist/feedback/StackedModal.js +2 -2
  183. package/dist/form/AddressAutocomplete.js +5 -5
  184. package/dist/form/CategorySelect.js +4 -4
  185. package/dist/form/Command.js +2 -2
  186. package/dist/form/DateRangePicker.js +5 -5
  187. package/dist/form/PhoneInput.js +3 -3
  188. package/dist/form/total-form.js +9 -9
  189. package/dist/layout/SettingsLayout.js +2 -2
  190. package/dist/locales.js +4 -4
  191. package/dist/native/chunks/{chunk-T6BJPP3E.js → chunk-DN73KYIZ.js} +1 -1
  192. package/dist/native/chunks/chunk-DN73KYIZ.js.map +1 -0
  193. package/dist/native/chunks/chunk-GW7TQ7HO.js +215 -0
  194. package/dist/native/chunks/chunk-GW7TQ7HO.js.map +1 -0
  195. package/dist/native/chunks/chunk-MJVSQXOD.js +9 -0
  196. package/dist/native/chunks/chunk-MJVSQXOD.js.map +1 -0
  197. package/dist/native/chunks/chunk-ZAQ3AZJM.js +292 -0
  198. package/dist/native/chunks/chunk-ZAQ3AZJM.js.map +1 -0
  199. package/dist/native/data-display/Alert.js +4 -4
  200. package/dist/native/data-display/Avatar.js +3 -3
  201. package/dist/native/data-display/Badge.js +4 -4
  202. package/dist/native/data-display/Chip.js +3 -5
  203. package/dist/native/data-display/Chip.js.map +1 -1
  204. package/dist/native/data-display/EmptyState.js +9 -286
  205. package/dist/native/data-display/EmptyState.js.map +1 -1
  206. package/dist/native/data-display/ErrorState.js +6 -6
  207. package/dist/native/data-display/FleetMap.js +498 -0
  208. package/dist/native/data-display/FleetMap.js.map +1 -0
  209. package/dist/native/data-display/LoadingState.js +3 -3
  210. package/dist/native/feedback/Dialog.js +3 -3
  211. package/dist/native/form/Checkbox.js +1 -1
  212. package/dist/native/form/Input.js +1 -1
  213. package/dist/native/form/Select.js +1 -1
  214. package/dist/native/form/Switch.js +1 -1
  215. package/dist/native/layout/Card.js +3 -3
  216. package/dist/native/layout/Skeleton.js +6 -209
  217. package/dist/native/layout/Skeleton.js.map +1 -1
  218. package/dist/navigation/AppHeader.js +6 -6
  219. package/dist/navigation/Pagination.js +2 -2
  220. package/dist/pt-BR.js +4 -4
  221. package/dist/types/components/data-display/FleetMap/FleetBody.d.ts +22 -0
  222. package/dist/types/components/data-display/FleetMap/FleetBody.d.ts.map +1 -0
  223. package/dist/types/components/data-display/FleetMap/FleetCanvas.d.ts +50 -0
  224. package/dist/types/components/data-display/FleetMap/FleetCanvas.d.ts.map +1 -0
  225. package/dist/types/components/data-display/FleetMap/FleetMap.base.d.ts +141 -0
  226. package/dist/types/components/data-display/FleetMap/FleetMap.base.d.ts.map +1 -0
  227. package/dist/types/components/data-display/FleetMap/FleetMap.d.ts +32 -0
  228. package/dist/types/components/data-display/FleetMap/FleetMap.d.ts.map +1 -0
  229. package/dist/types/components/data-display/FleetMap/FleetMap.fixtures.d.ts +23 -0
  230. package/dist/types/components/data-display/FleetMap/FleetMap.fixtures.d.ts.map +1 -0
  231. package/dist/types/components/data-display/FleetMap/FleetMap.helpers.d.ts +45 -0
  232. package/dist/types/components/data-display/FleetMap/FleetMap.helpers.d.ts.map +1 -0
  233. package/dist/types/components/data-display/FleetMap/FleetMap.hooks.d.ts +71 -0
  234. package/dist/types/components/data-display/FleetMap/FleetMap.hooks.d.ts.map +1 -0
  235. package/dist/types/components/data-display/FleetMap/FleetMap.metrics.d.ts +76 -0
  236. package/dist/types/components/data-display/FleetMap/FleetMap.metrics.d.ts.map +1 -0
  237. package/dist/types/components/data-display/FleetMap/FleetMap.types.d.ts +45 -0
  238. package/dist/types/components/data-display/FleetMap/FleetMap.types.d.ts.map +1 -0
  239. package/dist/types/components/data-display/FleetMap/FleetRoster.d.ts +15 -0
  240. package/dist/types/components/data-display/FleetMap/FleetRoster.d.ts.map +1 -0
  241. package/dist/types/components/data-display/FleetMap/index.d.ts +5 -0
  242. package/dist/types/components/data-display/FleetMap/index.d.ts.map +1 -0
  243. package/dist/types/components/data-display/index.d.ts +1 -0
  244. package/dist/types/components/data-display/index.d.ts.map +1 -1
  245. package/dist/types/platform/aria.d.ts +13 -0
  246. package/dist/types/platform/aria.d.ts.map +1 -1
  247. package/dist/types-native/components/data-display/FleetMap/FleetMap.base.d.ts +141 -0
  248. package/dist/types-native/components/data-display/FleetMap/FleetMap.base.d.ts.map +1 -0
  249. package/dist/types-native/components/data-display/FleetMap/FleetMap.helpers.d.ts +45 -0
  250. package/dist/types-native/components/data-display/FleetMap/FleetMap.helpers.d.ts.map +1 -0
  251. package/dist/types-native/components/data-display/FleetMap/FleetMap.hooks.d.ts +71 -0
  252. package/dist/types-native/components/data-display/FleetMap/FleetMap.hooks.d.ts.map +1 -0
  253. package/dist/types-native/components/data-display/FleetMap/FleetMap.metrics.d.ts +76 -0
  254. package/dist/types-native/components/data-display/FleetMap/FleetMap.metrics.d.ts.map +1 -0
  255. package/dist/types-native/components/data-display/FleetMap/FleetMap.native.d.ts +30 -0
  256. package/dist/types-native/components/data-display/FleetMap/FleetMap.native.d.ts.map +1 -0
  257. package/dist/types-native/components/data-display/FleetMap/FleetMap.types.native.d.ts +36 -0
  258. package/dist/types-native/components/data-display/FleetMap/FleetMap.types.native.d.ts.map +1 -0
  259. package/dist/types-native/components/data-display/FleetMap/FleetRoster.native.d.ts +17 -0
  260. package/dist/types-native/components/data-display/FleetMap/FleetRoster.native.d.ts.map +1 -0
  261. package/dist/types-native/components/data-display/FleetMap/index.native.d.ts +4 -0
  262. package/dist/types-native/components/data-display/FleetMap/index.native.d.ts.map +1 -0
  263. package/dist/types-native/platform/aria.d.ts +13 -0
  264. package/dist/types-native/platform/aria.d.ts.map +1 -1
  265. package/dist/user-avatar.js +5 -5
  266. package/package.json +9 -1
  267. package/src/components/data-display/FleetMap/FleetBody.tsx +96 -0
  268. package/src/components/data-display/FleetMap/FleetCanvas.tsx +80 -0
  269. package/src/components/data-display/FleetMap/FleetMap.base.ts +144 -0
  270. package/src/components/data-display/FleetMap/FleetMap.fixtures.ts +70 -0
  271. package/src/components/data-display/FleetMap/FleetMap.helpers.ts +85 -0
  272. package/src/components/data-display/FleetMap/FleetMap.hooks.ts +183 -0
  273. package/src/components/data-display/FleetMap/FleetMap.md +189 -0
  274. package/src/components/data-display/FleetMap/FleetMap.metrics.ts +81 -0
  275. package/src/components/data-display/FleetMap/FleetMap.native.tsx +185 -0
  276. package/src/components/data-display/FleetMap/FleetMap.tsx +163 -0
  277. package/src/components/data-display/FleetMap/FleetMap.types.native.ts +44 -0
  278. package/src/components/data-display/FleetMap/FleetMap.types.ts +53 -0
  279. package/src/components/data-display/FleetMap/FleetRoster.native.tsx +382 -0
  280. package/src/components/data-display/FleetMap/FleetRoster.tsx +327 -0
  281. package/src/components/data-display/FleetMap/NATIVE-NOTES.md +14 -0
  282. package/src/components/data-display/FleetMap/index.native.ts +10 -0
  283. package/src/components/data-display/FleetMap/index.ts +9 -0
  284. package/src/components/data-display/FleetMap/tests.md +84 -0
  285. package/src/components/data-display/FleetMap/track.md +50 -0
  286. package/src/components/data-display/index.ts +1 -0
  287. package/src/components/feedback/ConfirmAction/ConfirmAction.md +10 -4
  288. package/src/platform/aria.ts +13 -0
  289. package/dist/chunk-X3HL5C6H.js +0 -1
  290. package/dist/native/chunks/chunk-T6BJPP3E.js.map +0 -1
  291. /package/dist/{chunk-X3HL5C6H.js.map → _internal/components/data-display/FleetMap/FleetBody.js.map} +0 -0
  292. /package/dist/{chunk-WGRS4PGY.js.map → chunk-2C47DEVU.js.map} +0 -0
  293. /package/dist/{chunk-WMALDOF5.js.map → chunk-4G3FGCWX.js.map} +0 -0
  294. /package/dist/{chunk-ZOUWHGV3.js.map → chunk-4MGFUPQT.js.map} +0 -0
  295. /package/dist/{chunk-QFJRB27Q.js.map → chunk-6LGWJFQK.js.map} +0 -0
  296. /package/dist/{chunk-XSF6AXEU.js.map → chunk-6RZDDUSM.js.map} +0 -0
  297. /package/dist/{chunk-VIK3HAUQ.js.map → chunk-73NJCGQG.js.map} +0 -0
  298. /package/dist/{chunk-UU3QAKG6.js.map → chunk-B7DKSBAE.js.map} +0 -0
  299. /package/dist/{chunk-3FLVIVOK.js.map → chunk-BHIGHSXA.js.map} +0 -0
  300. /package/dist/{chunk-HKV4MQ2W.js.map → chunk-BLBOYCOV.js.map} +0 -0
  301. /package/dist/{chunk-PFV6RL4Q.js.map → chunk-C6KTQF4F.js.map} +0 -0
  302. /package/dist/{chunk-LYSSO6WC.js.map → chunk-CZPU5TW3.js.map} +0 -0
  303. /package/dist/{chunk-PMS3H3OO.js.map → chunk-DF2FFYZ7.js.map} +0 -0
  304. /package/dist/{chunk-QZBUGUOY.js.map → chunk-DFLTUI7W.js.map} +0 -0
  305. /package/dist/{chunk-WLQTHPMX.js.map → chunk-EJQW2IYW.js.map} +0 -0
  306. /package/dist/{chunk-VQAM2XZV.js.map → chunk-EMUBMZMA.js.map} +0 -0
  307. /package/dist/{chunk-XFUNJYFT.js.map → chunk-EPNUVSNK.js.map} +0 -0
  308. /package/dist/{chunk-MSUSZLRE.js.map → chunk-EWT3WMVY.js.map} +0 -0
  309. /package/dist/{chunk-Q75SJ35X.js.map → chunk-GMTM6EN7.js.map} +0 -0
  310. /package/dist/{chunk-R6SBP5M5.js.map → chunk-GOWBYHYW.js.map} +0 -0
  311. /package/dist/{chunk-6NZTYZP5.js.map → chunk-GVA5CYKP.js.map} +0 -0
  312. /package/dist/{chunk-VR5HDUBK.js.map → chunk-HP2ODXNA.js.map} +0 -0
  313. /package/dist/{chunk-2MMEIN4T.js.map → chunk-I3E2QHTH.js.map} +0 -0
  314. /package/dist/{chunk-UVGRRI7N.js.map → chunk-IPVYEPXO.js.map} +0 -0
  315. /package/dist/{chunk-5ZTUP65G.js.map → chunk-JM64OEU6.js.map} +0 -0
  316. /package/dist/{chunk-7BYFC2MR.js.map → chunk-JUHUKZGU.js.map} +0 -0
  317. /package/dist/{chunk-DVUPIVI2.js.map → chunk-KT6HWAEN.js.map} +0 -0
  318. /package/dist/{chunk-TLMLEC4F.js.map → chunk-KW7H5O3K.js.map} +0 -0
  319. /package/dist/{chunk-VLHGBFR6.js.map → chunk-MZQTHSLN.js.map} +0 -0
  320. /package/dist/{chunk-4SQFO4GW.js.map → chunk-NA7MIEG6.js.map} +0 -0
  321. /package/dist/{chunk-QWDEOITU.js.map → chunk-O4VCZTK4.js.map} +0 -0
  322. /package/dist/{chunk-LS4FMSHY.js.map → chunk-OAYX4XN7.js.map} +0 -0
  323. /package/dist/{chunk-Y5UCOBQN.js.map → chunk-OGGHD64H.js.map} +0 -0
  324. /package/dist/{chunk-7TZ6OC5T.js.map → chunk-OH3YGJT5.js.map} +0 -0
  325. /package/dist/{chunk-REMK55JI.js.map → chunk-OLZTGVBT.js.map} +0 -0
  326. /package/dist/{chunk-VNNG46TS.js.map → chunk-ORSLFKKZ.js.map} +0 -0
  327. /package/dist/{chunk-ZIYMBR7K.js.map → chunk-OTH7H3IP.js.map} +0 -0
  328. /package/dist/{chunk-5NKUYCZD.js.map → chunk-PN5CQKA2.js.map} +0 -0
  329. /package/dist/{chunk-J4W4TQPC.js.map → chunk-QJRDDVZ2.js.map} +0 -0
  330. /package/dist/{chunk-VNDOQEJ7.js.map → chunk-QRX5BYUQ.js.map} +0 -0
  331. /package/dist/{chunk-XT7HMNBW.js.map → chunk-R6SNYC3D.js.map} +0 -0
  332. /package/dist/{chunk-W2UTDN4T.js.map → chunk-RBGOGTT2.js.map} +0 -0
  333. /package/dist/{chunk-X5MPHXG5.js.map → chunk-RPWEXIAW.js.map} +0 -0
  334. /package/dist/{chunk-EXJBPKGW.js.map → chunk-SHDIZSN5.js.map} +0 -0
  335. /package/dist/{chunk-23FCBIUN.js.map → chunk-TNVO2DTB.js.map} +0 -0
  336. /package/dist/{chunk-AGSBIUPV.js.map → chunk-TPLKJHNN.js.map} +0 -0
  337. /package/dist/{chunk-YQ6TNHAC.js.map → chunk-TTLI6PF7.js.map} +0 -0
  338. /package/dist/{chunk-U2AC4AQX.js.map → chunk-TU5EIKJA.js.map} +0 -0
  339. /package/dist/{chunk-KTK4A3IF.js.map → chunk-TX5V42AY.js.map} +0 -0
  340. /package/dist/{chunk-BGYLL467.js.map → chunk-TXHJX2NG.js.map} +0 -0
  341. /package/dist/{chunk-FL54G7PV.js.map → chunk-WIT3Y7JT.js.map} +0 -0
  342. /package/dist/{chunk-W7Y6RA6W.js.map → chunk-WR5JFDQ5.js.map} +0 -0
  343. /package/dist/{chunk-2UYR2OOE.js.map → chunk-YRUCIKPO.js.map} +0 -0
  344. /package/dist/{chunk-AEGXHZQT.js.map → chunk-YW5T6KZ5.js.map} +0 -0
  345. /package/dist/{chunk-QKIJ6YXZ.js.map → chunk-ZA4U5GDU.js.map} +0 -0
  346. /package/dist/{chunk-ZKR5B6YJ.js.map → chunk-ZRPGVHTR.js.map} +0 -0
  347. /package/dist/{chunk-OXQP3N6X.js.map → chunk-ZTZ6S5Q6.js.map} +0 -0
@@ -0,0 +1,14 @@
1
+ # FleetMap on React Native
2
+
3
+ Known rendering gaps, one bullet each; `pnpm native:ledger` reads them.
4
+
5
+ - There is no MAP. `MapPreview` — which projects, tiles and decorates its own surface across ~2,200 lines — has no React Native build, so the native board renders the roster alone and its copy interface has neither `map` nor `mapLabel`: a caller should not be asked to name controls nothing draws. What that costs is smaller than the missing half suggests, because the web already treats this list as the component's real content rather than a sidebar — every fact a pin carries (who, how recently, how precisely, what they are carrying) is on a row, in an order the map cannot express. It is where the map goes when `MapPreview` is ported.
6
+ - Every row is ALSO a tab stop. The list itself carries `tabIndex={0}` and `aria-activedescendant` exactly as the web's listbox does, so the arrow keys work and the selection is announced — but react-native-web additionally gives each `Pressable` its own `tabindex`, which the web half's `Box` rows never had. Measured on the rendered DOM: a fleet of thirty is thirty-one tab stops here against the web's one. Removing them would mean making the rows non-focusable, which would take the press target away on the renderer that has no touch.
7
+ - The arrow keys are web-only. `onKeyDown` reaches the list through react-native-web's DOM events, so a browser still walks the roster with Up and Down, wrapping at both ends, declining a modified arrow and leaving the page to scroll when nothing can move. React Native delivers no key events to a `View`, so on a DEVICE none of it runs and the selection is made by touch.
8
+ - `aria-selected` is passed as the attribute AND as `accessibilityState.selected`, because react-native-web derives neither from the other: without the attribute the web build announced no selection at all and conveyed it by background colour alone, which is the one thing this component refuses to do for freshness.
9
+ - Hover has no touch equivalent, so the pressed wash stands in for it — and, as on the web, it must never WEAKEN the selection: a selected row keeps `action.selected` whether or not a finger is on it, rather than taking the lighter `action.hover`.
10
+ - Keeping the selected row in view is the web's own arithmetic against different numbers. The web reads `offsetTop`/`scrollTop`/`clientHeight`; native gathers the same three from a row's `onLayout`, the `ScrollView`'s `onLayout` and its `onScroll`. So it needs one layout pass before it can act: a board mounted with a selection already set scrolls on the next commit rather than the first, where the web scrolls immediately.
11
+ - The reload announcement is `accessibilityLiveRegion="polite"` plus `aria-live="polite"`. The first is Android's and the second is react-native-web's; iOS has no live region at all, and announcing there needs `AccessibilityInfo.announceForAccessibility`, which this component does not call — a host that must be heard on iOS makes that call itself.
12
+ - A long unbroken label overflows rather than breaking mid-token: the web sets `overflowWrap: 'anywhere'` and React Native has no equivalent style, so a 40-character name with no spaces is clipped by the row instead of wrapped inside it.
13
+ - `maxHeight` is a NUMBER of pixels where the web's `height` is any CSS length: React Native has no `calc`, no viewport units, and no percentage that resolves against a parent which has not sized itself.
14
+ - The title, the row label and the meta line are set in MUI's default `body1`/`body2`/`caption` numbers; a host that re-themes MUI's typography variants moves the web only.
@@ -0,0 +1,10 @@
1
+ export { FleetMap, default } from './FleetMap.native';
2
+ export { FleetRoster } from './FleetRoster.native';
3
+ export type {
4
+ FleetFreshness,
5
+ FleetMapBaseProps,
6
+ FleetMapCopy,
7
+ FleetMapCopyBase,
8
+ FleetMapProps,
9
+ FleetUnit,
10
+ } from './FleetMap.types.native';
@@ -0,0 +1,9 @@
1
+ export { FleetMap } from './FleetMap';
2
+ export { freshnessOf, mapCentre, nextSelection, rosterOrder } from './FleetMap.helpers';
3
+ export type { LatLng } from './FleetMap.helpers';
4
+ export type {
5
+ FleetFreshness,
6
+ FleetMapCopy,
7
+ FleetMapProps,
8
+ FleetUnit,
9
+ } from './FleetMap.types';
@@ -0,0 +1,84 @@
1
+ # FleetMap Test Status Tracking
2
+
3
+ ## Test Files Status
4
+
5
+ - [x] `FleetMap.test.stories.tsx` created
6
+ - [x] `__tests__/fleet-map-helpers.test.ts` created — the four pure decisions,
7
+ at their boundaries, where a story is expensive to stage and an
8
+ off-by-one reads identically on screen
9
+ - [x] `__tests__/fleet-map-hook.test.ts` created — the two decisions the DOM
10
+ cannot show: `centre`'s IDENTITY across a poll, and who owns the
11
+ selection across a re-render
12
+ - [x] `__tests__/fleet-map-guards.test.tsx` created — the behaviours the review
13
+ rounds added guards for, in the suite CI actually runs (`test-storybook`
14
+ is deliberately not wired into this repo's CI)
15
+ - [x] `__tests__/fleet-map-theme.test.tsx` created — the row and its first-load
16
+ skeleton under two host themes, because a radius that looks right on the
17
+ default one is not evidence in a package built to be re-themed
18
+ - [x] All applicable test categories implemented
19
+
20
+ ## Storybook Tests Status
21
+
22
+ ### Test Results
23
+
24
+ | Test Name | Status | Pass/Fail | Notes |
25
+ | --- | --- | --- | --- |
26
+ | Basic Interaction | Running | PASS | rows render, roster ordered freshest first |
27
+ | Freshness | Running | PASS | three states, words not colour, caller formats |
28
+ | Thresholds are props | Running | PASS | same fleet reads differently on tighter bounds |
29
+ | Selection | Running | PASS | click reports, `aria-selected` on one row only |
30
+ | Keyboard Navigation | Running | PASS | one tab stop, arrows move and wrap |
31
+ | Screen Reader | Running | PASS | region, named listbox, map named not hidden |
32
+ | Empty State | Running | PASS | empty state renders, no map canvas |
33
+ | Loading State | Running | PASS | busy, skeletons, NOT the empty state, and silent |
34
+ | Edge Cases | Running | PASS | one unit, long name, no badge, zero seconds |
35
+ | Active Descendant | Running | PASS | points at a row that exists, id is generated |
36
+ | Stale Selection | Running | PASS | a selection that left the fleet dangles nothing |
37
+ | Loading Announcement | Running | PASS | `role="status"` carries `copy.loading` |
38
+ | Loading Keeps Roster | Running | PASS | a poll over a populated roster keeps the listbox |
39
+ | Uncontrolled Selection | Running | PASS | works with neither selection prop passed |
40
+ | Controlled Without Handler | Running | PASS | arrows left un-prevented for the page |
41
+ | Idle Announcement Region | Running | PASS | the live region exists, and is empty, while idle |
42
+
43
+ Legend: Pending | Running | PASS | FAIL
44
+
45
+ Not implemented, and why: **Form Interaction** — the component has no form.
46
+ **Focus Management** — covered inside Keyboard Navigation, since the listbox's
47
+ single tab stop IS its focus contract. **Performance** — the roster is a short
48
+ list by construction (a fleet is people, not rows), so a render benchmark would
49
+ measure the fixture rather than the component.
50
+
51
+ ## Static Stories Status
52
+
53
+ - [x] Default story
54
+ - [x] Empty state
55
+ - [x] Loading state
56
+ - [x] One unit
57
+ - [x] All stale
58
+ - [x] Tight thresholds
59
+ - [x] Long names / no accuracy
60
+ - [x] Selectable (controlled)
61
+ - [x] Compact height
62
+
63
+ ## Lint Status
64
+
65
+ - [x] No lint errors
66
+ - [x] No warnings
67
+ - [x] Clean under `eslint.flakiness.config.mjs`
68
+
69
+ ## TypeCheck Status
70
+
71
+ - [x] No type errors
72
+ - [x] All props properly typed, no `any`
73
+
74
+ ## Overall Component Status
75
+
76
+ - [x] Lint clean
77
+ - [x] TypeCheck clean
78
+ - [x] Stories working
79
+ - [x] Unit tests passing — web 35 (16 helpers + 8 hook + 9 guards + 2 theme),
80
+ native 14 (`FleetMap.native.test.tsx`, run by the `Native` lane rather
81
+ than by `pnpm test`, so each runs once)
82
+ - [x] React Native build shipped — `@12-apps/ui/data-display/FleetMap` carries a
83
+ `react-native` export condition; the rendering gaps, the map's absence
84
+ among them, are in `NATIVE-NOTES.md` and counted by `pnpm native:ledger`
@@ -0,0 +1,50 @@
1
+ # FleetMap
2
+
3
+ Where a set of tracked units is right now: a map beside the roster that reads
4
+ it. Product-free — it draws labelled dots with a freshness, and every word plus
5
+ the two formatters arrive through `copy`. Built for a delivery fleet and
6
+ deliberately not named after one.
7
+
8
+ ## Props
9
+
10
+ | prop | effect |
11
+ | --- | --- |
12
+ | `units` | who is reporting; empty renders the empty state rather than an empty map |
13
+ | `copy` | every word, and the `lastSeen` / `accuracy` formatters |
14
+ | `selectedId` | controlled selection; the map centres on it |
15
+ | `onSelect` | fired by a row click, each arrow-key move, and a pin click (mouse only — the pin is not focusable) |
16
+ | `laggingAfterSeconds` | when a unit stops reading as `live` |
17
+ | `staleAfterSeconds` | when it stops reading as `lagging` |
18
+ | `height` | the map's height |
19
+ | `loading` | first-load skeletons, map and roster `aria-busy` |
20
+ | `className` | on the panel root |
21
+ | `dataTestId` | root TEST id; DOM ids are generated separately |
22
+
23
+ ## Lint
24
+
25
+ Clean, including the flakiness config.
26
+
27
+ ## Type Errors
28
+
29
+ None.
30
+
31
+ ## Testing Scenarios
32
+
33
+ Freshness at both thresholds and at their collapse; the centroid fallback and
34
+ the Atlantic-null for an empty fleet; roster order and its tie-break; selection
35
+ wrapping at both ends and a selection that has left the fleet; the empty state
36
+ against the loading state, which are opposite messages.
37
+
38
+ ## Storybook Tests List
39
+
40
+ `BasicInteraction`, `FreshnessTest`, `ThresholdsAreProps`, `SelectionTest`,
41
+ `KeyboardNavigationTest`, `ControlledWithoutHandlerTest`, `ScreenReaderTest`,
42
+ `ActiveDescendantTest`, `StaleSelectionTest`, `EmptyStateTest`,
43
+ `LoadingStateTest`, `IdleAnnouncementRegionTest`, `LoadingAnnouncementTest`,
44
+ `LoadingKeepsThePopulatedRosterTest`, `UncontrolledSelectionTest`,
45
+ `EdgeCaseTest`.
46
+
47
+ ## Current
48
+
49
+ Shipped. Its first consumer is an adopter's courier-tracking panel, which
50
+ composes it with its own transport and its own words.
@@ -17,6 +17,7 @@ export * from './InteractiveTooltip';
17
17
  export * from './LazyImage';
18
18
  export * from './Lightbox';
19
19
  export * from './LoadingState';
20
+ export * from './FleetMap';
20
21
  export * from './MapPreview';
21
22
  export * from './Popover';
22
23
  export * from './Progress';
@@ -61,13 +61,19 @@ escape hatch for the same button in a context where the action is harmless.
61
61
  Refs are not forwarded (the HOC renders trigger + popup as a fragment, so there
62
62
  is no single node to hand back). Use `<ConfirmAction>` where a ref is needed.
63
63
 
64
- ### `ConfirmButton` — the HOC, pre-applied
64
+ ### `createConfirmButton` — the HOC, pre-applied
65
65
 
66
- `withConfirmation(Button)` with the shared wording already in place. Use it when
67
- you just want a guarded button and have no reason to build your own wrapper.
66
+ `withConfirmation(Button)`, wrapped up for you. Use it when you just want a
67
+ guarded button and have no reason to build your own wrapper.
68
+
69
+ A FACTORY rather than a ready-made component, because the wording it bakes in is
70
+ the caller's: it takes the host's `ConfirmActionCopy` and its error sentence, and
71
+ returns the button. Build it once at module scope and use it like any other.
68
72
 
69
73
  ```tsx
70
- import { ConfirmButton } from '@12-apps/ui/feedback/ConfirmAction';
74
+ import { createConfirmButton } from '@12-apps/ui/feedback/ConfirmAction';
75
+
76
+ const ConfirmButton = createConfirmButton(PT_BR_CONFIRM_ACTION_COPY, 'Algo deu errado.');
71
77
 
72
78
  <ConfirmButton
73
79
  color="danger"
@@ -27,6 +27,19 @@ export interface WebAria {
27
27
  * it expands is a listbox — which is what the web's own trigger carries.
28
28
  */
29
29
  'aria-haspopup'?: 'listbox' | 'menu' | 'dialog' | 'true';
30
+ /**
31
+ * Which option a composite widget's single tab stop is currently on — the
32
+ * listbox pattern, where the LIST holds focus and the selection moves inside
33
+ * it. React Native has no equivalent because it has no roving focus to
34
+ * describe: a device selects by touching the row.
35
+ *
36
+ * Note the interaction with `aria-atomic` documented on {@link webAria}:
37
+ * react-native-web reads THIS value when it means the atomic flag, so a
38
+ * component that sets both gets the descendant id emitted as `aria-atomic`.
39
+ * Nothing here sets both, and a component that needs to should pass its own
40
+ * atomic flag directly rather than through this helper.
41
+ */
42
+ 'aria-activedescendant'?: string;
30
43
  }
31
44
 
32
45
  /**
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-X3HL5C6H.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/platform/aria.ts"],"sourcesContent":["/**\n * WEB ATTRIBUTES REACT NATIVE DOES NOT DECLARE.\n *\n * React Native's `ViewProps` (0.83) type a dozen `aria-*` props and stop:\n * `aria-level`, `aria-atomic` and `aria-describedby` are not among them.\n * react-native-web forwards all three to the DOM — and `aria-level` also\n * picks the heading tag, so a `role=\"heading\"` at level 3 renders an `<h3>`\n * exactly as the MUI half's `component=\"h3\"` does — while a device ignores\n * them. A native component spreads them through here rather than widening\n * the element's props type or casting at every call site.\n */\nexport interface WebAria {\n 'aria-level'?: 1 | 2 | 3 | 4 | 5 | 6;\n 'aria-atomic'?: 'true' | 'false';\n 'aria-describedby'?: string;\n /**\n * A field's validity and whether it must be filled. React Native's\n * `accessibilityState` has neither — its five flags are disabled, selected,\n * checked, busy and expanded — so these are web-only, and a device reads the\n * error text instead. react-native-web forwards both.\n */\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n /**\n * What a control pops open. React Native has `aria-expanded` and no\n * `aria-haspopup`, so a `combobox` needs this one from here to say the thing\n * it expands is a listbox — which is what the web's own trigger carries.\n */\n 'aria-haspopup'?: 'listbox' | 'menu' | 'dialog' | 'true';\n}\n\n/**\n * `attrs` as something JSX can spread onto a react-native element without\n * that element's props type having to know them.\n *\n * `aria-atomic` travels under react-native-web's own older name. Its\n * `createDOMProps` (0.20.0) reads `aria-activedescendant` where it means\n * `aria-atomic` — `_ariaAtomic = ariaAtomic != null ? ariaActiveDescendant :\n * accessibilityAtomic` — so the modern spelling never reaches the DOM and\n * the legacy one, still accepted and still emitted as `aria-atomic`, does.\n * Neither name exists on a device, so nothing is lost there.\n */\nexport function webAria(attrs: WebAria): object {\n const { 'aria-atomic': atomic, ...rest } = attrs;\n return atomic === undefined ? rest : { ...rest, accessibilityAtomic: atomic };\n}\n\n/**\n * `disabled` for a react-native-web form control.\n *\n * React Native's `TextInput` has `editable` and no `disabled`, because a\n * device has no disabled state to speak of — an uneditable field simply does\n * not take the keyboard. The DOM does: only a real `disabled` attribute takes\n * an `<input>` out of the tab order, and it is what `toBeDisabled()` reads. So\n * a native field spreads this ALONGSIDE `editable={false}` and\n * `aria-disabled`: react-native-web puts the attribute on the input, and a\n * device ignores a prop it does not know.\n */\nexport function webDisabled(disabled: boolean): object {\n return disabled ? { disabled: true } : {};\n}\n\n/**\n * `onClick` for a react-native-web element whose React Native twin has no\n * click of its own.\n *\n * react-native-web's `TextInput` forwards `onClick` to the DOM input and drops\n * `onPressIn`; a device does the opposite. A field that must answer a press on\n * both renderers spreads this ALONGSIDE `onPressIn`, and exactly one of the two\n * fires on each side — never both.\n */\nexport function webClick<E>(handler: ((event: E) => void) | undefined): object {\n return handler === undefined ? {} : { onClick: handler };\n}\n\n/**\n * A `role` React Native's own union does not carry.\n *\n * `Role` (0.83) stops at `list` and `menu`: `listbox`, the role a dropdown's\n * option list owes a screen reader, is not in it. react-native-web forwards\n * whatever string it is given, and a device ignores a role it does not know —\n * the same trade `webAria` makes for the attributes below it.\n */\nexport function webRole(role: string): object {\n return { role };\n}\n\n/** The half of a DOM keyboard event a component needs, without the DOM lib. */\nexport interface WebKeyEvent {\n key: string;\n}\n\n/**\n * `onKeyDown` for a react-native-web element.\n *\n * React Native has no key events on a `View` — a phone has no keyboard to\n * press Escape on — so nothing here is typed by react-native and nothing here\n * fires on a device. react-native-web forwards it to the DOM, which is what\n * lets a native dropdown still answer Escape and the arrow keys in a browser.\n */\nexport function webKeyDown(handler: (event: WebKeyEvent) => void): object {\n return { onKeyDown: handler };\n}\n"],"mappings":";AA0CO,SAAS,QAAQ,OAAwB;AAC9C,QAAM,EAAE,eAAe,QAAQ,GAAG,KAAK,IAAI;AAC3C,SAAO,WAAW,SAAY,OAAO,EAAE,GAAG,MAAM,qBAAqB,OAAO;AAC9E;AAaO,SAAS,YAAY,UAA2B;AACrD,SAAO,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;AAC1C;AAWO,SAAS,SAAY,SAAmD;AAC7E,SAAO,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,QAAQ;AACzD;AAUO,SAAS,QAAQ,MAAsB;AAC5C,SAAO,EAAE,KAAK;AAChB;AAeO,SAAS,WAAW,SAA+C;AACxE,SAAO,EAAE,WAAW,QAAQ;AAC9B;","names":[]}