@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,215 @@
1
+ import {
2
+ useLoopedProgress
3
+ } from "./chunk-MLQIOKQZ.js";
4
+ import {
5
+ resolveTestId,
6
+ withoutTestIdProps
7
+ } from "./chunk-AR5O4BEY.js";
8
+ import {
9
+ useUiTheme
10
+ } from "./chunk-GWGIWQO7.js";
11
+ import {
12
+ alpha
13
+ } from "./chunk-LEMMXZFN.js";
14
+
15
+ // src/components/layout/Skeleton/Skeleton.native.tsx
16
+ import * as React from "react";
17
+ import {
18
+ Animated,
19
+ Easing,
20
+ StyleSheet,
21
+ View
22
+ } from "react-native";
23
+
24
+ // src/components/layout/Skeleton/Skeleton.helpers.ts
25
+ var SKELETON_DEFAULTS = {
26
+ variant: "text",
27
+ animation: "pulse",
28
+ count: 1,
29
+ spacing: 1,
30
+ intensity: "medium",
31
+ glassmorphism: false,
32
+ shimmer: false
33
+ };
34
+ var definedProps = (props) => Object.fromEntries(
35
+ Object.entries(props).filter(([, value]) => value !== void 0)
36
+ );
37
+ var resolveSkeletonProps = (props) => ({ ...SKELETON_DEFAULTS, ...definedProps(props) });
38
+ var skeletonInstanceTestId = (base, index) => base ? `${base}-${index}` : void 0;
39
+
40
+ // src/components/layout/Skeleton/Skeleton.metrics.ts
41
+ var SKELETON_INTENSITY_OPACITY = {
42
+ low: 0.11,
43
+ medium: 0.13,
44
+ high: 0.15
45
+ };
46
+ var SKELETON_DEFAULT_DIMENSIONS = {
47
+ // `text` has no height of its own: MUI's line box gives it one (below).
48
+ text: { width: "100%", height: void 0 },
49
+ circular: { width: 40, height: 40 },
50
+ rectangular: { width: "100%", height: 40 },
51
+ wave: { width: "100%", height: 40 }
52
+ };
53
+ var GLASS_BACKGROUND_ALPHA_FROM = 0.8;
54
+ var GLASS_BORDER_ALPHA = 0.2;
55
+ var GLASS_SHADOW = { offsetY: 8, blur: 32, alpha: 0.1 };
56
+ var SHIMMER_ALPHA = 0.3;
57
+ var SHIMMER_DURATION_MS = 2e3;
58
+ var COMMON_BLACK = "#000";
59
+ var COMMON_WHITE = "#fff";
60
+ var PULSE = { durationMs: 2e3, delayMs: 500, dip: 0.4 };
61
+ var WAVE = { durationMs: 1600, delayMs: 500 };
62
+ var TEXT_LINE_HEIGHT_EM = 1.2;
63
+ var TEXT_SCALE_Y = 0.6;
64
+
65
+ // src/components/layout/Skeleton/Skeleton.native.tsx
66
+ import { jsx, jsxs } from "react/jsx-runtime";
67
+ var PULSE_EASING = Easing.inOut(Easing.ease);
68
+ var PERCENT = /^-?\d+(?:\.\d+)?%$/;
69
+ function dimension(value) {
70
+ if (value === void 0 || typeof value === "number") return value;
71
+ return PERCENT.test(value) ? value : void 0;
72
+ }
73
+ var skeletonTint = (theme, intensity) => alpha(
74
+ theme.mode === "dark" ? COMMON_WHITE : theme.palette.text.primary,
75
+ SKELETON_INTENSITY_OPACITY[intensity]
76
+ );
77
+ var radiusFor = (theme, variant) => {
78
+ if (variant === "circular") return theme.radius.full;
79
+ return variant === "text" ? theme.radius.md : 0;
80
+ };
81
+ function textBoxHeight(theme, height) {
82
+ if (typeof height === "string") return dimension(height);
83
+ const box = height ?? theme.typography.sizes.md.fontSize * TEXT_LINE_HEIGHT_EM;
84
+ return box * TEXT_SCALE_Y;
85
+ }
86
+ function glassStyle(theme) {
87
+ return {
88
+ backgroundColor: alpha(theme.palette.background.paper, GLASS_BACKGROUND_ALPHA_FROM),
89
+ borderWidth: 1,
90
+ borderColor: alpha(theme.palette.divider, GLASS_BORDER_ALPHA),
91
+ boxShadow: `0 ${GLASS_SHADOW.offsetY}px ${GLASS_SHADOW.blur}px 0 ${alpha(COMMON_BLACK, GLASS_SHADOW.alpha)}`
92
+ };
93
+ }
94
+ function skeletonBoxStyle(theme, a) {
95
+ const box = SKELETON_DEFAULT_DIMENSIONS[a.variant];
96
+ const height = a.height ?? box.height;
97
+ const style = {
98
+ width: dimension(a.width ?? box.width),
99
+ height: a.variant === "text" ? textBoxHeight(theme, height) : dimension(height),
100
+ borderRadius: dimension(a.borderRadius) ?? radiusFor(theme, a.variant),
101
+ backgroundColor: skeletonTint(theme, a.intensity)
102
+ };
103
+ if (a.clipped) style.overflow = "hidden";
104
+ return a.glassmorphism ? { ...style, ...glassStyle(theme) } : style;
105
+ }
106
+ function Wash({ color, durationMs, delayMs, testID }) {
107
+ const progress = useLoopedProgress(true, { durationMs, delayMs, easing: Easing.linear });
108
+ return /* @__PURE__ */ jsx(
109
+ Animated.View,
110
+ {
111
+ testID,
112
+ style: [
113
+ StyleSheet.absoluteFill,
114
+ {
115
+ pointerEvents: "none",
116
+ backgroundColor: color,
117
+ opacity: progress.interpolate({ inputRange: [0, 0.5, 1], outputRange: [0, 1, 0] })
118
+ }
119
+ ]
120
+ }
121
+ );
122
+ }
123
+ var effectiveAnimation = (variant, animation) => variant === "wave" ? "wave" : animation;
124
+ function SkeletonBox({
125
+ animation,
126
+ shimmer,
127
+ style,
128
+ testID,
129
+ rest,
130
+ ...styleArgs
131
+ }) {
132
+ const theme = useUiTheme();
133
+ const animates = effectiveAnimation(styleArgs.variant, animation);
134
+ const pulse = useLoopedProgress(animates === "pulse", {
135
+ durationMs: PULSE.durationMs,
136
+ delayMs: PULSE.delayMs,
137
+ easing: PULSE_EASING
138
+ });
139
+ const box = skeletonBoxStyle(theme, styleArgs);
140
+ const washId = testID ? `${testID}-wash` : void 0;
141
+ return /* @__PURE__ */ jsxs(
142
+ Animated.View,
143
+ {
144
+ "aria-hidden": true,
145
+ testID,
146
+ style: [
147
+ box,
148
+ animates === "pulse" ? { opacity: pulse.interpolate({ inputRange: [0, 0.5, 1], outputRange: [1, PULSE.dip, 1] }) } : null,
149
+ style
150
+ ],
151
+ ...rest,
152
+ children: [
153
+ shimmer ? /* @__PURE__ */ jsx(
154
+ Wash,
155
+ {
156
+ color: alpha(COMMON_WHITE, SHIMMER_ALPHA),
157
+ durationMs: SHIMMER_DURATION_MS,
158
+ delayMs: 0,
159
+ testID: washId
160
+ }
161
+ ) : null,
162
+ !shimmer && animates === "wave" ? /* @__PURE__ */ jsx(
163
+ Wash,
164
+ {
165
+ color: theme.palette.action.hover,
166
+ durationMs: WAVE.durationMs,
167
+ delayMs: WAVE.delayMs,
168
+ testID: washId
169
+ }
170
+ ) : null
171
+ ]
172
+ }
173
+ );
174
+ }
175
+ var Skeleton = React.memo(function Skeleton2(rawProps) {
176
+ const resolved = resolveSkeletonProps(rawProps);
177
+ const {
178
+ variant,
179
+ animation,
180
+ width,
181
+ height,
182
+ count,
183
+ spacing,
184
+ borderRadius,
185
+ intensity,
186
+ glassmorphism,
187
+ shimmer,
188
+ style,
189
+ ...others
190
+ } = resolved;
191
+ const theme = useUiTheme();
192
+ const testID = resolveTestId(others);
193
+ const box = {
194
+ variant,
195
+ animation,
196
+ intensity,
197
+ width,
198
+ height,
199
+ borderRadius,
200
+ glassmorphism,
201
+ shimmer,
202
+ clipped: shimmer || effectiveAnimation(variant, animation) === "wave",
203
+ style,
204
+ rest: withoutTestIdProps(others)
205
+ };
206
+ if (count === 0) return null;
207
+ if (count === 1) return /* @__PURE__ */ jsx(SkeletonBox, { ...box, testID });
208
+ return /* @__PURE__ */ jsx(View, { style: { gap: theme.spacing(spacing) }, children: Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsx(View, { children: /* @__PURE__ */ jsx(SkeletonBox, { ...box, testID: skeletonInstanceTestId(testID, index) }) }, `skeleton-${index}`)) });
209
+ });
210
+ Skeleton.displayName = "Skeleton";
211
+
212
+ export {
213
+ Skeleton
214
+ };
215
+ //# sourceMappingURL=chunk-GW7TQ7HO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layout/Skeleton/Skeleton.native.tsx","../../../src/components/layout/Skeleton/Skeleton.helpers.ts","../../../src/components/layout/Skeleton/Skeleton.metrics.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n Easing,\n StyleSheet,\n View,\n type DimensionValue,\n type StyleProp,\n type ViewProps,\n type ViewStyle,\n} from 'react-native';\n\nimport { resolveSkeletonProps, skeletonInstanceTestId } from './Skeleton.helpers';\nimport {\n COMMON_BLACK,\n COMMON_WHITE,\n GLASS_BACKGROUND_ALPHA_FROM,\n GLASS_BORDER_ALPHA,\n GLASS_SHADOW,\n PULSE,\n SHIMMER_ALPHA,\n SHIMMER_DURATION_MS,\n SKELETON_DEFAULT_DIMENSIONS,\n SKELETON_INTENSITY_OPACITY,\n TEXT_LINE_HEIGHT_EM,\n TEXT_SCALE_Y,\n WAVE,\n} from './Skeleton.metrics';\nimport type {\n SkeletonAnimation,\n SkeletonIntensity,\n SkeletonProps,\n SkeletonVariant,\n} from './Skeleton.types.native';\nimport { useLoopedProgress } from '../../../platform/animation';\nimport { resolveTestId, withoutTestIdProps } from '../../../platform/test-id';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\nimport { alpha } from '../../../tokens/color';\nimport type { UiTheme } from '../../../tokens/theme';\n\n/** MUI's `pulseKeyframe` runs `ease-in-out`. */\nconst PULSE_EASING = Easing.inOut(Easing.ease);\nconst PERCENT = /^-?\\d+(?:\\.\\d+)?%$/;\n\n/**\n * A width or a height, as React Native accepts one. The web takes any CSS\n * length; here a number is dp and a percentage is a percentage — anything else\n * (`10rem`, `calc(...)`) has no equivalent and sizes the box from its content,\n * which `NATIVE-NOTES.md` records.\n */\nexport function dimension(value: number | string | undefined): DimensionValue | undefined {\n if (value === undefined || typeof value === 'number') return value;\n return PERCENT.test(value) ? (value as `${number}%`) : undefined;\n}\n\n/** The tint the web writes: the body ink at the intensity's alpha, white in dark mode. */\nexport const skeletonTint = (theme: UiTheme, intensity: SkeletonIntensity): string =>\n alpha(\n theme.mode === 'dark' ? COMMON_WHITE : theme.palette.text.primary,\n SKELETON_INTENSITY_OPACITY[intensity],\n );\n\n/** MUI's radius per variant: a circle, a square rectangle, the theme's 4px on text. */\nconst radiusFor = (theme: UiTheme, variant: SkeletonVariant): number => {\n if (variant === 'circular') return theme.radius.full;\n return variant === 'text' ? theme.radius.md : 0;\n};\n\n/**\n * The `text` variant's height. MUI gives it a `1.2em` line box and squashes the\n * whole box to 60%; React Native's transforms do not change layout, so the two\n * are multiplied out into the height the web actually shows.\n */\nexport function textBoxHeight(\n theme: UiTheme,\n height: number | string | undefined,\n): DimensionValue | undefined {\n if (typeof height === 'string') return dimension(height);\n const box = height ?? theme.typography.sizes.md.fontSize * TEXT_LINE_HEIGHT_EM;\n return box * TEXT_SCALE_Y;\n}\n\n/**\n * `glassmorphism`: the gradient's first stop flat, the hairline, and the web's\n * own box-shadow string — React Native 0.76+ takes CSS shadow syntax, so the\n * two renderers draw the shadow from the same declaration. What is missing is\n * the 20px backdrop blur, which React Native has no equivalent of.\n */\nfunction glassStyle(theme: UiTheme): ViewStyle {\n return {\n backgroundColor: alpha(theme.palette.background.paper, GLASS_BACKGROUND_ALPHA_FROM),\n borderWidth: 1,\n borderColor: alpha(theme.palette.divider, GLASS_BORDER_ALPHA),\n boxShadow: `0 ${GLASS_SHADOW.offsetY}px ${GLASS_SHADOW.blur}px 0 ${alpha(COMMON_BLACK, GLASS_SHADOW.alpha)}`,\n };\n}\n\ninterface SkeletonBoxStyleArgs {\n variant: SkeletonVariant;\n intensity: SkeletonIntensity;\n width?: number | string;\n height?: number | string;\n borderRadius?: number | string;\n glassmorphism: boolean;\n /** A box with a wash sliding over it clips, as MUI's `wave` and the shimmer do. */\n clipped: boolean;\n}\n\n/** The box the web paints, in absolute numbers. */\nexport function skeletonBoxStyle(theme: UiTheme, a: SkeletonBoxStyleArgs): ViewStyle {\n const box = SKELETON_DEFAULT_DIMENSIONS[a.variant];\n const height = a.height ?? box.height;\n const style: ViewStyle = {\n width: dimension(a.width ?? box.width),\n height: a.variant === 'text' ? textBoxHeight(theme, height) : dimension(height),\n borderRadius: dimension(a.borderRadius) ?? radiusFor(theme, a.variant),\n backgroundColor: skeletonTint(theme, a.intensity),\n };\n if (a.clipped) style.overflow = 'hidden';\n return a.glassmorphism ? { ...style, ...glassStyle(theme) } : style;\n}\n\ninterface WashProps {\n color: string;\n durationMs: number;\n delayMs: number;\n testID?: string;\n}\n\n/**\n * MUI's sweeping `::after`, standing still. React Native core has no gradient\n * fill and no pseudo-elements, so the same wash covers the box and fades in and\n * out on the same cadence instead of travelling across it. It carries no\n * `aria-hidden` of its own: the box it sits in is already hidden, and the\n * shared stories count the boxes by that attribute.\n */\nfunction Wash({ color, durationMs, delayMs, testID }: WashProps): React.JSX.Element {\n const progress = useLoopedProgress(true, { durationMs, delayMs, easing: Easing.linear });\n return (\n <Animated.View\n testID={testID}\n style={[\n StyleSheet.absoluteFill,\n {\n pointerEvents: 'none',\n backgroundColor: color,\n opacity: progress.interpolate({ inputRange: [0, 0.5, 1], outputRange: [0, 1, 0] }),\n },\n ]}\n />\n );\n}\n\ninterface SkeletonBoxProps extends SkeletonBoxStyleArgs {\n animation: SkeletonAnimation;\n shimmer: boolean;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n rest: ViewProps;\n}\n\n/** The web's `muiAnimationFor`: the `wave` VARIANT always animates as a wave. */\nconst effectiveAnimation = (\n variant: SkeletonVariant,\n animation: SkeletonAnimation,\n): SkeletonAnimation => (variant === 'wave' ? 'wave' : animation);\n\n/** One skeleton box: the tint, the pulse, and the wash the sweep stands in for. */\nfunction SkeletonBox({\n animation,\n shimmer,\n style,\n testID,\n rest,\n ...styleArgs\n}: SkeletonBoxProps): React.JSX.Element {\n const theme = useUiTheme();\n const animates = effectiveAnimation(styleArgs.variant, animation);\n const pulse = useLoopedProgress(animates === 'pulse', {\n durationMs: PULSE.durationMs,\n delayMs: PULSE.delayMs,\n easing: PULSE_EASING,\n });\n const box = skeletonBoxStyle(theme, styleArgs);\n const washId = testID ? `${testID}-wash` : undefined;\n\n return (\n <Animated.View\n aria-hidden\n testID={testID}\n style={[\n box,\n animates === 'pulse'\n ? { opacity: pulse.interpolate({ inputRange: [0, 0.5, 1], outputRange: [1, PULSE.dip, 1] }) }\n : null,\n style,\n ]}\n {...rest}\n >\n {shimmer ? (\n <Wash\n color={alpha(COMMON_WHITE, SHIMMER_ALPHA)}\n durationMs={SHIMMER_DURATION_MS}\n delayMs={0}\n testID={washId}\n />\n ) : null}\n {!shimmer && animates === 'wave' ? (\n <Wash\n color={theme.palette.action.hover}\n durationMs={WAVE.durationMs}\n delayMs={WAVE.delayMs}\n testID={washId}\n />\n ) : null}\n </Animated.View>\n );\n}\n\n/**\n * The native `Skeleton`: the same box, the same tint and the same default\n * dimensions the MUI half draws, on a `View`.\n */\nexport const Skeleton: React.FC<SkeletonProps> = React.memo(function Skeleton(rawProps) {\n const resolved = resolveSkeletonProps(rawProps);\n const {\n variant,\n animation,\n width,\n height,\n count,\n spacing,\n borderRadius,\n intensity,\n glassmorphism,\n shimmer,\n style,\n ...others\n } = resolved;\n const theme = useUiTheme();\n const testID = resolveTestId(others);\n const box: Omit<SkeletonBoxProps, 'testID'> = {\n variant,\n animation,\n intensity,\n width,\n height,\n borderRadius,\n glassmorphism,\n shimmer,\n clipped: shimmer || effectiveAnimation(variant, animation) === 'wave',\n style,\n rest: withoutTestIdProps(others),\n };\n\n // Handle edge case: count of 0 should render nothing\n if (count === 0) return null;\n if (count === 1) return <SkeletonBox {...box} testID={testID} />;\n\n return (\n <View style={{ gap: theme.spacing(spacing) }}>\n {Array.from({ length: count }, (_, index) => (\n <View key={`skeleton-${index}`}>\n <SkeletonBox {...box} testID={skeletonInstanceTestId(testID, index)} />\n </View>\n ))}\n </View>\n );\n});\n\nSkeleton.displayName = 'Skeleton';\n","import type { SkeletonBaseProps } from './Skeleton.base';\n\ntype SkeletonDefaultedKeys =\n | 'variant'\n | 'animation'\n | 'count'\n | 'spacing'\n | 'intensity'\n | 'glassmorphism'\n | 'shimmer';\n\n/**\n * Generic over the renderer's own props: the web and the native `Skeleton`\n * carry different extras (`className`/`style` against a `View`'s props), and\n * both come back out untouched.\n */\ntype ResolvedSkeletonProps<P extends SkeletonBaseProps> = P &\n Required<Pick<SkeletonBaseProps, SkeletonDefaultedKeys>>;\n\nconst SKELETON_DEFAULTS: Required<Pick<SkeletonBaseProps, SkeletonDefaultedKeys>> = {\n variant: 'text',\n animation: 'pulse',\n count: 1,\n spacing: 1,\n intensity: 'medium',\n glassmorphism: false,\n shimmer: false,\n};\n\n// Strips explicitly-undefined props before the merge, so `count={undefined}` still\n// falls back to the default exactly as a destructuring default would.\nconst definedProps = <P extends SkeletonBaseProps>(props: P): Partial<P> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<P>;\n\nexport const resolveSkeletonProps = <P extends SkeletonBaseProps>(\n props: P,\n): ResolvedSkeletonProps<P> =>\n ({ ...SKELETON_DEFAULTS, ...definedProps(props) }) as ResolvedSkeletonProps<P>;\n\n/**\n * The id of instance `index` when a caller asked for several. Unnamed\n * skeletons stay unnamed — the web has always cloned `undefined` there.\n */\nexport const skeletonInstanceTestId = (\n base: string | undefined,\n index: number,\n): string | undefined => (base ? `${base}-${index}` : undefined);\n","import type { SkeletonIntensity, SkeletonVariant } from './Skeleton.base';\n\n/**\n * THE NUMBERS BOTH `Skeleton` RENDERERS DRAW WITH.\n *\n * `Skeleton.styles.ts` (web, emotion over MUI's own `Skeleton`) and\n * `Skeleton.native.tsx` (React Native) read this one table. The web turns them\n * into CSS strings — `blur(20px)`, `shimmer 2s infinite` — and native uses the\n * numbers as they are, so neither renderer restates a value.\n *\n * Two groups live here. The first is what the web component WRITES (the\n * intensity alphas, the default box, the glass and shimmer washes). The second\n * is what MUI's own `Skeleton` contributes on the web and the native half\n * therefore has to restate: its pulse keyframe, its wave cadence, and the\n * geometry of the `text` variant. Those are MUI's DEFAULTS — a host that\n * re-themes them moves the web only, which `NATIVE-NOTES.md` records.\n */\n\n/** The tint's alpha over the ink, per intensity. */\nexport const SKELETON_INTENSITY_OPACITY: Record<SkeletonIntensity, number> = {\n low: 0.11,\n medium: 0.13,\n high: 0.15,\n};\n\n/** The box a variant draws when the caller gives no `width`/`height`. */\nexport const SKELETON_DEFAULT_DIMENSIONS: Record<\n SkeletonVariant,\n { width: number | string; height: number | undefined }\n> = {\n // `text` has no height of its own: MUI's line box gives it one (below).\n text: { width: '100%', height: undefined },\n circular: { width: 40, height: 40 },\n rectangular: { width: '100%', height: 40 },\n wave: { width: '100%', height: 40 },\n};\n\n/* ── `glassmorphism` ──────────────────────────────────────────────────────── */\n\n/** The 135° wash over `background.paper`, from the first stop to the last. */\nexport const GLASS_BACKGROUND_ALPHA_FROM = 0.8;\nexport const GLASS_BACKGROUND_ALPHA_TO = 0.4;\nexport const GLASS_BLUR_PX = 20;\nexport const GLASS_BORDER_ALPHA = 0.2;\n/** `0 8px 32px 0 rgba(0, 0, 0, 0.1)`. */\nexport const GLASS_SHADOW = { offsetY: 8, blur: 32, alpha: 0.1 } as const;\n\n/* ── `shimmer` ────────────────────────────────────────────────────────────── */\n\n/** The sweep's middle stop, over white. */\nexport const SHIMMER_ALPHA = 0.3;\nexport const SHIMMER_DURATION_MS = 2000;\n\n/**\n * MUI's `palette.common`, which is a pair of fixed hexes rather than anything\n * derived — so the shared theme has no slot for them and they are named here.\n */\nexport const COMMON_BLACK = '#000';\nexport const COMMON_WHITE = '#fff';\n\n/* ── MUI's own `Skeleton`, restated for the renderer that has no MUI ──────── */\n\n/**\n * MUI's `pulseKeyframe`: opacity 1 → 0.4 → 1, `2s ease-in-out 0.5s infinite`.\n * The delay runs once on the web; native replays it each lap unless the\n * animation is sequenced, which `Skeleton.native.tsx` does.\n */\nexport const PULSE = { durationMs: 2000, delayMs: 500, dip: 0.4 } as const;\n\n/** MUI's `wave` sweep: `1.6s linear 0.5s infinite`, in `palette.action.hover`. */\nexport const WAVE = { durationMs: 1600, delayMs: 500 } as const;\n\n/**\n * The `text` variant, as MUI draws it: a line box `1.2em` tall squashed to 60%\n * of its height (`transform: scale(1, 0.60)`), with a `4px/6.7px` elliptical\n * radius that the same squash turns back into a round 4px. React Native has no\n * `em`, and its transforms do not change layout, so the native half multiplies\n * the two out into one height and draws the plain 4px radius the squash lands on.\n */\nexport const TEXT_LINE_HEIGHT_EM = 1.2;\nexport const TEXT_SCALE_Y = 0.6;\n"],"mappings":"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","names":["Skeleton"]}
@@ -0,0 +1,9 @@
1
+ // src/platform/web-keys.ts
2
+ function webKeyDown(handler) {
3
+ return handler === void 0 ? {} : { onKeyDown: handler };
4
+ }
5
+
6
+ export {
7
+ webKeyDown
8
+ };
9
+ //# sourceMappingURL=chunk-MJVSQXOD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/platform/web-keys.ts"],"sourcesContent":["/**\n * KEY EVENTS REACT NATIVE DOES NOT DECLARE.\n *\n * There is no `onKeyDown` on React Native's `ViewProps` or `PressableProps`,\n * because there is no keyboard behind a `View` on a device. react-native-web\n * DOES forward one to the DOM, and a component that stands in for a native\n * control — a chip that removes on Delete, a listbox option that activates on\n * Space — carries those conventions as part of its contract on the web.\n *\n * `webKeyDown` spreads the handler onto a react-native element without that\n * element's props type having to know it, the way `./aria.ts` does for the\n * `aria-*` attributes React Native leaves out. On a device it is simply never\n * called, which is the honest outcome: the gesture is the input there.\n *\n * The event is typed structurally rather than as a DOM `KeyboardEvent`, because\n * the native type program is checked WITHOUT the DOM lib.\n */\nexport interface WebKeyEvent {\n key: string;\n preventDefault: () => void;\n}\n\nexport type WebKeyHandler = (event: WebKeyEvent) => void;\n\n/** `{ onKeyDown }` as something JSX can spread onto a react-native element. */\nexport function webKeyDown(handler: WebKeyHandler | undefined): object {\n return handler === undefined ? {} : { onKeyDown: handler };\n}\n"],"mappings":";AAyBO,SAAS,WAAW,SAA4C;AACrE,SAAO,YAAY,SAAY,CAAC,IAAI,EAAE,WAAW,QAAQ;AAC3D;","names":[]}
@@ -0,0 +1,292 @@
1
+ import {
2
+ Button
3
+ } from "./chunk-ATS7STZJ.js";
4
+ import {
5
+ webAria
6
+ } from "./chunk-DN73KYIZ.js";
7
+ import {
8
+ Icon
9
+ } from "./chunk-QYUD3S6F.js";
10
+ import {
11
+ MUI_FONT_WEIGHT_MEDIUM,
12
+ MUI_TYPE,
13
+ muiTypeStyle
14
+ } from "./chunk-2UFNPDYT.js";
15
+ import {
16
+ resolveTestId,
17
+ withoutTestIdProps
18
+ } from "./chunk-AR5O4BEY.js";
19
+ import {
20
+ useUiTheme
21
+ } from "./chunk-GWGIWQO7.js";
22
+ import {
23
+ alpha
24
+ } from "./chunk-LEMMXZFN.js";
25
+
26
+ // src/components/data-display/EmptyState/EmptyState.native.tsx
27
+ import * as React from "react";
28
+ import {
29
+ Linking,
30
+ Platform,
31
+ StyleSheet,
32
+ Text as RNText,
33
+ useWindowDimensions,
34
+ View
35
+ } from "react-native";
36
+
37
+ // src/components/data-display/EmptyState/EmptyState.helpers.ts
38
+ var makeTestId = (dataTestId) => (suffix) => dataTestId ? `${dataTestId}-${suffix}` : `empty-state-${suffix}`;
39
+ var actionsOf = (props, refreshLabel, createLabel) => {
40
+ const { primaryAction, secondaryAction, onCreate, onRefresh } = props;
41
+ const specs = [];
42
+ if (primaryAction) {
43
+ specs.push({
44
+ key: "primary-action",
45
+ variant: "contained",
46
+ onClick: primaryAction.onClick,
47
+ label: primaryAction.label
48
+ });
49
+ }
50
+ if (onCreate) {
51
+ specs.push({
52
+ key: "create-button",
53
+ variant: "contained",
54
+ onClick: onCreate,
55
+ label: createLabel,
56
+ icon: "Add"
57
+ });
58
+ }
59
+ if (secondaryAction) {
60
+ specs.push({
61
+ key: "secondary-action",
62
+ variant: "outlined",
63
+ onClick: secondaryAction.onClick,
64
+ label: secondaryAction.label
65
+ });
66
+ }
67
+ if (onRefresh) {
68
+ specs.push({
69
+ key: "refresh-button",
70
+ variant: "outlined",
71
+ onClick: onRefresh,
72
+ label: refreshLabel,
73
+ icon: "Refresh"
74
+ });
75
+ }
76
+ return specs;
77
+ };
78
+
79
+ // src/components/data-display/EmptyState/EmptyState.metrics.ts
80
+ var EMPTY_STATE_PADDING_UNITS = 6;
81
+ var EMPTY_STATE_MIN_HEIGHT = 200;
82
+ var EMPTY_STATE_GAP_UNITS = 3;
83
+ var ILLUSTRATION_MAX_WIDTH = { illustrated: 240, other: 120 };
84
+ var ILLUSTRATION_OPACITY = { minimal: 0.6, other: 0.8 };
85
+ var illustrationMaxWidth = (variant) => variant === "illustrated" ? ILLUSTRATION_MAX_WIDTH.illustrated : ILLUSTRATION_MAX_WIDTH.other;
86
+ var illustrationOpacity = (variant) => variant === "minimal" ? ILLUSTRATION_OPACITY.minimal : ILLUSTRATION_OPACITY.other;
87
+ var CONTENT_GAP_UNITS = 2;
88
+ var TITLE_MAX_WIDTH = 400;
89
+ var DESCRIPTION_MAX_WIDTH = 480;
90
+ var DESCRIPTION_LINE_HEIGHT = 1.6;
91
+ var ACTIONS_MARGIN_TOP_UNITS = 2;
92
+ var ACTIONS_GAP_UNITS = 2;
93
+ var ACTIONS_ROW_FROM = 600;
94
+ var ACTION_MIN_WIDTH = 120;
95
+ var ACTION_BUTTON = {
96
+ contained: { paddingVertical: 6, paddingHorizontal: 16 },
97
+ outlined: { paddingVertical: 5, paddingHorizontal: 15 },
98
+ iconSize: 20,
99
+ outlinedBorderAlpha: 0.5
100
+ };
101
+ var MUI_CONTAINED_SHADOW = "0px 3px 1px -2px rgba(0,0,0,0.2), 0px 2px 2px 0px rgba(0,0,0,0.14), 0px 1px 5px 0px rgba(0,0,0,0.12)";
102
+ var HELP_LINK_MARGIN_TOP_UNITS = 1;
103
+ var EXTERNAL_LINK_MARK = " \u2197";
104
+
105
+ // src/components/data-display/EmptyState/EmptyState.native.tsx
106
+ import { jsx, jsxs } from "react/jsx-runtime";
107
+ function titleStyle(theme) {
108
+ return {
109
+ ...muiTypeStyle(theme, "h6"),
110
+ fontWeight: `${MUI_FONT_WEIGHT_MEDIUM}`,
111
+ color: theme.palette.text.primary,
112
+ maxWidth: TITLE_MAX_WIDTH,
113
+ textAlign: "center"
114
+ };
115
+ }
116
+ function descriptionStyle(theme) {
117
+ return {
118
+ ...muiTypeStyle(theme, "body2"),
119
+ lineHeight: MUI_TYPE.body2.fontSize * DESCRIPTION_LINE_HEIGHT,
120
+ color: theme.palette.text.secondary,
121
+ maxWidth: DESCRIPTION_MAX_WIDTH,
122
+ textAlign: "center"
123
+ };
124
+ }
125
+ function helpLinkStyle(theme) {
126
+ return {
127
+ ...muiTypeStyle(theme, "body1"),
128
+ color: theme.palette.primary.main,
129
+ textDecorationLine: "none",
130
+ marginTop: theme.spacing(HELP_LINK_MARGIN_TOP_UNITS),
131
+ textAlign: "center"
132
+ };
133
+ }
134
+ function illustrationStyle(variant) {
135
+ return {
136
+ maxWidth: illustrationMaxWidth(variant),
137
+ width: "100%",
138
+ opacity: illustrationOpacity(variant),
139
+ display: variant === "minimal" ? "none" : "flex"
140
+ };
141
+ }
142
+ function actionStyle(theme, variant) {
143
+ const padding = ACTION_BUTTON[variant];
144
+ return {
145
+ minWidth: ACTION_MIN_WIDTH,
146
+ borderRadius: theme.radius.md,
147
+ paddingVertical: padding.paddingVertical,
148
+ paddingHorizontal: padding.paddingHorizontal,
149
+ ...variant === "contained" ? { boxShadow: MUI_CONTAINED_SHADOW, overflow: "visible" } : { borderColor: alpha(theme.palette.primary.main, ACTION_BUTTON.outlinedBorderAlpha) }
150
+ };
151
+ }
152
+ var actionsDirection = (windowWidth) => windowWidth >= ACTIONS_ROW_FROM ? "row" : "column";
153
+ function anchorProps(href, external) {
154
+ if (Platform.OS !== "web") return {};
155
+ return { href, hrefAttrs: external ? { target: "_blank", rel: "noopener noreferrer" } : void 0 };
156
+ }
157
+ function ActionButton({ spec, testID }) {
158
+ const theme = useUiTheme();
159
+ const contained = spec.variant === "contained";
160
+ const glyph = spec.icon ? /* @__PURE__ */ jsx(
161
+ Icon,
162
+ {
163
+ name: spec.icon,
164
+ size: ACTION_BUTTON.iconSize,
165
+ color: contained ? theme.palette.primary.contrastText : "primary"
166
+ }
167
+ ) : void 0;
168
+ return /* @__PURE__ */ jsx(
169
+ Button,
170
+ {
171
+ variant: contained ? "solid" : "outline",
172
+ color: "primary",
173
+ size: "sm",
174
+ icon: glyph,
175
+ onClick: spec.onClick,
176
+ testID,
177
+ style: actionStyle(theme, spec.variant),
178
+ children: spec.label
179
+ }
180
+ );
181
+ }
182
+ function Actions({ specs, testId }) {
183
+ const theme = useUiTheme();
184
+ const { width } = useWindowDimensions();
185
+ return /* @__PURE__ */ jsx(
186
+ View,
187
+ {
188
+ style: [
189
+ styles.actions,
190
+ {
191
+ flexDirection: actionsDirection(width),
192
+ gap: theme.spacing(ACTIONS_GAP_UNITS),
193
+ marginTop: theme.spacing(ACTIONS_MARGIN_TOP_UNITS)
194
+ }
195
+ ],
196
+ children: specs.map((spec) => /* @__PURE__ */ jsx(ActionButton, { spec, testID: testId(spec.key) }, spec.key))
197
+ }
198
+ );
199
+ }
200
+ function HelpLink({ helpLink, testId }) {
201
+ const theme = useUiTheme();
202
+ const external = helpLink.external === true;
203
+ const open = Platform.OS === "web" ? void 0 : () => void Linking.openURL(helpLink.href);
204
+ return /* @__PURE__ */ jsxs(RNText, { role: "link", testID: testId, style: helpLinkStyle(theme), onPress: open, ...anchorProps(helpLink.href, external), children: [
205
+ helpLink.label,
206
+ external ? EXTERNAL_LINK_MARK : null
207
+ ] });
208
+ }
209
+ function Content({ title, description, titleId, testId, actions, showActions, helpLink }) {
210
+ const theme = useUiTheme();
211
+ return /* @__PURE__ */ jsxs(View, { style: [styles.content, { gap: theme.spacing(CONTENT_GAP_UNITS) }], children: [
212
+ /* @__PURE__ */ jsx(RNText, { id: titleId, role: "heading", ...webAria({ "aria-level": 3 }), testID: testId("title"), style: titleStyle(theme), children: title }),
213
+ description ? /* @__PURE__ */ jsx(RNText, { testID: testId("description"), style: descriptionStyle(theme), children: description }) : null,
214
+ showActions ? /* @__PURE__ */ jsx(Actions, { specs: actions, testId }) : null,
215
+ helpLink ? /* @__PURE__ */ jsx(HelpLink, { helpLink, testId: testId("help-link") }) : null
216
+ ] });
217
+ }
218
+ var EmptyState = React.memo(function EmptyState2(props) {
219
+ const {
220
+ variant = "default",
221
+ title,
222
+ description,
223
+ illustration,
224
+ helpLink,
225
+ refreshLabel = "Refresh",
226
+ createLabel = "Create New",
227
+ primaryAction: _primary,
228
+ secondaryAction: _secondary,
229
+ onCreate: _onCreate,
230
+ onRefresh: _onRefresh,
231
+ style,
232
+ ...others
233
+ } = props;
234
+ const theme = useUiTheme();
235
+ const titleId = React.useId();
236
+ const dataTestId = resolveTestId(others);
237
+ const testId = makeTestId(dataTestId);
238
+ const rest = withoutTestIdProps(others);
239
+ const actions = actionsOf(props, refreshLabel, createLabel);
240
+ const showActions = variant === "action" || actions.length > 0;
241
+ return /* @__PURE__ */ jsxs(
242
+ View,
243
+ {
244
+ role: "region",
245
+ "aria-labelledby": titleId,
246
+ testID: dataTestId || "empty-state",
247
+ style: [
248
+ styles.root,
249
+ {
250
+ padding: theme.spacing(EMPTY_STATE_PADDING_UNITS),
251
+ minHeight: EMPTY_STATE_MIN_HEIGHT,
252
+ gap: theme.spacing(EMPTY_STATE_GAP_UNITS)
253
+ },
254
+ style
255
+ ],
256
+ ...rest,
257
+ children: [
258
+ illustration ? /* @__PURE__ */ jsx(View, { testID: testId("icon"), style: illustrationStyle(variant), children: illustration }) : null,
259
+ /* @__PURE__ */ jsx(
260
+ Content,
261
+ {
262
+ title,
263
+ description,
264
+ titleId,
265
+ testId,
266
+ actions,
267
+ showActions,
268
+ helpLink
269
+ }
270
+ )
271
+ ]
272
+ }
273
+ );
274
+ });
275
+ EmptyState.displayName = "EmptyState";
276
+ var styles = StyleSheet.create({
277
+ root: {
278
+ alignItems: "center",
279
+ justifyContent: "center"
280
+ },
281
+ content: {
282
+ alignItems: "center"
283
+ },
284
+ actions: {
285
+ alignItems: "center"
286
+ }
287
+ });
288
+
289
+ export {
290
+ EmptyState
291
+ };
292
+ //# sourceMappingURL=chunk-ZAQ3AZJM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/data-display/EmptyState/EmptyState.native.tsx","../../../src/components/data-display/EmptyState/EmptyState.helpers.ts","../../../src/components/data-display/EmptyState/EmptyState.metrics.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n Linking,\n Platform,\n StyleSheet,\n Text as RNText,\n useWindowDimensions,\n View,\n type TextStyle,\n type ViewStyle,\n} from 'react-native';\n\nimport { type ActionSpec, actionsOf, makeTestId } from './EmptyState.helpers';\nimport {\n ACTION_BUTTON,\n ACTION_MIN_WIDTH,\n ACTIONS_GAP_UNITS,\n ACTIONS_MARGIN_TOP_UNITS,\n ACTIONS_ROW_FROM,\n CONTENT_GAP_UNITS,\n DESCRIPTION_LINE_HEIGHT,\n DESCRIPTION_MAX_WIDTH,\n EMPTY_STATE_GAP_UNITS,\n EMPTY_STATE_MIN_HEIGHT,\n EMPTY_STATE_PADDING_UNITS,\n EXTERNAL_LINK_MARK,\n HELP_LINK_MARGIN_TOP_UNITS,\n illustrationMaxWidth,\n illustrationOpacity,\n MUI_CONTAINED_SHADOW,\n TITLE_MAX_WIDTH,\n} from './EmptyState.metrics';\nimport type { EmptyStateHelpLink, EmptyStateProps, EmptyStateVariant } from './EmptyState.types.native';\nimport { Icon } from '../../../icons/Icon.native';\nimport { webAria } from '../../../platform/aria';\nimport { resolveTestId, withoutTestIdProps } from '../../../platform/test-id';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\nimport { alpha } from '../../../tokens/color';\nimport { MUI_FONT_WEIGHT_MEDIUM, MUI_TYPE, muiTypeStyle } from '../../../tokens/mui-type';\nimport type { UiTheme } from '../../../tokens/theme';\nimport { Button } from '../../form/Button/Button.native';\n\n/** MUI's `h6` as an `h3`, medium weight, in the body ink, wrapping at 400px. */\nexport function titleStyle(theme: UiTheme): TextStyle {\n return {\n ...muiTypeStyle(theme, 'h6'),\n fontWeight: `${MUI_FONT_WEIGHT_MEDIUM}`,\n color: theme.palette.text.primary,\n maxWidth: TITLE_MAX_WIDTH,\n textAlign: 'center',\n };\n}\n\n/** MUI's `body2` on a 1.6 line height, muted, wrapping at 480px. */\nexport function descriptionStyle(theme: UiTheme): TextStyle {\n return {\n ...muiTypeStyle(theme, 'body2'),\n lineHeight: MUI_TYPE.body2.fontSize * DESCRIPTION_LINE_HEIGHT,\n color: theme.palette.text.secondary,\n maxWidth: DESCRIPTION_MAX_WIDTH,\n textAlign: 'center',\n };\n}\n\n/** The web `Link` inherits the page's `body1`; primary ink, no underline until hovered. */\nexport function helpLinkStyle(theme: UiTheme): TextStyle {\n return {\n ...muiTypeStyle(theme, 'body1'),\n color: theme.palette.primary.main,\n textDecorationLine: 'none',\n marginTop: theme.spacing(HELP_LINK_MARGIN_TOP_UNITS),\n textAlign: 'center',\n };\n}\n\nexport function illustrationStyle(variant: EmptyStateVariant): ViewStyle {\n return {\n maxWidth: illustrationMaxWidth(variant),\n width: '100%',\n opacity: illustrationOpacity(variant),\n display: variant === 'minimal' ? 'none' : 'flex',\n };\n}\n\n/**\n * The web actions are MUI's medium contained/outlined buttons; the house\n * `Button` is sized to them here. The shadow needs the button's overflow\n * visible — a view clips its own shadow otherwise.\n */\nexport function actionStyle(theme: UiTheme, variant: ActionSpec['variant']): ViewStyle {\n const padding = ACTION_BUTTON[variant];\n return {\n minWidth: ACTION_MIN_WIDTH,\n borderRadius: theme.radius.md,\n paddingVertical: padding.paddingVertical,\n paddingHorizontal: padding.paddingHorizontal,\n ...(variant === 'contained'\n ? { boxShadow: MUI_CONTAINED_SHADOW, overflow: 'visible' }\n : { borderColor: alpha(theme.palette.primary.main, ACTION_BUTTON.outlinedBorderAlpha) }),\n };\n}\n\n/** MUI's `sm` breakpoint decides the action row's axis: a row from 600px up, a column below. */\nexport const actionsDirection = (windowWidth: number): 'row' | 'column' =>\n windowWidth >= ACTIONS_ROW_FROM ? 'row' : 'column';\n\n/** react-native-web's anchor props for a `Text`, which React Native's `TextProps` do not declare. */\nfunction anchorProps(href: string, external: boolean): object {\n if (Platform.OS !== 'web') return {};\n return { href, hrefAttrs: external ? { target: '_blank', rel: 'noopener noreferrer' } : undefined };\n}\n\nfunction ActionButton({ spec, testID }: { spec: ActionSpec; testID: string }): React.JSX.Element {\n const theme = useUiTheme();\n const contained = spec.variant === 'contained';\n const glyph = spec.icon ? (\n <Icon\n name={spec.icon}\n size={ACTION_BUTTON.iconSize}\n color={contained ? theme.palette.primary.contrastText : 'primary'}\n />\n ) : undefined;\n return (\n <Button\n variant={contained ? 'solid' : 'outline'}\n color=\"primary\"\n size=\"sm\"\n icon={glyph}\n onClick={spec.onClick}\n testID={testID}\n style={actionStyle(theme, spec.variant)}\n >\n {spec.label}\n </Button>\n );\n}\n\nfunction Actions({ specs, testId }: { specs: ActionSpec[]; testId: (suffix: string) => string }): React.JSX.Element {\n const theme = useUiTheme();\n const { width } = useWindowDimensions();\n return (\n <View\n style={[\n styles.actions,\n {\n flexDirection: actionsDirection(width),\n gap: theme.spacing(ACTIONS_GAP_UNITS),\n marginTop: theme.spacing(ACTIONS_MARGIN_TOP_UNITS),\n },\n ]}\n >\n {specs.map((spec) => (\n <ActionButton key={spec.key} spec={spec} testID={testId(spec.key)} />\n ))}\n </View>\n );\n}\n\nfunction HelpLink({ helpLink, testId }: { helpLink: EmptyStateHelpLink; testId: string }): React.JSX.Element {\n const theme = useUiTheme();\n const external = helpLink.external === true;\n // On the web the anchor navigates by itself; a device has no anchor and opens the URL.\n const open = Platform.OS === 'web' ? undefined : () => void Linking.openURL(helpLink.href);\n return (\n <RNText role=\"link\" testID={testId} style={helpLinkStyle(theme)} onPress={open} {...anchorProps(helpLink.href, external)}>\n {helpLink.label}\n {external ? EXTERNAL_LINK_MARK : null}\n </RNText>\n );\n}\n\ninterface ContentProps {\n title: string;\n description?: string;\n titleId: string;\n testId: (suffix: string) => string;\n actions: ActionSpec[];\n showActions: boolean;\n helpLink?: EmptyStateHelpLink;\n}\n\nfunction Content({ title, description, titleId, testId, actions, showActions, helpLink }: ContentProps): React.JSX.Element {\n const theme = useUiTheme();\n return (\n <View style={[styles.content, { gap: theme.spacing(CONTENT_GAP_UNITS) }]}>\n <RNText id={titleId} role=\"heading\" {...webAria({ 'aria-level': 3 })} testID={testId('title')} style={titleStyle(theme)}>\n {title}\n </RNText>\n\n {description ? (\n <RNText testID={testId('description')} style={descriptionStyle(theme)}>\n {description}\n </RNText>\n ) : null}\n\n {showActions ? <Actions specs={actions} testId={testId} /> : null}\n\n {helpLink ? <HelpLink helpLink={helpLink} testId={testId('help-link')} /> : null}\n </View>\n );\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = React.memo(function EmptyState(props) {\n const {\n variant = 'default',\n title,\n description,\n illustration,\n helpLink,\n refreshLabel = 'Refresh',\n createLabel = 'Create New',\n primaryAction: _primary,\n secondaryAction: _secondary,\n onCreate: _onCreate,\n onRefresh: _onRefresh,\n style,\n ...others\n } = props;\n const theme = useUiTheme();\n const titleId = React.useId();\n const dataTestId = resolveTestId(others);\n const testId = makeTestId(dataTestId);\n const rest = withoutTestIdProps(others);\n\n const actions = actionsOf(props, refreshLabel, createLabel);\n // The `action` variant reserves the action row even when nothing fills it.\n const showActions = variant === 'action' || actions.length > 0;\n\n return (\n <View\n role=\"region\"\n aria-labelledby={titleId}\n testID={dataTestId || 'empty-state'}\n style={[\n styles.root,\n {\n padding: theme.spacing(EMPTY_STATE_PADDING_UNITS),\n minHeight: EMPTY_STATE_MIN_HEIGHT,\n gap: theme.spacing(EMPTY_STATE_GAP_UNITS),\n },\n style,\n ]}\n {...rest}\n >\n {illustration ? (\n <View testID={testId('icon')} style={illustrationStyle(variant)}>\n {illustration}\n </View>\n ) : null}\n\n <Content\n title={title}\n description={description}\n titleId={titleId}\n testId={testId}\n actions={actions}\n showActions={showActions}\n helpLink={helpLink}\n />\n </View>\n );\n});\n\nEmptyState.displayName = 'EmptyState';\n\nconst styles = StyleSheet.create({\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n content: {\n alignItems: 'center',\n },\n actions: {\n alignItems: 'center',\n },\n});\n","import type { EmptyStateBaseProps } from './EmptyState.base';\n\nexport const makeTestId =\n (dataTestId?: string) =>\n (suffix: string): string =>\n dataTestId ? `${dataTestId}-${suffix}` : `empty-state-${suffix}`;\n\n/** The glyph an action carries, by the shared icon set's name; each renderer draws it its own way. */\nexport type ActionIconName = 'Add' | 'Refresh';\n\nexport interface ActionSpec {\n key: 'primary-action' | 'create-button' | 'secondary-action' | 'refresh-button';\n variant: 'contained' | 'outlined';\n onClick: () => void;\n label: string;\n icon?: ActionIconName;\n}\n\n// The four buttons are one button with different props. Listing them keeps their\n// order — primary, create, secondary, refresh — visible in one place, and both\n// renderers read this one list.\nexport const actionsOf = (\n props: EmptyStateBaseProps,\n refreshLabel: string,\n createLabel: string,\n): ActionSpec[] => {\n const { primaryAction, secondaryAction, onCreate, onRefresh } = props;\n const specs: ActionSpec[] = [];\n\n if (primaryAction) {\n specs.push({\n key: 'primary-action',\n variant: 'contained',\n onClick: primaryAction.onClick,\n label: primaryAction.label,\n });\n }\n if (onCreate) {\n specs.push({\n key: 'create-button',\n variant: 'contained',\n onClick: onCreate,\n label: createLabel,\n icon: 'Add',\n });\n }\n if (secondaryAction) {\n specs.push({\n key: 'secondary-action',\n variant: 'outlined',\n onClick: secondaryAction.onClick,\n label: secondaryAction.label,\n });\n }\n if (onRefresh) {\n specs.push({\n key: 'refresh-button',\n variant: 'outlined',\n onClick: onRefresh,\n label: refreshLabel,\n icon: 'Refresh',\n });\n }\n\n return specs;\n};\n","import type { EmptyStateVariant } from './EmptyState.base';\n\n/**\n * THE NUMBERS BOTH `EmptyState` RENDERERS DRAW WITH.\n *\n * `EmptyState.tsx` (MUI) and `EmptyState.native.tsx` (React Native) read\n * this one table. Spacing is in SPACING UNITS where the web writes\n * `theme.spacing(n)`; everything else is px or a ratio.\n */\n\n/** The region: a centred column, `theme.spacing(6)` of padding, at least 200px tall, its parts 24px apart. */\nexport const EMPTY_STATE_PADDING_UNITS = 6;\nexport const EMPTY_STATE_MIN_HEIGHT = 200;\nexport const EMPTY_STATE_GAP_UNITS = 3;\n\n/** The illustration: wider when it is the point, faded a little always, hidden in `minimal`. */\nexport const ILLUSTRATION_MAX_WIDTH = { illustrated: 240, other: 120 } as const;\nexport const ILLUSTRATION_OPACITY = { minimal: 0.6, other: 0.8 } as const;\n\nexport const illustrationMaxWidth = (variant: EmptyStateVariant): number =>\n variant === 'illustrated' ? ILLUSTRATION_MAX_WIDTH.illustrated : ILLUSTRATION_MAX_WIDTH.other;\nexport const illustrationOpacity = (variant: EmptyStateVariant): number =>\n variant === 'minimal' ? ILLUSTRATION_OPACITY.minimal : ILLUSTRATION_OPACITY.other;\n\n/** Title, description, actions and link are 16px apart; the title wraps at 400px, the description at 480px on a 1.6 line height. */\nexport const CONTENT_GAP_UNITS = 2;\nexport const TITLE_MAX_WIDTH = 400;\nexport const DESCRIPTION_MAX_WIDTH = 480;\nexport const DESCRIPTION_LINE_HEIGHT = 1.6;\n\n/** The action row: 16px below the text, buttons 16px apart, stacked below MUI's `sm` breakpoint. */\nexport const ACTIONS_MARGIN_TOP_UNITS = 2;\nexport const ACTIONS_GAP_UNITS = 2;\nexport const ACTIONS_ROW_FROM = 600;\nexport const ACTION_MIN_WIDTH = 120;\n/**\n * The web actions ARE MUI's medium `contained` and `outlined` buttons: 6px\n * 16px, or 5px 15px inside a 1px border at half alpha, 14px type, the\n * theme's radius, a 20px start icon. The native side sizes the house\n * `Button` to these.\n */\nexport const ACTION_BUTTON = {\n contained: { paddingVertical: 6, paddingHorizontal: 16 },\n outlined: { paddingVertical: 5, paddingHorizontal: 15 },\n iconSize: 20,\n outlinedBorderAlpha: 0.5,\n} as const;\n/** MUI's `theme.shadows[2]`, the elevation a contained button rests at. */\nexport const MUI_CONTAINED_SHADOW =\n '0px 3px 1px -2px rgba(0,0,0,0.2), 0px 2px 2px 0px rgba(0,0,0,0.14), 0px 1px 5px 0px rgba(0,0,0,0.12)';\n\n/** The help link: 8px below whatever precedes it, marked when it leaves the app. */\nexport const HELP_LINK_MARGIN_TOP_UNITS = 1;\nexport const EXTERNAL_LINK_MARK = ' ↗';\n"],"mappings":"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","names":["EmptyState"]}
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  webAria
3
- } from "../chunks/chunk-T6BJPP3E.js";
3
+ } from "../chunks/chunk-DN73KYIZ.js";
4
4
  import {
5
5
  renderTextChildren
6
6
  } from "../chunks/chunk-5GJ5OG5R.js";
7
7
  import {
8
8
  Icon
9
9
  } from "../chunks/chunk-QYUD3S6F.js";
10
+ import {
11
+ muiTypeStyle
12
+ } from "../chunks/chunk-2UFNPDYT.js";
10
13
  import "../chunks/chunk-5WLOVHKK.js";
11
14
  import {
12
15
  resolveTestId,
13
16
  withoutTestIdProps
14
17
  } from "../chunks/chunk-AR5O4BEY.js";
15
- import {
16
- muiTypeStyle
17
- } from "../chunks/chunk-2UFNPDYT.js";
18
18
  import {
19
19
  useUiTheme
20
20
  } from "../chunks/chunk-GWGIWQO7.js";
@@ -1,3 +1,6 @@
1
+ import {
2
+ useLoopedProgress
3
+ } from "../chunks/chunk-MLQIOKQZ.js";
1
4
  import {
2
5
  renderTextChildren
3
6
  } from "../chunks/chunk-5GJ5OG5R.js";
@@ -6,9 +9,6 @@ import {
6
9
  } from "../chunks/chunk-QYUD3S6F.js";
7
10
  import "../chunks/chunk-5WLOVHKK.js";
8
11
  import "../chunks/chunk-AR5O4BEY.js";
9
- import {
10
- useLoopedProgress
11
- } from "../chunks/chunk-MLQIOKQZ.js";
12
12
  import {
13
13
  useUiTheme
14
14
  } from "../chunks/chunk-GWGIWQO7.js";
@@ -1,6 +1,9 @@
1
+ import {
2
+ useLoopedProgress
3
+ } from "../chunks/chunk-MLQIOKQZ.js";
1
4
  import {
2
5
  webAria
3
- } from "../chunks/chunk-T6BJPP3E.js";
6
+ } from "../chunks/chunk-DN73KYIZ.js";
4
7
  import {
5
8
  renderTextChildren
6
9
  } from "../chunks/chunk-5GJ5OG5R.js";
@@ -11,9 +14,6 @@ import "../chunks/chunk-5WLOVHKK.js";
11
14
  import {
12
15
  resolveTestId
13
16
  } from "../chunks/chunk-AR5O4BEY.js";
14
- import {
15
- useLoopedProgress
16
- } from "../chunks/chunk-MLQIOKQZ.js";
17
17
  import {
18
18
  useUiTheme
19
19
  } from "../chunks/chunk-GWGIWQO7.js";