@12-apps/ui 6.33.1 → 6.34.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 (1411) hide show
  1. package/dist/_internal/components/data-display/Alert/Alert.js +5 -3
  2. package/dist/_internal/components/data-display/Alert/Alert.metrics.js +2 -1
  3. package/dist/_internal/components/data-display/Alert/Alert.styles.js +4 -2
  4. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +4 -1
  5. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +10 -7
  6. package/dist/_internal/components/data-display/Avatar/Avatar.js +5 -3
  7. package/dist/_internal/components/data-display/Avatar/Avatar.metrics.js +2 -1
  8. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +4 -2
  9. package/dist/_internal/components/data-display/Badge/Badge.animations.js +2 -9
  10. package/dist/_internal/components/data-display/Badge/Badge.js +16 -6
  11. package/dist/_internal/components/data-display/Badge/Badge.metrics.js +1 -8
  12. package/dist/_internal/components/data-display/Badge/Badge.styles.js +14 -4
  13. package/dist/_internal/components/data-display/Badge/Badge.variants.js +4 -8
  14. package/dist/_internal/components/data-display/Badge/BadgeContent.js +15 -5
  15. package/dist/_internal/components/data-display/Banner/Banner.js +5 -3
  16. package/dist/_internal/components/data-display/Banner/Banner.styles.js +4 -2
  17. package/dist/_internal/components/data-display/CardKit/CardKebab.js +7 -5
  18. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +6 -4
  19. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +15 -13
  20. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +11 -9
  21. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +5 -3
  22. package/dist/_internal/components/data-display/Carousel/Carousel.js +8 -6
  23. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +4 -2
  24. package/dist/_internal/components/data-display/Carousel/Carousel.slide.js +4 -1
  25. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +4 -2
  26. package/dist/_internal/components/data-display/Chart/Chart.js +8 -6
  27. package/dist/_internal/components/data-display/Chart/SpecChart.js +9 -7
  28. package/dist/_internal/components/data-display/Chart/chart-context.js +5 -3
  29. package/dist/_internal/components/data-display/Chart/chart-internals.js +4 -2
  30. package/dist/_internal/components/data-display/Chart/chart-renderers.js +7 -5
  31. package/dist/_internal/components/data-display/Chip/Chip.js +5 -2
  32. package/dist/_internal/components/data-display/Chip/Chip.styles.js +4 -1
  33. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  34. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +58 -56
  35. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +82 -80
  36. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +9 -7
  37. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +14 -12
  38. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +17 -15
  39. package/dist/_internal/components/data-display/DataViews/base-card.js +11 -9
  40. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +12 -10
  41. package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +4 -3
  42. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +8 -6
  43. package/dist/_internal/components/data-display/DataViews/base-list-card.js +19 -17
  44. package/dist/_internal/components/data-display/DataViews/card-surface.js +5 -9
  45. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +14 -12
  46. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +8 -6
  47. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +11 -9
  48. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +6 -4
  49. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +6 -4
  50. package/dist/_internal/components/data-display/DataViews/data-views-export.js +6 -4
  51. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +21 -19
  52. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +16 -14
  53. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +7 -5
  54. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +53 -51
  55. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +23 -21
  56. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +6 -3
  57. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +5 -5
  58. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +11 -9
  59. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  60. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +3 -3
  61. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +7 -4
  62. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +6 -4
  63. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +17 -15
  64. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +28 -26
  65. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +16 -14
  66. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +6 -4
  67. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +8 -5
  68. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +11 -9
  69. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +3 -2
  70. package/dist/_internal/components/data-display/EmptyState/EmptyState.metrics.js +2 -1
  71. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +17 -15
  72. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +12 -10
  73. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +22 -20
  74. package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +7 -4
  75. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +6 -3
  76. package/dist/_internal/components/data-display/HoverCard/HoverCard.styles.js +4 -1
  77. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +5 -2
  78. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.js +4 -1
  79. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +7 -4
  80. package/dist/_internal/components/data-display/Lightbox/Lightbox.constants.js +4 -1
  81. package/dist/_internal/components/data-display/Lightbox/Lightbox.hooks.js +5 -2
  82. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +11 -8
  83. package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +5 -2
  84. package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +6 -3
  85. package/dist/_internal/components/data-display/Lightbox/LightboxStage.js +5 -2
  86. package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +5 -2
  87. package/dist/_internal/components/data-display/Lightbox/useLightbox.js +6 -3
  88. package/dist/_internal/components/data-display/LoadingState/LoadingState.js +7 -4
  89. package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +5 -2
  90. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
  91. package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +5 -2
  92. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +11 -9
  93. package/dist/_internal/components/data-display/MapPreview/MapTiles.js +5 -2
  94. package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +7 -4
  95. package/dist/_internal/components/data-display/MapPreview/mapSurface.js +4 -1
  96. package/dist/_internal/components/data-display/Popover/Popover.js +4 -1
  97. package/dist/_internal/components/data-display/Progress/Progress.js +4 -2
  98. package/dist/_internal/components/data-display/Progress/Progress.styles.js +3 -1
  99. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +7 -4
  100. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +5 -3
  101. package/dist/_internal/components/data-display/Sheet/Sheet.js +7 -5
  102. package/dist/_internal/components/data-display/Sheet/Sheet.parts.js +4 -1
  103. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +4 -2
  104. package/dist/_internal/components/data-display/StatCard/StatCard.js +7 -4
  105. package/dist/_internal/components/data-display/Stepper/Stepper.js +4 -1
  106. package/dist/_internal/components/data-display/Timeline/Timeline.js +5 -2
  107. package/dist/_internal/components/data-display/Timeline/TimelineRow.js +4 -1
  108. package/dist/_internal/components/data-display/TimingDiagram/TimingDiagram.js +5 -2
  109. package/dist/_internal/components/data-display/TimingDiagram/TimingDiagram.views.js +4 -1
  110. package/dist/_internal/components/data-display/Tooltip/Tooltip.js +4 -1
  111. package/dist/_internal/components/data-display/index.js +83 -81
  112. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +6 -3
  113. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +5 -2
  114. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +9 -7
  115. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +6 -3
  116. package/dist/_internal/components/feedback/Dialog/Dialog.js +6 -3
  117. package/dist/_internal/components/feedback/Dialog/Dialog.metrics.js +3 -1
  118. package/dist/_internal/components/feedback/Dialog/Dialog.styles.js +5 -2
  119. package/dist/_internal/components/feedback/Modal/Modal.js +5 -2
  120. package/dist/_internal/components/feedback/Modal/Modal.styles.js +4 -1
  121. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +9 -7
  122. package/dist/_internal/components/feedback/Sonner/Sonner.js +5 -2
  123. package/dist/_internal/components/feedback/Sonner/SonnerToast.js +4 -1
  124. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +6 -3
  125. package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +5 -2
  126. package/dist/_internal/components/feedback/StackedModal/StackedModal.styles.js +4 -1
  127. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +5 -2
  128. package/dist/_internal/components/feedback/TutorialOverlay/TutorialStepBody.js +4 -1
  129. package/dist/_internal/components/feedback/index.js +28 -26
  130. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +4 -4
  131. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +7 -7
  132. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
  133. package/dist/_internal/components/form/Button/Button.js +5 -3
  134. package/dist/_internal/components/form/Button/Button.metrics.js +2 -1
  135. package/dist/_internal/components/form/Button/Button.styles.js +4 -2
  136. package/dist/_internal/components/form/Calendar/Calendar.hooks.js +2 -2
  137. package/dist/_internal/components/form/Calendar/Calendar.js +3 -3
  138. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +9 -7
  139. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +4 -2
  140. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +4 -2
  141. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +6 -4
  142. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +5 -3
  143. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +12 -10
  144. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +3 -1
  145. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +4 -2
  146. package/dist/_internal/components/form/CepField/CepField.js +6 -4
  147. package/dist/_internal/components/form/Checkbox/Checkbox.js +3 -2
  148. package/dist/_internal/components/form/Checkbox/Checkbox.metrics.js +3 -3
  149. package/dist/_internal/components/form/CodeEditor/CodeEditor.hooks.js +5 -2
  150. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +6 -4
  151. package/dist/_internal/components/form/CodeEditor/CodeEditor.monaco.js +4 -1
  152. package/dist/_internal/components/form/Command/Command.js +6 -4
  153. package/dist/_internal/components/form/Command/Command.styles.js +4 -2
  154. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +5 -5
  155. package/dist/_internal/components/form/Input/Input.js +5 -3
  156. package/dist/_internal/components/form/Input/Input.metrics.js +2 -1
  157. package/dist/_internal/components/form/Input/Input.styles.js +4 -2
  158. package/dist/_internal/components/form/InputOTP/InputOTP.js +4 -2
  159. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +3 -1
  160. package/dist/_internal/components/form/Label/Label.js +5 -3
  161. package/dist/_internal/components/form/Label/Label.styles.js +4 -2
  162. package/dist/_internal/components/form/Menubar/Menubar.item.js +5 -3
  163. package/dist/_internal/components/form/Menubar/Menubar.js +7 -5
  164. package/dist/_internal/components/form/Menubar/Menubar.styles.js +4 -2
  165. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +6 -4
  166. package/dist/_internal/components/form/PhoneInput/PhoneInput.hooks.js +2 -2
  167. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +3 -3
  168. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +5 -3
  169. package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +3 -1
  170. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +4 -2
  171. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
  172. package/dist/_internal/components/form/Select/Select.js +5 -3
  173. package/dist/_internal/components/form/Select/Select.metrics.js +3 -2
  174. package/dist/_internal/components/form/Slider/Slider.js +5 -2
  175. package/dist/_internal/components/form/Slider/Slider.styles.js +4 -1
  176. package/dist/_internal/components/form/Switch/Switch.js +7 -5
  177. package/dist/_internal/components/form/Switch/Switch.metrics.js +2 -1
  178. package/dist/_internal/components/form/Switch/Switch.parts.js +5 -3
  179. package/dist/_internal/components/form/Switch/Switch.styles.js +4 -2
  180. package/dist/_internal/components/form/Textarea/Textarea.js +4 -2
  181. package/dist/_internal/components/form/Textarea/Textarea.styles.js +3 -1
  182. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +3 -1
  183. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js.map +1 -1
  184. package/dist/_internal/components/form/Toggle/Toggle.js +4 -2
  185. package/dist/_internal/components/form/Toggle/Toggle.styles.js +3 -1
  186. package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +3 -1
  187. package/dist/_internal/components/form/index.js +68 -66
  188. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +13 -11
  189. package/dist/_internal/components/form/total-form/Fields/CepField.js +7 -5
  190. package/dist/_internal/components/form/total-form/Fields/SelectField.js +6 -4
  191. package/dist/_internal/components/form/total-form/Fields/TextField.js +6 -4
  192. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +4 -2
  193. package/dist/_internal/components/form/total-form/Fields/index.js +29 -27
  194. package/dist/_internal/components/form/total-form/SubmitButton.js +6 -4
  195. package/dist/_internal/components/index.js +209 -207
  196. package/dist/_internal/components/layout/Box/Box.js +6 -4
  197. package/dist/_internal/components/layout/Card/Card.js +6 -3
  198. package/dist/_internal/components/layout/Card/Card.metrics.js +3 -1
  199. package/dist/_internal/components/layout/Card/Card.styles.js +5 -2
  200. package/dist/_internal/components/layout/Drawer/Drawer.js +4 -1
  201. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +7 -4
  202. package/dist/_internal/components/layout/ScrollArea/ScrollArea.styles.js +4 -1
  203. package/dist/_internal/components/layout/ScrollArea/ScrollViewport.js +5 -2
  204. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +4 -4
  205. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +2 -2
  206. package/dist/_internal/components/layout/Sidebar/Sidebar.js +4 -1
  207. package/dist/_internal/components/layout/Skeleton/Skeleton.js +6 -3
  208. package/dist/_internal/components/layout/Skeleton/Skeleton.metrics.js +2 -1
  209. package/dist/_internal/components/layout/Skeleton/Skeleton.styles.js +5 -2
  210. package/dist/_internal/components/layout/Stack/Stack.js +7 -5
  211. package/dist/_internal/components/layout/index.js +17 -15
  212. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +14 -12
  213. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +4 -2
  214. package/dist/_internal/components/navigation/Breadcrumbs/BreadcrumbEntry.js +5 -2
  215. package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +6 -3
  216. package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.styles.js +4 -1
  217. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +4 -1
  218. package/dist/_internal/components/navigation/ContextMenu/ContextMenu.js +4 -1
  219. package/dist/_internal/components/navigation/DropdownMenu/DropdownMenu.js +4 -1
  220. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +7 -4
  221. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +9 -6
  222. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.shell.js +5 -2
  223. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.styles.js +2 -1
  224. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +5 -2
  225. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +7 -4
  226. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  227. package/dist/_internal/components/navigation/Tabs/Tabs.js +2 -2
  228. package/dist/_internal/components/navigation/index.js +33 -31
  229. package/dist/_internal/components/typography/Blockquote/Blockquote.js +4 -1
  230. package/dist/_internal/components/typography/Code/Code.js +4 -1
  231. package/dist/_internal/components/typography/Heading/Heading.js +5 -3
  232. package/dist/_internal/components/typography/Heading/Heading.metrics.js +2 -1
  233. package/dist/_internal/components/typography/Heading/Heading.styles.js +4 -2
  234. package/dist/_internal/components/typography/index.js +7 -5
  235. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +5 -2
  236. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.styles.js +4 -1
  237. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +4 -1
  238. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +7 -4
  239. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +5 -2
  240. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +6 -3
  241. package/dist/_internal/components/utility/index.js +9 -6
  242. package/dist/_internal/icons/Icon.js +6 -4
  243. package/dist/_internal/provider/UiProvider.js +5 -3
  244. package/dist/_internal/provider/mui-bridge.js +4 -2
  245. package/dist/_internal/provider/use-ui-theme.js +5 -3
  246. package/dist/_internal/social-login-button/social-login-button.js +12 -10
  247. package/dist/_internal/tokens/ink.core.js +34 -0
  248. package/dist/_internal/tokens/ink.core.js.map +1 -0
  249. package/dist/_internal/tokens/ink.js +30 -0
  250. package/dist/_internal/tokens/ink.js.map +1 -0
  251. package/dist/_internal/user-avatar/user-avatar.js +12 -10
  252. package/dist/charts.js +9 -7
  253. package/dist/chunk-236V2GRH.js +281 -0
  254. package/dist/chunk-236V2GRH.js.map +1 -0
  255. package/dist/chunk-27DLUKDF.js +37 -0
  256. package/dist/chunk-2BFUUUDS.js +61 -0
  257. package/dist/chunk-2BFUUUDS.js.map +1 -0
  258. package/dist/chunk-2CK7SHQQ.js +305 -0
  259. package/dist/chunk-2KLT22S3.js +173 -0
  260. package/dist/chunk-2LG5TEFV.js +201 -0
  261. package/dist/chunk-2LG5TEFV.js.map +1 -0
  262. package/dist/chunk-2NLYGZP3.js +156 -0
  263. package/dist/chunk-2NLYGZP3.js.map +1 -0
  264. package/dist/chunk-2RRXQTOO.js +234 -0
  265. package/dist/chunk-2RRXQTOO.js.map +1 -0
  266. package/dist/chunk-2SGPNJHJ.js +170 -0
  267. package/dist/chunk-2SGPNJHJ.js.map +1 -0
  268. package/dist/chunk-2TJOCI54.js +86 -0
  269. package/dist/chunk-2XGGHYEA.js +187 -0
  270. package/dist/chunk-2ZRZTGWP.js +230 -0
  271. package/dist/chunk-37DCYIT5.js +79 -0
  272. package/dist/chunk-3CBL5FWS.js +201 -0
  273. package/dist/chunk-3CBL5FWS.js.map +1 -0
  274. package/dist/chunk-3EDZU2H7.js +127 -0
  275. package/dist/chunk-3LNKBZTG.js +83 -0
  276. package/dist/chunk-46ADSOCF.js +67 -0
  277. package/dist/chunk-4GKDO4YK.js +325 -0
  278. package/dist/chunk-4GKDO4YK.js.map +1 -0
  279. package/dist/chunk-4M7QHSKY.js +103 -0
  280. package/dist/chunk-4N33SWTW.js +85 -0
  281. package/dist/chunk-5264DI34.js +57 -0
  282. package/dist/chunk-52APLKAG.js +110 -0
  283. package/dist/chunk-52APLKAG.js.map +1 -0
  284. package/dist/chunk-5CIXQBLV.js +155 -0
  285. package/dist/chunk-5CIXQBLV.js.map +1 -0
  286. package/dist/chunk-5E6WZAQF.js +111 -0
  287. package/dist/chunk-5E6WZAQF.js.map +1 -0
  288. package/dist/chunk-5JSRM7WC.js +76 -0
  289. package/dist/chunk-5JSRM7WC.js.map +1 -0
  290. package/dist/chunk-5LPQ6T5S.js +93 -0
  291. package/dist/chunk-5LPQ6T5S.js.map +1 -0
  292. package/dist/chunk-5NFPO3YY.js +84 -0
  293. package/dist/chunk-5NFPO3YY.js.map +1 -0
  294. package/dist/chunk-5QTMJ2RU.js +157 -0
  295. package/dist/chunk-5VWYCVXF.js +94 -0
  296. package/dist/chunk-63UQJVBW.js +198 -0
  297. package/dist/chunk-63UQJVBW.js.map +1 -0
  298. package/dist/chunk-67QSLTT7.js +116 -0
  299. package/dist/chunk-67VUL6L2.js +263 -0
  300. package/dist/chunk-67VUL6L2.js.map +1 -0
  301. package/dist/chunk-6MSSCBI3.js +39 -0
  302. package/dist/chunk-6Q5GZUQ5.js +64 -0
  303. package/dist/chunk-6ZZGK5DT.js +78 -0
  304. package/dist/chunk-6ZZGK5DT.js.map +1 -0
  305. package/dist/chunk-7E4X4J2M.js +107 -0
  306. package/dist/chunk-7F7TTOYN.js +80 -0
  307. package/dist/chunk-7IQDLEB5.js +281 -0
  308. package/dist/chunk-7IQDLEB5.js.map +1 -0
  309. package/dist/chunk-7JSQQZUH.js +21 -0
  310. package/dist/chunk-7QLHYUDW.js +136 -0
  311. package/dist/chunk-7QLHYUDW.js.map +1 -0
  312. package/dist/chunk-7VIINULX.js +223 -0
  313. package/dist/chunk-7WK2L3ZO.js +46 -0
  314. package/dist/chunk-7Z2UU2FQ.js +183 -0
  315. package/dist/chunk-A2DYU5WN.js +60 -0
  316. package/dist/chunk-A4OCNJWW.js +16 -0
  317. package/dist/chunk-ABCP6NS4.js +211 -0
  318. package/dist/chunk-ABCP6NS4.js.map +1 -0
  319. package/dist/chunk-ACHUHT2K.js +170 -0
  320. package/dist/chunk-ACHUHT2K.js.map +1 -0
  321. package/dist/chunk-AKPRFFAI.js +134 -0
  322. package/dist/chunk-AL6Z2JYR.js +241 -0
  323. package/dist/chunk-AMTFP7QA.js +94 -0
  324. package/dist/chunk-AMTFP7QA.js.map +1 -0
  325. package/dist/chunk-B443IIQG.js +167 -0
  326. package/dist/chunk-B76QCDCE.js +226 -0
  327. package/dist/chunk-B76QCDCE.js.map +1 -0
  328. package/dist/chunk-BGYLL467.js +108 -0
  329. package/dist/chunk-BHLGZLXQ.js +318 -0
  330. package/dist/chunk-BHLGZLXQ.js.map +1 -0
  331. package/dist/chunk-BHOSWJDL.js +83 -0
  332. package/dist/chunk-BOU3HR4C.js +216 -0
  333. package/dist/chunk-BOU3HR4C.js.map +1 -0
  334. package/dist/chunk-BQGT77IQ.js +181 -0
  335. package/dist/chunk-BR7RM3WR.js +79 -0
  336. package/dist/chunk-C3U7FDKI.js +218 -0
  337. package/dist/chunk-C3U7FDKI.js.map +1 -0
  338. package/dist/chunk-COK5VOXC.js +193 -0
  339. package/dist/chunk-CRDOMIEG.js +59 -0
  340. package/dist/chunk-CUN5RJTH.js +81 -0
  341. package/dist/chunk-CXMVNYBY.js +25 -0
  342. package/dist/chunk-CY6HHLYM.js +184 -0
  343. package/dist/chunk-CZT3AV7I.js +172 -0
  344. package/dist/chunk-CZT3AV7I.js.map +1 -0
  345. package/dist/chunk-D5SZXH7Q.js +148 -0
  346. package/dist/chunk-D5SZXH7Q.js.map +1 -0
  347. package/dist/chunk-D6RKXNLE.js +41 -0
  348. package/dist/chunk-DBCITC4P.js +127 -0
  349. package/dist/chunk-DELT2W42.js +41 -0
  350. package/dist/chunk-DJ2KYLHE.js +61 -0
  351. package/dist/chunk-DKILDT72.js +269 -0
  352. package/dist/chunk-DKILDT72.js.map +1 -0
  353. package/dist/chunk-DL6N7W6P.js +82 -0
  354. package/dist/chunk-DL6N7W6P.js.map +1 -0
  355. package/dist/chunk-DOXNMWUU.js +195 -0
  356. package/dist/chunk-DOXNMWUU.js.map +1 -0
  357. package/dist/chunk-DPJZFQF2.js +309 -0
  358. package/dist/chunk-DPJZFQF2.js.map +1 -0
  359. package/dist/chunk-DQIRSUEK.js +118 -0
  360. package/dist/chunk-DRKYPQNA.js +156 -0
  361. package/dist/chunk-DSIJEJQ7.js +88 -0
  362. package/dist/chunk-DY7VTAYO.js +165 -0
  363. package/dist/chunk-DYMVVVSU.js +227 -0
  364. package/dist/chunk-E6RYO4QZ.js +180 -0
  365. package/dist/chunk-E6RYO4QZ.js.map +1 -0
  366. package/dist/chunk-EDBTCEPC.js +263 -0
  367. package/dist/chunk-EHCUOX6R.js +264 -0
  368. package/dist/chunk-EIJC5DWG.js +77 -0
  369. package/dist/chunk-EMPVMZAB.js +49 -0
  370. package/dist/chunk-EMPVMZAB.js.map +1 -0
  371. package/dist/chunk-EVSKEIXI.js +82 -0
  372. package/dist/chunk-EYPRDTWI.js +225 -0
  373. package/dist/chunk-FQ6UW7IY.js +91 -0
  374. package/dist/chunk-FQ6UW7IY.js.map +1 -0
  375. package/dist/chunk-FTSVJIEU.js +159 -0
  376. package/dist/chunk-FYSYALTY.js +96 -0
  377. package/dist/chunk-G2TCNZYD.js +82 -0
  378. package/dist/chunk-G2TCNZYD.js.map +1 -0
  379. package/dist/chunk-GJF3CVIE.js +51 -0
  380. package/dist/chunk-GJRBK564.js +30 -0
  381. package/dist/chunk-GL5CYMGK.js +73 -0
  382. package/dist/chunk-GN5EZPSL.js +195 -0
  383. package/dist/chunk-GN5EZPSL.js.map +1 -0
  384. package/dist/chunk-GPUYB3ST.js +107 -0
  385. package/dist/chunk-GQ4I6Z32.js +297 -0
  386. package/dist/chunk-GUW5BUK7.js +58 -0
  387. package/dist/chunk-GVGJMH77.js +86 -0
  388. package/dist/chunk-GVGJMH77.js.map +1 -0
  389. package/dist/chunk-GVOMTCLS.js +203 -0
  390. package/dist/chunk-H2YBVBPW.js +75 -0
  391. package/dist/chunk-H3B5PIM3.js +125 -0
  392. package/dist/chunk-H3B5PIM3.js.map +1 -0
  393. package/dist/chunk-H3MLYZYP.js +183 -0
  394. package/dist/chunk-H3R6WSYU.js +173 -0
  395. package/dist/chunk-HBYWUSPI.js +266 -0
  396. package/dist/chunk-HBYWUSPI.js.map +1 -0
  397. package/dist/chunk-HD6ZNARS.js +89 -0
  398. package/dist/chunk-HD6ZNARS.js.map +1 -0
  399. package/dist/chunk-HEVST4CS.js +347 -0
  400. package/dist/chunk-HH5CNSJP.js +123 -0
  401. package/dist/chunk-HH5CNSJP.js.map +1 -0
  402. package/dist/chunk-HMHCNNNW.js +82 -0
  403. package/dist/chunk-HMHCNNNW.js.map +1 -0
  404. package/dist/chunk-HRHPRIGT.js +173 -0
  405. package/dist/chunk-HUKVX47W.js +63 -0
  406. package/dist/chunk-HWEAW4LF.js +178 -0
  407. package/dist/chunk-HWEAW4LF.js.map +1 -0
  408. package/dist/chunk-IBGX6H4J.js +121 -0
  409. package/dist/chunk-IFSUKWE7.js +219 -0
  410. package/dist/chunk-IJFAF3A7.js +64 -0
  411. package/dist/chunk-IL7JZKXY.js +159 -0
  412. package/dist/chunk-IRYSJ74J.js +176 -0
  413. package/dist/chunk-IRYSJ74J.js.map +1 -0
  414. package/dist/chunk-IVIHRZEY.js +96 -0
  415. package/dist/chunk-IVIHRZEY.js.map +1 -0
  416. package/dist/chunk-IYTBTK2M.js +170 -0
  417. package/dist/chunk-IYTBTK2M.js.map +1 -0
  418. package/dist/chunk-JCBIPBGZ.js +235 -0
  419. package/dist/chunk-JCBIPBGZ.js.map +1 -0
  420. package/dist/chunk-JGDS2SJZ.js +116 -0
  421. package/dist/chunk-JH7EEJEQ.js +99 -0
  422. package/dist/chunk-JH7EEJEQ.js.map +1 -0
  423. package/dist/chunk-JKNLKUCX.js +120 -0
  424. package/dist/chunk-JKNLKUCX.js.map +1 -0
  425. package/dist/chunk-JO3Y5H75.js +191 -0
  426. package/dist/chunk-JO3Y5H75.js.map +1 -0
  427. package/dist/chunk-JRODCEIG.js +194 -0
  428. package/dist/chunk-JWG2BTJ5.js +99 -0
  429. package/dist/chunk-JXTEE5G6.js +305 -0
  430. package/dist/chunk-JXTEE5G6.js.map +1 -0
  431. package/dist/chunk-KBMKALKQ.js +158 -0
  432. package/dist/chunk-KCQGJPLO.js +109 -0
  433. package/dist/chunk-KDIPBEVE.js +146 -0
  434. package/dist/chunk-KJ3AXHKF.js +59 -0
  435. package/dist/chunk-KLPTOVIX.js +52 -0
  436. package/dist/chunk-KLPTOVIX.js.map +1 -0
  437. package/dist/chunk-L4UP5VYS.js +273 -0
  438. package/dist/chunk-L4V2LRKH.js +161 -0
  439. package/dist/chunk-L7Q5BH4A.js +175 -0
  440. package/dist/chunk-L7SFH3ED.js +171 -0
  441. package/dist/chunk-L7SFH3ED.js.map +1 -0
  442. package/dist/chunk-LCVQOJKG.js +49 -0
  443. package/dist/chunk-LGZ4EIWV.js +62 -0
  444. package/dist/chunk-LKAVTJMC.js +148 -0
  445. package/dist/chunk-LKAVTJMC.js.map +1 -0
  446. package/dist/chunk-LKMMJKXU.js +60 -0
  447. package/dist/chunk-LKMMJKXU.js.map +1 -0
  448. package/dist/chunk-LN46DSMF.js +90 -0
  449. package/dist/chunk-LN46DSMF.js.map +1 -0
  450. package/dist/chunk-LVEG6XQL.js +182 -0
  451. package/dist/chunk-LVEG6XQL.js.map +1 -0
  452. package/dist/chunk-MAUZCOBB.js +268 -0
  453. package/dist/chunk-MH73XQHW.js +150 -0
  454. package/dist/chunk-MH73XQHW.js.map +1 -0
  455. package/dist/chunk-MISZGWO7.js +210 -0
  456. package/dist/chunk-MISZGWO7.js.map +1 -0
  457. package/dist/chunk-MWBHZZA4.js +148 -0
  458. package/dist/chunk-MYAEOSZK.js +175 -0
  459. package/dist/chunk-MZMGQKT3.js +203 -0
  460. package/dist/chunk-N3GAFIXG.js +93 -0
  461. package/dist/chunk-N3GAFIXG.js.map +1 -0
  462. package/dist/chunk-N6CSXHFJ.js +194 -0
  463. package/dist/chunk-NFZRZB5N.js +201 -0
  464. package/dist/chunk-NJHJZFX5.js +266 -0
  465. package/dist/chunk-NNESQ7QG.js +95 -0
  466. package/dist/chunk-NXX3ZQKO.js +149 -0
  467. package/dist/chunk-NXX3ZQKO.js.map +1 -0
  468. package/dist/chunk-O63WG6YJ.js +90 -0
  469. package/dist/chunk-OFU66DRT.js +87 -0
  470. package/dist/chunk-OFU66DRT.js.map +1 -0
  471. package/dist/chunk-OSSFOPB7.js +91 -0
  472. package/dist/chunk-OT5DVKXP.js +72 -0
  473. package/dist/chunk-OYYCANKB.js +247 -0
  474. package/dist/chunk-P2UIXDEG.js +136 -0
  475. package/dist/chunk-P2UIXDEG.js.map +1 -0
  476. package/dist/chunk-PAAFUJJL.js +300 -0
  477. package/dist/chunk-PAAFUJJL.js.map +1 -0
  478. package/dist/chunk-PC2MVKYW.js +176 -0
  479. package/dist/chunk-PEIAGNCH.js +291 -0
  480. package/dist/chunk-PEIAGNCH.js.map +1 -0
  481. package/dist/chunk-PGNJCUDA.js +201 -0
  482. package/dist/chunk-PGNJCUDA.js.map +1 -0
  483. package/dist/chunk-PKFH6C7W.js +136 -0
  484. package/dist/chunk-PYC4CWCQ.js +76 -0
  485. package/dist/chunk-PYC4CWCQ.js.map +1 -0
  486. package/dist/chunk-PYJI2YGJ.js +293 -0
  487. package/dist/chunk-PYJI2YGJ.js.map +1 -0
  488. package/dist/chunk-PYPFDRX4.js +88 -0
  489. package/dist/chunk-Q4BQYYPU.js +93 -0
  490. package/dist/chunk-Q4BQYYPU.js.map +1 -0
  491. package/dist/chunk-Q4KFGRBV.js +124 -0
  492. package/dist/chunk-QAP3FW33.js +240 -0
  493. package/dist/chunk-QG73YT6D.js +82 -0
  494. package/dist/chunk-QG73YT6D.js.map +1 -0
  495. package/dist/chunk-QJ7I5C4D.js +34 -0
  496. package/dist/chunk-QO6QWBDI.js +142 -0
  497. package/dist/chunk-QPNTUFV4.js +170 -0
  498. package/dist/chunk-QV5J4TE6.js +43 -0
  499. package/dist/chunk-QYUB2RFN.js +131 -0
  500. package/dist/chunk-REQAKZ64.js +240 -0
  501. package/dist/chunk-RMCNEKBZ.js +19 -0
  502. package/dist/chunk-RNIU447I.js +175 -0
  503. package/dist/chunk-RNIU447I.js.map +1 -0
  504. package/dist/chunk-RPBA4WH7.js +263 -0
  505. package/dist/chunk-RPBA4WH7.js.map +1 -0
  506. package/dist/chunk-RQCJJBPY.js +33 -0
  507. package/dist/chunk-RWTFZ7J5.js +225 -0
  508. package/dist/chunk-S52IVFMS.js +53 -0
  509. package/dist/chunk-SCQJV54H.js +246 -0
  510. package/dist/chunk-SNBCAH62.js +138 -0
  511. package/dist/chunk-SNTDLS4A.js +140 -0
  512. package/dist/chunk-SNTDLS4A.js.map +1 -0
  513. package/dist/chunk-SQV3HPTZ.js +249 -0
  514. package/dist/chunk-T3WHW7ZC.js +74 -0
  515. package/dist/chunk-T7LTL7OC.js +127 -0
  516. package/dist/chunk-TAB6AIPN.js +132 -0
  517. package/dist/chunk-TBF2CPJW.js +157 -0
  518. package/dist/chunk-TBF2CPJW.js.map +1 -0
  519. package/dist/chunk-TCAQOUIB.js +22 -0
  520. package/dist/chunk-TCAQOUIB.js.map +1 -0
  521. package/dist/chunk-TIQXDPIX.js +46 -0
  522. package/dist/chunk-TIQXDPIX.js.map +1 -0
  523. package/dist/chunk-TK4NUNN6.js +227 -0
  524. package/dist/chunk-TNDV33LP.js +165 -0
  525. package/dist/chunk-TOBPKY4V.js +183 -0
  526. package/dist/chunk-UBWYHYDR.js +98 -0
  527. package/dist/chunk-UBWYHYDR.js.map +1 -0
  528. package/dist/chunk-UCTJJYVC.js +120 -0
  529. package/dist/chunk-UFH3ZVVZ.js +182 -0
  530. package/dist/chunk-UFLTL2RJ.js +134 -0
  531. package/dist/chunk-UH27I2EJ.js +284 -0
  532. package/dist/chunk-UH27I2EJ.js.map +1 -0
  533. package/dist/chunk-UIKDWXHX.js +134 -0
  534. package/dist/chunk-UIKDWXHX.js.map +1 -0
  535. package/dist/chunk-UN5INW6K.js +86 -0
  536. package/dist/chunk-UUFHI7J5.js +41 -0
  537. package/dist/chunk-UXWU5NRC.js +34 -0
  538. package/dist/chunk-UYA2QMH6.js +144 -0
  539. package/dist/chunk-V26IDPL4.js +220 -0
  540. package/dist/chunk-V5KKBMAT.js +86 -0
  541. package/dist/chunk-V5KKBMAT.js.map +1 -0
  542. package/dist/chunk-V6FED3RS.js +196 -0
  543. package/dist/chunk-VMZ3JJGG.js +208 -0
  544. package/dist/chunk-VMZ3JJGG.js.map +1 -0
  545. package/dist/chunk-VNB7PFCP.js +180 -0
  546. package/dist/chunk-VNYP2RMN.js +38 -0
  547. package/dist/chunk-VU4BANG7.js +108 -0
  548. package/dist/chunk-WC3W36AM.js +73 -0
  549. package/dist/chunk-WGFIIS6Q.js +296 -0
  550. package/dist/chunk-WGFIIS6Q.js.map +1 -0
  551. package/dist/chunk-WPE5QYXD.js +28 -0
  552. package/dist/chunk-WPSGP3YG.js +49 -0
  553. package/dist/chunk-WVPA3ONO.js +125 -0
  554. package/dist/chunk-WXDJBSES.js +26 -0
  555. package/dist/chunk-WXTXCJ5V.js +97 -0
  556. package/dist/chunk-WYXNFH5Y.js +42 -0
  557. package/dist/chunk-WYXNFH5Y.js.map +1 -0
  558. package/dist/chunk-X4PS3E3V.js +40 -0
  559. package/dist/chunk-X4PS3E3V.js.map +1 -0
  560. package/dist/chunk-XEYLYUDM.js +147 -0
  561. package/dist/chunk-XNBN5CVF.js +145 -0
  562. package/dist/chunk-XOL2QCSP.js +273 -0
  563. package/dist/chunk-XYK3HXZY.js +68 -0
  564. package/dist/chunk-Y3HMIUH6.js +172 -0
  565. package/dist/chunk-Y5WNNEND.js +41 -0
  566. package/dist/chunk-YA4YH6WP.js +80 -0
  567. package/dist/chunk-YCGZSKCV.js +99 -0
  568. package/dist/chunk-YCGZSKCV.js.map +1 -0
  569. package/dist/chunk-YSFQHZ74.js +55 -0
  570. package/dist/chunk-YU72SS43.js +242 -0
  571. package/dist/chunk-YVDBOVHP.js +64 -0
  572. package/dist/chunk-Z2EOT77M.js +293 -0
  573. package/dist/chunk-Z2EOT77M.js.map +1 -0
  574. package/dist/chunk-ZF3JGIJD.js +155 -0
  575. package/dist/chunk-ZHFS5L6Q.js +291 -0
  576. package/dist/chunk-ZSLOXTYJ.js +62 -0
  577. package/dist/chunk-ZSRLRDTP.js +344 -0
  578. package/dist/chunk-ZSRLRDTP.js.map +1 -0
  579. package/dist/chunk-ZTYUKEN3.js +128 -0
  580. package/dist/chunk-ZTYUKEN3.js.map +1 -0
  581. package/dist/chunk-ZUQIOWLN.js +153 -0
  582. package/dist/chunk-ZUQIOWLN.js.map +1 -0
  583. package/dist/data-display/Alert.js +5 -3
  584. package/dist/data-display/AlertDialog.js +4 -1
  585. package/dist/data-display/AsyncStateContainer.js +10 -7
  586. package/dist/data-display/Avatar.js +5 -3
  587. package/dist/data-display/Badge.js +16 -6
  588. package/dist/data-display/Banner.js +5 -3
  589. package/dist/data-display/CardKit.js +27 -25
  590. package/dist/data-display/Carousel.js +8 -6
  591. package/dist/data-display/Chart.js +9 -7
  592. package/dist/data-display/Chip.js +5 -2
  593. package/dist/data-display/DataGrid.js +2 -2
  594. package/dist/data-display/DataViews.js +99 -97
  595. package/dist/data-display/EmptyState.js +3 -2
  596. package/dist/data-display/FleetMap.js +22 -20
  597. package/dist/data-display/HoverCard.js +6 -3
  598. package/dist/data-display/InteractiveTooltip.js +5 -2
  599. package/dist/data-display/LazyImage.js +7 -4
  600. package/dist/data-display/Lightbox.js +11 -8
  601. package/dist/data-display/LoadingState.js +7 -4
  602. package/dist/data-display/MapPreview.js +11 -9
  603. package/dist/data-display/Popover.js +4 -1
  604. package/dist/data-display/Progress.js +4 -2
  605. package/dist/data-display/SectionOnboarding.js +7 -4
  606. package/dist/data-display/Sheet.js +7 -5
  607. package/dist/data-display/StatCard.js +7 -4
  608. package/dist/data-display/Stepper.js +4 -1
  609. package/dist/data-display/Timeline.js +5 -2
  610. package/dist/data-display/TimingDiagram.js +5 -2
  611. package/dist/data-display/Tooltip.js +4 -1
  612. package/dist/feedback/ConfirmAction.js +12 -10
  613. package/dist/feedback/Dialog.js +6 -3
  614. package/dist/feedback/Modal.js +5 -2
  615. package/dist/feedback/NotificationStatusNotice.js +9 -7
  616. package/dist/feedback/Sonner.js +5 -2
  617. package/dist/feedback/StackedModal.js +6 -3
  618. package/dist/feedback/TutorialOverlay.js +5 -2
  619. package/dist/form/AddressAutocomplete.js +7 -7
  620. package/dist/form/Autocomplete.js +2 -2
  621. package/dist/form/Button.js +5 -3
  622. package/dist/form/Calendar.js +3 -3
  623. package/dist/form/CategorySelect.js +12 -10
  624. package/dist/form/CepField.js +6 -4
  625. package/dist/form/Checkbox.js +3 -2
  626. package/dist/form/CodeEditor.js +6 -4
  627. package/dist/form/Command.js +6 -4
  628. package/dist/form/DateRangePicker.js +10 -10
  629. package/dist/form/Input.js +5 -3
  630. package/dist/form/InputOTP.js +4 -2
  631. package/dist/form/Label.js +5 -3
  632. package/dist/form/Menubar.js +7 -5
  633. package/dist/form/PhoneInput.js +3 -3
  634. package/dist/form/RadioGroup.js +5 -3
  635. package/dist/form/RichTextEditor.js +2 -2
  636. package/dist/form/Select.js +5 -3
  637. package/dist/form/Slider.js +5 -2
  638. package/dist/form/Switch.js +7 -5
  639. package/dist/form/Textarea.js +4 -2
  640. package/dist/form/Toggle.js +4 -2
  641. package/dist/form/ToggleGroup.js +3 -1
  642. package/dist/form/total-form.js +31 -29
  643. package/dist/icons.js +6 -4
  644. package/dist/layout/Box.js +6 -4
  645. package/dist/layout/Card.js +6 -3
  646. package/dist/layout/ContentToolbar.js +3 -3
  647. package/dist/layout/Drawer.js +4 -1
  648. package/dist/layout/ScrollArea.js +7 -4
  649. package/dist/layout/SettingsLayout.js +6 -6
  650. package/dist/layout/Sidebar.js +4 -1
  651. package/dist/layout/Skeleton.js +6 -3
  652. package/dist/layout/Stack.js +7 -5
  653. package/dist/native/chunks/chunk-4ZAULIDG.js +339 -0
  654. package/dist/native/chunks/chunk-4ZAULIDG.js.map +1 -0
  655. package/dist/native/chunks/chunk-JBYDLWQA.js +295 -0
  656. package/dist/native/chunks/chunk-JBYDLWQA.js.map +1 -0
  657. package/dist/native/chunks/chunk-ONXKFA5Z.js +326 -0
  658. package/dist/native/chunks/chunk-ONXKFA5Z.js.map +1 -0
  659. package/dist/native/chunks/chunk-SZF56GVJ.js +218 -0
  660. package/dist/native/chunks/chunk-SZF56GVJ.js.map +1 -0
  661. package/dist/native/chunks/chunk-ZRQHLTYG.js +93 -0
  662. package/dist/native/chunks/chunk-ZRQHLTYG.js.map +1 -0
  663. package/dist/native/data-display/Alert.js +6 -3
  664. package/dist/native/data-display/Alert.js.map +1 -1
  665. package/dist/native/data-display/Avatar.js +7 -3
  666. package/dist/native/data-display/Avatar.js.map +1 -1
  667. package/dist/native/data-display/Badge.js +2 -8
  668. package/dist/native/data-display/Badge.js.map +1 -1
  669. package/dist/native/data-display/EmptyState.js +3 -2
  670. package/dist/native/data-display/ErrorState.js +2 -1
  671. package/dist/native/data-display/ErrorState.js.map +1 -1
  672. package/dist/native/data-display/FleetMap.js +4 -3
  673. package/dist/native/data-display/FleetMap.js.map +1 -1
  674. package/dist/native/feedback/Dialog.js +6 -3
  675. package/dist/native/feedback/Dialog.js.map +1 -1
  676. package/dist/native/form/Button.js +2 -1
  677. package/dist/native/form/Checkbox.js +4 -2
  678. package/dist/native/form/Checkbox.js.map +1 -1
  679. package/dist/native/form/Input.js +2 -1
  680. package/dist/native/form/Input.js.map +1 -1
  681. package/dist/native/form/Select.js +5 -2
  682. package/dist/native/form/Select.js.map +1 -1
  683. package/dist/native/form/Switch.js +15 -6
  684. package/dist/native/form/Switch.js.map +1 -1
  685. package/dist/native/layout/Card.js +8 -5
  686. package/dist/native/layout/Card.js.map +1 -1
  687. package/dist/native/layout/Skeleton.js +2 -1
  688. package/dist/native/tokens.js +30 -0
  689. package/dist/native/typography/Heading.js +4 -1
  690. package/dist/native/typography/Heading.js.map +1 -1
  691. package/dist/navigation/AppHeader.js +17 -15
  692. package/dist/navigation/Breadcrumbs.js +6 -3
  693. package/dist/navigation/CommandPalette.js +4 -1
  694. package/dist/navigation/ContextMenu.js +4 -1
  695. package/dist/navigation/DropdownMenu.js +4 -1
  696. package/dist/navigation/NavigationMenu.js +9 -6
  697. package/dist/navigation/Pagination.js +2 -2
  698. package/dist/navigation/Tabs.js +2 -2
  699. package/dist/provider.js +6 -4
  700. package/dist/social-login-button.js +12 -10
  701. package/dist/tokens.js +56 -2
  702. package/dist/types/components/data-display/Alert/Alert.d.ts.map +1 -1
  703. package/dist/types/components/data-display/Alert/Alert.metrics.d.ts.map +1 -1
  704. package/dist/types/components/data-display/Alert/Alert.styles.d.ts.map +1 -1
  705. package/dist/types/components/data-display/AlertDialog/AlertDialog.d.ts.map +1 -1
  706. package/dist/types/components/data-display/Avatar/Avatar.metrics.d.ts.map +1 -1
  707. package/dist/types/components/data-display/Avatar/Avatar.view.d.ts.map +1 -1
  708. package/dist/types/components/data-display/Badge/Badge.metrics.d.ts +1 -1
  709. package/dist/types/components/data-display/Badge/Badge.metrics.d.ts.map +1 -1
  710. package/dist/types/components/data-display/Badge/Badge.styles.d.ts.map +1 -1
  711. package/dist/types/components/data-display/Badge/Badge.variants.d.ts.map +1 -1
  712. package/dist/types/components/data-display/Banner/Banner.styles.d.ts.map +1 -1
  713. package/dist/types/components/data-display/Carousel/Carousel.parts.d.ts.map +1 -1
  714. package/dist/types/components/data-display/Carousel/Carousel.slide.d.ts.map +1 -1
  715. package/dist/types/components/data-display/Chart/Chart.d.ts.map +1 -1
  716. package/dist/types/components/data-display/Chart/chart-internals.d.ts.map +1 -1
  717. package/dist/types/components/data-display/Chart/chart-renderers.d.ts.map +1 -1
  718. package/dist/types/components/data-display/Chip/Chip.styles.d.ts.map +1 -1
  719. package/dist/types/components/data-display/DataViews/card-surface.d.ts.map +1 -1
  720. package/dist/types/components/data-display/EmptyState/EmptyState.metrics.d.ts +1 -1
  721. package/dist/types/components/data-display/EmptyState/EmptyState.metrics.d.ts.map +1 -1
  722. package/dist/types/components/data-display/HoverCard/HoverCard.styles.d.ts.map +1 -1
  723. package/dist/types/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.d.ts.map +1 -1
  724. package/dist/types/components/data-display/LazyImage/LazyImage.d.ts.map +1 -1
  725. package/dist/types/components/data-display/Lightbox/Lightbox.constants.d.ts +13 -12
  726. package/dist/types/components/data-display/Lightbox/Lightbox.constants.d.ts.map +1 -1
  727. package/dist/types/components/data-display/Lightbox/Lightbox.d.ts.map +1 -1
  728. package/dist/types/components/data-display/Lightbox/LightboxStage.d.ts.map +1 -1
  729. package/dist/types/components/data-display/Lightbox/LightboxThumbnails.d.ts.map +1 -1
  730. package/dist/types/components/data-display/MapPreview/MapDecorations.d.ts.map +1 -1
  731. package/dist/types/components/data-display/MapPreview/MapMarkers.d.ts.map +1 -1
  732. package/dist/types/components/data-display/MapPreview/mapSurface.d.ts.map +1 -1
  733. package/dist/types/components/data-display/Popover/Popover.d.ts.map +1 -1
  734. package/dist/types/components/data-display/Progress/Progress.styles.d.ts.map +1 -1
  735. package/dist/types/components/data-display/Sheet/Sheet.parts.d.ts.map +1 -1
  736. package/dist/types/components/data-display/Sheet/Sheet.styles.d.ts.map +1 -1
  737. package/dist/types/components/data-display/Stepper/Stepper.d.ts.map +1 -1
  738. package/dist/types/components/data-display/Timeline/TimelineRow.d.ts.map +1 -1
  739. package/dist/types/components/data-display/TimingDiagram/TimingDiagram.views.d.ts +3 -8
  740. package/dist/types/components/data-display/TimingDiagram/TimingDiagram.views.d.ts.map +1 -1
  741. package/dist/types/components/data-display/Tooltip/Tooltip.d.ts.map +1 -1
  742. package/dist/types/components/feedback/Dialog/Dialog.metrics.d.ts.map +1 -1
  743. package/dist/types/components/feedback/Dialog/Dialog.styles.d.ts.map +1 -1
  744. package/dist/types/components/feedback/Modal/Modal.styles.d.ts.map +1 -1
  745. package/dist/types/components/feedback/Sonner/SonnerToast.d.ts.map +1 -1
  746. package/dist/types/components/feedback/StackedModal/StackedModal.styles.d.ts.map +1 -1
  747. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
  748. package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
  749. package/dist/types/components/form/Button/Button.metrics.d.ts.map +1 -1
  750. package/dist/types/components/form/Button/Button.styles.d.ts.map +1 -1
  751. package/dist/types/components/form/CategorySelect/CategoryPanelHead.d.ts.map +1 -1
  752. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts +2 -2
  753. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts.map +1 -1
  754. package/dist/types/components/form/Checkbox/Checkbox.metrics.d.ts +1 -6
  755. package/dist/types/components/form/Checkbox/Checkbox.metrics.d.ts.map +1 -1
  756. package/dist/types/components/form/CodeEditor/CodeEditor.monaco.d.ts +2 -1
  757. package/dist/types/components/form/CodeEditor/CodeEditor.monaco.d.ts.map +1 -1
  758. package/dist/types/components/form/Input/Input.metrics.d.ts +2 -2
  759. package/dist/types/components/form/Input/Input.metrics.d.ts.map +1 -1
  760. package/dist/types/components/form/Input/Input.styles.d.ts.map +1 -1
  761. package/dist/types/components/form/InputOTP/InputOTP.styles.d.ts.map +1 -1
  762. package/dist/types/components/form/RadioGroup/RadioGroup.styles.d.ts.map +1 -1
  763. package/dist/types/components/form/Select/Select.d.ts.map +1 -1
  764. package/dist/types/components/form/Select/Select.metrics.d.ts +1 -1
  765. package/dist/types/components/form/Select/Select.metrics.d.ts.map +1 -1
  766. package/dist/types/components/form/Slider/Slider.styles.d.ts.map +1 -1
  767. package/dist/types/components/form/Switch/Switch.metrics.d.ts +3 -3
  768. package/dist/types/components/form/Switch/Switch.metrics.d.ts.map +1 -1
  769. package/dist/types/components/form/Switch/Switch.styles.d.ts.map +1 -1
  770. package/dist/types/components/form/Textarea/Textarea.styles.d.ts.map +1 -1
  771. package/dist/types/components/form/Toggle/Toggle.styles.d.ts +1 -1
  772. package/dist/types/components/form/Toggle/Toggle.styles.d.ts.map +1 -1
  773. package/dist/types/components/form/ToggleGroup/ToggleGroup.d.ts.map +1 -1
  774. package/dist/types/components/layout/Card/Card.metrics.d.ts +6 -5
  775. package/dist/types/components/layout/Card/Card.metrics.d.ts.map +1 -1
  776. package/dist/types/components/layout/Card/Card.styles.d.ts.map +1 -1
  777. package/dist/types/components/layout/Drawer/Drawer.d.ts.map +1 -1
  778. package/dist/types/components/layout/ScrollArea/ScrollArea.styles.d.ts.map +1 -1
  779. package/dist/types/components/layout/Sidebar/Sidebar.d.ts.map +1 -1
  780. package/dist/types/components/layout/Skeleton/Skeleton.metrics.d.ts +4 -3
  781. package/dist/types/components/layout/Skeleton/Skeleton.metrics.d.ts.map +1 -1
  782. package/dist/types/components/layout/Skeleton/Skeleton.styles.d.ts.map +1 -1
  783. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEntry.d.ts.map +1 -1
  784. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.styles.d.ts.map +1 -1
  785. package/dist/types/components/navigation/CommandPalette/CommandPalette.d.ts.map +1 -1
  786. package/dist/types/components/navigation/ContextMenu/ContextMenu.d.ts.map +1 -1
  787. package/dist/types/components/navigation/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  788. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts.map +1 -1
  789. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.styles.d.ts.map +1 -1
  790. package/dist/types/components/navigation/NavigationMenu/NavigationMenuItem.d.ts.map +1 -1
  791. package/dist/types/components/typography/Blockquote/Blockquote.d.ts.map +1 -1
  792. package/dist/types/components/typography/Code/Code.d.ts.map +1 -1
  793. package/dist/types/components/typography/Heading/Heading.metrics.d.ts.map +1 -1
  794. package/dist/types/components/typography/Heading/Heading.styles.d.ts.map +1 -1
  795. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.styles.d.ts.map +1 -1
  796. package/dist/types/components/utility/WorkflowStep/WorkflowStep.helpers.d.ts.map +1 -1
  797. package/dist/types/components/utility/WorkflowStep/WorkflowStep.parts.d.ts.map +1 -1
  798. package/dist/types/social-login-button/social-login-button.d.ts.map +1 -1
  799. package/dist/types/tokens/ink.core.d.ts +145 -0
  800. package/dist/types/tokens/ink.core.d.ts.map +1 -0
  801. package/dist/types/tokens/ink.d.ts +130 -0
  802. package/dist/types/tokens/ink.d.ts.map +1 -0
  803. package/dist/types/tokens/scales.d.ts +2 -0
  804. package/dist/types/tokens/scales.d.ts.map +1 -1
  805. package/dist/types-native/components/data-display/Alert/Alert.metrics.d.ts.map +1 -1
  806. package/dist/types-native/components/data-display/Avatar/Avatar.metrics.d.ts.map +1 -1
  807. package/dist/types-native/components/data-display/Badge/Badge.metrics.d.ts +1 -1
  808. package/dist/types-native/components/data-display/Badge/Badge.metrics.d.ts.map +1 -1
  809. package/dist/types-native/components/data-display/EmptyState/EmptyState.metrics.d.ts +1 -1
  810. package/dist/types-native/components/data-display/EmptyState/EmptyState.metrics.d.ts.map +1 -1
  811. package/dist/types-native/components/feedback/Dialog/Dialog.metrics.d.ts.map +1 -1
  812. package/dist/types-native/components/form/Button/Button.metrics.d.ts.map +1 -1
  813. package/dist/types-native/components/form/Checkbox/Checkbox.metrics.d.ts +1 -6
  814. package/dist/types-native/components/form/Checkbox/Checkbox.metrics.d.ts.map +1 -1
  815. package/dist/types-native/components/form/Input/Input.metrics.d.ts +2 -2
  816. package/dist/types-native/components/form/Input/Input.metrics.d.ts.map +1 -1
  817. package/dist/types-native/components/form/Select/Select.metrics.d.ts +1 -1
  818. package/dist/types-native/components/form/Select/Select.metrics.d.ts.map +1 -1
  819. package/dist/types-native/components/form/Switch/Switch.metrics.d.ts +3 -3
  820. package/dist/types-native/components/form/Switch/Switch.metrics.d.ts.map +1 -1
  821. package/dist/types-native/components/layout/Card/Card.metrics.d.ts +6 -5
  822. package/dist/types-native/components/layout/Card/Card.metrics.d.ts.map +1 -1
  823. package/dist/types-native/components/layout/Skeleton/Skeleton.metrics.d.ts +4 -3
  824. package/dist/types-native/components/layout/Skeleton/Skeleton.metrics.d.ts.map +1 -1
  825. package/dist/types-native/components/typography/Heading/Heading.metrics.d.ts.map +1 -1
  826. package/dist/types-native/tokens/index.native.d.ts +1 -0
  827. package/dist/types-native/tokens/index.native.d.ts.map +1 -1
  828. package/dist/types-native/tokens/ink.core.d.ts +145 -0
  829. package/dist/types-native/tokens/ink.core.d.ts.map +1 -0
  830. package/dist/typography/Blockquote.js +4 -1
  831. package/dist/typography/Code.js +4 -1
  832. package/dist/typography/Heading.js +5 -3
  833. package/dist/user-avatar.js +12 -10
  834. package/dist/utility/AnimatedIcon.js +5 -2
  835. package/dist/utility/WorkflowStep.js +7 -4
  836. package/package.json +1 -1
  837. package/src/components/data-display/Alert/Alert.metrics.ts +4 -3
  838. package/src/components/data-display/Alert/Alert.styles.tsx +5 -7
  839. package/src/components/data-display/Alert/Alert.tsx +3 -1
  840. package/src/components/data-display/AlertDialog/AlertDialog.tsx +3 -1
  841. package/src/components/data-display/Avatar/Avatar.metrics.ts +4 -3
  842. package/src/components/data-display/Avatar/Avatar.view.tsx +5 -3
  843. package/src/components/data-display/Badge/Badge.metrics.ts +3 -7
  844. package/src/components/data-display/Badge/Badge.styles.ts +4 -6
  845. package/src/components/data-display/Badge/Badge.variants.ts +5 -4
  846. package/src/components/data-display/Banner/Banner.styles.ts +2 -1
  847. package/src/components/data-display/Carousel/Carousel.parts.tsx +2 -1
  848. package/src/components/data-display/Carousel/Carousel.slide.tsx +9 -8
  849. package/src/components/data-display/Chart/Chart.tsx +4 -3
  850. package/src/components/data-display/Chart/chart-internals.ts +11 -9
  851. package/src/components/data-display/Chart/chart-renderers.tsx +2 -1
  852. package/src/components/data-display/Chip/Chip.styles.tsx +7 -5
  853. package/src/components/data-display/DataViews/card-surface.ts +2 -1
  854. package/src/components/data-display/EmptyState/EmptyState.metrics.ts +2 -2
  855. package/src/components/data-display/HoverCard/HoverCard.styles.ts +2 -1
  856. package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.styles.ts +17 -15
  857. package/src/components/data-display/LazyImage/LazyImage.tsx +2 -1
  858. package/src/components/data-display/Lightbox/Lightbox.constants.ts +11 -7
  859. package/src/components/data-display/Lightbox/Lightbox.tsx +3 -1
  860. package/src/components/data-display/Lightbox/LightboxStage.tsx +2 -1
  861. package/src/components/data-display/Lightbox/LightboxThumbnails.tsx +6 -4
  862. package/src/components/data-display/MapPreview/MapDecorations.tsx +2 -1
  863. package/src/components/data-display/MapPreview/MapMarkers.tsx +2 -1
  864. package/src/components/data-display/MapPreview/mapSurface.ts +14 -13
  865. package/src/components/data-display/Popover/Popover.tsx +2 -1
  866. package/src/components/data-display/Progress/Progress.styles.ts +2 -6
  867. package/src/components/data-display/Sheet/Sheet.parts.tsx +3 -2
  868. package/src/components/data-display/Sheet/Sheet.styles.ts +6 -5
  869. package/src/components/data-display/Stepper/Stepper.tsx +5 -4
  870. package/src/components/data-display/Timeline/TimelineRow.tsx +5 -4
  871. package/src/components/data-display/TimingDiagram/TimingDiagram.tsx +1 -1
  872. package/src/components/data-display/TimingDiagram/TimingDiagram.views.tsx +55 -46
  873. package/src/components/data-display/Tooltip/Tooltip.tsx +9 -8
  874. package/src/components/feedback/Dialog/Dialog.metrics.ts +5 -3
  875. package/src/components/feedback/Dialog/Dialog.styles.ts +3 -5
  876. package/src/components/feedback/Modal/Modal.styles.ts +4 -2
  877. package/src/components/feedback/Sonner/SonnerToast.tsx +3 -1
  878. package/src/components/feedback/StackedModal/StackedModal.styles.ts +8 -6
  879. package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +12 -9
  880. package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +10 -5
  881. package/src/components/form/Button/Button.metrics.ts +5 -4
  882. package/src/components/form/Button/Button.styles.ts +5 -9
  883. package/src/components/form/CategorySelect/CategoryPanelHead.tsx +3 -2
  884. package/src/components/form/CategorySelect/CategorySelect.styles.ts +8 -7
  885. package/src/components/form/Checkbox/Checkbox.metrics.ts +5 -4
  886. package/src/components/form/CodeEditor/CodeEditor.hooks.ts +1 -1
  887. package/src/components/form/CodeEditor/CodeEditor.monaco.ts +25 -23
  888. package/src/components/form/Input/Input.metrics.ts +4 -3
  889. package/src/components/form/Input/Input.styles.ts +2 -1
  890. package/src/components/form/InputOTP/InputOTP.styles.ts +3 -7
  891. package/src/components/form/RadioGroup/RadioGroup.styles.ts +6 -14
  892. package/src/components/form/Select/Select.metrics.ts +2 -2
  893. package/src/components/form/Select/Select.tsx +2 -1
  894. package/src/components/form/Slider/Slider.styles.ts +8 -11
  895. package/src/components/form/Switch/Switch.metrics.ts +11 -6
  896. package/src/components/form/Switch/Switch.styles.ts +5 -11
  897. package/src/components/form/Textarea/Textarea.styles.ts +4 -13
  898. package/src/components/form/Toggle/Toggle.styles.ts +7 -10
  899. package/src/components/form/Toggle/Toggle.tsx +1 -1
  900. package/src/components/form/ToggleGroup/ToggleGroup.tsx +3 -6
  901. package/src/components/layout/Card/Card.metrics.ts +9 -6
  902. package/src/components/layout/Card/Card.styles.ts +7 -6
  903. package/src/components/layout/Drawer/Drawer.tsx +2 -1
  904. package/src/components/layout/ScrollArea/ScrollArea.styles.ts +6 -5
  905. package/src/components/layout/Sidebar/Sidebar.tsx +2 -1
  906. package/src/components/layout/Skeleton/Skeleton.metrics.ts +5 -3
  907. package/src/components/layout/Skeleton/Skeleton.styles.ts +4 -3
  908. package/src/components/navigation/Breadcrumbs/BreadcrumbEntry.tsx +3 -2
  909. package/src/components/navigation/Breadcrumbs/Breadcrumbs.styles.tsx +13 -12
  910. package/src/components/navigation/CommandPalette/CommandPalette.tsx +3 -2
  911. package/src/components/navigation/ContextMenu/ContextMenu.tsx +7 -6
  912. package/src/components/navigation/DropdownMenu/DropdownMenu.tsx +6 -5
  913. package/src/components/navigation/NavigationMenu/NavigationMenu.shell.tsx +6 -5
  914. package/src/components/navigation/NavigationMenu/NavigationMenu.styles.ts +5 -3
  915. package/src/components/navigation/NavigationMenu/NavigationMenuItem.tsx +7 -5
  916. package/src/components/typography/Blockquote/Blockquote.tsx +6 -8
  917. package/src/components/typography/Code/Code.tsx +5 -4
  918. package/src/components/typography/Heading/Heading.metrics.ts +2 -1
  919. package/src/components/typography/Heading/Heading.styles.ts +4 -7
  920. package/src/components/utility/AnimatedIcon/AnimatedIcon.styles.ts +13 -12
  921. package/src/components/utility/WorkflowStep/WorkflowStep.helpers.ts +6 -4
  922. package/src/components/utility/WorkflowStep/WorkflowStep.parts.tsx +3 -2
  923. package/src/social-login-button/social-login-button.tsx +53 -40
  924. package/src/tokens/index.native.ts +2 -0
  925. package/src/tokens/ink.core.ts +128 -0
  926. package/src/tokens/ink.ts +170 -0
  927. package/src/tokens/scales.ts +3 -0
  928. package/dist/chunk-25R3ITGZ.js +0 -203
  929. package/dist/chunk-2SKNSQCP.js +0 -83
  930. package/dist/chunk-3CGLGOLO.js +0 -97
  931. package/dist/chunk-3EYRRVNT.js +0 -64
  932. package/dist/chunk-3IYB3XY2.js +0 -51
  933. package/dist/chunk-3P4THDBM.js +0 -26
  934. package/dist/chunk-3QNSTLGC.js +0 -138
  935. package/dist/chunk-3SJZP7KH.js +0 -264
  936. package/dist/chunk-3T2I6BYA.js +0 -46
  937. package/dist/chunk-3W2IS5RH.js +0 -139
  938. package/dist/chunk-3W2IS5RH.js.map +0 -1
  939. package/dist/chunk-4BEQADWC.js +0 -99
  940. package/dist/chunk-4IVOHL32.js +0 -203
  941. package/dist/chunk-4LMY5I5E.js +0 -85
  942. package/dist/chunk-4MGFUPQT.js +0 -73
  943. package/dist/chunk-4PIKOJZ4.js +0 -295
  944. package/dist/chunk-4PIKOJZ4.js.map +0 -1
  945. package/dist/chunk-4V7FNB7R.js +0 -108
  946. package/dist/chunk-4Y65XEGO.js +0 -147
  947. package/dist/chunk-4Y65XEGO.js.map +0 -1
  948. package/dist/chunk-4YMIQ5DM.js +0 -62
  949. package/dist/chunk-56MKBXSH.js +0 -107
  950. package/dist/chunk-56MKBXSH.js.map +0 -1
  951. package/dist/chunk-56SJYTIT.js +0 -55
  952. package/dist/chunk-56SJYTIT.js.map +0 -1
  953. package/dist/chunk-57C636A6.js +0 -79
  954. package/dist/chunk-5BW7NCM5.js +0 -77
  955. package/dist/chunk-5FA5S2YN.js +0 -125
  956. package/dist/chunk-5QFEHSTR.js +0 -227
  957. package/dist/chunk-5RHMLOIA.js +0 -200
  958. package/dist/chunk-5RHMLOIA.js.map +0 -1
  959. package/dist/chunk-5SCZZFZR.js +0 -60
  960. package/dist/chunk-5UWSDTZV.js +0 -176
  961. package/dist/chunk-5UWSDTZV.js.map +0 -1
  962. package/dist/chunk-5ZNU2U4D.js +0 -41
  963. package/dist/chunk-5ZNU2U4D.js.map +0 -1
  964. package/dist/chunk-62NFZR52.js +0 -225
  965. package/dist/chunk-65JHGT5F.js +0 -39
  966. package/dist/chunk-67N6TH6E.js +0 -83
  967. package/dist/chunk-6AN23E37.js +0 -268
  968. package/dist/chunk-6ANWFGLL.js +0 -183
  969. package/dist/chunk-6I4BQRZ7.js +0 -196
  970. package/dist/chunk-6I4BQRZ7.js.map +0 -1
  971. package/dist/chunk-6M7CMILP.js +0 -34
  972. package/dist/chunk-6MDBMCFK.js +0 -127
  973. package/dist/chunk-6Q6T3FW5.js +0 -92
  974. package/dist/chunk-6Q6T3FW5.js.map +0 -1
  975. package/dist/chunk-6V7D6GRX.js +0 -182
  976. package/dist/chunk-6YLAVHV4.js +0 -240
  977. package/dist/chunk-6YZLWM3K.js +0 -143
  978. package/dist/chunk-6YZLWM3K.js.map +0 -1
  979. package/dist/chunk-7A3G4W52.js +0 -64
  980. package/dist/chunk-7FOOLP5H.js +0 -304
  981. package/dist/chunk-7FOOLP5H.js.map +0 -1
  982. package/dist/chunk-7FWXG2KF.js +0 -165
  983. package/dist/chunk-7N4V3ARN.js +0 -53
  984. package/dist/chunk-7TSQNYQO.js +0 -134
  985. package/dist/chunk-7VN7LFBA.js +0 -80
  986. package/dist/chunk-7WP2HRTW.js +0 -220
  987. package/dist/chunk-7WP2HRTW.js.map +0 -1
  988. package/dist/chunk-AIRWM7KK.js +0 -194
  989. package/dist/chunk-AJVYJZHI.js +0 -38
  990. package/dist/chunk-AJXTVRQF.js +0 -90
  991. package/dist/chunk-ANNDLY3M.js +0 -156
  992. package/dist/chunk-AZ4LLAAJ.js +0 -297
  993. package/dist/chunk-B64PPHUR.js +0 -137
  994. package/dist/chunk-B64PPHUR.js.map +0 -1
  995. package/dist/chunk-B6IURHSZ.js +0 -215
  996. package/dist/chunk-B6IURHSZ.js.map +0 -1
  997. package/dist/chunk-BEBLRL5D.js +0 -177
  998. package/dist/chunk-BEBLRL5D.js.map +0 -1
  999. package/dist/chunk-BM4CGQED.js +0 -193
  1000. package/dist/chunk-BM4ZPBBT.js +0 -88
  1001. package/dist/chunk-BRMGHMYB.js +0 -45
  1002. package/dist/chunk-BRMGHMYB.js.map +0 -1
  1003. package/dist/chunk-BTIBFR5L.js +0 -240
  1004. package/dist/chunk-BWB2MVWP.js +0 -301
  1005. package/dist/chunk-BWB2MVWP.js.map +0 -1
  1006. package/dist/chunk-C423YJGN.js +0 -116
  1007. package/dist/chunk-C53C7C2X.js +0 -74
  1008. package/dist/chunk-CDNJOA3N.js +0 -264
  1009. package/dist/chunk-CDNJOA3N.js.map +0 -1
  1010. package/dist/chunk-CJL5D2IT.js +0 -280
  1011. package/dist/chunk-CJL5D2IT.js.map +0 -1
  1012. package/dist/chunk-CMN26J5Y.js +0 -219
  1013. package/dist/chunk-CMTFAYDY.js +0 -90
  1014. package/dist/chunk-CMTFAYDY.js.map +0 -1
  1015. package/dist/chunk-CPNSVIIB.js +0 -103
  1016. package/dist/chunk-CR4KC2K5.js +0 -180
  1017. package/dist/chunk-CR5YQ3SR.js +0 -111
  1018. package/dist/chunk-CR5YQ3SR.js.map +0 -1
  1019. package/dist/chunk-CSWNPIQD.js +0 -107
  1020. package/dist/chunk-CZ5ZL63A.js +0 -247
  1021. package/dist/chunk-CZJLWCEG.js +0 -86
  1022. package/dist/chunk-DBS74X2C.js +0 -193
  1023. package/dist/chunk-DBS74X2C.js.map +0 -1
  1024. package/dist/chunk-DIWC6AQL.js +0 -173
  1025. package/dist/chunk-DO3UNZAU.js +0 -269
  1026. package/dist/chunk-DO3UNZAU.js.map +0 -1
  1027. package/dist/chunk-DRADVLHZ.js +0 -34
  1028. package/dist/chunk-DRADVLHZ.js.map +0 -1
  1029. package/dist/chunk-E46PG577.js +0 -78
  1030. package/dist/chunk-E46PG577.js.map +0 -1
  1031. package/dist/chunk-EDJDASXE.js +0 -109
  1032. package/dist/chunk-EE44OC4M.js +0 -131
  1033. package/dist/chunk-EEAQBPOW.js +0 -59
  1034. package/dist/chunk-EPNUVSNK.js +0 -161
  1035. package/dist/chunk-EUHVBR3J.js +0 -96
  1036. package/dist/chunk-EUHVBR3J.js.map +0 -1
  1037. package/dist/chunk-FA3TYWX2.js +0 -118
  1038. package/dist/chunk-FAITHWIO.js +0 -73
  1039. package/dist/chunk-FAITHWIO.js.map +0 -1
  1040. package/dist/chunk-FAQO245K.js +0 -121
  1041. package/dist/chunk-FAQO245K.js.map +0 -1
  1042. package/dist/chunk-FATRMNVN.js +0 -194
  1043. package/dist/chunk-FGKKLHKY.js +0 -146
  1044. package/dist/chunk-FGKKLHKY.js.map +0 -1
  1045. package/dist/chunk-FHA4G5XF.js +0 -165
  1046. package/dist/chunk-FPWB5ILF.js +0 -79
  1047. package/dist/chunk-FRW4SYZD.js +0 -79
  1048. package/dist/chunk-FRW4SYZD.js.map +0 -1
  1049. package/dist/chunk-FTCCYWF4.js +0 -242
  1050. package/dist/chunk-FYFIND6O.js +0 -227
  1051. package/dist/chunk-FYLCSCMR.js +0 -166
  1052. package/dist/chunk-FYLCSCMR.js.map +0 -1
  1053. package/dist/chunk-G3KSCJS7.js +0 -181
  1054. package/dist/chunk-G73SDZ3T.js +0 -41
  1055. package/dist/chunk-G76H5PEM.js +0 -249
  1056. package/dist/chunk-GCWF5AQE.js +0 -58
  1057. package/dist/chunk-GGNHZ4GA.js +0 -174
  1058. package/dist/chunk-GGNHZ4GA.js.map +0 -1
  1059. package/dist/chunk-GJKBWVU2.js +0 -63
  1060. package/dist/chunk-GT7C6TSM.js +0 -170
  1061. package/dist/chunk-GXEB6MJA.js +0 -57
  1062. package/dist/chunk-GXEB6MJA.js.map +0 -1
  1063. package/dist/chunk-GY6KNVMI.js +0 -39
  1064. package/dist/chunk-GY6KNVMI.js.map +0 -1
  1065. package/dist/chunk-HJOABXKN.js +0 -43
  1066. package/dist/chunk-IDHZHOZW.js +0 -285
  1067. package/dist/chunk-IDHZHOZW.js.map +0 -1
  1068. package/dist/chunk-IE7ISTLQ.js +0 -167
  1069. package/dist/chunk-IFAEKIT2.js +0 -273
  1070. package/dist/chunk-IGO5DC7D.js +0 -159
  1071. package/dist/chunk-IM76SSXI.js +0 -173
  1072. package/dist/chunk-IOEF32HX.js +0 -88
  1073. package/dist/chunk-IRLUM7XB.js +0 -81
  1074. package/dist/chunk-ISW5K72V.js +0 -230
  1075. package/dist/chunk-IZBDSPTW.js +0 -49
  1076. package/dist/chunk-J6CSPDC7.js +0 -75
  1077. package/dist/chunk-JB67KPGM.js +0 -64
  1078. package/dist/chunk-JBMBFYFA.js +0 -94
  1079. package/dist/chunk-JDY37EML.js +0 -246
  1080. package/dist/chunk-JN3PGXRJ.js +0 -225
  1081. package/dist/chunk-JO5GSRYQ.js +0 -49
  1082. package/dist/chunk-JPXG7IFW.js +0 -34
  1083. package/dist/chunk-JRHZZTVV.js +0 -241
  1084. package/dist/chunk-JXNT5TUP.js +0 -142
  1085. package/dist/chunk-JYETSTOQ.js +0 -82
  1086. package/dist/chunk-JYETSTOQ.js.map +0 -1
  1087. package/dist/chunk-JZJOAGBG.js +0 -183
  1088. package/dist/chunk-K6FCXPTS.js +0 -86
  1089. package/dist/chunk-K6FCXPTS.js.map +0 -1
  1090. package/dist/chunk-K7BBMXY7.js +0 -197
  1091. package/dist/chunk-K7BBMXY7.js.map +0 -1
  1092. package/dist/chunk-KAPKMVKR.js +0 -41
  1093. package/dist/chunk-KCBAPMLH.js +0 -147
  1094. package/dist/chunk-KJHQYPKT.js +0 -73
  1095. package/dist/chunk-KMUSTQA6.js +0 -148
  1096. package/dist/chunk-KSLNO5NG.js +0 -150
  1097. package/dist/chunk-KSLNO5NG.js.map +0 -1
  1098. package/dist/chunk-L4D6YLLU.js +0 -118
  1099. package/dist/chunk-L4D6YLLU.js.map +0 -1
  1100. package/dist/chunk-LB2G6SD6.js +0 -275
  1101. package/dist/chunk-LB2G6SD6.js.map +0 -1
  1102. package/dist/chunk-LE7IHEU4.js +0 -41
  1103. package/dist/chunk-LGLHU55A.js +0 -340
  1104. package/dist/chunk-LGLHU55A.js.map +0 -1
  1105. package/dist/chunk-LLR42S6B.js +0 -223
  1106. package/dist/chunk-LNOYDMFD.js +0 -184
  1107. package/dist/chunk-LOLOFY4O.js +0 -172
  1108. package/dist/chunk-LTEXWGK6.js +0 -176
  1109. package/dist/chunk-LUMF63BM.js +0 -274
  1110. package/dist/chunk-LUMF63BM.js.map +0 -1
  1111. package/dist/chunk-LWLVWM34.js +0 -28
  1112. package/dist/chunk-LYSSO6WC.js +0 -132
  1113. package/dist/chunk-LZHXF66R.js +0 -127
  1114. package/dist/chunk-MDR4WJOV.js +0 -115
  1115. package/dist/chunk-MDR4WJOV.js.map +0 -1
  1116. package/dist/chunk-MG73KW54.js +0 -266
  1117. package/dist/chunk-MQZDTGGJ.js +0 -153
  1118. package/dist/chunk-MQZDTGGJ.js.map +0 -1
  1119. package/dist/chunk-MYYGXSXF.js +0 -177
  1120. package/dist/chunk-MYYGXSXF.js.map +0 -1
  1121. package/dist/chunk-N74IYYRU.js +0 -183
  1122. package/dist/chunk-NARIG5FL.js +0 -98
  1123. package/dist/chunk-NARIG5FL.js.map +0 -1
  1124. package/dist/chunk-NFGVP3HN.js +0 -88
  1125. package/dist/chunk-NFGVP3HN.js.map +0 -1
  1126. package/dist/chunk-NKIAP6ZL.js +0 -173
  1127. package/dist/chunk-NM3E27GK.js +0 -292
  1128. package/dist/chunk-NM3E27GK.js.map +0 -1
  1129. package/dist/chunk-NNAACCN2.js +0 -19
  1130. package/dist/chunk-NU3EQX2L.js +0 -144
  1131. package/dist/chunk-O4PKQ46C.js +0 -273
  1132. package/dist/chunk-OFVYNUYV.js +0 -25
  1133. package/dist/chunk-OGPOTZAU.js +0 -232
  1134. package/dist/chunk-OGPOTZAU.js.map +0 -1
  1135. package/dist/chunk-OZZNC4YU.js +0 -100
  1136. package/dist/chunk-OZZNC4YU.js.map +0 -1
  1137. package/dist/chunk-P3L42CBB.js +0 -121
  1138. package/dist/chunk-P7GH32WG.js +0 -124
  1139. package/dist/chunk-P7GH32WG.js.map +0 -1
  1140. package/dist/chunk-PEWNWKDI.js +0 -91
  1141. package/dist/chunk-PEWNWKDI.js.map +0 -1
  1142. package/dist/chunk-PH5XJGKJ.js +0 -91
  1143. package/dist/chunk-PI5G6N6Q.js +0 -157
  1144. package/dist/chunk-PJ7NKK33.js +0 -124
  1145. package/dist/chunk-PLEZDLVU.js +0 -30
  1146. package/dist/chunk-PPTF5X7K.js +0 -305
  1147. package/dist/chunk-PTP3CZL4.js +0 -133
  1148. package/dist/chunk-PTP3CZL4.js.map +0 -1
  1149. package/dist/chunk-Q444G5X7.js +0 -192
  1150. package/dist/chunk-Q444G5X7.js.map +0 -1
  1151. package/dist/chunk-Q725MACF.js +0 -78
  1152. package/dist/chunk-Q725MACF.js.map +0 -1
  1153. package/dist/chunk-QNHNFU7G.js +0 -134
  1154. package/dist/chunk-QQS3GQYS.js +0 -107
  1155. package/dist/chunk-QRUCR4YZ.js +0 -217
  1156. package/dist/chunk-QRUCR4YZ.js.map +0 -1
  1157. package/dist/chunk-QTZ7I6QS.js +0 -137
  1158. package/dist/chunk-QTZ7I6QS.js.map +0 -1
  1159. package/dist/chunk-QWCMLOYC.js +0 -21
  1160. package/dist/chunk-QYNCPS5W.js +0 -62
  1161. package/dist/chunk-R2G4MVPY.js +0 -61
  1162. package/dist/chunk-R67J6JKT.js +0 -127
  1163. package/dist/chunk-RAWQMBX6.js +0 -77
  1164. package/dist/chunk-RAWQMBX6.js.map +0 -1
  1165. package/dist/chunk-RGCRXDGZ.js +0 -169
  1166. package/dist/chunk-RGCRXDGZ.js.map +0 -1
  1167. package/dist/chunk-RGKGBYT2.js +0 -289
  1168. package/dist/chunk-RGKGBYT2.js.map +0 -1
  1169. package/dist/chunk-RGMSTQ2J.js +0 -57
  1170. package/dist/chunk-RJXRZW66.js +0 -95
  1171. package/dist/chunk-RKCS6K36.js +0 -48
  1172. package/dist/chunk-RKCS6K36.js.map +0 -1
  1173. package/dist/chunk-RPMAWM6F.js +0 -82
  1174. package/dist/chunk-RRX6ZTNX.js +0 -59
  1175. package/dist/chunk-SBS7H6WY.js +0 -181
  1176. package/dist/chunk-SBS7H6WY.js.map +0 -1
  1177. package/dist/chunk-SGGDMTKP.js +0 -347
  1178. package/dist/chunk-SLODUPES.js +0 -291
  1179. package/dist/chunk-SMCLG2RA.js +0 -153
  1180. package/dist/chunk-SMCLG2RA.js.map +0 -1
  1181. package/dist/chunk-SVFA75FO.js +0 -80
  1182. package/dist/chunk-SVXHKIGJ.js +0 -201
  1183. package/dist/chunk-TBRAZK3Y.js +0 -175
  1184. package/dist/chunk-TJT4NSFN.js +0 -41
  1185. package/dist/chunk-TK36COCP.js +0 -16
  1186. package/dist/chunk-TO2NXDZA.js +0 -86
  1187. package/dist/chunk-TO2NXDZA.js.map +0 -1
  1188. package/dist/chunk-TTVKL3RD.js +0 -220
  1189. package/dist/chunk-TUYN6XZI.js +0 -33
  1190. package/dist/chunk-TXHJX2NG.js +0 -108
  1191. package/dist/chunk-U437KFDI.js +0 -206
  1192. package/dist/chunk-U437KFDI.js.map +0 -1
  1193. package/dist/chunk-U7Q2Y6WG.js +0 -196
  1194. package/dist/chunk-UJE7IKQ4.js +0 -96
  1195. package/dist/chunk-UMQN3BVV.js +0 -315
  1196. package/dist/chunk-UMQN3BVV.js.map +0 -1
  1197. package/dist/chunk-UQNB2W2I.js +0 -263
  1198. package/dist/chunk-URWNRC2P.js +0 -158
  1199. package/dist/chunk-VF2XC76U.js +0 -191
  1200. package/dist/chunk-VF2XC76U.js.map +0 -1
  1201. package/dist/chunk-VM3HRSAU.js +0 -79
  1202. package/dist/chunk-VM3HRSAU.js.map +0 -1
  1203. package/dist/chunk-VQBINZB7.js +0 -322
  1204. package/dist/chunk-VQBINZB7.js.map +0 -1
  1205. package/dist/chunk-VXGCB3GY.js +0 -81
  1206. package/dist/chunk-VXGCB3GY.js.map +0 -1
  1207. package/dist/chunk-W3FAKT3D.js +0 -167
  1208. package/dist/chunk-W3FAKT3D.js.map +0 -1
  1209. package/dist/chunk-W7HSGZGW.js +0 -155
  1210. package/dist/chunk-WIXUMFU7.js +0 -167
  1211. package/dist/chunk-WIXUMFU7.js.map +0 -1
  1212. package/dist/chunk-WJH743NG.js +0 -131
  1213. package/dist/chunk-WJH743NG.js.map +0 -1
  1214. package/dist/chunk-X2IJI2BG.js +0 -72
  1215. package/dist/chunk-X2QLWUND.js +0 -145
  1216. package/dist/chunk-X4XYUNRL.js +0 -55
  1217. package/dist/chunk-XCP5L665.js +0 -22
  1218. package/dist/chunk-XCP5L665.js.map +0 -1
  1219. package/dist/chunk-XI2BXMBX.js +0 -146
  1220. package/dist/chunk-XJKMH3RX.js +0 -233
  1221. package/dist/chunk-XJKMH3RX.js.map +0 -1
  1222. package/dist/chunk-XPOQZI5X.js +0 -120
  1223. package/dist/chunk-XV2TDULR.js +0 -85
  1224. package/dist/chunk-XV2TDULR.js.map +0 -1
  1225. package/dist/chunk-XYXTEGIM.js +0 -67
  1226. package/dist/chunk-Y3ER5CJ2.js +0 -293
  1227. package/dist/chunk-Y3ER5CJ2.js.map +0 -1
  1228. package/dist/chunk-Y3IGYWGN.js +0 -171
  1229. package/dist/chunk-Y3IGYWGN.js.map +0 -1
  1230. package/dist/chunk-Y5UCOBQN.js +0 -37
  1231. package/dist/chunk-YJ4HM25H.js +0 -198
  1232. package/dist/chunk-YJ4HM25H.js.map +0 -1
  1233. package/dist/chunk-YKACSEES.js +0 -153
  1234. package/dist/chunk-YKACSEES.js.map +0 -1
  1235. package/dist/chunk-YNWAMTOT.js +0 -259
  1236. package/dist/chunk-YNWAMTOT.js.map +0 -1
  1237. package/dist/chunk-YRUCIKPO.js +0 -159
  1238. package/dist/chunk-Z6DULXSF.js +0 -261
  1239. package/dist/chunk-Z6DULXSF.js.map +0 -1
  1240. package/dist/chunk-ZA4U5GDU.js +0 -68
  1241. package/dist/chunk-ZADOIITM.js +0 -166
  1242. package/dist/chunk-ZADOIITM.js.map +0 -1
  1243. package/dist/chunk-ZB6BX4GO.js +0 -175
  1244. package/dist/chunk-ZDWU52DJ.js +0 -116
  1245. package/dist/chunk-ZNJ4RLZT.js +0 -136
  1246. package/dist/chunk-ZO27CDGB.js +0 -204
  1247. package/dist/chunk-ZO27CDGB.js.map +0 -1
  1248. package/dist/chunk-ZOW2CCMO.js +0 -88
  1249. package/dist/chunk-ZOW2CCMO.js.map +0 -1
  1250. package/dist/chunk-ZPIMPOHV.js +0 -187
  1251. package/dist/chunk-ZSXV3ERD.js +0 -82
  1252. package/dist/chunk-ZSXV3ERD.js.map +0 -1
  1253. package/dist/chunk-ZTZ6S5Q6.js +0 -86
  1254. package/dist/native/chunks/chunk-335WGKE6.js +0 -336
  1255. package/dist/native/chunks/chunk-335WGKE6.js.map +0 -1
  1256. package/dist/native/chunks/chunk-4KWFRDI2.js +0 -215
  1257. package/dist/native/chunks/chunk-4KWFRDI2.js.map +0 -1
  1258. package/dist/native/chunks/chunk-KIG4KY4W.js +0 -322
  1259. package/dist/native/chunks/chunk-KIG4KY4W.js.map +0 -1
  1260. package/dist/native/chunks/chunk-OI57L6WL.js +0 -292
  1261. package/dist/native/chunks/chunk-OI57L6WL.js.map +0 -1
  1262. /package/dist/{chunk-Y5UCOBQN.js.map → chunk-27DLUKDF.js.map} +0 -0
  1263. /package/dist/{chunk-PPTF5X7K.js.map → chunk-2CK7SHQQ.js.map} +0 -0
  1264. /package/dist/{chunk-DIWC6AQL.js.map → chunk-2KLT22S3.js.map} +0 -0
  1265. /package/dist/{chunk-ZTZ6S5Q6.js.map → chunk-2TJOCI54.js.map} +0 -0
  1266. /package/dist/{chunk-ZPIMPOHV.js.map → chunk-2XGGHYEA.js.map} +0 -0
  1267. /package/dist/{chunk-ISW5K72V.js.map → chunk-2ZRZTGWP.js.map} +0 -0
  1268. /package/dist/{chunk-57C636A6.js.map → chunk-37DCYIT5.js.map} +0 -0
  1269. /package/dist/{chunk-6MDBMCFK.js.map → chunk-3EDZU2H7.js.map} +0 -0
  1270. /package/dist/{chunk-2SKNSQCP.js.map → chunk-3LNKBZTG.js.map} +0 -0
  1271. /package/dist/{chunk-XYXTEGIM.js.map → chunk-46ADSOCF.js.map} +0 -0
  1272. /package/dist/{chunk-CPNSVIIB.js.map → chunk-4M7QHSKY.js.map} +0 -0
  1273. /package/dist/{chunk-4LMY5I5E.js.map → chunk-4N33SWTW.js.map} +0 -0
  1274. /package/dist/{chunk-RGMSTQ2J.js.map → chunk-5264DI34.js.map} +0 -0
  1275. /package/dist/{chunk-PI5G6N6Q.js.map → chunk-5QTMJ2RU.js.map} +0 -0
  1276. /package/dist/{chunk-JBMBFYFA.js.map → chunk-5VWYCVXF.js.map} +0 -0
  1277. /package/dist/{chunk-ZDWU52DJ.js.map → chunk-67QSLTT7.js.map} +0 -0
  1278. /package/dist/{chunk-65JHGT5F.js.map → chunk-6MSSCBI3.js.map} +0 -0
  1279. /package/dist/{chunk-JB67KPGM.js.map → chunk-6Q5GZUQ5.js.map} +0 -0
  1280. /package/dist/{chunk-CSWNPIQD.js.map → chunk-7E4X4J2M.js.map} +0 -0
  1281. /package/dist/{chunk-7VN7LFBA.js.map → chunk-7F7TTOYN.js.map} +0 -0
  1282. /package/dist/{chunk-QWCMLOYC.js.map → chunk-7JSQQZUH.js.map} +0 -0
  1283. /package/dist/{chunk-LLR42S6B.js.map → chunk-7VIINULX.js.map} +0 -0
  1284. /package/dist/{chunk-3T2I6BYA.js.map → chunk-7WK2L3ZO.js.map} +0 -0
  1285. /package/dist/{chunk-JZJOAGBG.js.map → chunk-7Z2UU2FQ.js.map} +0 -0
  1286. /package/dist/{chunk-5SCZZFZR.js.map → chunk-A2DYU5WN.js.map} +0 -0
  1287. /package/dist/{chunk-TK36COCP.js.map → chunk-A4OCNJWW.js.map} +0 -0
  1288. /package/dist/{chunk-7TSQNYQO.js.map → chunk-AKPRFFAI.js.map} +0 -0
  1289. /package/dist/{chunk-JRHZZTVV.js.map → chunk-AL6Z2JYR.js.map} +0 -0
  1290. /package/dist/{chunk-IE7ISTLQ.js.map → chunk-B443IIQG.js.map} +0 -0
  1291. /package/dist/{chunk-TXHJX2NG.js.map → chunk-BGYLL467.js.map} +0 -0
  1292. /package/dist/{chunk-67N6TH6E.js.map → chunk-BHOSWJDL.js.map} +0 -0
  1293. /package/dist/{chunk-G3KSCJS7.js.map → chunk-BQGT77IQ.js.map} +0 -0
  1294. /package/dist/{chunk-FPWB5ILF.js.map → chunk-BR7RM3WR.js.map} +0 -0
  1295. /package/dist/{chunk-BM4CGQED.js.map → chunk-COK5VOXC.js.map} +0 -0
  1296. /package/dist/{chunk-EEAQBPOW.js.map → chunk-CRDOMIEG.js.map} +0 -0
  1297. /package/dist/{chunk-IRLUM7XB.js.map → chunk-CUN5RJTH.js.map} +0 -0
  1298. /package/dist/{chunk-OFVYNUYV.js.map → chunk-CXMVNYBY.js.map} +0 -0
  1299. /package/dist/{chunk-LNOYDMFD.js.map → chunk-CY6HHLYM.js.map} +0 -0
  1300. /package/dist/{chunk-KAPKMVKR.js.map → chunk-D6RKXNLE.js.map} +0 -0
  1301. /package/dist/{chunk-LZHXF66R.js.map → chunk-DBCITC4P.js.map} +0 -0
  1302. /package/dist/{chunk-G73SDZ3T.js.map → chunk-DELT2W42.js.map} +0 -0
  1303. /package/dist/{chunk-R2G4MVPY.js.map → chunk-DJ2KYLHE.js.map} +0 -0
  1304. /package/dist/{chunk-FA3TYWX2.js.map → chunk-DQIRSUEK.js.map} +0 -0
  1305. /package/dist/{chunk-ANNDLY3M.js.map → chunk-DRKYPQNA.js.map} +0 -0
  1306. /package/dist/{chunk-BM4ZPBBT.js.map → chunk-DSIJEJQ7.js.map} +0 -0
  1307. /package/dist/{chunk-FHA4G5XF.js.map → chunk-DY7VTAYO.js.map} +0 -0
  1308. /package/dist/{chunk-FYFIND6O.js.map → chunk-DYMVVVSU.js.map} +0 -0
  1309. /package/dist/{chunk-UQNB2W2I.js.map → chunk-EDBTCEPC.js.map} +0 -0
  1310. /package/dist/{chunk-3SJZP7KH.js.map → chunk-EHCUOX6R.js.map} +0 -0
  1311. /package/dist/{chunk-5BW7NCM5.js.map → chunk-EIJC5DWG.js.map} +0 -0
  1312. /package/dist/{chunk-RPMAWM6F.js.map → chunk-EVSKEIXI.js.map} +0 -0
  1313. /package/dist/{chunk-62NFZR52.js.map → chunk-EYPRDTWI.js.map} +0 -0
  1314. /package/dist/{chunk-IGO5DC7D.js.map → chunk-FTSVJIEU.js.map} +0 -0
  1315. /package/dist/{chunk-UJE7IKQ4.js.map → chunk-FYSYALTY.js.map} +0 -0
  1316. /package/dist/{chunk-3IYB3XY2.js.map → chunk-GJF3CVIE.js.map} +0 -0
  1317. /package/dist/{chunk-PLEZDLVU.js.map → chunk-GJRBK564.js.map} +0 -0
  1318. /package/dist/{chunk-KJHQYPKT.js.map → chunk-GL5CYMGK.js.map} +0 -0
  1319. /package/dist/{chunk-QQS3GQYS.js.map → chunk-GPUYB3ST.js.map} +0 -0
  1320. /package/dist/{chunk-AZ4LLAAJ.js.map → chunk-GQ4I6Z32.js.map} +0 -0
  1321. /package/dist/{chunk-GCWF5AQE.js.map → chunk-GUW5BUK7.js.map} +0 -0
  1322. /package/dist/{chunk-4IVOHL32.js.map → chunk-GVOMTCLS.js.map} +0 -0
  1323. /package/dist/{chunk-J6CSPDC7.js.map → chunk-H2YBVBPW.js.map} +0 -0
  1324. /package/dist/{chunk-N74IYYRU.js.map → chunk-H3MLYZYP.js.map} +0 -0
  1325. /package/dist/{chunk-NKIAP6ZL.js.map → chunk-H3R6WSYU.js.map} +0 -0
  1326. /package/dist/{chunk-SGGDMTKP.js.map → chunk-HEVST4CS.js.map} +0 -0
  1327. /package/dist/{chunk-IM76SSXI.js.map → chunk-HRHPRIGT.js.map} +0 -0
  1328. /package/dist/{chunk-GJKBWVU2.js.map → chunk-HUKVX47W.js.map} +0 -0
  1329. /package/dist/{chunk-P3L42CBB.js.map → chunk-IBGX6H4J.js.map} +0 -0
  1330. /package/dist/{chunk-CMN26J5Y.js.map → chunk-IFSUKWE7.js.map} +0 -0
  1331. /package/dist/{chunk-7A3G4W52.js.map → chunk-IJFAF3A7.js.map} +0 -0
  1332. /package/dist/{chunk-YRUCIKPO.js.map → chunk-IL7JZKXY.js.map} +0 -0
  1333. /package/dist/{chunk-C423YJGN.js.map → chunk-JGDS2SJZ.js.map} +0 -0
  1334. /package/dist/{chunk-FATRMNVN.js.map → chunk-JRODCEIG.js.map} +0 -0
  1335. /package/dist/{chunk-4BEQADWC.js.map → chunk-JWG2BTJ5.js.map} +0 -0
  1336. /package/dist/{chunk-URWNRC2P.js.map → chunk-KBMKALKQ.js.map} +0 -0
  1337. /package/dist/{chunk-EDJDASXE.js.map → chunk-KCQGJPLO.js.map} +0 -0
  1338. /package/dist/{chunk-XI2BXMBX.js.map → chunk-KDIPBEVE.js.map} +0 -0
  1339. /package/dist/{chunk-RRX6ZTNX.js.map → chunk-KJ3AXHKF.js.map} +0 -0
  1340. /package/dist/{chunk-O4PKQ46C.js.map → chunk-L4UP5VYS.js.map} +0 -0
  1341. /package/dist/{chunk-EPNUVSNK.js.map → chunk-L4V2LRKH.js.map} +0 -0
  1342. /package/dist/{chunk-ZB6BX4GO.js.map → chunk-L7Q5BH4A.js.map} +0 -0
  1343. /package/dist/{chunk-JO5GSRYQ.js.map → chunk-LCVQOJKG.js.map} +0 -0
  1344. /package/dist/{chunk-QYNCPS5W.js.map → chunk-LGZ4EIWV.js.map} +0 -0
  1345. /package/dist/{chunk-6AN23E37.js.map → chunk-MAUZCOBB.js.map} +0 -0
  1346. /package/dist/{chunk-KMUSTQA6.js.map → chunk-MWBHZZA4.js.map} +0 -0
  1347. /package/dist/{chunk-TBRAZK3Y.js.map → chunk-MYAEOSZK.js.map} +0 -0
  1348. /package/dist/{chunk-25R3ITGZ.js.map → chunk-MZMGQKT3.js.map} +0 -0
  1349. /package/dist/{chunk-AIRWM7KK.js.map → chunk-N6CSXHFJ.js.map} +0 -0
  1350. /package/dist/{chunk-SVXHKIGJ.js.map → chunk-NFZRZB5N.js.map} +0 -0
  1351. /package/dist/{chunk-MG73KW54.js.map → chunk-NJHJZFX5.js.map} +0 -0
  1352. /package/dist/{chunk-RJXRZW66.js.map → chunk-NNESQ7QG.js.map} +0 -0
  1353. /package/dist/{chunk-AJXTVRQF.js.map → chunk-O63WG6YJ.js.map} +0 -0
  1354. /package/dist/{chunk-PH5XJGKJ.js.map → chunk-OSSFOPB7.js.map} +0 -0
  1355. /package/dist/{chunk-X2IJI2BG.js.map → chunk-OT5DVKXP.js.map} +0 -0
  1356. /package/dist/{chunk-CZ5ZL63A.js.map → chunk-OYYCANKB.js.map} +0 -0
  1357. /package/dist/{chunk-LTEXWGK6.js.map → chunk-PC2MVKYW.js.map} +0 -0
  1358. /package/dist/{chunk-ZNJ4RLZT.js.map → chunk-PKFH6C7W.js.map} +0 -0
  1359. /package/dist/{chunk-IOEF32HX.js.map → chunk-PYPFDRX4.js.map} +0 -0
  1360. /package/dist/{chunk-PJ7NKK33.js.map → chunk-Q4KFGRBV.js.map} +0 -0
  1361. /package/dist/{chunk-6YLAVHV4.js.map → chunk-QAP3FW33.js.map} +0 -0
  1362. /package/dist/{chunk-JPXG7IFW.js.map → chunk-QJ7I5C4D.js.map} +0 -0
  1363. /package/dist/{chunk-JXNT5TUP.js.map → chunk-QO6QWBDI.js.map} +0 -0
  1364. /package/dist/{chunk-GT7C6TSM.js.map → chunk-QPNTUFV4.js.map} +0 -0
  1365. /package/dist/{chunk-HJOABXKN.js.map → chunk-QV5J4TE6.js.map} +0 -0
  1366. /package/dist/{chunk-EE44OC4M.js.map → chunk-QYUB2RFN.js.map} +0 -0
  1367. /package/dist/{chunk-BTIBFR5L.js.map → chunk-REQAKZ64.js.map} +0 -0
  1368. /package/dist/{chunk-NNAACCN2.js.map → chunk-RMCNEKBZ.js.map} +0 -0
  1369. /package/dist/{chunk-TUYN6XZI.js.map → chunk-RQCJJBPY.js.map} +0 -0
  1370. /package/dist/{chunk-JN3PGXRJ.js.map → chunk-RWTFZ7J5.js.map} +0 -0
  1371. /package/dist/{chunk-7N4V3ARN.js.map → chunk-S52IVFMS.js.map} +0 -0
  1372. /package/dist/{chunk-JDY37EML.js.map → chunk-SCQJV54H.js.map} +0 -0
  1373. /package/dist/{chunk-3QNSTLGC.js.map → chunk-SNBCAH62.js.map} +0 -0
  1374. /package/dist/{chunk-G76H5PEM.js.map → chunk-SQV3HPTZ.js.map} +0 -0
  1375. /package/dist/{chunk-C53C7C2X.js.map → chunk-T3WHW7ZC.js.map} +0 -0
  1376. /package/dist/{chunk-R67J6JKT.js.map → chunk-T7LTL7OC.js.map} +0 -0
  1377. /package/dist/{chunk-LYSSO6WC.js.map → chunk-TAB6AIPN.js.map} +0 -0
  1378. /package/dist/{chunk-5QFEHSTR.js.map → chunk-TK4NUNN6.js.map} +0 -0
  1379. /package/dist/{chunk-7FWXG2KF.js.map → chunk-TNDV33LP.js.map} +0 -0
  1380. /package/dist/{chunk-6ANWFGLL.js.map → chunk-TOBPKY4V.js.map} +0 -0
  1381. /package/dist/{chunk-XPOQZI5X.js.map → chunk-UCTJJYVC.js.map} +0 -0
  1382. /package/dist/{chunk-6V7D6GRX.js.map → chunk-UFH3ZVVZ.js.map} +0 -0
  1383. /package/dist/{chunk-QNHNFU7G.js.map → chunk-UFLTL2RJ.js.map} +0 -0
  1384. /package/dist/{chunk-CZJLWCEG.js.map → chunk-UN5INW6K.js.map} +0 -0
  1385. /package/dist/{chunk-LE7IHEU4.js.map → chunk-UUFHI7J5.js.map} +0 -0
  1386. /package/dist/{chunk-6M7CMILP.js.map → chunk-UXWU5NRC.js.map} +0 -0
  1387. /package/dist/{chunk-NU3EQX2L.js.map → chunk-UYA2QMH6.js.map} +0 -0
  1388. /package/dist/{chunk-TTVKL3RD.js.map → chunk-V26IDPL4.js.map} +0 -0
  1389. /package/dist/{chunk-U7Q2Y6WG.js.map → chunk-V6FED3RS.js.map} +0 -0
  1390. /package/dist/{chunk-CR4KC2K5.js.map → chunk-VNB7PFCP.js.map} +0 -0
  1391. /package/dist/{chunk-AJVYJZHI.js.map → chunk-VNYP2RMN.js.map} +0 -0
  1392. /package/dist/{chunk-4V7FNB7R.js.map → chunk-VU4BANG7.js.map} +0 -0
  1393. /package/dist/{chunk-4MGFUPQT.js.map → chunk-WC3W36AM.js.map} +0 -0
  1394. /package/dist/{chunk-LWLVWM34.js.map → chunk-WPE5QYXD.js.map} +0 -0
  1395. /package/dist/{chunk-IZBDSPTW.js.map → chunk-WPSGP3YG.js.map} +0 -0
  1396. /package/dist/{chunk-5FA5S2YN.js.map → chunk-WVPA3ONO.js.map} +0 -0
  1397. /package/dist/{chunk-3P4THDBM.js.map → chunk-WXDJBSES.js.map} +0 -0
  1398. /package/dist/{chunk-3CGLGOLO.js.map → chunk-WXTXCJ5V.js.map} +0 -0
  1399. /package/dist/{chunk-KCBAPMLH.js.map → chunk-XEYLYUDM.js.map} +0 -0
  1400. /package/dist/{chunk-X2QLWUND.js.map → chunk-XNBN5CVF.js.map} +0 -0
  1401. /package/dist/{chunk-IFAEKIT2.js.map → chunk-XOL2QCSP.js.map} +0 -0
  1402. /package/dist/{chunk-ZA4U5GDU.js.map → chunk-XYK3HXZY.js.map} +0 -0
  1403. /package/dist/{chunk-LOLOFY4O.js.map → chunk-Y3HMIUH6.js.map} +0 -0
  1404. /package/dist/{chunk-TJT4NSFN.js.map → chunk-Y5WNNEND.js.map} +0 -0
  1405. /package/dist/{chunk-SVFA75FO.js.map → chunk-YA4YH6WP.js.map} +0 -0
  1406. /package/dist/{chunk-X4XYUNRL.js.map → chunk-YSFQHZ74.js.map} +0 -0
  1407. /package/dist/{chunk-FTCCYWF4.js.map → chunk-YU72SS43.js.map} +0 -0
  1408. /package/dist/{chunk-3EYRRVNT.js.map → chunk-YVDBOVHP.js.map} +0 -0
  1409. /package/dist/{chunk-W7HSGZGW.js.map → chunk-ZF3JGIJD.js.map} +0 -0
  1410. /package/dist/{chunk-SLODUPES.js.map → chunk-ZHFS5L6Q.js.map} +0 -0
  1411. /package/dist/{chunk-4YMIQ5DM.js.map → chunk-ZSLOXTYJ.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/data-display/Alert/Alert.native.tsx","../../../src/components/data-display/Alert/Alert.helpers.ts","../../../src/components/data-display/Alert/Alert.metrics.ts","../../../src/components/data-display/Alert/Alert.look.native.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n Easing,\n type LayoutChangeEvent,\n Platform,\n Pressable,\n type Role,\n StyleSheet,\n Text as RNText,\n View,\n type ViewStyle,\n} from 'react-native';\n\nimport { resolveAlertProps, resolveAnnouncement, testIdFor, VARIANT_ICON } from './Alert.helpers';\nimport {\n actionSlotStyle,\n alertLook,\n closeButtonStyle,\n descriptionStyle,\n iconSlotStyle,\n messageSlotStyle,\n messageTextStyle,\n titleStyle,\n} from './Alert.look.native';\nimport { CLOSE_BUTTON, CLOSE_DELAY_MS, COLLAPSE_MS, FADE_IN, ICON_SLOT, ICON_SPIN, PULSE } from './Alert.metrics';\nimport type { AlertProps, AlertVariant } from './Alert.types.native';\nimport { Icon } from '../../../icons/Icon.native';\nimport { webAria } from '../../../platform/aria';\nimport { renderTextChildren } from '../../../platform/text-children';\nimport { resolveTestId, withoutTestIdProps } from '../../../platform/test-id';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\n\ntype AnimatedStyle = Animated.WithAnimatedValue<ViewStyle>;\nconst nativeDriver = Platform.OS !== 'web';\n\n/** A 0→1 progress that starts on mount when `animate` is set, else sits at 1. */\nfunction useProgress(animate: boolean, duration: number): Animated.Value {\n const progress = React.useRef(new Animated.Value(animate ? 0 : 1)).current;\n React.useEffect(() => {\n if (!animate) return undefined;\n const timing = Animated.timing(progress, { toValue: 1, duration, easing: Easing.out(Easing.ease), useNativeDriver: nativeDriver });\n timing.start();\n return () => timing.stop();\n }, [animate, duration, progress]);\n return progress;\n}\n\n/** The web's `fadeInScale` keyframes: in from 0 opacity, 0.95 scale and 10px above, over 300ms. */\nfunction useFadeIn(animate: boolean): AnimatedStyle | undefined {\n const progress = useProgress(animate, FADE_IN.ms);\n if (!animate) return undefined;\n return {\n opacity: progress,\n transform: [\n { scale: progress.interpolate({ inputRange: [0, 1], outputRange: [FADE_IN.scale, 1] }) },\n { translateY: progress.interpolate({ inputRange: [0, 1], outputRange: [-FADE_IN.lift, 0] }) },\n ],\n };\n}\n\n/** The web's `iconRotate` keyframes: one full turn, 0.8 → 1.1 → 1, over 600ms. */\nfunction useIconSpin(animate: boolean): AnimatedStyle | undefined {\n const progress = useProgress(animate, ICON_SPIN.ms);\n if (!animate) return undefined;\n return {\n transform: [\n { rotate: progress.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] }) },\n { scale: progress.interpolate({ inputRange: [0, 0.5, 1], outputRange: [ICON_SPIN.from, ICON_SPIN.mid, 1] }) },\n ],\n };\n}\n\n/** The web's `::after` pulse: a wash of the hue over the card, fading out every two seconds, behind the words. */\nfunction Pulse({ color, radius, testID }: { color: string; radius: number; testID: string }): React.JSX.Element {\n const progress = React.useRef(new Animated.Value(0)).current;\n React.useEffect(() => {\n const loop = Animated.loop(\n Animated.timing(progress, { toValue: 1, duration: PULSE.ms, easing: Easing.linear, useNativeDriver: nativeDriver }),\n );\n loop.start();\n return () => loop.stop();\n }, [progress]);\n return (\n <Animated.View\n testID={testID}\n aria-hidden\n style={[\n StyleSheet.absoluteFill,\n {\n pointerEvents: 'none',\n borderRadius: radius,\n backgroundColor: color,\n opacity: progress.interpolate({ inputRange: [0, 0.7, 1], outputRange: [PULSE.alpha, 0, 0] }),\n },\n ]}\n />\n );\n}\n\n/**\n * MUI's `Collapse`: open, it is a plain wrapper with its overflow visible (so\n * a glow can escape); closing, it clips and shrinks over 300ms, then says so.\n */\nfunction Collapse({ open, onCollapsed, children }: { open: boolean; onCollapsed: () => void; children: React.ReactNode }): React.JSX.Element {\n const [height, setHeight] = React.useState<number | null>(null);\n const progress = React.useRef(new Animated.Value(1)).current;\n React.useEffect(() => {\n if (open) return undefined;\n const timing = Animated.timing(progress, { toValue: 0, duration: COLLAPSE_MS, easing: Easing.inOut(Easing.ease), useNativeDriver: false });\n timing.start(({ finished }) => {\n if (finished) onCollapsed();\n });\n return () => timing.stop();\n }, [open, onCollapsed, progress]);\n const onLayout = (event: LayoutChangeEvent): void => {\n if (open) setHeight(event.nativeEvent.layout.height);\n };\n const shrink: AnimatedStyle = height == null ? {} : { maxHeight: progress.interpolate({ inputRange: [0, 1], outputRange: [0, height] }) };\n return (\n <Animated.View style={[{ overflow: open ? 'visible' : 'hidden', opacity: progress }, shrink]}>\n <View onLayout={onLayout}>{children}</View>\n </Animated.View>\n );\n}\n\ninterface IconSlotProps {\n variant: AlertVariant;\n icon: React.ReactNode;\n color: string;\n animate: boolean;\n testID: string;\n}\n\n/** The icon slot; `glass` and `gradient` have no glyph of their own, so theirs is empty unless an `icon` is given — as on the web. */\nfunction IconSlot({ variant, icon, color, animate, testID }: IconSlotProps): React.JSX.Element {\n const theme = useUiTheme();\n const spin = useIconSpin(animate);\n const glyph = VARIANT_ICON[variant];\n return (\n <Animated.View testID={testID} style={[iconSlotStyle(theme), spin]}>\n {icon || (glyph ? <Icon name={glyph} size={ICON_SLOT.size} color={color} /> : null)}\n </Animated.View>\n );\n}\n\nfunction CloseButton({ label, ink, onPress, testID }: { label: string | undefined; ink: string; onPress: () => void; testID: string }): React.JSX.Element {\n const theme = useUiTheme();\n return (\n <Pressable role=\"button\" aria-label={label} testID={testID} onPress={onPress} style={({ pressed }) => closeButtonStyle(theme, pressed)}>\n <Icon name=\"Close\" size={CLOSE_BUTTON.iconSize} color={ink} />\n </Pressable>\n );\n}\n\ninterface ContentProps {\n title?: string;\n description?: string;\n children?: React.ReactNode;\n ink: string;\n testId: string;\n}\n\nfunction AlertContent({ title, description, children, ink, testId }: ContentProps): React.JSX.Element {\n const theme = useUiTheme();\n return (\n <View style={messageSlotStyle(theme)}>\n {title ? (\n <RNText testID={testIdFor(testId, 'title')} style={titleStyle(theme, ink, Boolean(description))}>\n {title}\n </RNText>\n ) : null}\n {description ? (\n <RNText testID={testIdFor(testId, 'message')} style={descriptionStyle(theme, ink)}>\n {description}\n </RNText>\n ) : null}\n {renderTextChildren(children, messageTextStyle(theme, ink))}\n </View>\n );\n}\n\n/** The dismiss sequence the web runs: mark closing, fire `onClose` 200ms in, stay until the collapse has run. */\nfunction useDismiss(onClose: (() => void) | undefined): { open: boolean; gone: boolean; close: () => void; onCollapsed: () => void } {\n const [closing, setClosing] = React.useState(false);\n const [gone, setGone] = React.useState(false);\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n React.useEffect(() => () => {\n if (timer.current) clearTimeout(timer.current);\n }, []);\n const close = (): void => {\n setClosing(true);\n timer.current = setTimeout(() => onClose?.(), CLOSE_DELAY_MS);\n };\n const onCollapsed = React.useCallback(() => setGone(true), []);\n return { open: !closing, gone, close, onCollapsed };\n}\n\nexport const Alert = React.forwardRef<View, AlertProps>((alertProps, ref) => {\n const {\n variant, color, glow, pulse, icon, showIcon, onClose, title, description, children, animate,\n // `role`, `announce` and `aria-live` all leave here and are resolved\n // TOGETHER below, off `alertProps` — see `resolveAnnouncement`.\n role: _role, announce: _announce,\n 'aria-atomic': ariaAtomic, 'aria-live': _ariaLive, closable, closeLabel, style, ...others\n } = resolveAlertProps(alertProps);\n const theme = useUiTheme();\n const testId = resolveTestId(others, 'alert') as string;\n const rest = withoutTestIdProps(others);\n const look = alertLook(theme, { variant, color, glow, pulse });\n const fadeIn = useFadeIn(animate);\n const dismiss = useDismiss(onClose);\n const announcement = resolveAnnouncement(alertProps, variant);\n\n if (dismiss.gone) return null;\n return (\n <Collapse open={dismiss.open} onCollapsed={dismiss.onCollapsed}>\n <Animated.View\n ref={ref}\n role={announcement.role as Role}\n aria-live={announcement['aria-live']}\n {...webAria({ 'aria-atomic': ariaAtomic })}\n tabIndex={0}\n testID={testId}\n style={[look.root, fadeIn, style]}\n {...rest}\n >\n {pulse ? <Pulse color={look.palette.main} radius={look.root.borderRadius as number} testID={testIdFor(testId, 'pulse')} /> : null}\n {showIcon ? <IconSlot variant={variant} icon={icon} color={look.iconColor} animate={animate} testID={testIdFor(testId, 'icon')} /> : null}\n <AlertContent title={title} description={description} ink={look.ink} testId={testId}>\n {children}\n </AlertContent>\n {closable ? (\n <View style={actionSlotStyle(theme)}>\n <CloseButton label={closeLabel} ink={look.ink} onPress={dismiss.close} testID={testIdFor(testId, 'close')} />\n </View>\n ) : null}\n </Animated.View>\n </Collapse>\n );\n});\n\nAlert.displayName = 'Alert';\n","import type { AlertBaseFields, AlertVariant } from './Alert.base';\nimport type { IconName } from '../../../icons/Icon.types';\n\ntype AlertDefaultedKeys = 'variant' | 'glow' | 'pulse' | 'showIcon' | 'animate' | 'role' | 'aria-atomic';\n\nexport const ALERT_DEFAULTS: Required<Pick<AlertBaseFields, AlertDefaultedKeys>> & { closable: false } = {\n variant: 'info',\n glow: false,\n pulse: false,\n showIcon: true,\n closable: false,\n animate: true,\n role: 'alert',\n 'aria-atomic': 'true',\n};\n\n/**\n * Generic over the renderer's own props: the web and the native `Alert` pass\n * different extras through, and both come back out untouched.\n */\nexport type ResolvedAlertProps<P extends AlertBaseFields> = P &\n Required<Pick<AlertBaseFields, AlertDefaultedKeys>>;\n\n// Strips explicitly-undefined props before the merge so `prop={undefined}` still\n// falls back to the default, the way a destructuring default would.\nconst definedProps = <P extends AlertBaseFields>(props: P): Partial<P> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<P>;\n\n// Through `unknown`: `closable: false` in the defaults belongs to the dismiss\n// union rather than to `AlertBaseFields`, so TypeScript cannot see the merge as\n// comparable to `P` although every field of `P` survives it untouched.\nexport const resolveAlertProps = <P extends AlertBaseFields>(props: P): ResolvedAlertProps<P> =>\n ({ ...ALERT_DEFAULTS, ...definedProps(props) }) as unknown as ResolvedAlertProps<P>;\n\n/** `danger` announces itself; everything else waits its turn. */\nexport const defaultAriaLive = (variant: AlertVariant): 'polite' | 'assertive' =>\n variant === 'danger' ? 'assertive' : 'polite';\n\n/**\n * The ARIA role each `announce` level is spelled with.\n *\n * Both roles carry an IMPLICIT live setting, and that implicit one is what\n * assistive tech acts on — `alert` is assertive, `status` is polite. Pairing\n * them here is what stops `role` and `aria-live` from contradicting each\n * other, which they do by default: every alert is `role=\"alert\"` regardless of\n * variant, so an `info` alert asks to be polite in one attribute and to\n * interrupt in the other.\n */\nexport const ANNOUNCE_ROLE: Record<NonNullable<AlertBaseFields['announce']>, string> = {\n assertive: 'alert',\n polite: 'status',\n};\n\n/**\n * The two attributes that decide whether an alert interrupts, resolved TOGETHER.\n *\n * Both renderers therefore let `role` and `announce` leave their destructure\n * unused (`_role`, `_announce`) and call this instead — the first because the\n * defaults have already answered it, the second because it must never reach\n * the DOM.\n *\n * Reads the caller's own props rather than the defaulted ones, because the\n * whole question is which of them the caller actually spelled:\n * {@link ALERT_DEFAULTS} supplies `role: 'alert'` for everything, so after the\n * merge there is no longer any difference between an alert that asked to\n * interrupt and one that never mentioned it.\n *\n * Precedence, most specific first — an explicit `role` or `aria-live` beats\n * `announce`, so a call site that already spells either by hand is untouched:\n *\n * 1. `role` / `aria-live` as given;\n * 2. {@link AlertBaseFields.announce}, which supplies both;\n * 3. today's behaviour — `ALERT_DEFAULTS.role` and {@link defaultAriaLive}.\n *\n * With none of the three named, the result is byte-for-byte what it was before\n * `announce` existed.\n */\nexport const resolveAnnouncement = (\n props: Pick<AlertBaseFields, 'announce' | 'role' | 'aria-live'>,\n variant: AlertVariant,\n): { role: string; 'aria-live': 'polite' | 'assertive' | 'off' } => {\n const announce = props.announce;\n return {\n role: props.role ?? (announce === undefined ? ALERT_DEFAULTS.role : ANNOUNCE_ROLE[announce]),\n 'aria-live': props['aria-live'] ?? announce ?? defaultAriaLive(variant),\n };\n};\n\nexport const testIdFor = (base: string | undefined, suffix: string): string =>\n base ? `${base}-${suffix}` : `alert-${suffix}`;\n\n/**\n * The glyph each semantic variant carries, by the shared icon set's name.\n * `glass` and `gradient` carry none of their own: the web renders an empty\n * icon slot for them unless the caller passes an `icon`, and so does native.\n */\nexport const VARIANT_ICON: Partial<Record<AlertVariant, IconName>> = {\n info: 'Info',\n success: 'CheckCircle',\n warning: 'Warning',\n danger: 'Error',\n};\n","import type { AlertVariant } from './Alert.base';\nimport { alpha, darken, lighten } from '../../../tokens/color';\nimport { contrastText, type UiGreyStep, type UiTheme } from '../../../tokens/theme';\n\n/**\n * THE NUMBERS BOTH `Alert` RENDERERS DRAW WITH.\n *\n * `Alert.styles.tsx` / `Alert.tsx` (MUI) and `Alert.native.tsx` (React\n * Native) read this one table. Spacing is in SPACING UNITS where the web\n * writes `theme.spacing(n)`; durations are ms (the web turns them into `s`\n * through {@link seconds} so its emitted CSS is byte-for-byte what it was);\n * everything else is px, a ratio or an alpha. The hover, active and focus\n * numbers are here too although only the DOM can honour them — a number the\n * web draws with belongs in the table whether or not native can reach it.\n */\n\n/** The root: 12px corners, 14px 16px of padding, one 300ms curve for everything. */\nexport const ALERT_RADIUS_UNITS = 1.5;\nexport const ALERT_PADDING_UNITS = { vertical: 1.75, horizontal: 2 } as const;\nexport const ALERT_TRANSITION_MS = 300;\nexport const ALERT_EASING = 'cubic-bezier(0.4, 0, 0.2, 1)';\n\n/** Mount: the web's `fadeInScale` keyframes and the icon's `iconRotate`. */\nexport const FADE_IN = { ms: 300, scale: 0.95, lift: 10 } as const;\nexport const ICON_SPIN = { ms: 600, from: 0.8, mid: 1.1 } as const;\n/** Dismiss: MUI `Collapse` runs 300ms; `onClose` fires 200ms in. */\nexport const COLLAPSE_MS = 300;\nexport const CLOSE_DELAY_MS = 200;\n\n/** The message column: 8px between title, description and children; 0.95rem body on 1.5. */\nexport const MESSAGE_GAP_UNITS = 1;\nexport const MESSAGE_FONT_SIZE = 15.2;\nexport const MESSAGE_LINE_HEIGHT = 1.5;\n/** A control inside the message gets an edge: 4px above, a hairline at 0.45 of the hue. */\nexport const MESSAGE_BUTTON = { marginTopUnits: 0.5, borderAlpha: 0.45 } as const;\n\n/** The title: 1.05rem at 600; MUI's `AlertTitle` lifts it 2px; 4px below it when a description follows. */\nexport const TITLE = { fontSize: 16.8, fontWeight: 600, marginTop: -2, marginBottomUnits: 0.5 } as const;\n/** The description: 0.925rem, slightly faded. */\nexport const DESCRIPTION = { fontSize: 14.8, opacity: 0.9 } as const;\n\n/** The icon slot: MUI's 22px glyph at 0.9, 14px from the words, 2px down (MUI's 7px stays below). */\nexport const ICON_SLOT = { size: 22, opacity: 0.9, marginRightUnits: 1.75, paddingTopUnits: 0.25, paddingBottom: 7 } as const;\n/** The action slot: MUI's `4px 0 0 16px` with the 16px ours, pushed right, 8px into the padding. */\nexport const ACTION_SLOT = { paddingLeftUnits: 2, paddingTop: 4, marginRight: -8 } as const;\n/** The close button: MUI's small `IconButton` (5px padding, 18px glyph) at 0.7. */\nexport const CLOSE_BUTTON = { padding: 5, iconSize: 18, opacity: 0.7, washAlpha: 0.1 } as const;\n\n/**\n * A semantic Alert's surface and ink: an OPAQUE tint of the hue with a dark\n * ink of the same hue — MUI's own `standard` recipe, at its ratios. See\n * `semanticSurface` in `Alert.styles.tsx` for why not `alpha(main, 0.1)`.\n */\nexport const SEMANTIC_SURFACE = { tint: { light: 0.9, dark: 0.8 }, ink: 0.6, borderAlpha: 0.35 } as const;\n/** `glass`: 85% paper under a 20px blur, a 0.4 divider hairline. */\nexport const GLASS = { backgroundAlpha: 0.85, borderAlpha: 0.4, blur: 20, saturatePercent: 180 } as const;\n/**\n * `gradient`: light→dark at 0.9 along 135°, a 0.2 white shimmer sweeping 1000px every 3s.\n *\n * It carries no hover of its own, and that is load-bearing rather than an\n * omission. `alertVariantStyles` is spread AFTER the root's `'&:hover'` in the\n * same object literal, so a second `'&:hover'` key does not merge with it — it\n * REPLACES it. While this variant had one, `gradient` was the only alert that\n * brightened on hover while every other variant darkened, and the only one to\n * lose the shimmer reveal the root's hover performs.\n */\nexport const GRADIENT = {\n angleDeg: 135,\n stopAlpha: 0.9,\n shimmerAlpha: 0.2,\n shimmerMs: 3000,\n shimmerTravel: 1000,\n} as const;\n\n/** Emphasis: the glow's shadow and brightness, the pulse's wash. */\nexport const GLOW = { blur: 20, spread: 5, alpha: 0.3, brightness: 1.05 } as const;\nexport const PULSE = { alpha: 0.2, ms: 2000, spread: 10 } as const;\n\n/**\n * Pointer states — DOM only, kept so the web derives them.\n *\n * HOVER and ACTIVE carry NO geometry, and that is the point rather than an\n * omission. They used to lift the card 3px, scale it 1.01, grow a 20px shadow\n * and spin the icon 10deg at 1.15 — four things moving at once on a surface\n * that is not a control, which made a page of alerts twitch under the pointer.\n *\n * Both are a TINT now: a flat inset layer over the surface. Two mechanisms\n * came before it and each failed on a case the next had to fix. Dropping the\n * element's `opacity` composites toward the PAGE, so it inverted the hover on\n * a light tint (L* 95.0 idle, 89.1 hovered, 91.1 pressed) and vanished on a\n * dark one. A `filter: brightness()` fixed the direction but is MULTIPLICATIVE,\n * so it moved a near-black `glass` by four counts (ΔE76 1.71, under the JND)\n * and Banner's 10%-alpha wash by ΔE76 0.44. A layer is additive: it reads the\n * same on an opaque tint, a translucent wash and a gradient, and because it\n * paints above the background and below the content the ink keeps its own\n * contrast.\n */\nexport const HOVER = { tintAlpha: 0.06 } as const;\n\n/**\n * The press: a 20% tint LAYER, eased back fast.\n *\n * The layer is the point. The first attempt dropped the whole element's\n * opacity, which composites toward the PAGE and so behaves differently on\n * every surface it is asked about. Measured: over a light page it made a light\n * tint LIGHTER (L* 95.0 idle, 89.1 hovered, 91.1 pressed), so pushing the\n * surface looked like the pointer leaving; over a dark page it landed back on\n * the idle surface (ΔE76 0.82 on `glass`); on `gradient` it washed white body\n * copy to 2.31:1, under AA; and it diluted the ink during a text-selection\n * drag. A `brightness()` step instead of it fixed the direction but not the\n * reach — a multiplier does nothing to a near-black `glass` in dark mode\n * (ΔE76 1.71) and nothing to Banner's 10%-alpha wash (ΔE76 0.44), because it\n * scales only what the element already paints.\n *\n * An inset shadow at 100vmax is a flat tint over the whole surface: ADDITIVE,\n * so it reads the same on an opaque tint, a translucent wash and a gradient;\n * painted above the background and below the content, so the ink keeps its\n * own contrast; and animatable, which `background-image` is not.\n *\n * `ms` is 250 and not the 1000 first asked for, and the reason is that ONE\n * property carries both states. CSS runs a transition from the DESTINATION\n * state's declaration, and entering hover and releasing a press share that\n * destination — so they cannot have different durations without a second\n * animatable property, and both free pseudo-elements are already spent on the\n * `gradient` shimmer and the `pulse` wash. At 1000ms the hover inherited the\n * second: crossing an alert in 300ms peaked at a ≈ 0.024, under the JND, and\n * for ~360ms the alert you had just LEFT was darker than the one under the\n * pointer. A fast press-return is the smaller loss, and it is the call the\n * product owner made when shown both.\n */\nexport const ACTIVE = { tintAlpha: 0.2, ms: 250 } as const;\n\nexport const FOCUS = { ringWidth: 2, ringAlpha: 1, offset: 2 } as const;\n\n/** `neutral` has no palette slot; the web has always drawn it from three greys. */\nexport const NEUTRAL_GREY: Record<'main' | 'light' | 'dark', UiGreyStep> = { main: 500, light: 300, dark: 700 };\n\n/** A duration as the CSS the web has always emitted: `2000` → `2s`, `300` → `0.3s`. */\nexport const seconds = (ms: number): string => `${ms / 1000}s`;\n\n/** The palette shape the web's `getColorFromTheme` returns — a main plus optional shades. */\nexport interface AlertPalette {\n main: string;\n light?: string;\n dark?: string;\n}\n\n/**\n * The renderer-free twin of the web's `getColorFromTheme`: a variant or\n * colour name to its palette, `neutral` from the greys, anything unknown\n * (`glass`, `gradient`) to `info`.\n */\nexport function alertPalette(theme: UiTheme, key: string | undefined): AlertPalette {\n switch (key) {\n case 'info':\n case 'success':\n case 'warning':\n case 'danger':\n case 'primary':\n case 'secondary':\n return theme.palette[key];\n case 'neutral':\n return {\n main: theme.palette.grey[NEUTRAL_GREY.main],\n light: theme.palette.grey[NEUTRAL_GREY.light],\n dark: theme.palette.grey[NEUTRAL_GREY.dark],\n };\n default:\n return theme.palette.info;\n }\n}\n\n/** What a variant paints: its fill, its ink, its hairline if any, and the colour of its glyph. */\nexport interface AlertSurface {\n backgroundColor: string;\n color: string;\n borderColor?: string;\n iconColor: string;\n}\n\nexport const SEMANTIC_VARIANTS: ReadonlySet<AlertVariant> = new Set(['info', 'success', 'warning', 'danger']);\n\n/** The opaque tint and same-hue ink, inverted for dark mode; the hairline keeps its alpha. */\nexport function semanticSurface(theme: UiTheme, palette: AlertPalette): AlertSurface {\n const dark = theme.mode === 'dark';\n return {\n backgroundColor: dark\n ? darken(palette.main, SEMANTIC_SURFACE.tint.dark)\n : lighten(palette.main, SEMANTIC_SURFACE.tint.light),\n color: dark ? lighten(palette.main, SEMANTIC_SURFACE.ink) : darken(palette.main, SEMANTIC_SURFACE.ink),\n borderColor: alpha(palette.main, SEMANTIC_SURFACE.borderAlpha),\n iconColor: palette.main,\n };\n}\n\nexport function glassSurface(theme: UiTheme): AlertSurface {\n return {\n backgroundColor: alpha(theme.palette.background.paper, GLASS.backgroundAlpha),\n color: theme.palette.text.primary,\n borderColor: alpha(theme.palette.divider, GLASS.borderAlpha),\n iconColor: theme.palette.primary.main,\n };\n}\n\n/** The gradient's two stops; a renderer with no gradient fill paints `from`. */\nexport function gradientStops(palette: AlertPalette): { from: string; to: string } {\n return {\n from: alpha(palette.light || palette.main, GRADIENT.stopAlpha),\n to: alpha(palette.dark || palette.main, GRADIENT.stopAlpha),\n };\n}\n\nexport function gradientSurface(palette: AlertPalette): AlertSurface {\n const ink = contrastText(palette.main);\n return { backgroundColor: gradientStops(palette).from, color: ink, iconColor: ink };\n}\n\n/** The surface for a variant, `glass` and `gradient` included. */\nexport function alertSurface(theme: UiTheme, variant: AlertVariant, palette: AlertPalette): AlertSurface {\n if (variant === 'glass') return glassSurface(theme);\n if (variant === 'gradient') return gradientSurface(palette);\n return semanticSurface(theme, palette);\n}\n","import type { TextStyle, ViewStyle } from 'react-native';\n\nimport type { AlertVariant } from './Alert.base';\nimport {\n ACTION_SLOT,\n ALERT_PADDING_UNITS,\n ALERT_RADIUS_UNITS,\n type AlertPalette,\n alertPalette,\n alertSurface,\n CLOSE_BUTTON,\n DESCRIPTION,\n GLOW,\n ICON_SLOT,\n MESSAGE_FONT_SIZE,\n MESSAGE_GAP_UNITS,\n MESSAGE_LINE_HEIGHT,\n TITLE,\n} from './Alert.metrics';\nimport { alpha } from '../../../tokens/color';\nimport { muiTypeStyle } from '../../../tokens/mui-type';\nimport type { UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\n/**\n * THE PAINT, KEPT APART FROM THE STRUCTURE.\n *\n * `Alert.native.tsx` reads as what renders where; this file reads as\n * arithmetic — the same palette slots, alphas and px the web's\n * `Alert.styles.tsx` derives from `Alert.metrics.ts`.\n */\n\nexport interface AlertLookArgs {\n variant: AlertVariant;\n color: ColorValue | undefined;\n glow: boolean;\n pulse: boolean;\n}\n\nexport interface AlertLook {\n palette: AlertPalette;\n /** What the words are set in. */\n ink: string;\n iconColor: string;\n root: ViewStyle;\n}\n\n/**\n * The root's paint. The web keeps `overflow: hidden` (its pulse wash is\n * clipped to the card, as it is here); only the glow opens it, because a\n * view's own shadow is clipped by its own overflow on a device.\n */\nexport function alertLook(theme: UiTheme, a: AlertLookArgs): AlertLook {\n const palette = alertPalette(theme, a.color ?? a.variant);\n const surface = alertSurface(theme, a.variant, palette);\n const root: ViewStyle = {\n flexDirection: 'row',\n paddingVertical: theme.spacing(ALERT_PADDING_UNITS.vertical),\n paddingHorizontal: theme.spacing(ALERT_PADDING_UNITS.horizontal),\n borderRadius: theme.spacing(ALERT_RADIUS_UNITS),\n overflow: a.glow ? 'visible' : 'hidden',\n backgroundColor: surface.backgroundColor,\n ...(surface.borderColor ? { borderWidth: 1, borderColor: surface.borderColor } : {}),\n ...(a.glow\n ? {\n boxShadow: `0 0 ${GLOW.blur}px ${GLOW.spread}px ${alpha(palette.main, GLOW.alpha)}`,\n filter: `brightness(${GLOW.brightness})`,\n }\n : {}),\n };\n return { palette, ink: surface.color, iconColor: surface.iconColor, root };\n}\n\n/** The message column: 8px between its lines, allowed to shrink so long text wraps beside the icon. */\nexport const messageSlotStyle = (theme: UiTheme): ViewStyle => ({\n flexDirection: 'column',\n gap: theme.spacing(MESSAGE_GAP_UNITS),\n flexShrink: 1,\n minWidth: 0,\n});\n\n/** A string child: MUI's `body2` letter-spacing at 0.95rem on the message's 1.5. */\nexport const messageTextStyle = (theme: UiTheme, ink: string): TextStyle => ({\n ...muiTypeStyle(theme, 'body2', MESSAGE_FONT_SIZE),\n lineHeight: MESSAGE_FONT_SIZE * MESSAGE_LINE_HEIGHT,\n color: ink,\n});\n\n/** MUI's `AlertTitle` (a `body1` Typography) at 1.05rem and 600, lifted 2px, 4px above a description. */\nexport const titleStyle = (theme: UiTheme, ink: string, hasDescription: boolean): TextStyle => ({\n ...muiTypeStyle(theme, 'body1', TITLE.fontSize),\n fontWeight: `${TITLE.fontWeight}`,\n color: ink,\n marginTop: TITLE.marginTop,\n marginBottom: hasDescription ? theme.spacing(TITLE.marginBottomUnits) : 0,\n});\n\n/** The description: 0.925rem on the message's 1.5, faded to 0.9. */\nexport const descriptionStyle = (theme: UiTheme, ink: string): TextStyle => ({\n ...muiTypeStyle(theme, 'body2', DESCRIPTION.fontSize),\n lineHeight: DESCRIPTION.fontSize * MESSAGE_LINE_HEIGHT,\n color: ink,\n opacity: DESCRIPTION.opacity,\n});\n\n/** MUI's `.MuiAlert-icon` with the web's overrides: first-line aligned, 14px from the words, 2px down. */\nexport const iconSlotStyle = (theme: UiTheme): ViewStyle => ({\n alignSelf: 'flex-start',\n alignItems: 'center',\n marginRight: theme.spacing(ICON_SLOT.marginRightUnits),\n paddingTop: theme.spacing(ICON_SLOT.paddingTopUnits),\n paddingBottom: ICON_SLOT.paddingBottom,\n opacity: ICON_SLOT.opacity,\n});\n\n/** MUI's `.MuiAlert-action`: top-aligned, pushed to the right edge, 16px off the text. */\nexport const actionSlotStyle = (theme: UiTheme): ViewStyle => ({\n alignItems: 'flex-start',\n paddingTop: ACTION_SLOT.paddingTop,\n paddingLeft: theme.spacing(ACTION_SLOT.paddingLeftUnits),\n marginLeft: 'auto',\n marginRight: ACTION_SLOT.marginRight,\n});\n\n/** MUI's small `IconButton` at 0.7; pressed stands in for the web's hover (full opacity, a faint wash). */\nexport const closeButtonStyle = (theme: UiTheme, pressed: boolean): ViewStyle => ({\n padding: CLOSE_BUTTON.padding,\n borderRadius: theme.radius.full,\n opacity: pressed ? 1 : CLOSE_BUTTON.opacity,\n backgroundColor: pressed ? alpha(theme.palette.action.hover, CLOSE_BUTTON.washAlpha) : 'transparent',\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/data-display/Alert/Alert.native.tsx","../../../src/components/data-display/Alert/Alert.helpers.ts","../../../src/components/data-display/Alert/Alert.metrics.ts","../../../src/components/data-display/Alert/Alert.look.native.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n Easing,\n type LayoutChangeEvent,\n Platform,\n Pressable,\n type Role,\n StyleSheet,\n Text as RNText,\n View,\n type ViewStyle,\n} from 'react-native';\n\nimport { resolveAlertProps, resolveAnnouncement, testIdFor, VARIANT_ICON } from './Alert.helpers';\nimport {\n actionSlotStyle,\n alertLook,\n closeButtonStyle,\n descriptionStyle,\n iconSlotStyle,\n messageSlotStyle,\n messageTextStyle,\n titleStyle,\n} from './Alert.look.native';\nimport { CLOSE_BUTTON, CLOSE_DELAY_MS, COLLAPSE_MS, FADE_IN, ICON_SLOT, ICON_SPIN, PULSE } from './Alert.metrics';\nimport type { AlertProps, AlertVariant } from './Alert.types.native';\nimport { Icon } from '../../../icons/Icon.native';\nimport { webAria } from '../../../platform/aria';\nimport { renderTextChildren } from '../../../platform/text-children';\nimport { resolveTestId, withoutTestIdProps } from '../../../platform/test-id';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\n\ntype AnimatedStyle = Animated.WithAnimatedValue<ViewStyle>;\nconst nativeDriver = Platform.OS !== 'web';\n\n/** A 0→1 progress that starts on mount when `animate` is set, else sits at 1. */\nfunction useProgress(animate: boolean, duration: number): Animated.Value {\n const progress = React.useRef(new Animated.Value(animate ? 0 : 1)).current;\n React.useEffect(() => {\n if (!animate) return undefined;\n const timing = Animated.timing(progress, { toValue: 1, duration, easing: Easing.out(Easing.ease), useNativeDriver: nativeDriver });\n timing.start();\n return () => timing.stop();\n }, [animate, duration, progress]);\n return progress;\n}\n\n/** The web's `fadeInScale` keyframes: in from 0 opacity, 0.95 scale and 10px above, over 300ms. */\nfunction useFadeIn(animate: boolean): AnimatedStyle | undefined {\n const progress = useProgress(animate, FADE_IN.ms);\n if (!animate) return undefined;\n return {\n opacity: progress,\n transform: [\n { scale: progress.interpolate({ inputRange: [0, 1], outputRange: [FADE_IN.scale, 1] }) },\n { translateY: progress.interpolate({ inputRange: [0, 1], outputRange: [-FADE_IN.lift, 0] }) },\n ],\n };\n}\n\n/** The web's `iconRotate` keyframes: one full turn, 0.8 → 1.1 → 1, over 600ms. */\nfunction useIconSpin(animate: boolean): AnimatedStyle | undefined {\n const progress = useProgress(animate, ICON_SPIN.ms);\n if (!animate) return undefined;\n return {\n transform: [\n { rotate: progress.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] }) },\n { scale: progress.interpolate({ inputRange: [0, 0.5, 1], outputRange: [ICON_SPIN.from, ICON_SPIN.mid, 1] }) },\n ],\n };\n}\n\n/** The web's `::after` pulse: a wash of the hue over the card, fading out every two seconds, behind the words. */\nfunction Pulse({ color, radius, testID }: { color: string; radius: number; testID: string }): React.JSX.Element {\n const progress = React.useRef(new Animated.Value(0)).current;\n React.useEffect(() => {\n const loop = Animated.loop(\n Animated.timing(progress, { toValue: 1, duration: PULSE.ms, easing: Easing.linear, useNativeDriver: nativeDriver }),\n );\n loop.start();\n return () => loop.stop();\n }, [progress]);\n return (\n <Animated.View\n testID={testID}\n aria-hidden\n style={[\n StyleSheet.absoluteFill,\n {\n pointerEvents: 'none',\n borderRadius: radius,\n backgroundColor: color,\n opacity: progress.interpolate({ inputRange: [0, 0.7, 1], outputRange: [PULSE.alpha, 0, 0] }),\n },\n ]}\n />\n );\n}\n\n/**\n * MUI's `Collapse`: open, it is a plain wrapper with its overflow visible (so\n * a glow can escape); closing, it clips and shrinks over 300ms, then says so.\n */\nfunction Collapse({ open, onCollapsed, children }: { open: boolean; onCollapsed: () => void; children: React.ReactNode }): React.JSX.Element {\n const [height, setHeight] = React.useState<number | null>(null);\n const progress = React.useRef(new Animated.Value(1)).current;\n React.useEffect(() => {\n if (open) return undefined;\n const timing = Animated.timing(progress, { toValue: 0, duration: COLLAPSE_MS, easing: Easing.inOut(Easing.ease), useNativeDriver: false });\n timing.start(({ finished }) => {\n if (finished) onCollapsed();\n });\n return () => timing.stop();\n }, [open, onCollapsed, progress]);\n const onLayout = (event: LayoutChangeEvent): void => {\n if (open) setHeight(event.nativeEvent.layout.height);\n };\n const shrink: AnimatedStyle = height == null ? {} : { maxHeight: progress.interpolate({ inputRange: [0, 1], outputRange: [0, height] }) };\n return (\n <Animated.View style={[{ overflow: open ? 'visible' : 'hidden', opacity: progress }, shrink]}>\n <View onLayout={onLayout}>{children}</View>\n </Animated.View>\n );\n}\n\ninterface IconSlotProps {\n variant: AlertVariant;\n icon: React.ReactNode;\n color: string;\n animate: boolean;\n testID: string;\n}\n\n/** The icon slot; `glass` and `gradient` have no glyph of their own, so theirs is empty unless an `icon` is given — as on the web. */\nfunction IconSlot({ variant, icon, color, animate, testID }: IconSlotProps): React.JSX.Element {\n const theme = useUiTheme();\n const spin = useIconSpin(animate);\n const glyph = VARIANT_ICON[variant];\n return (\n <Animated.View testID={testID} style={[iconSlotStyle(theme), spin]}>\n {icon || (glyph ? <Icon name={glyph} size={ICON_SLOT.size} color={color} /> : null)}\n </Animated.View>\n );\n}\n\nfunction CloseButton({ label, ink, onPress, testID }: { label: string | undefined; ink: string; onPress: () => void; testID: string }): React.JSX.Element {\n const theme = useUiTheme();\n return (\n <Pressable role=\"button\" aria-label={label} testID={testID} onPress={onPress} style={({ pressed }) => closeButtonStyle(theme, pressed)}>\n <Icon name=\"Close\" size={CLOSE_BUTTON.iconSize} color={ink} />\n </Pressable>\n );\n}\n\ninterface ContentProps {\n title?: string;\n description?: string;\n children?: React.ReactNode;\n ink: string;\n testId: string;\n}\n\nfunction AlertContent({ title, description, children, ink, testId }: ContentProps): React.JSX.Element {\n const theme = useUiTheme();\n return (\n <View style={messageSlotStyle(theme)}>\n {title ? (\n <RNText testID={testIdFor(testId, 'title')} style={titleStyle(theme, ink, Boolean(description))}>\n {title}\n </RNText>\n ) : null}\n {description ? (\n <RNText testID={testIdFor(testId, 'message')} style={descriptionStyle(theme, ink)}>\n {description}\n </RNText>\n ) : null}\n {renderTextChildren(children, messageTextStyle(theme, ink))}\n </View>\n );\n}\n\n/** The dismiss sequence the web runs: mark closing, fire `onClose` 200ms in, stay until the collapse has run. */\nfunction useDismiss(onClose: (() => void) | undefined): { open: boolean; gone: boolean; close: () => void; onCollapsed: () => void } {\n const [closing, setClosing] = React.useState(false);\n const [gone, setGone] = React.useState(false);\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n React.useEffect(() => () => {\n if (timer.current) clearTimeout(timer.current);\n }, []);\n const close = (): void => {\n setClosing(true);\n timer.current = setTimeout(() => onClose?.(), CLOSE_DELAY_MS);\n };\n const onCollapsed = React.useCallback(() => setGone(true), []);\n return { open: !closing, gone, close, onCollapsed };\n}\n\nexport const Alert = React.forwardRef<View, AlertProps>((alertProps, ref) => {\n const {\n variant, color, glow, pulse, icon, showIcon, onClose, title, description, children, animate,\n // `role`, `announce` and `aria-live` all leave here and are resolved\n // TOGETHER below, off `alertProps` — see `resolveAnnouncement`.\n role: _role, announce: _announce,\n 'aria-atomic': ariaAtomic, 'aria-live': _ariaLive, closable, closeLabel, style, ...others\n } = resolveAlertProps(alertProps);\n const theme = useUiTheme();\n const testId = resolveTestId(others, 'alert') as string;\n const rest = withoutTestIdProps(others);\n const look = alertLook(theme, { variant, color, glow, pulse });\n const fadeIn = useFadeIn(animate);\n const dismiss = useDismiss(onClose);\n const announcement = resolveAnnouncement(alertProps, variant);\n\n if (dismiss.gone) return null;\n return (\n <Collapse open={dismiss.open} onCollapsed={dismiss.onCollapsed}>\n <Animated.View\n ref={ref}\n role={announcement.role as Role}\n aria-live={announcement['aria-live']}\n {...webAria({ 'aria-atomic': ariaAtomic })}\n tabIndex={0}\n testID={testId}\n style={[look.root, fadeIn, style]}\n {...rest}\n >\n {pulse ? <Pulse color={look.palette.main} radius={look.root.borderRadius as number} testID={testIdFor(testId, 'pulse')} /> : null}\n {showIcon ? <IconSlot variant={variant} icon={icon} color={look.iconColor} animate={animate} testID={testIdFor(testId, 'icon')} /> : null}\n <AlertContent title={title} description={description} ink={look.ink} testId={testId}>\n {children}\n </AlertContent>\n {closable ? (\n <View style={actionSlotStyle(theme)}>\n <CloseButton label={closeLabel} ink={look.ink} onPress={dismiss.close} testID={testIdFor(testId, 'close')} />\n </View>\n ) : null}\n </Animated.View>\n </Collapse>\n );\n});\n\nAlert.displayName = 'Alert';\n","import type { AlertBaseFields, AlertVariant } from './Alert.base';\nimport type { IconName } from '../../../icons/Icon.types';\n\ntype AlertDefaultedKeys = 'variant' | 'glow' | 'pulse' | 'showIcon' | 'animate' | 'role' | 'aria-atomic';\n\nexport const ALERT_DEFAULTS: Required<Pick<AlertBaseFields, AlertDefaultedKeys>> & { closable: false } = {\n variant: 'info',\n glow: false,\n pulse: false,\n showIcon: true,\n closable: false,\n animate: true,\n role: 'alert',\n 'aria-atomic': 'true',\n};\n\n/**\n * Generic over the renderer's own props: the web and the native `Alert` pass\n * different extras through, and both come back out untouched.\n */\nexport type ResolvedAlertProps<P extends AlertBaseFields> = P &\n Required<Pick<AlertBaseFields, AlertDefaultedKeys>>;\n\n// Strips explicitly-undefined props before the merge so `prop={undefined}` still\n// falls back to the default, the way a destructuring default would.\nconst definedProps = <P extends AlertBaseFields>(props: P): Partial<P> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<P>;\n\n// Through `unknown`: `closable: false` in the defaults belongs to the dismiss\n// union rather than to `AlertBaseFields`, so TypeScript cannot see the merge as\n// comparable to `P` although every field of `P` survives it untouched.\nexport const resolveAlertProps = <P extends AlertBaseFields>(props: P): ResolvedAlertProps<P> =>\n ({ ...ALERT_DEFAULTS, ...definedProps(props) }) as unknown as ResolvedAlertProps<P>;\n\n/** `danger` announces itself; everything else waits its turn. */\nexport const defaultAriaLive = (variant: AlertVariant): 'polite' | 'assertive' =>\n variant === 'danger' ? 'assertive' : 'polite';\n\n/**\n * The ARIA role each `announce` level is spelled with.\n *\n * Both roles carry an IMPLICIT live setting, and that implicit one is what\n * assistive tech acts on — `alert` is assertive, `status` is polite. Pairing\n * them here is what stops `role` and `aria-live` from contradicting each\n * other, which they do by default: every alert is `role=\"alert\"` regardless of\n * variant, so an `info` alert asks to be polite in one attribute and to\n * interrupt in the other.\n */\nexport const ANNOUNCE_ROLE: Record<NonNullable<AlertBaseFields['announce']>, string> = {\n assertive: 'alert',\n polite: 'status',\n};\n\n/**\n * The two attributes that decide whether an alert interrupts, resolved TOGETHER.\n *\n * Both renderers therefore let `role` and `announce` leave their destructure\n * unused (`_role`, `_announce`) and call this instead — the first because the\n * defaults have already answered it, the second because it must never reach\n * the DOM.\n *\n * Reads the caller's own props rather than the defaulted ones, because the\n * whole question is which of them the caller actually spelled:\n * {@link ALERT_DEFAULTS} supplies `role: 'alert'` for everything, so after the\n * merge there is no longer any difference between an alert that asked to\n * interrupt and one that never mentioned it.\n *\n * Precedence, most specific first — an explicit `role` or `aria-live` beats\n * `announce`, so a call site that already spells either by hand is untouched:\n *\n * 1. `role` / `aria-live` as given;\n * 2. {@link AlertBaseFields.announce}, which supplies both;\n * 3. today's behaviour — `ALERT_DEFAULTS.role` and {@link defaultAriaLive}.\n *\n * With none of the three named, the result is byte-for-byte what it was before\n * `announce` existed.\n */\nexport const resolveAnnouncement = (\n props: Pick<AlertBaseFields, 'announce' | 'role' | 'aria-live'>,\n variant: AlertVariant,\n): { role: string; 'aria-live': 'polite' | 'assertive' | 'off' } => {\n const announce = props.announce;\n return {\n role: props.role ?? (announce === undefined ? ALERT_DEFAULTS.role : ANNOUNCE_ROLE[announce]),\n 'aria-live': props['aria-live'] ?? announce ?? defaultAriaLive(variant),\n };\n};\n\nexport const testIdFor = (base: string | undefined, suffix: string): string =>\n base ? `${base}-${suffix}` : `alert-${suffix}`;\n\n/**\n * The glyph each semantic variant carries, by the shared icon set's name.\n * `glass` and `gradient` carry none of their own: the web renders an empty\n * icon slot for them unless the caller passes an `icon`, and so does native.\n */\nexport const VARIANT_ICON: Partial<Record<AlertVariant, IconName>> = {\n info: 'Info',\n success: 'CheckCircle',\n warning: 'Warning',\n danger: 'Error',\n};\n","import type { AlertVariant } from './Alert.base';\nimport { alpha, darken, lighten } from '../../../tokens/color';\nimport { NEUTRAL_RAMP } from '../../../tokens/ink.core';\nimport { contrastText, type UiGreyStep, type UiTheme } from '../../../tokens/theme';\n\n/**\n * THE NUMBERS BOTH `Alert` RENDERERS DRAW WITH.\n *\n * `Alert.styles.tsx` / `Alert.tsx` (MUI) and `Alert.native.tsx` (React\n * Native) read this one table. Spacing is in SPACING UNITS where the web\n * writes `theme.spacing(n)`; durations are ms (the web turns them into `s`\n * through {@link seconds} so its emitted CSS is byte-for-byte what it was);\n * everything else is px, a ratio or an alpha. The hover, active and focus\n * numbers are here too although only the DOM can honour them — a number the\n * web draws with belongs in the table whether or not native can reach it.\n */\n\n/** The root: 12px corners, 14px 16px of padding, one 300ms curve for everything. */\nexport const ALERT_RADIUS_UNITS = 1.5;\nexport const ALERT_PADDING_UNITS = { vertical: 1.75, horizontal: 2 } as const;\nexport const ALERT_TRANSITION_MS = 300;\nexport const ALERT_EASING = 'cubic-bezier(0.4, 0, 0.2, 1)';\n\n/** Mount: the web's `fadeInScale` keyframes and the icon's `iconRotate`. */\nexport const FADE_IN = { ms: 300, scale: 0.95, lift: 10 } as const;\nexport const ICON_SPIN = { ms: 600, from: 0.8, mid: 1.1 } as const;\n/** Dismiss: MUI `Collapse` runs 300ms; `onClose` fires 200ms in. */\nexport const COLLAPSE_MS = 300;\nexport const CLOSE_DELAY_MS = 200;\n\n/** The message column: 8px between title, description and children; 0.95rem body on 1.5. */\nexport const MESSAGE_GAP_UNITS = 1;\nexport const MESSAGE_FONT_SIZE = 15.2;\nexport const MESSAGE_LINE_HEIGHT = 1.5;\n/** A control inside the message gets an edge: 4px above, a hairline at 0.45 of the hue. */\nexport const MESSAGE_BUTTON = { marginTopUnits: 0.5, borderAlpha: 0.45 } as const;\n\n/** The title: 1.05rem at 600; MUI's `AlertTitle` lifts it 2px; 4px below it when a description follows. */\nexport const TITLE = { fontSize: 16.8, fontWeight: 600, marginTop: -2, marginBottomUnits: 0.5 } as const;\n/** The description: 0.925rem, slightly faded. */\nexport const DESCRIPTION = { fontSize: 14.8, opacity: 0.9 } as const;\n\n/** The icon slot: MUI's 22px glyph at 0.9, 14px from the words, 2px down (MUI's 7px stays below). */\nexport const ICON_SLOT = { size: 22, opacity: 0.9, marginRightUnits: 1.75, paddingTopUnits: 0.25, paddingBottom: 7 } as const;\n/** The action slot: MUI's `4px 0 0 16px` with the 16px ours, pushed right, 8px into the padding. */\nexport const ACTION_SLOT = { paddingLeftUnits: 2, paddingTop: 4, marginRight: -8 } as const;\n/** The close button: MUI's small `IconButton` (5px padding, 18px glyph) at 0.7. */\nexport const CLOSE_BUTTON = { padding: 5, iconSize: 18, opacity: 0.7, washAlpha: 0.1 } as const;\n\n/**\n * A semantic Alert's surface and ink: an OPAQUE tint of the hue with a dark\n * ink of the same hue — MUI's own `standard` recipe, at its ratios. See\n * `semanticSurface` in `Alert.styles.tsx` for why not `alpha(main, 0.1)`.\n */\nexport const SEMANTIC_SURFACE = { tint: { light: 0.9, dark: 0.8 }, ink: 0.6, borderAlpha: 0.35 } as const;\n/** `glass`: 85% paper under a 20px blur, a 0.4 divider hairline. */\nexport const GLASS = { backgroundAlpha: 0.85, borderAlpha: 0.4, blur: 20, saturatePercent: 180 } as const;\n/**\n * `gradient`: light→dark at 0.9 along 135°, a 0.2 white shimmer sweeping 1000px every 3s.\n *\n * It carries no hover of its own, and that is load-bearing rather than an\n * omission. `alertVariantStyles` is spread AFTER the root's `'&:hover'` in the\n * same object literal, so a second `'&:hover'` key does not merge with it — it\n * REPLACES it. While this variant had one, `gradient` was the only alert that\n * brightened on hover while every other variant darkened, and the only one to\n * lose the shimmer reveal the root's hover performs.\n */\nexport const GRADIENT = {\n angleDeg: 135,\n stopAlpha: 0.9,\n shimmerAlpha: 0.2,\n shimmerMs: 3000,\n shimmerTravel: 1000,\n} as const;\n\n/** Emphasis: the glow's shadow and brightness, the pulse's wash. */\nexport const GLOW = { blur: 20, spread: 5, alpha: 0.3, brightness: 1.05 } as const;\nexport const PULSE = { alpha: 0.2, ms: 2000, spread: 10 } as const;\n\n/**\n * Pointer states — DOM only, kept so the web derives them.\n *\n * HOVER and ACTIVE carry NO geometry, and that is the point rather than an\n * omission. They used to lift the card 3px, scale it 1.01, grow a 20px shadow\n * and spin the icon 10deg at 1.15 — four things moving at once on a surface\n * that is not a control, which made a page of alerts twitch under the pointer.\n *\n * Both are a TINT now: a flat inset layer over the surface. Two mechanisms\n * came before it and each failed on a case the next had to fix. Dropping the\n * element's `opacity` composites toward the PAGE, so it inverted the hover on\n * a light tint (L* 95.0 idle, 89.1 hovered, 91.1 pressed) and vanished on a\n * dark one. A `filter: brightness()` fixed the direction but is MULTIPLICATIVE,\n * so it moved a near-black `glass` by four counts (ΔE76 1.71, under the JND)\n * and Banner's 10%-alpha wash by ΔE76 0.44. A layer is additive: it reads the\n * same on an opaque tint, a translucent wash and a gradient, and because it\n * paints above the background and below the content the ink keeps its own\n * contrast.\n */\nexport const HOVER = { tintAlpha: 0.06 } as const;\n\n/**\n * The press: a 20% tint LAYER, eased back fast.\n *\n * The layer is the point. The first attempt dropped the whole element's\n * opacity, which composites toward the PAGE and so behaves differently on\n * every surface it is asked about. Measured: over a light page it made a light\n * tint LIGHTER (L* 95.0 idle, 89.1 hovered, 91.1 pressed), so pushing the\n * surface looked like the pointer leaving; over a dark page it landed back on\n * the idle surface (ΔE76 0.82 on `glass`); on `gradient` it washed white body\n * copy to 2.31:1, under AA; and it diluted the ink during a text-selection\n * drag. A `brightness()` step instead of it fixed the direction but not the\n * reach — a multiplier does nothing to a near-black `glass` in dark mode\n * (ΔE76 1.71) and nothing to Banner's 10%-alpha wash (ΔE76 0.44), because it\n * scales only what the element already paints.\n *\n * An inset shadow at 100vmax is a flat tint over the whole surface: ADDITIVE,\n * so it reads the same on an opaque tint, a translucent wash and a gradient;\n * painted above the background and below the content, so the ink keeps its\n * own contrast; and animatable, which `background-image` is not.\n *\n * `ms` is 250 and not the 1000 first asked for, and the reason is that ONE\n * property carries both states. CSS runs a transition from the DESTINATION\n * state's declaration, and entering hover and releasing a press share that\n * destination — so they cannot have different durations without a second\n * animatable property, and both free pseudo-elements are already spent on the\n * `gradient` shimmer and the `pulse` wash. At 1000ms the hover inherited the\n * second: crossing an alert in 300ms peaked at a ≈ 0.024, under the JND, and\n * for ~360ms the alert you had just LEFT was darker than the one under the\n * pointer. A fast press-return is the smaller loss, and it is the call the\n * product owner made when shown both.\n */\nexport const ACTIVE = { tintAlpha: 0.2, ms: 250 } as const;\n\nexport const FOCUS = { ringWidth: 2, ringAlpha: 1, offset: 2 } as const;\n\n/** `neutral` has no palette slot; the web has always drawn it from three greys. */\nexport const NEUTRAL_GREY: Record<'main' | 'light' | 'dark', UiGreyStep> = { main: 500, light: 300, dark: 700 };\n\n/** A duration as the CSS the web has always emitted: `2000` → `2s`, `300` → `0.3s`. */\nexport const seconds = (ms: number): string => `${ms / 1000}s`;\n\n/** The palette shape the web's `getColorFromTheme` returns — a main plus optional shades. */\nexport interface AlertPalette {\n main: string;\n light?: string;\n dark?: string;\n}\n\n/**\n * The renderer-free twin of the web's `getColorFromTheme`: a variant or\n * colour name to its palette, `neutral` from the greys, anything unknown\n * (`glass`, `gradient`) to `info`.\n */\nexport function alertPalette(theme: UiTheme, key: string | undefined): AlertPalette {\n switch (key) {\n case 'info':\n case 'success':\n case 'warning':\n case 'danger':\n case 'primary':\n case 'secondary':\n return theme.palette[key];\n case 'neutral':\n return {\n main: NEUTRAL_RAMP[NEUTRAL_GREY.main],\n light: NEUTRAL_RAMP[NEUTRAL_GREY.light],\n dark: NEUTRAL_RAMP[NEUTRAL_GREY.dark],\n };\n default:\n return theme.palette.info;\n }\n}\n\n/** What a variant paints: its fill, its ink, its hairline if any, and the colour of its glyph. */\nexport interface AlertSurface {\n backgroundColor: string;\n color: string;\n borderColor?: string;\n iconColor: string;\n}\n\nexport const SEMANTIC_VARIANTS: ReadonlySet<AlertVariant> = new Set(['info', 'success', 'warning', 'danger']);\n\n/** The opaque tint and same-hue ink, inverted for dark mode; the hairline keeps its alpha. */\nexport function semanticSurface(theme: UiTheme, palette: AlertPalette): AlertSurface {\n const dark = theme.mode === 'dark';\n return {\n backgroundColor: dark\n ? darken(palette.main, SEMANTIC_SURFACE.tint.dark)\n : lighten(palette.main, SEMANTIC_SURFACE.tint.light),\n color: dark ? lighten(palette.main, SEMANTIC_SURFACE.ink) : darken(palette.main, SEMANTIC_SURFACE.ink),\n borderColor: alpha(palette.main, SEMANTIC_SURFACE.borderAlpha),\n iconColor: palette.main,\n };\n}\n\nexport function glassSurface(theme: UiTheme): AlertSurface {\n return {\n backgroundColor: alpha(theme.palette.background.paper, GLASS.backgroundAlpha),\n color: theme.palette.text.primary,\n borderColor: alpha(theme.palette.divider, GLASS.borderAlpha),\n iconColor: theme.palette.primary.main,\n };\n}\n\n/** The gradient's two stops; a renderer with no gradient fill paints `from`. */\nexport function gradientStops(palette: AlertPalette): { from: string; to: string } {\n return {\n from: alpha(palette.light || palette.main, GRADIENT.stopAlpha),\n to: alpha(palette.dark || palette.main, GRADIENT.stopAlpha),\n };\n}\n\nexport function gradientSurface(palette: AlertPalette): AlertSurface {\n const ink = contrastText(palette.main);\n return { backgroundColor: gradientStops(palette).from, color: ink, iconColor: ink };\n}\n\n/** The surface for a variant, `glass` and `gradient` included. */\nexport function alertSurface(theme: UiTheme, variant: AlertVariant, palette: AlertPalette): AlertSurface {\n if (variant === 'glass') return glassSurface(theme);\n if (variant === 'gradient') return gradientSurface(palette);\n return semanticSurface(theme, palette);\n}\n","import type { TextStyle, ViewStyle } from 'react-native';\n\nimport type { AlertVariant } from './Alert.base';\nimport {\n ACTION_SLOT,\n ALERT_PADDING_UNITS,\n ALERT_RADIUS_UNITS,\n type AlertPalette,\n alertPalette,\n alertSurface,\n CLOSE_BUTTON,\n DESCRIPTION,\n GLOW,\n ICON_SLOT,\n MESSAGE_FONT_SIZE,\n MESSAGE_GAP_UNITS,\n MESSAGE_LINE_HEIGHT,\n TITLE,\n} from './Alert.metrics';\nimport { alpha } from '../../../tokens/color';\nimport { muiTypeStyle } from '../../../tokens/mui-type';\nimport type { UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\n/**\n * THE PAINT, KEPT APART FROM THE STRUCTURE.\n *\n * `Alert.native.tsx` reads as what renders where; this file reads as\n * arithmetic — the same palette slots, alphas and px the web's\n * `Alert.styles.tsx` derives from `Alert.metrics.ts`.\n */\n\nexport interface AlertLookArgs {\n variant: AlertVariant;\n color: ColorValue | undefined;\n glow: boolean;\n pulse: boolean;\n}\n\nexport interface AlertLook {\n palette: AlertPalette;\n /** What the words are set in. */\n ink: string;\n iconColor: string;\n root: ViewStyle;\n}\n\n/**\n * The root's paint. The web keeps `overflow: hidden` (its pulse wash is\n * clipped to the card, as it is here); only the glow opens it, because a\n * view's own shadow is clipped by its own overflow on a device.\n */\nexport function alertLook(theme: UiTheme, a: AlertLookArgs): AlertLook {\n const palette = alertPalette(theme, a.color ?? a.variant);\n const surface = alertSurface(theme, a.variant, palette);\n const root: ViewStyle = {\n flexDirection: 'row',\n paddingVertical: theme.spacing(ALERT_PADDING_UNITS.vertical),\n paddingHorizontal: theme.spacing(ALERT_PADDING_UNITS.horizontal),\n borderRadius: theme.spacing(ALERT_RADIUS_UNITS),\n overflow: a.glow ? 'visible' : 'hidden',\n backgroundColor: surface.backgroundColor,\n ...(surface.borderColor ? { borderWidth: 1, borderColor: surface.borderColor } : {}),\n ...(a.glow\n ? {\n boxShadow: `0 0 ${GLOW.blur}px ${GLOW.spread}px ${alpha(palette.main, GLOW.alpha)}`,\n filter: `brightness(${GLOW.brightness})`,\n }\n : {}),\n };\n return { palette, ink: surface.color, iconColor: surface.iconColor, root };\n}\n\n/** The message column: 8px between its lines, allowed to shrink so long text wraps beside the icon. */\nexport const messageSlotStyle = (theme: UiTheme): ViewStyle => ({\n flexDirection: 'column',\n gap: theme.spacing(MESSAGE_GAP_UNITS),\n flexShrink: 1,\n minWidth: 0,\n});\n\n/** A string child: MUI's `body2` letter-spacing at 0.95rem on the message's 1.5. */\nexport const messageTextStyle = (theme: UiTheme, ink: string): TextStyle => ({\n ...muiTypeStyle(theme, 'body2', MESSAGE_FONT_SIZE),\n lineHeight: MESSAGE_FONT_SIZE * MESSAGE_LINE_HEIGHT,\n color: ink,\n});\n\n/** MUI's `AlertTitle` (a `body1` Typography) at 1.05rem and 600, lifted 2px, 4px above a description. */\nexport const titleStyle = (theme: UiTheme, ink: string, hasDescription: boolean): TextStyle => ({\n ...muiTypeStyle(theme, 'body1', TITLE.fontSize),\n fontWeight: `${TITLE.fontWeight}`,\n color: ink,\n marginTop: TITLE.marginTop,\n marginBottom: hasDescription ? theme.spacing(TITLE.marginBottomUnits) : 0,\n});\n\n/** The description: 0.925rem on the message's 1.5, faded to 0.9. */\nexport const descriptionStyle = (theme: UiTheme, ink: string): TextStyle => ({\n ...muiTypeStyle(theme, 'body2', DESCRIPTION.fontSize),\n lineHeight: DESCRIPTION.fontSize * MESSAGE_LINE_HEIGHT,\n color: ink,\n opacity: DESCRIPTION.opacity,\n});\n\n/** MUI's `.MuiAlert-icon` with the web's overrides: first-line aligned, 14px from the words, 2px down. */\nexport const iconSlotStyle = (theme: UiTheme): ViewStyle => ({\n alignSelf: 'flex-start',\n alignItems: 'center',\n marginRight: theme.spacing(ICON_SLOT.marginRightUnits),\n paddingTop: theme.spacing(ICON_SLOT.paddingTopUnits),\n paddingBottom: ICON_SLOT.paddingBottom,\n opacity: ICON_SLOT.opacity,\n});\n\n/** MUI's `.MuiAlert-action`: top-aligned, pushed to the right edge, 16px off the text. */\nexport const actionSlotStyle = (theme: UiTheme): ViewStyle => ({\n alignItems: 'flex-start',\n paddingTop: ACTION_SLOT.paddingTop,\n paddingLeft: theme.spacing(ACTION_SLOT.paddingLeftUnits),\n marginLeft: 'auto',\n marginRight: ACTION_SLOT.marginRight,\n});\n\n/** MUI's small `IconButton` at 0.7; pressed stands in for the web's hover (full opacity, a faint wash). */\nexport const closeButtonStyle = (theme: UiTheme, pressed: boolean): ViewStyle => ({\n padding: CLOSE_BUTTON.padding,\n borderRadius: theme.radius.full,\n opacity: pressed ? 1 : CLOSE_BUTTON.opacity,\n backgroundColor: pressed ? alpha(theme.palette.action.hover, CLOSE_BUTTON.washAlpha) : 'transparent',\n});\n"],"mappings":"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","names":[]}
@@ -1,6 +1,10 @@
1
1
  import {
2
2
  useLoopedProgress
3
3
  } from "../chunks/chunk-MLQIOKQZ.js";
4
+ import {
5
+ ABSOLUTE_INK,
6
+ NEUTRAL_RAMP
7
+ } from "../chunks/chunk-ZRQHLTYG.js";
4
8
  import {
5
9
  renderTextChildren
6
10
  } from "../chunks/chunk-5GJ5OG5R.js";
@@ -76,12 +80,12 @@ function statusColor(theme, status) {
76
80
  if (status === "online") return theme.palette.success.main;
77
81
  if (status === "away") return theme.palette.warning.main;
78
82
  if (status === "busy") return theme.palette.danger.main;
79
- return theme.palette.grey[500];
83
+ return NEUTRAL_RAMP[500];
80
84
  }
81
85
  function avatarAccent(theme, color) {
82
- if (color === "neutral") return { main: theme.palette.grey[700], contrastText: "#fff" };
86
+ if (color === "neutral") return { main: NEUTRAL_RAMP[700], contrastText: ABSOLUTE_INK.white };
83
87
  const accent = theme.palette[color];
84
- return { main: accent.main, contrastText: accent.contrastText || "#fff" };
88
+ return { main: accent.main, contrastText: accent.contrastText || ABSOLUTE_INK.white };
85
89
  }
86
90
 
87
91
  // src/components/data-display/Avatar/Avatar.look.native.ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/data-display/Avatar/Avatar.native.tsx","../../../src/components/data-display/Avatar/Avatar.helpers.ts","../../../src/components/data-display/Avatar/Avatar.metrics.ts","../../../src/components/data-display/Avatar/Avatar.look.native.ts","../../../src/components/data-display/Avatar/Avatar.parts.native.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\n\nimport type { AvatarSize, AvatarVariant } from './Avatar.base';\nimport {\n AVATAR_DEFAULTS,\n avatarTestId,\n contentTypeOf,\n pickAvatarContent,\n} from './Avatar.helpers';\nimport { avatarStatusDotStyle } from './Avatar.look.native';\nimport { GROUP_MAX, GROUP_OVERLAP, avatarAccent, statusColor } from './Avatar.metrics';\nimport {\n AvatarSurface,\n PulseRing,\n contentNode,\n useFadeIn,\n useImageState,\n type SurfaceArgs,\n} from './Avatar.parts.native';\nimport type { AvatarGroupProps, AvatarProps } from './Avatar.types.native';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\ninterface AvatarModel {\n args: SurfaceArgs;\n variant: AvatarVariant;\n size: AvatarSize;\n color: ColorValue;\n pulse: boolean;\n status?: AvatarProps['status'];\n opacity: Animated.Value;\n badgeTestID?: string;\n}\n\n/** Normalises the props and derives everything the surface needs, as the web's model does. */\nfunction useAvatarModel(raw: AvatarProps): AvatarModel {\n const {\n variant,\n size,\n glow,\n pulse,\n status,\n fallback,\n icon,\n bordered,\n color,\n src,\n alt,\n children,\n loading,\n onError,\n onClick,\n onPress,\n interactive,\n showFallbackOnError,\n animationDelay,\n dataTestId,\n testID,\n style,\n ...rest\n } = { ...AVATAR_DEFAULTS, ...raw };\n const theme = useUiTheme();\n const opacity = useFadeIn(animationDelay);\n const { imageError, imageLoading, handleError, handleLoad } = useImageState(src, onError);\n const pick = pickAvatarContent({\n hasChildren: Boolean(children),\n hasFallback: Boolean(fallback),\n hasIcon: Boolean(icon),\n imageError,\n showFallbackOnError,\n });\n const avatarId = testID ?? dataTestId;\n const idFor = avatarTestId(avatarId);\n\n return {\n variant,\n size,\n color,\n pulse,\n status,\n opacity,\n badgeTestID: idFor('badge'),\n args: {\n variant,\n size,\n color,\n glow,\n bordered,\n clickable: interactive || Boolean(onClick ?? onPress),\n imageError,\n showSpinner: loading || imageLoading,\n imgSrc: imageError ? undefined : src,\n alt,\n ariaLabel: alt || 'Avatar',\n content: contentNode({\n pick,\n children,\n fallback,\n icon,\n ink: avatarAccent(theme, color).contrastText,\n }),\n contentType: contentTypeOf(pick),\n testID: avatarId,\n idFor,\n style,\n onPress: (event) => {\n onClick?.();\n onPress?.(event);\n },\n onImageError: handleError,\n onImageLoad: handleLoad,\n rest,\n },\n };\n}\n\n/**\n * The native `Avatar`: MUI's box on a `Pressable`, the portrait as an `Image`,\n * and the status dot as a bordered circle in the corner.\n */\nexport const Avatar = React.forwardRef<View, AvatarProps>((raw, ref) => {\n const theme = useUiTheme();\n const { args, variant, size, color, pulse, status, opacity, badgeTestID } = useAvatarModel(raw);\n\n const surface = (\n <Animated.View style={[styles.relative, { opacity }]}>\n {pulse ? (\n <PulseRing size={size} variant={variant} color={avatarAccent(theme, color).main} />\n ) : null}\n <AvatarSurface {...args} forwardedRef={ref} />\n </Animated.View>\n );\n\n if (variant !== 'status' || !status) return surface;\n\n return (\n <View testID={badgeTestID} style={styles.relative}>\n {surface}\n <View style={avatarStatusDotStyle(theme, size, statusColor(theme, status))} />\n </View>\n );\n});\n\nAvatar.displayName = 'Avatar';\n\n/**\n * The native `AvatarGroup`: the same overlap, and the same `+n` avatar past\n * `max`. The web additionally lifts an avatar on hover, which touch has none of.\n */\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({\n children,\n max = GROUP_MAX,\n overlap = GROUP_OVERLAP,\n dataTestId,\n testID,\n style,\n}) => {\n const all = React.Children.toArray(children);\n const visible = max ? all.slice(0, max) : all;\n const remaining = all.length - visible.length;\n const groupId = testID ?? dataTestId;\n\n return (\n <View testID={groupId} style={[styles.group, style]}>\n {visible.map((child, index) => (\n <View key={`avatar-${index}`} style={index === 0 ? null : { marginLeft: -overlap }}>\n {child}\n </View>\n ))}\n {remaining > 0 ? (\n <View style={{ marginLeft: -overlap }}>\n <Avatar\n color=\"neutral\"\n fallback={`+${remaining}`}\n bordered\n dataTestId={groupId ? `${groupId}-overflow` : undefined}\n />\n </View>\n ) : null}\n </View>\n );\n};\n\nAvatarGroup.displayName = 'AvatarGroup';\n\nconst styles = StyleSheet.create({\n relative: { position: 'relative', alignSelf: 'flex-start' },\n group: { flexDirection: 'row', alignItems: 'center', alignSelf: 'flex-start' },\n});\n","import type { AvatarBaseProps, ContentType } from './Avatar.base';\n\n/** Applied via a single spread so no per-field default inflates cyclomatic complexity. */\nexport const AVATAR_DEFAULTS = {\n variant: 'circle',\n size: 'md',\n glow: false,\n pulse: false,\n bordered: false,\n color: 'primary',\n loading: false,\n interactive: false,\n showFallbackOnError: true,\n animationDelay: 0,\n} satisfies Partial<AvatarBaseProps>;\n\n/** What wins the middle of the avatar. `broken` is the icon slot's error glyph. */\nexport type AvatarContentPick = ContentType | 'broken';\n\nexport interface AvatarContentArgs {\n hasChildren: boolean;\n hasFallback: boolean;\n hasIcon: boolean;\n imageError: boolean;\n showFallbackOnError: boolean;\n}\n\n/**\n * Pick what renders inside the avatar. On an image error (with fallback\n * enabled) the fallback/icon/broken-image wins; otherwise children → fallback →\n * icon → the default person glyph.\n *\n * The DECISION is shared; each renderer builds its own node from it, because\n * the two draw a glyph with different things.\n */\nexport function pickAvatarContent(a: AvatarContentArgs): AvatarContentPick {\n if (a.imageError && a.showFallbackOnError) {\n if (a.hasFallback) return 'fallback';\n return a.hasIcon ? 'icon' : 'broken';\n }\n if (a.hasChildren) return 'children';\n if (a.hasFallback) return 'fallback';\n return a.hasIcon ? 'icon' : 'default';\n}\n\n/** The slot id a pick takes; the broken-image glyph shares the icon slot's. */\nexport const contentTypeOf = (pick: AvatarContentPick): ContentType =>\n pick === 'broken' ? 'icon' : pick;\n\n/** `${dataTestId}-loading`, or nothing at all when the caller named nothing. */\nexport const avatarTestId =\n (dataTestId?: string) =>\n (suffix: string): string | undefined =>\n dataTestId ? `${dataTestId}-${suffix}` : undefined;\n","import type { AvatarSize, AvatarStatus } from './Avatar.base';\nimport type { UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\n/**\n * THE NUMBERS BOTH `Avatar` RENDERERS DRAW WITH.\n *\n * `Avatar.view.tsx` (web, emotion over MUI's `Avatar` and `Badge`) and\n * `Avatar.native.tsx` (React Native) read this one table: the six boxes and\n * their type, the status dot, the glow, the shimmer and the spinner. The web\n * turns the px into rem; native uses the numbers.\n */\nexport interface AvatarSizeMetrics {\n /** The square the portrait fills, in px. */\n box: number;\n /** The initials' type size, in px. */\n fontSize: number;\n}\n\nexport const AVATAR_SIZES: Record<AvatarSize, AvatarSizeMetrics> = {\n xs: { box: 24, fontSize: 12 },\n sm: { box: 32, fontSize: 14 },\n md: { box: 40, fontSize: 16 },\n lg: { box: 48, fontSize: 18 },\n xl: { box: 64, fontSize: 24 },\n xxl: { box: 80, fontSize: 32 },\n};\n\n/** `rounded` takes one spacing unit; `circle` and `status` are round. */\nexport const ROUNDED_RADIUS_UNITS = 1;\n\n/** The paper ring an avatar takes inside a group, and the hairline outside it. */\nexport const BORDER_WIDTH = 2;\nexport const BORDER_HALO_ALPHA = 0.2;\n\n/** `glow`: a 20px halo at five pixels of spread, and a brightness lift. */\nexport const GLOW = { blur: 20, spread: 5, alpha: 0.4, brightness: 1.05 } as const;\n\n/** `pulse`: the `::after` ring, from nothing to 10px while it fades out. */\nexport const PULSE = { durationMs: 2000, alpha: 0.3, spread: 10 } as const;\n\n/** The shimmer that runs across a loading avatar. */\nexport const SHIMMER = { durationMs: 1500, fromAlpha: 0.6, toAlpha: 0.8 } as const;\n\n/** The overlay over a loading avatar, and the ring spinning in it. */\nexport const LOADING_OVERLAY = { paperAlpha: 0.7, blur: 2 } as const;\nexport const SPINNER = {\n /** A share of the avatar's box. */\n scale: 0.4,\n ringWidth: 2,\n trackAlpha: 0.3,\n durationMs: 800,\n} as const;\n\n/**\n * The status dot: a fifth of the box, never below 8px, inside a paper ring.\n * `anchor` is MUI's `overlap=\"circular\"` inset — the dot's CENTRE sits 14% of\n * the box in from the bottom-right corner.\n */\nexport const STATUS_DOT = { scale: 0.2, min: 8, borderWidth: 2, anchor: 0.14 } as const;\n\n/**\n * The default and broken-image glyphs are ordinary `SvgIcon`s here, not MUI's\n * own `.MuiAvatar-fallback` (which is 75% of the box): this component passes\n * them as CHILDREN, so they render at the icon default whatever the box is.\n */\nexport const GLYPH_SIZE = 24;\n\n/** MUI's `Fade` timeout on mount, and the scale-in behind it. */\nexport const FADE_MS = 300;\nexport const SCALE_IN_MS = 300;\n\n/** `transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1)`. */\nexport const AVATAR_TRANSITION_MS = 300;\nexport const AVATAR_TRANSITION_EASING = 'cubic-bezier(0.4, 0, 0.2, 1)';\n\n/** The interactive lift, which is a `:hover` on the web. */\nexport const HOVER = { scale: 1.1, lift: 2, shadowY: 8, shadowBlur: 20, shadowAlpha: 0.3, brightness: 1.1 } as const;\nexport const ACTIVE_SCALE = 1.05;\n\n/** The focus ring `:focus-visible` draws. */\nexport const FOCUS_RING = { width: 3, offset: 2, alpha: 0.5 } as const;\n\n/** An avatar group's default overlap, in px, and its hover lift. */\nexport const GROUP_OVERLAP = 8;\nexport const GROUP_MAX = 4;\nexport const GROUP_HOVER = { scale: 1.1, lift: 4 } as const;\n\n/** The dot's colour per status. `offline` is the ramp, the rest are semantic. */\nexport function statusColor(theme: UiTheme, status: AvatarStatus): string {\n if (status === 'online') return theme.palette.success.main;\n if (status === 'away') return theme.palette.warning.main;\n if (status === 'busy') return theme.palette.danger.main;\n return theme.palette.grey[500];\n}\n\nexport interface AvatarAccent {\n main: string;\n contrastText: string;\n}\n\n/**\n * The accent behind the initials. `danger`, NOT `error` — the web map was keyed\n * on MUI's word while the prop took the house one, so `danger` matched nothing\n * and fell through to primary: a red avatar rendering blue, silently.\n */\nexport function avatarAccent(theme: UiTheme, color: ColorValue): AvatarAccent {\n if (color === 'neutral') return { main: theme.palette.grey[700], contrastText: '#fff' };\n const accent = theme.palette[color];\n return { main: accent.main, contrastText: accent.contrastText || '#fff' };\n}\n","import type { TextStyle, ViewStyle } from 'react-native';\n\nimport type { AvatarSize, AvatarVariant } from './Avatar.base';\nimport {\n AVATAR_SIZES,\n BORDER_HALO_ALPHA,\n BORDER_WIDTH,\n GLOW,\n LOADING_OVERLAY,\n ROUNDED_RADIUS_UNITS,\n SPINNER,\n STATUS_DOT,\n avatarAccent,\n} from './Avatar.metrics';\nimport { alpha } from '../../../tokens/color';\nimport type { UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\n/** `square` is sharp, `rounded` takes a spacing unit, `circle` and `status` are round. */\nexport function avatarRadius(theme: UiTheme, variant: AvatarVariant, box: number): number {\n if (variant === 'square') return 0;\n if (variant === 'rounded') return theme.spacing(ROUNDED_RADIUS_UNITS);\n return box / 2;\n}\n\nexport interface AvatarSurfaceArgs {\n variant: AvatarVariant;\n size: AvatarSize;\n color: ColorValue;\n glow: boolean;\n bordered: boolean;\n interactive: boolean;\n hasError: boolean;\n}\n\n/** The avatar box: MUI's square, its radius, the accent behind the initials. */\nexport function avatarSurfaceStyle(theme: UiTheme, a: AvatarSurfaceArgs): ViewStyle {\n const { box } = AVATAR_SIZES[a.size];\n const accent = avatarAccent(theme, a.color);\n return {\n width: box,\n height: box,\n borderRadius: avatarRadius(theme, a.variant, box),\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n backgroundColor: a.hasError ? theme.palette.danger.main : accent.main,\n cursor: a.interactive ? 'pointer' : 'auto',\n ...(a.bordered\n ? {\n borderWidth: BORDER_WIDTH,\n borderColor: theme.palette.background.paper,\n boxShadow: `0 0 0 1px ${alpha(theme.palette.divider, BORDER_HALO_ALPHA)}`,\n }\n : {}),\n ...(a.glow\n ? { boxShadow: `0 0 ${GLOW.blur}px ${GLOW.spread}px ${alpha(accent.main, GLOW.alpha)}` }\n : {}),\n };\n}\n\n/** The initials, in the accent's contrast ink at the size's own step. */\nexport function avatarTextStyle(\n theme: UiTheme,\n size: AvatarSize,\n color: ColorValue,\n hasError: boolean,\n): TextStyle {\n const accent = avatarAccent(theme, color);\n return {\n fontFamily: theme.typography.fontFamily,\n fontSize: AVATAR_SIZES[size].fontSize,\n textAlign: 'center',\n color: hasError ? theme.palette.danger.contrastText : accent.contrastText,\n };\n}\n\n/** The wash over a loading avatar, and the ring spinning in it. */\nexport function avatarLoadingStyle(theme: UiTheme, size: AvatarSize, radius: number): ViewStyle {\n const { box } = AVATAR_SIZES[size];\n return {\n position: 'absolute',\n top: 0,\n left: 0,\n width: box,\n height: box,\n borderRadius: radius,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: alpha(theme.palette.background.paper, LOADING_OVERLAY.paperAlpha),\n };\n}\n\nexport function avatarSpinnerStyle(theme: UiTheme, size: AvatarSize): ViewStyle {\n const ring = AVATAR_SIZES[size].box * SPINNER.scale;\n return {\n width: ring,\n height: ring,\n borderRadius: ring / 2,\n borderWidth: SPINNER.ringWidth,\n borderColor: alpha(theme.palette.primary.main, SPINNER.trackAlpha),\n borderTopColor: theme.palette.primary.main,\n };\n}\n\n/** MUI's `Badge` dot, anchored bottom-right of a circular avatar. */\nexport function avatarStatusDotStyle(theme: UiTheme, size: AvatarSize, color: string): ViewStyle {\n const { box } = AVATAR_SIZES[size];\n const dot = Math.max(STATUS_DOT.min, box * STATUS_DOT.scale);\n // MUI's `overlap=\"circular\"` puts the dot's centre 14% in from the corner.\n const inset = box * STATUS_DOT.anchor - dot / 2;\n return {\n position: 'absolute',\n right: inset,\n bottom: inset,\n width: dot,\n height: dot,\n borderRadius: dot / 2,\n backgroundColor: color,\n borderWidth: STATUS_DOT.borderWidth,\n borderColor: theme.palette.background.paper,\n };\n}\n","/**\n * THE PIECES THE NATIVE `Avatar` IS ASSEMBLED FROM.\n *\n * Split out of `Avatar.native.tsx` so the component itself reads as structure:\n * the mount fade, the portrait's load state, the content node, the pulse ring,\n * the spinner and the surface they all sit on.\n */\nimport * as React from 'react';\nimport {\n Animated,\n Easing,\n Image,\n Platform,\n Pressable,\n StyleSheet,\n View,\n type GestureResponderEvent,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\n\nimport type { AvatarSize, AvatarVariant, ContentType } from './Avatar.base';\nimport type { AvatarContentPick } from './Avatar.helpers';\nimport {\n avatarLoadingStyle,\n avatarRadius,\n avatarSpinnerStyle,\n avatarSurfaceStyle,\n avatarTextStyle,\n} from './Avatar.look.native';\nimport { AVATAR_SIZES, FADE_MS, GLYPH_SIZE, PULSE, SPINNER } from './Avatar.metrics';\nimport { Icon } from '../../../icons/Icon.native';\nimport { useLoopedProgress } from '../../../platform/animation';\nimport { renderTextChildren } from '../../../platform/text-children';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\nimport type { UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\nconst nativeDriver = Platform.OS !== 'web';\n\n/** MUI's `Fade`: in over 300ms, once `animationDelay` has run. */\nexport function useFadeIn(animationDelay: number): Animated.Value {\n const opacity = React.useRef(new Animated.Value(0)).current;\n React.useEffect(() => {\n const animation = Animated.sequence([\n Animated.delay(animationDelay),\n Animated.timing(opacity, {\n toValue: 1,\n duration: FADE_MS,\n easing: Easing.out(Easing.ease),\n useNativeDriver: nativeDriver,\n }),\n ]);\n animation.start();\n return () => animation.stop();\n }, [animationDelay, opacity]);\n return opacity;\n}\n\ninterface ImageState {\n imageError: boolean;\n imageLoading: boolean;\n handleError: () => void;\n handleLoad: () => void;\n}\n\n/** The portrait's load lifecycle: loading from the moment there is a `src`. */\nexport function useImageState(src: string | undefined, onError?: () => void): ImageState {\n const [imageError, setImageError] = React.useState(false);\n const [imageLoading, setImageLoading] = React.useState(Boolean(src));\n\n React.useEffect(() => {\n setImageError(false);\n setImageLoading(Boolean(src));\n }, [src]);\n\n const handleError = React.useCallback(() => {\n setImageError(true);\n setImageLoading(false);\n onError?.();\n }, [onError]);\n\n return {\n imageError,\n imageLoading,\n handleError,\n handleLoad: React.useCallback(() => setImageLoading(false), []),\n };\n}\n\ninterface ContentArgs {\n pick: AvatarContentPick;\n children?: React.ReactNode;\n fallback?: string;\n icon?: React.ReactNode;\n ink: string;\n}\n\n/** The node behind the winning content slot; the pick itself is shared. */\nexport function contentNode({ pick, children, fallback, icon, ink }: ContentArgs): React.ReactNode {\n if (pick === 'children') return children;\n if (pick === 'fallback') return fallback;\n if (pick === 'icon') return icon;\n return <Icon name={pick === 'broken' ? 'BrokenImage' : 'Person'} size={GLYPH_SIZE} color={ink} />;\n}\n\n/**\n * MUI's `::after` pulse ring: the accent growing 10px past the box while it\n * fades out, every two seconds. React Native has no pseudo-element, so it is a\n * sibling behind the avatar.\n */\nexport function PulseRing({ size, variant, color }: { size: AvatarSize; variant: AvatarVariant; color: string }): React.JSX.Element {\n const theme = useUiTheme();\n const progress = useLoopedProgress(true, { durationMs: PULSE.durationMs });\n const box = AVATAR_SIZES[size].box;\n return (\n <Animated.View\n aria-hidden\n style={[\n StyleSheet.absoluteFill,\n {\n pointerEvents: 'none',\n borderRadius: avatarRadius(theme, variant, box),\n backgroundColor: color,\n opacity: progress.interpolate({ inputRange: [0, 0.7, 1], outputRange: [PULSE.alpha, 0, 0] }),\n transform: [\n {\n scale: progress.interpolate({\n inputRange: [0, 0.7, 1],\n outputRange: [1, (box + PULSE.spread * 2) / box, 1],\n }),\n },\n ],\n },\n ]}\n />\n );\n}\n\n/** MUI's `rotateAnimation`: the ring turning once every 0.8s. */\nfunction Spinner({ size, testID }: { size: AvatarSize; testID?: string }): React.JSX.Element {\n const theme = useUiTheme();\n const progress = useLoopedProgress(true, { durationMs: SPINNER.durationMs });\n return (\n <Animated.View\n testID={testID}\n style={[\n avatarSpinnerStyle(theme, size),\n {\n transform: [\n { rotate: progress.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] }) },\n ],\n },\n ]}\n />\n );\n}\n\nexport interface SurfaceArgs {\n variant: AvatarVariant;\n size: AvatarSize;\n color: ColorValue;\n glow: boolean;\n bordered: boolean;\n clickable: boolean;\n imageError: boolean;\n showSpinner: boolean;\n imgSrc?: string;\n alt?: string;\n ariaLabel: string;\n content: React.ReactNode;\n contentType: ContentType;\n testID?: string;\n idFor: (suffix: string) => string | undefined;\n style?: StyleProp<ViewStyle>;\n onPress?: (event: GestureResponderEvent) => void;\n onImageError: () => void;\n onImageLoad: () => void;\n rest: object;\n}\n\n/** What sits in the middle: the portrait, or the winning content slot. */\nfunction SurfaceInner(a: SurfaceArgs, theme: UiTheme): React.JSX.Element | null {\n if (a.imgSrc && !a.imageError) {\n return (\n <Image\n source={{ uri: a.imgSrc }}\n aria-label={a.alt}\n onError={a.onImageError}\n onLoad={a.onImageLoad}\n style={StyleSheet.absoluteFill}\n accessibilityIgnoresInvertColors\n />\n );\n }\n if (a.showSpinner) return null;\n return (\n <View testID={a.idFor(a.contentType)}>\n {renderTextChildren(a.content, avatarTextStyle(theme, a.size, a.color, a.imageError), 1)}\n </View>\n );\n}\n\n/** The avatar box itself, plus the overlay that covers it while it loads. */\nexport function AvatarSurface(a: SurfaceArgs & { forwardedRef?: React.Ref<View> }): React.JSX.Element {\n const theme = useUiTheme();\n const box = AVATAR_SIZES[a.size].box;\n return (\n <>\n <Pressable\n ref={a.forwardedRef}\n testID={a.testID}\n role={a.clickable ? 'button' : undefined}\n aria-label={a.ariaLabel}\n tabIndex={a.clickable ? 0 : -1}\n onPress={a.clickable ? a.onPress : undefined}\n style={[\n avatarSurfaceStyle(theme, {\n variant: a.variant,\n size: a.size,\n color: a.color,\n glow: a.glow,\n bordered: a.bordered,\n interactive: a.clickable,\n hasError: a.imageError,\n }),\n a.style,\n ]}\n {...a.rest}\n >\n {SurfaceInner(a, theme)}\n </Pressable>\n {a.showSpinner ? (\n <View\n testID={a.idFor('loading')}\n style={avatarLoadingStyle(theme, a.size, avatarRadius(theme, a.variant, box))}\n >\n <Spinner size={a.size} testID={a.idFor('loading-spinner')} />\n </View>\n ) : null}\n </>\n );\n}\n"],"mappings":"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","names":["React","Animated","StyleSheet","View","jsx","jsxs","Animated","View","StyleSheet"]}
1
+ {"version":3,"sources":["../../../src/components/data-display/Avatar/Avatar.native.tsx","../../../src/components/data-display/Avatar/Avatar.helpers.ts","../../../src/components/data-display/Avatar/Avatar.metrics.ts","../../../src/components/data-display/Avatar/Avatar.look.native.ts","../../../src/components/data-display/Avatar/Avatar.parts.native.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\n\nimport type { AvatarSize, AvatarVariant } from './Avatar.base';\nimport {\n AVATAR_DEFAULTS,\n avatarTestId,\n contentTypeOf,\n pickAvatarContent,\n} from './Avatar.helpers';\nimport { avatarStatusDotStyle } from './Avatar.look.native';\nimport { GROUP_MAX, GROUP_OVERLAP, avatarAccent, statusColor } from './Avatar.metrics';\nimport {\n AvatarSurface,\n PulseRing,\n contentNode,\n useFadeIn,\n useImageState,\n type SurfaceArgs,\n} from './Avatar.parts.native';\nimport type { AvatarGroupProps, AvatarProps } from './Avatar.types.native';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\ninterface AvatarModel {\n args: SurfaceArgs;\n variant: AvatarVariant;\n size: AvatarSize;\n color: ColorValue;\n pulse: boolean;\n status?: AvatarProps['status'];\n opacity: Animated.Value;\n badgeTestID?: string;\n}\n\n/** Normalises the props and derives everything the surface needs, as the web's model does. */\nfunction useAvatarModel(raw: AvatarProps): AvatarModel {\n const {\n variant,\n size,\n glow,\n pulse,\n status,\n fallback,\n icon,\n bordered,\n color,\n src,\n alt,\n children,\n loading,\n onError,\n onClick,\n onPress,\n interactive,\n showFallbackOnError,\n animationDelay,\n dataTestId,\n testID,\n style,\n ...rest\n } = { ...AVATAR_DEFAULTS, ...raw };\n const theme = useUiTheme();\n const opacity = useFadeIn(animationDelay);\n const { imageError, imageLoading, handleError, handleLoad } = useImageState(src, onError);\n const pick = pickAvatarContent({\n hasChildren: Boolean(children),\n hasFallback: Boolean(fallback),\n hasIcon: Boolean(icon),\n imageError,\n showFallbackOnError,\n });\n const avatarId = testID ?? dataTestId;\n const idFor = avatarTestId(avatarId);\n\n return {\n variant,\n size,\n color,\n pulse,\n status,\n opacity,\n badgeTestID: idFor('badge'),\n args: {\n variant,\n size,\n color,\n glow,\n bordered,\n clickable: interactive || Boolean(onClick ?? onPress),\n imageError,\n showSpinner: loading || imageLoading,\n imgSrc: imageError ? undefined : src,\n alt,\n ariaLabel: alt || 'Avatar',\n content: contentNode({\n pick,\n children,\n fallback,\n icon,\n ink: avatarAccent(theme, color).contrastText,\n }),\n contentType: contentTypeOf(pick),\n testID: avatarId,\n idFor,\n style,\n onPress: (event) => {\n onClick?.();\n onPress?.(event);\n },\n onImageError: handleError,\n onImageLoad: handleLoad,\n rest,\n },\n };\n}\n\n/**\n * The native `Avatar`: MUI's box on a `Pressable`, the portrait as an `Image`,\n * and the status dot as a bordered circle in the corner.\n */\nexport const Avatar = React.forwardRef<View, AvatarProps>((raw, ref) => {\n const theme = useUiTheme();\n const { args, variant, size, color, pulse, status, opacity, badgeTestID } = useAvatarModel(raw);\n\n const surface = (\n <Animated.View style={[styles.relative, { opacity }]}>\n {pulse ? (\n <PulseRing size={size} variant={variant} color={avatarAccent(theme, color).main} />\n ) : null}\n <AvatarSurface {...args} forwardedRef={ref} />\n </Animated.View>\n );\n\n if (variant !== 'status' || !status) return surface;\n\n return (\n <View testID={badgeTestID} style={styles.relative}>\n {surface}\n <View style={avatarStatusDotStyle(theme, size, statusColor(theme, status))} />\n </View>\n );\n});\n\nAvatar.displayName = 'Avatar';\n\n/**\n * The native `AvatarGroup`: the same overlap, and the same `+n` avatar past\n * `max`. The web additionally lifts an avatar on hover, which touch has none of.\n */\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({\n children,\n max = GROUP_MAX,\n overlap = GROUP_OVERLAP,\n dataTestId,\n testID,\n style,\n}) => {\n const all = React.Children.toArray(children);\n const visible = max ? all.slice(0, max) : all;\n const remaining = all.length - visible.length;\n const groupId = testID ?? dataTestId;\n\n return (\n <View testID={groupId} style={[styles.group, style]}>\n {visible.map((child, index) => (\n <View key={`avatar-${index}`} style={index === 0 ? null : { marginLeft: -overlap }}>\n {child}\n </View>\n ))}\n {remaining > 0 ? (\n <View style={{ marginLeft: -overlap }}>\n <Avatar\n color=\"neutral\"\n fallback={`+${remaining}`}\n bordered\n dataTestId={groupId ? `${groupId}-overflow` : undefined}\n />\n </View>\n ) : null}\n </View>\n );\n};\n\nAvatarGroup.displayName = 'AvatarGroup';\n\nconst styles = StyleSheet.create({\n relative: { position: 'relative', alignSelf: 'flex-start' },\n group: { flexDirection: 'row', alignItems: 'center', alignSelf: 'flex-start' },\n});\n","import type { AvatarBaseProps, ContentType } from './Avatar.base';\n\n/** Applied via a single spread so no per-field default inflates cyclomatic complexity. */\nexport const AVATAR_DEFAULTS = {\n variant: 'circle',\n size: 'md',\n glow: false,\n pulse: false,\n bordered: false,\n color: 'primary',\n loading: false,\n interactive: false,\n showFallbackOnError: true,\n animationDelay: 0,\n} satisfies Partial<AvatarBaseProps>;\n\n/** What wins the middle of the avatar. `broken` is the icon slot's error glyph. */\nexport type AvatarContentPick = ContentType | 'broken';\n\nexport interface AvatarContentArgs {\n hasChildren: boolean;\n hasFallback: boolean;\n hasIcon: boolean;\n imageError: boolean;\n showFallbackOnError: boolean;\n}\n\n/**\n * Pick what renders inside the avatar. On an image error (with fallback\n * enabled) the fallback/icon/broken-image wins; otherwise children → fallback →\n * icon → the default person glyph.\n *\n * The DECISION is shared; each renderer builds its own node from it, because\n * the two draw a glyph with different things.\n */\nexport function pickAvatarContent(a: AvatarContentArgs): AvatarContentPick {\n if (a.imageError && a.showFallbackOnError) {\n if (a.hasFallback) return 'fallback';\n return a.hasIcon ? 'icon' : 'broken';\n }\n if (a.hasChildren) return 'children';\n if (a.hasFallback) return 'fallback';\n return a.hasIcon ? 'icon' : 'default';\n}\n\n/** The slot id a pick takes; the broken-image glyph shares the icon slot's. */\nexport const contentTypeOf = (pick: AvatarContentPick): ContentType =>\n pick === 'broken' ? 'icon' : pick;\n\n/** `${dataTestId}-loading`, or nothing at all when the caller named nothing. */\nexport const avatarTestId =\n (dataTestId?: string) =>\n (suffix: string): string | undefined =>\n dataTestId ? `${dataTestId}-${suffix}` : undefined;\n","import type { AvatarSize, AvatarStatus } from './Avatar.base';\nimport { ABSOLUTE_INK, NEUTRAL_RAMP } from '../../../tokens/ink.core';\nimport type { UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\n/**\n * THE NUMBERS BOTH `Avatar` RENDERERS DRAW WITH.\n *\n * `Avatar.view.tsx` (web, emotion over MUI's `Avatar` and `Badge`) and\n * `Avatar.native.tsx` (React Native) read this one table: the six boxes and\n * their type, the status dot, the glow, the shimmer and the spinner. The web\n * turns the px into rem; native uses the numbers.\n */\nexport interface AvatarSizeMetrics {\n /** The square the portrait fills, in px. */\n box: number;\n /** The initials' type size, in px. */\n fontSize: number;\n}\n\nexport const AVATAR_SIZES: Record<AvatarSize, AvatarSizeMetrics> = {\n xs: { box: 24, fontSize: 12 },\n sm: { box: 32, fontSize: 14 },\n md: { box: 40, fontSize: 16 },\n lg: { box: 48, fontSize: 18 },\n xl: { box: 64, fontSize: 24 },\n xxl: { box: 80, fontSize: 32 },\n};\n\n/** `rounded` takes one spacing unit; `circle` and `status` are round. */\nexport const ROUNDED_RADIUS_UNITS = 1;\n\n/** The paper ring an avatar takes inside a group, and the hairline outside it. */\nexport const BORDER_WIDTH = 2;\nexport const BORDER_HALO_ALPHA = 0.2;\n\n/** `glow`: a 20px halo at five pixels of spread, and a brightness lift. */\nexport const GLOW = { blur: 20, spread: 5, alpha: 0.4, brightness: 1.05 } as const;\n\n/** `pulse`: the `::after` ring, from nothing to 10px while it fades out. */\nexport const PULSE = { durationMs: 2000, alpha: 0.3, spread: 10 } as const;\n\n/** The shimmer that runs across a loading avatar. */\nexport const SHIMMER = { durationMs: 1500, fromAlpha: 0.6, toAlpha: 0.8 } as const;\n\n/** The overlay over a loading avatar, and the ring spinning in it. */\nexport const LOADING_OVERLAY = { paperAlpha: 0.7, blur: 2 } as const;\nexport const SPINNER = {\n /** A share of the avatar's box. */\n scale: 0.4,\n ringWidth: 2,\n trackAlpha: 0.3,\n durationMs: 800,\n} as const;\n\n/**\n * The status dot: a fifth of the box, never below 8px, inside a paper ring.\n * `anchor` is MUI's `overlap=\"circular\"` inset — the dot's CENTRE sits 14% of\n * the box in from the bottom-right corner.\n */\nexport const STATUS_DOT = { scale: 0.2, min: 8, borderWidth: 2, anchor: 0.14 } as const;\n\n/**\n * The default and broken-image glyphs are ordinary `SvgIcon`s here, not MUI's\n * own `.MuiAvatar-fallback` (which is 75% of the box): this component passes\n * them as CHILDREN, so they render at the icon default whatever the box is.\n */\nexport const GLYPH_SIZE = 24;\n\n/** MUI's `Fade` timeout on mount, and the scale-in behind it. */\nexport const FADE_MS = 300;\nexport const SCALE_IN_MS = 300;\n\n/** `transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1)`. */\nexport const AVATAR_TRANSITION_MS = 300;\nexport const AVATAR_TRANSITION_EASING = 'cubic-bezier(0.4, 0, 0.2, 1)';\n\n/** The interactive lift, which is a `:hover` on the web. */\nexport const HOVER = { scale: 1.1, lift: 2, shadowY: 8, shadowBlur: 20, shadowAlpha: 0.3, brightness: 1.1 } as const;\nexport const ACTIVE_SCALE = 1.05;\n\n/** The focus ring `:focus-visible` draws. */\nexport const FOCUS_RING = { width: 3, offset: 2, alpha: 0.5 } as const;\n\n/** An avatar group's default overlap, in px, and its hover lift. */\nexport const GROUP_OVERLAP = 8;\nexport const GROUP_MAX = 4;\nexport const GROUP_HOVER = { scale: 1.1, lift: 4 } as const;\n\n/** The dot's colour per status. `offline` is the ramp, the rest are semantic. */\nexport function statusColor(theme: UiTheme, status: AvatarStatus): string {\n if (status === 'online') return theme.palette.success.main;\n if (status === 'away') return theme.palette.warning.main;\n if (status === 'busy') return theme.palette.danger.main;\n return NEUTRAL_RAMP[500];\n}\n\nexport interface AvatarAccent {\n main: string;\n contrastText: string;\n}\n\n/**\n * The accent behind the initials. `danger`, NOT `error` — the web map was keyed\n * on MUI's word while the prop took the house one, so `danger` matched nothing\n * and fell through to primary: a red avatar rendering blue, silently.\n */\nexport function avatarAccent(theme: UiTheme, color: ColorValue): AvatarAccent {\n if (color === 'neutral') return { main: NEUTRAL_RAMP[700], contrastText: ABSOLUTE_INK.white };\n const accent = theme.palette[color];\n return { main: accent.main, contrastText: accent.contrastText || ABSOLUTE_INK.white };\n}\n","import type { TextStyle, ViewStyle } from 'react-native';\n\nimport type { AvatarSize, AvatarVariant } from './Avatar.base';\nimport {\n AVATAR_SIZES,\n BORDER_HALO_ALPHA,\n BORDER_WIDTH,\n GLOW,\n LOADING_OVERLAY,\n ROUNDED_RADIUS_UNITS,\n SPINNER,\n STATUS_DOT,\n avatarAccent,\n} from './Avatar.metrics';\nimport { alpha } from '../../../tokens/color';\nimport type { UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\n/** `square` is sharp, `rounded` takes a spacing unit, `circle` and `status` are round. */\nexport function avatarRadius(theme: UiTheme, variant: AvatarVariant, box: number): number {\n if (variant === 'square') return 0;\n if (variant === 'rounded') return theme.spacing(ROUNDED_RADIUS_UNITS);\n return box / 2;\n}\n\nexport interface AvatarSurfaceArgs {\n variant: AvatarVariant;\n size: AvatarSize;\n color: ColorValue;\n glow: boolean;\n bordered: boolean;\n interactive: boolean;\n hasError: boolean;\n}\n\n/** The avatar box: MUI's square, its radius, the accent behind the initials. */\nexport function avatarSurfaceStyle(theme: UiTheme, a: AvatarSurfaceArgs): ViewStyle {\n const { box } = AVATAR_SIZES[a.size];\n const accent = avatarAccent(theme, a.color);\n return {\n width: box,\n height: box,\n borderRadius: avatarRadius(theme, a.variant, box),\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n backgroundColor: a.hasError ? theme.palette.danger.main : accent.main,\n cursor: a.interactive ? 'pointer' : 'auto',\n ...(a.bordered\n ? {\n borderWidth: BORDER_WIDTH,\n borderColor: theme.palette.background.paper,\n boxShadow: `0 0 0 1px ${alpha(theme.palette.divider, BORDER_HALO_ALPHA)}`,\n }\n : {}),\n ...(a.glow\n ? { boxShadow: `0 0 ${GLOW.blur}px ${GLOW.spread}px ${alpha(accent.main, GLOW.alpha)}` }\n : {}),\n };\n}\n\n/** The initials, in the accent's contrast ink at the size's own step. */\nexport function avatarTextStyle(\n theme: UiTheme,\n size: AvatarSize,\n color: ColorValue,\n hasError: boolean,\n): TextStyle {\n const accent = avatarAccent(theme, color);\n return {\n fontFamily: theme.typography.fontFamily,\n fontSize: AVATAR_SIZES[size].fontSize,\n textAlign: 'center',\n color: hasError ? theme.palette.danger.contrastText : accent.contrastText,\n };\n}\n\n/** The wash over a loading avatar, and the ring spinning in it. */\nexport function avatarLoadingStyle(theme: UiTheme, size: AvatarSize, radius: number): ViewStyle {\n const { box } = AVATAR_SIZES[size];\n return {\n position: 'absolute',\n top: 0,\n left: 0,\n width: box,\n height: box,\n borderRadius: radius,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: alpha(theme.palette.background.paper, LOADING_OVERLAY.paperAlpha),\n };\n}\n\nexport function avatarSpinnerStyle(theme: UiTheme, size: AvatarSize): ViewStyle {\n const ring = AVATAR_SIZES[size].box * SPINNER.scale;\n return {\n width: ring,\n height: ring,\n borderRadius: ring / 2,\n borderWidth: SPINNER.ringWidth,\n borderColor: alpha(theme.palette.primary.main, SPINNER.trackAlpha),\n borderTopColor: theme.palette.primary.main,\n };\n}\n\n/** MUI's `Badge` dot, anchored bottom-right of a circular avatar. */\nexport function avatarStatusDotStyle(theme: UiTheme, size: AvatarSize, color: string): ViewStyle {\n const { box } = AVATAR_SIZES[size];\n const dot = Math.max(STATUS_DOT.min, box * STATUS_DOT.scale);\n // MUI's `overlap=\"circular\"` puts the dot's centre 14% in from the corner.\n const inset = box * STATUS_DOT.anchor - dot / 2;\n return {\n position: 'absolute',\n right: inset,\n bottom: inset,\n width: dot,\n height: dot,\n borderRadius: dot / 2,\n backgroundColor: color,\n borderWidth: STATUS_DOT.borderWidth,\n borderColor: theme.palette.background.paper,\n };\n}\n","/**\n * THE PIECES THE NATIVE `Avatar` IS ASSEMBLED FROM.\n *\n * Split out of `Avatar.native.tsx` so the component itself reads as structure:\n * the mount fade, the portrait's load state, the content node, the pulse ring,\n * the spinner and the surface they all sit on.\n */\nimport * as React from 'react';\nimport {\n Animated,\n Easing,\n Image,\n Platform,\n Pressable,\n StyleSheet,\n View,\n type GestureResponderEvent,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\n\nimport type { AvatarSize, AvatarVariant, ContentType } from './Avatar.base';\nimport type { AvatarContentPick } from './Avatar.helpers';\nimport {\n avatarLoadingStyle,\n avatarRadius,\n avatarSpinnerStyle,\n avatarSurfaceStyle,\n avatarTextStyle,\n} from './Avatar.look.native';\nimport { AVATAR_SIZES, FADE_MS, GLYPH_SIZE, PULSE, SPINNER } from './Avatar.metrics';\nimport { Icon } from '../../../icons/Icon.native';\nimport { useLoopedProgress } from '../../../platform/animation';\nimport { renderTextChildren } from '../../../platform/text-children';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\nimport type { UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\nconst nativeDriver = Platform.OS !== 'web';\n\n/** MUI's `Fade`: in over 300ms, once `animationDelay` has run. */\nexport function useFadeIn(animationDelay: number): Animated.Value {\n const opacity = React.useRef(new Animated.Value(0)).current;\n React.useEffect(() => {\n const animation = Animated.sequence([\n Animated.delay(animationDelay),\n Animated.timing(opacity, {\n toValue: 1,\n duration: FADE_MS,\n easing: Easing.out(Easing.ease),\n useNativeDriver: nativeDriver,\n }),\n ]);\n animation.start();\n return () => animation.stop();\n }, [animationDelay, opacity]);\n return opacity;\n}\n\ninterface ImageState {\n imageError: boolean;\n imageLoading: boolean;\n handleError: () => void;\n handleLoad: () => void;\n}\n\n/** The portrait's load lifecycle: loading from the moment there is a `src`. */\nexport function useImageState(src: string | undefined, onError?: () => void): ImageState {\n const [imageError, setImageError] = React.useState(false);\n const [imageLoading, setImageLoading] = React.useState(Boolean(src));\n\n React.useEffect(() => {\n setImageError(false);\n setImageLoading(Boolean(src));\n }, [src]);\n\n const handleError = React.useCallback(() => {\n setImageError(true);\n setImageLoading(false);\n onError?.();\n }, [onError]);\n\n return {\n imageError,\n imageLoading,\n handleError,\n handleLoad: React.useCallback(() => setImageLoading(false), []),\n };\n}\n\ninterface ContentArgs {\n pick: AvatarContentPick;\n children?: React.ReactNode;\n fallback?: string;\n icon?: React.ReactNode;\n ink: string;\n}\n\n/** The node behind the winning content slot; the pick itself is shared. */\nexport function contentNode({ pick, children, fallback, icon, ink }: ContentArgs): React.ReactNode {\n if (pick === 'children') return children;\n if (pick === 'fallback') return fallback;\n if (pick === 'icon') return icon;\n return <Icon name={pick === 'broken' ? 'BrokenImage' : 'Person'} size={GLYPH_SIZE} color={ink} />;\n}\n\n/**\n * MUI's `::after` pulse ring: the accent growing 10px past the box while it\n * fades out, every two seconds. React Native has no pseudo-element, so it is a\n * sibling behind the avatar.\n */\nexport function PulseRing({ size, variant, color }: { size: AvatarSize; variant: AvatarVariant; color: string }): React.JSX.Element {\n const theme = useUiTheme();\n const progress = useLoopedProgress(true, { durationMs: PULSE.durationMs });\n const box = AVATAR_SIZES[size].box;\n return (\n <Animated.View\n aria-hidden\n style={[\n StyleSheet.absoluteFill,\n {\n pointerEvents: 'none',\n borderRadius: avatarRadius(theme, variant, box),\n backgroundColor: color,\n opacity: progress.interpolate({ inputRange: [0, 0.7, 1], outputRange: [PULSE.alpha, 0, 0] }),\n transform: [\n {\n scale: progress.interpolate({\n inputRange: [0, 0.7, 1],\n outputRange: [1, (box + PULSE.spread * 2) / box, 1],\n }),\n },\n ],\n },\n ]}\n />\n );\n}\n\n/** MUI's `rotateAnimation`: the ring turning once every 0.8s. */\nfunction Spinner({ size, testID }: { size: AvatarSize; testID?: string }): React.JSX.Element {\n const theme = useUiTheme();\n const progress = useLoopedProgress(true, { durationMs: SPINNER.durationMs });\n return (\n <Animated.View\n testID={testID}\n style={[\n avatarSpinnerStyle(theme, size),\n {\n transform: [\n { rotate: progress.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] }) },\n ],\n },\n ]}\n />\n );\n}\n\nexport interface SurfaceArgs {\n variant: AvatarVariant;\n size: AvatarSize;\n color: ColorValue;\n glow: boolean;\n bordered: boolean;\n clickable: boolean;\n imageError: boolean;\n showSpinner: boolean;\n imgSrc?: string;\n alt?: string;\n ariaLabel: string;\n content: React.ReactNode;\n contentType: ContentType;\n testID?: string;\n idFor: (suffix: string) => string | undefined;\n style?: StyleProp<ViewStyle>;\n onPress?: (event: GestureResponderEvent) => void;\n onImageError: () => void;\n onImageLoad: () => void;\n rest: object;\n}\n\n/** What sits in the middle: the portrait, or the winning content slot. */\nfunction SurfaceInner(a: SurfaceArgs, theme: UiTheme): React.JSX.Element | null {\n if (a.imgSrc && !a.imageError) {\n return (\n <Image\n source={{ uri: a.imgSrc }}\n aria-label={a.alt}\n onError={a.onImageError}\n onLoad={a.onImageLoad}\n style={StyleSheet.absoluteFill}\n accessibilityIgnoresInvertColors\n />\n );\n }\n if (a.showSpinner) return null;\n return (\n <View testID={a.idFor(a.contentType)}>\n {renderTextChildren(a.content, avatarTextStyle(theme, a.size, a.color, a.imageError), 1)}\n </View>\n );\n}\n\n/** The avatar box itself, plus the overlay that covers it while it loads. */\nexport function AvatarSurface(a: SurfaceArgs & { forwardedRef?: React.Ref<View> }): React.JSX.Element {\n const theme = useUiTheme();\n const box = AVATAR_SIZES[a.size].box;\n return (\n <>\n <Pressable\n ref={a.forwardedRef}\n testID={a.testID}\n role={a.clickable ? 'button' : undefined}\n aria-label={a.ariaLabel}\n tabIndex={a.clickable ? 0 : -1}\n onPress={a.clickable ? a.onPress : undefined}\n style={[\n avatarSurfaceStyle(theme, {\n variant: a.variant,\n size: a.size,\n color: a.color,\n glow: a.glow,\n bordered: a.bordered,\n interactive: a.clickable,\n hasError: a.imageError,\n }),\n a.style,\n ]}\n {...a.rest}\n >\n {SurfaceInner(a, theme)}\n </Pressable>\n {a.showSpinner ? (\n <View\n testID={a.idFor('loading')}\n style={avatarLoadingStyle(theme, a.size, avatarRadius(theme, a.variant, box))}\n >\n <Spinner size={a.size} testID={a.idFor('loading-spinner')} />\n </View>\n ) : null}\n </>\n );\n}\n"],"mappings":"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","names":["React","Animated","StyleSheet","View","jsx","jsxs","Animated","View","StyleSheet"]}
@@ -18,8 +18,7 @@ import {
18
18
  useUiTheme
19
19
  } from "../chunks/chunk-X6RQGKGF.js";
20
20
  import {
21
- alpha,
22
- contrastText
21
+ alpha
23
22
  } from "../chunks/chunk-R5XVZRDD.js";
24
23
 
25
24
  // src/components/data-display/Badge/Badge.native.tsx
@@ -92,12 +91,7 @@ var BADGE_ANCHORS = {
92
91
  var badgeAnchor = (position) => BADGE_ANCHORS[position] ?? BADGE_ANCHORS["top-right"];
93
92
  function badgePalette(theme, color) {
94
93
  if (color === "neutral") {
95
- return {
96
- main: theme.palette.grey[600],
97
- light: theme.palette.grey[400],
98
- dark: theme.palette.grey[800],
99
- contrastText: contrastText(theme.palette.grey[600])
100
- };
94
+ return theme.palette.neutral;
101
95
  }
102
96
  return theme.palette[color];
103
97
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/data-display/Badge/Badge.native.tsx","../../../src/components/data-display/Badge/Badge.helpers.ts","../../../src/components/data-display/Badge/Badge.metrics.ts","../../../src/components/data-display/Badge/Badge.look.native.ts","../../../src/components/data-display/Badge/BadgeContent.native.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Animated, Easing, Platform, StyleSheet, View, type ViewStyle } from 'react-native';\n\nimport {\n badgeContentOf,\n formatCount,\n makeBadgeTestId,\n resolveBadgeProps,\n type ResolvedBadgeProps,\n} from './Badge.helpers';\nimport { badgeAnchorStyle, badgeBoxStyle } from './Badge.look.native';\nimport {\n BOUNCE,\n CLOSE_DELAY_MS,\n FADE_IN_SCALE,\n PULSE,\n} from './Badge.metrics';\nimport { BadgeContent } from './BadgeContent.native';\nimport type { BadgeProps } from './Badge.types.native';\nimport { webAria } from '../../../platform/aria';\nimport { resolveTestId } from '../../../platform/test-id';\nimport { useLoopedProgress } from '../../../platform/animation';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\n\nconst nativeDriver = Platform.OS !== 'web';\ntype AnimatedStyle = Animated.WithAnimatedValue<ViewStyle>;\n\n/** MUI's `pulseAnimation`: 1 → 1.2 → 1 while the opacity dips, every two seconds. */\nfunction usePulseStyle(enabled: boolean): AnimatedStyle | null {\n const progress = useLoopedProgress(enabled, {\n durationMs: PULSE.durationMs,\n easing: Easing.inOut(Easing.ease),\n });\n if (!enabled) return null;\n return {\n opacity: progress.interpolate({ inputRange: [0, 0.7, 1], outputRange: [1, PULSE.opacity, 1] }),\n transform: [\n { scale: progress.interpolate({ inputRange: [0, 0.7, 1], outputRange: [1, PULSE.scale, 1] }) },\n ],\n };\n}\n\n/** A 0→1 progress that runs once on mount, for the entrance keyframes. */\nfunction useEntrance(enabled: boolean, durationMs: number): Animated.Value {\n const progress = React.useRef(new Animated.Value(enabled ? 0 : 1)).current;\n React.useEffect(() => {\n if (!enabled) return undefined;\n progress.setValue(0);\n const timing = Animated.timing(progress, {\n toValue: 1,\n duration: durationMs,\n easing: Easing.out(Easing.ease),\n useNativeDriver: nativeDriver,\n });\n timing.start();\n return () => timing.stop();\n }, [enabled, durationMs, progress]);\n return progress;\n}\n\n/** `bounceAnimation` when asked for, else `fadeInScaleAnimation`; neither when neither. */\nfunction useEntranceStyle(animate: boolean, bounce: boolean): AnimatedStyle | null {\n const progress = useEntrance(animate || bounce, bounce ? BOUNCE.durationMs : FADE_IN_SCALE.durationMs);\n if (bounce) {\n return {\n transform: [\n {\n translateY: progress.interpolate({\n inputRange: [0, 0.2, 0.4, 0.5, 0.6, 0.8, 1],\n outputRange: [0, 0, -BOUNCE.lift, 0, -BOUNCE.secondLift, 0, 0],\n }),\n },\n {\n scale: progress.interpolate({\n inputRange: [0, 0.2, 0.4, 0.5, 0.6, 0.8, 1],\n outputRange: [1, 1, BOUNCE.scale, 1, BOUNCE.secondScale, 1, 1],\n }),\n },\n ],\n };\n }\n if (!animate) return null;\n return {\n opacity: progress.interpolate({ inputRange: [0, 1], outputRange: [0, 1] }),\n transform: [\n {\n scale: progress.interpolate({\n inputRange: [0, 0.5, 1],\n outputRange: [FADE_IN_SCALE.from, FADE_IN_SCALE.overshoot, 1],\n }),\n },\n ],\n };\n}\n\n/** MUI's `Zoom` on close: out over 300ms, then the caller is told. */\nfunction useCloseZoom(onClose?: () => void): { style: AnimatedStyle; close: () => void } {\n const progress = React.useRef(new Animated.Value(1)).current;\n const close = React.useCallback(() => {\n Animated.timing(progress, {\n toValue: 0,\n duration: CLOSE_DELAY_MS,\n easing: Easing.out(Easing.ease),\n useNativeDriver: nativeDriver,\n }).start(({ finished }) => {\n if (finished) onClose?.();\n });\n }, [onClose, progress]);\n return { style: { opacity: progress, transform: [{ scale: progress }] }, close };\n}\n\ninterface ChipContent {\n content: React.ReactNode;\n /** A count that formatted away leaves nothing worth showing. */\n hidden: boolean;\n}\n\n/** What the chip shows, and whether there is anything to show at all. */\nfunction chipContent(resolved: ResolvedBadgeProps<BadgeProps>): ChipContent {\n const { variant, max, showZero, invisible, icon, closable } = resolved;\n const raw = badgeContentOf(resolved);\n const content = variant === 'count' ? formatCount(raw, { max, showZero }) : raw;\n // The web hides the chip only when the whole run assembles to nothing\n // (`buildBadgeContent` returns null on an empty `parts`), so a zero count\n // still draws while an icon or a close button is left to draw with it.\n const hasOtherParts = Boolean(icon) || Boolean(closable);\n return {\n content,\n hidden:\n Boolean(invisible) ||\n (variant === 'count' && content === null && !showZero && !hasOtherParts),\n };\n}\n\n/**\n * The native `Badge`: MUI's chip anchored off a corner of whatever it is\n * attached to, with the same ten variants, five sizes and content run.\n */\nexport const Badge = React.forwardRef<View, BadgeProps>((rawProps, ref) => {\n const resolved = resolveBadgeProps(rawProps);\n const {\n variant,\n size,\n color,\n glow,\n pulse,\n animate,\n bounce,\n max: _max,\n showZero: _showZero,\n position,\n invisible,\n closable,\n onClose,\n icon,\n children,\n style,\n 'aria-label': ariaLabel,\n 'aria-live': ariaLive = 'polite',\n 'aria-atomic': ariaAtomic = true,\n 'data-testid': _domTestId,\n testID: _testID,\n dataTestId: _dataTestId,\n content: _content,\n badgeContent: _badgeContent,\n shimmer: _shimmer,\n ...rest\n } = resolved;\n const theme = useUiTheme();\n const badgeId = resolveTestId(resolved);\n const idFor = makeBadgeTestId(badgeId);\n const pulseStyle = usePulseStyle(pulse && !invisible);\n const entrance = useEntranceStyle(animate && !bounce, bounce);\n const zoom = useCloseZoom(onClose);\n\n const { content, hidden } = chipContent(resolved);\n\n return (\n <View ref={ref} testID={badgeId || 'badge'} style={[styles.anchor, style]} {...rest}>\n {children}\n {hidden ? null : (\n <View style={badgeAnchorStyle(position)}>\n <Animated.View\n testID={idFor('content-wrapper')}\n aria-label={ariaLabel}\n aria-live={ariaLive}\n {...webAria({ 'aria-atomic': ariaAtomic ? 'true' : 'false' })}\n style={[badgeBoxStyle(theme, { variant, size, color, glow }), entrance, pulseStyle, zoom.style]}\n >\n <BadgeContent\n variant={variant}\n size={size}\n color={color}\n icon={icon}\n closable={closable}\n content={content}\n idFor={idFor}\n onClose={zoom.close}\n />\n </Animated.View>\n </View>\n )}\n </View>\n );\n});\n\nBadge.displayName = 'Badge';\n\nconst styles = StyleSheet.create({\n /** MUI's badge root: `inline-flex`, with the chip positioned against it. */\n anchor: { position: 'relative', alignSelf: 'flex-start', flexDirection: 'row' },\n});\n","import type { ReactNode } from 'react';\n\nimport type { BadgeBaseProps } from './Badge.base';\n\ntype BadgeDefaultedKeys =\n | 'variant'\n | 'size'\n | 'color'\n | 'glow'\n | 'pulse'\n | 'animate'\n | 'shimmer'\n | 'bounce'\n | 'max'\n | 'showZero'\n | 'position'\n | 'closable';\n\n/**\n * Generic over the renderer's own props: the web and the native `Badge` carry\n * different extras, and both come back out untouched.\n */\nexport type ResolvedBadgeProps<P extends BadgeBaseProps = BadgeBaseProps> = P &\n Required<Pick<BadgeBaseProps, BadgeDefaultedKeys>>;\n\nconst BADGE_DEFAULTS: Required<Pick<BadgeBaseProps, BadgeDefaultedKeys>> = {\n variant: 'default',\n size: 'md',\n color: 'primary',\n glow: false,\n pulse: false,\n animate: true,\n shimmer: false,\n bounce: false,\n max: 99,\n showZero: false,\n position: 'top-right',\n closable: false,\n};\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default exactly as a destructuring default would. Applied as\n// a merge rather than destructuring defaults, which would otherwise put twelve\n// branches into the component's own complexity budget.\nexport const resolveBadgeProps = <P extends BadgeBaseProps>(props: P): ResolvedBadgeProps<P> =>\n ({\n ...BADGE_DEFAULTS,\n ...(Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<P>),\n }) as ResolvedBadgeProps<P>;\n\n// `content` supersedes the older `badgeContent` prop.\nexport const badgeContentOf = (props: Pick<BadgeBaseProps, 'content' | 'badgeContent'>): ReactNode => {\n if (props.content !== undefined) return props.content;\n if (props.badgeContent !== undefined) return props.badgeContent;\n return null;\n};\n\n// Counts cap at `max` and, unless showZero is set, a zero renders nothing.\nexport const formatCount = (\n count: ReactNode,\n { max, showZero }: { max: number; showZero: boolean },\n): ReactNode => {\n if (typeof count !== 'number') return count;\n if (count === 0 && !showZero) return null;\n if (count > max) return `${max}+`;\n return count;\n};\n\n// MUI spreads these straight onto the badge span, where an explicit undefined\n// would render as an empty attribute.\nexport const definedAria = (\n aria: Record<string, string | boolean | undefined>,\n): Record<string, string | boolean> =>\n Object.fromEntries(Object.entries(aria).filter(([, value]) => value !== undefined)) as Record<\n string,\n string | boolean\n >;\n\n/** `${dataTestId}-content`, or `badge-content` when the caller named nothing. */\nexport const makeBadgeTestId =\n (dataTestId?: string) =>\n (suffix: string): string =>\n dataTestId ? `${dataTestId}-${suffix}` : `badge-${suffix}`;\n","import type { BadgePosition, BadgeSize } from './Badge.base';\nimport { contrastText, type UiPaletteColor, type UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\n/**\n * THE NUMBERS BOTH `Badge` RENDERERS DRAW WITH.\n *\n * `Badge.styles.ts` / `Badge.variants.ts` (web, emotion over MUI's `Badge`) and\n * `Badge.native.tsx` (React Native) read this one table: the five chips, the\n * dot inside them, the ten variants' alphas and borders, and the keyframes.\n * The web turns the px into rem and the padding into a shorthand; native uses\n * the numbers.\n */\nexport interface BadgeSizeMetrics {\n minWidth: number;\n height: number;\n /** The content's type size, in px. */\n fontSize: number;\n /** The chip's side padding, in px. `padding: '0 Npx'` on the web. */\n paddingHorizontal: number;\n dotSize: number;\n /** A leading icon's own type size, in px. */\n iconSize: number;\n /** The close glyph's type size, in px. `xl` falls back to `lg`, as the web does. */\n closeIconSize: number;\n}\n\nexport const BADGE_SIZES: Record<BadgeSize, BadgeSizeMetrics> = {\n xs: { minWidth: 14, height: 14, fontSize: 8, paddingHorizontal: 3, dotSize: 6, iconSize: 10, closeIconSize: 8 },\n sm: { minWidth: 16, height: 16, fontSize: 10, paddingHorizontal: 4, dotSize: 8, iconSize: 12, closeIconSize: 10 },\n md: { minWidth: 20, height: 20, fontSize: 12, paddingHorizontal: 6, dotSize: 10, iconSize: 14, closeIconSize: 12 },\n lg: { minWidth: 24, height: 24, fontSize: 14, paddingHorizontal: 8, dotSize: 12, iconSize: 16, closeIconSize: 14 },\n xl: { minWidth: 28, height: 28, fontSize: 16, paddingHorizontal: 10, dotSize: 14, iconSize: 18, closeIconSize: 14 },\n};\n\n/** The chip's own type weight, its tracking, and the paper ring around it. */\nexport const BADGE_FONT_WEIGHT = 600;\nexport const BADGE_DESTRUCTIVE_FONT_WEIGHT = 700;\nexport const BADGE_LETTER_SPACING_EM = 0.025;\nexport const BADGE_BORDER_WIDTH = 2;\n/** Between the icon, the content and the close button. */\nexport const BADGE_CONTENT_GAP = 2;\n\n/* ── The ten variants' washes ─────────────────────────────────────────────── */\n\nexport const GLASS_BACKGROUND_ALPHA = 0.1;\nexport const GLASS_BORDER_ALPHA = 0.2;\nexport const GLASS_BLUR_PX = 10;\nexport const GLASS_SATURATE = 2;\nexport const GLASS_INSET_HIGHLIGHT_ALPHA = 0.1;\nexport const OUTLINE_BORDER_WIDTH = 2;\nexport const SECONDARY_BACKGROUND_ALPHA = 0.15;\nexport const SECONDARY_BORDER_ALPHA = 0.3;\n\n/* ── Emphasis and animation ───────────────────────────────────────────────── */\n\n/** `glow` without `pulse`: a 15px halo, brighter under the pointer. */\nexport const GLOW = { blur: 15, spread: 3, alpha: 0.5, hoverBlur: 20, hoverSpread: 4, hoverAlpha: 0.6, brightness: 1.1 } as const;\n/** `glow` WITH `pulse`: the halo breathes between these two. */\nexport const GLOW_PULSE = { fromBlur: 5, fromSpread: 2, fromAlpha: 0.4, toBlur: 20, toSpread: 4, toAlpha: 0.8 } as const;\n/** MUI-free `pulseAnimation`: 1 → 1.2 → 1 while the opacity dips to 0.7. */\nexport const PULSE = { durationMs: 2000, scale: 1.2, opacity: 0.7 } as const;\n/** `bounceAnimation`: up 8px at 40%, 4px at 60%, over one second. */\nexport const BOUNCE = { durationMs: 1000, lift: 8, secondLift: 4, scale: 1.05, secondScale: 1.02 } as const;\n/** `fadeInScaleAnimation`: in from half size, overshooting to 1.1. */\nexport const FADE_IN_SCALE = { durationMs: 400, from: 0.5, overshoot: 1.1 } as const;\n/** The shimmer sweep, and the white it is made of. */\nexport const SHIMMER = { durationMs: 3000, alpha: 0.4 } as const;\n/** How long the mount animation is held before the flag clears. */\nexport const MOUNT_ANIMATION_MS = 1000;\n/** MUI's `Zoom` on close, and the wait before the caller is told. */\nexport const CLOSE_DELAY_MS = 300;\n/** `transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1)` on the chip. */\nexport const BADGE_TRANSITION_MS = 300;\nexport const BADGE_TRANSITION_EASING = 'cubic-bezier(0.4, 0, 0.2, 1)';\n/** The chip grows a tenth under the pointer. */\nexport const HOVER_SCALE = 1.1;\n\n/* ── Placement ────────────────────────────────────────────────────────────── */\n\nexport interface BadgeAnchor {\n vertical: 'top' | 'bottom';\n horizontal: 'left' | 'right';\n}\n\nconst BADGE_ANCHORS: Record<BadgePosition, BadgeAnchor> = {\n 'top-right': { vertical: 'top', horizontal: 'right' },\n 'top-left': { vertical: 'top', horizontal: 'left' },\n 'bottom-right': { vertical: 'bottom', horizontal: 'right' },\n 'bottom-left': { vertical: 'bottom', horizontal: 'left' },\n};\n\n/**\n * Falls back to `top-right` for anything outside the union, as the web's own\n * `positionMap[position] || positionMap['top-right']` did. Splitting on `-`\n * instead would hand MUI a half-undefined `anchorOrigin` for, say, `middle`.\n */\nexport const badgeAnchor = (position: BadgePosition): BadgeAnchor =>\n BADGE_ANCHORS[position] ?? BADGE_ANCHORS['top-right'];\n\n/**\n * `neutral` has no palette slot of its own in MUI, so `Badge.styles.ts` draws\n * it from three greys; `danger` is MUI's `error`, which is what the shared\n * theme calls `danger`. Same colours here.\n */\nexport function badgePalette(theme: UiTheme, color: ColorValue): UiPaletteColor {\n if (color === 'neutral') {\n return {\n main: theme.palette.grey[600],\n light: theme.palette.grey[400],\n dark: theme.palette.grey[800],\n contrastText: contrastText(theme.palette.grey[600]),\n };\n }\n return theme.palette[color];\n}\n","import type { TextStyle, ViewStyle } from 'react-native';\n\nimport type { BadgePosition, BadgeSize, BadgeVariant } from './Badge.base';\nimport {\n BADGE_BORDER_WIDTH,\n BADGE_DESTRUCTIVE_FONT_WEIGHT,\n BADGE_FONT_WEIGHT,\n BADGE_LETTER_SPACING_EM,\n BADGE_SIZES,\n GLASS_BACKGROUND_ALPHA,\n GLASS_BORDER_ALPHA,\n GLOW,\n OUTLINE_BORDER_WIDTH,\n SECONDARY_BACKGROUND_ALPHA,\n SECONDARY_BORDER_ALPHA,\n badgeAnchor,\n badgePalette,\n type BadgeSizeMetrics,\n} from './Badge.metrics';\nimport { alpha } from '../../../tokens/color';\nimport type { UiPaletteColor, UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\nexport interface BadgePaint {\n box: ViewStyle;\n ink: string;\n fontWeight: number;\n /** `gradient` and `glass` shout; everything else is set as written. */\n uppercase: boolean;\n}\n\n/** The chip a variant paints, as React Native styles. */\nfunction variantPaint(\n theme: UiTheme,\n variant: BadgeVariant,\n accent: UiPaletteColor,\n): BadgePaint {\n const filled = (background: string, ink: string): BadgePaint => ({\n box: { backgroundColor: background },\n ink,\n fontWeight: BADGE_FONT_WEIGHT,\n uppercase: false,\n });\n switch (variant) {\n case 'gradient':\n // React Native core has no gradient fill: the 135° run takes its first stop.\n return { ...filled(accent.main, '#fff'), uppercase: true };\n case 'glass':\n return {\n box: {\n backgroundColor: alpha(accent.main, GLASS_BACKGROUND_ALPHA),\n borderWidth: 1,\n borderColor: alpha(accent.main, GLASS_BORDER_ALPHA),\n },\n ink: accent.main,\n fontWeight: BADGE_FONT_WEIGHT,\n uppercase: true,\n };\n case 'outline':\n return {\n box: {\n backgroundColor: 'transparent',\n borderWidth: OUTLINE_BORDER_WIDTH,\n borderColor: accent.main,\n },\n ink: accent.main,\n fontWeight: BADGE_FONT_WEIGHT,\n uppercase: false,\n };\n case 'secondary':\n return {\n box: {\n backgroundColor: alpha(accent.main, SECONDARY_BACKGROUND_ALPHA),\n borderWidth: 1,\n borderColor: alpha(accent.main, SECONDARY_BORDER_ALPHA),\n },\n ink: accent.main,\n fontWeight: BADGE_FONT_WEIGHT,\n uppercase: false,\n };\n case 'destructive':\n return {\n ...filled(theme.palette.danger.main, theme.palette.danger.contrastText),\n fontWeight: BADGE_DESTRUCTIVE_FONT_WEIGHT,\n };\n case 'success':\n return filled(theme.palette.success.main, theme.palette.success.contrastText);\n case 'warning':\n return filled(theme.palette.warning.main, theme.palette.warning.contrastText);\n default:\n return filled(accent.main, accent.contrastText || '#fff');\n }\n}\n\nexport interface BadgeBoxArgs {\n variant: BadgeVariant;\n size: BadgeSize;\n color: ColorValue;\n glow: boolean;\n}\n\n/**\n * Where the chip hangs: MUI's `anchorOrigin` pins it to a corner and then\n * `translate(±50%, ∓50%)` puts its CENTRE there. It is its own node so the\n * chip's animations own `transform` outright — a React Native style array\n * replaces that property rather than composing it, as CSS would.\n */\nexport function badgeAnchorStyle(position: BadgePosition): ViewStyle {\n const anchor = badgeAnchor(position);\n return {\n position: 'absolute',\n [anchor.vertical]: 0,\n [anchor.horizontal]: 0,\n transform: [\n { translateX: anchor.horizontal === 'right' ? '50%' : '-50%' },\n { translateY: anchor.vertical === 'top' ? '-50%' : '50%' },\n ],\n };\n}\n\n/** The chip itself: MUI's paper ring, its size, and the variant's paint. */\nexport function badgeBoxStyle(theme: UiTheme, a: BadgeBoxArgs): ViewStyle {\n const metrics = BADGE_SIZES[a.size];\n const accent = badgePalette(theme, a.color);\n const paint = variantPaint(theme, a.variant, accent);\n const dot = a.variant === 'dot';\n\n return {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: BADGE_BORDER_WIDTH,\n borderColor: theme.palette.background.paper,\n ...(dot\n ? {\n width: metrics.dotSize,\n height: metrics.dotSize,\n minWidth: metrics.dotSize,\n borderRadius: metrics.dotSize / 2,\n backgroundColor: accent.main,\n }\n : {\n minWidth: metrics.minWidth,\n height: metrics.height,\n paddingHorizontal: metrics.paddingHorizontal,\n borderRadius: metrics.height / 2,\n ...paint.box,\n }),\n ...(a.glow\n ? { boxShadow: `0 0 ${GLOW.blur}px ${GLOW.spread}px ${alpha(accent.main, GLOW.alpha)}` }\n : {}),\n };\n}\n\n/** The chip's own type: the size's step, semibold, tracked a little wider. */\nexport function badgeTextStyle(\n theme: UiTheme,\n variant: BadgeVariant,\n size: BadgeSize,\n color: ColorValue,\n): TextStyle {\n const metrics = BADGE_SIZES[size];\n const paint = variantPaint(theme, variant, badgePalette(theme, color));\n return {\n fontFamily: theme.typography.fontFamily,\n fontSize: metrics.fontSize,\n fontWeight: String(paint.fontWeight) as TextStyle['fontWeight'],\n letterSpacing: metrics.fontSize * BADGE_LETTER_SPACING_EM,\n color: paint.ink,\n ...(paint.uppercase ? { textTransform: 'uppercase' } : {}),\n };\n}\n\nexport const badgeMetrics = (size: BadgeSize): BadgeSizeMetrics => BADGE_SIZES[size];\n","import * as React from 'react';\nimport { Pressable, StyleSheet, View } from 'react-native';\n\nimport type { BadgeSize, BadgeVariant } from './Badge.base';\nimport { badgeMetrics, badgeTextStyle } from './Badge.look.native';\nimport { BADGE_CONTENT_GAP } from './Badge.metrics';\nimport { Icon } from '../../../icons/Icon.native';\nimport { renderTextChildren } from '../../../platform/text-children';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\nexport interface BadgeContentProps {\n variant: BadgeVariant;\n size: BadgeSize;\n color: ColorValue;\n icon?: React.ReactNode;\n closable: boolean;\n content: React.ReactNode;\n idFor: (suffix: string) => string;\n onClose: () => void;\n}\n\n/**\n * The badge's inner run: optional icon, the content itself, optional close\n * button — the same three slots and the same ids `BadgeContent.tsx` builds. A\n * dot badge shows none of it.\n */\nexport function BadgeContent({\n variant,\n size,\n color,\n icon,\n closable,\n content,\n idFor,\n onClose,\n}: BadgeContentProps): React.JSX.Element | null {\n const theme = useUiTheme();\n if (variant === 'dot') return null;\n\n const metrics = badgeMetrics(size);\n const text = badgeTextStyle(theme, variant, size, color);\n const hasContent = content !== null && content !== undefined;\n if (!icon && !hasContent && !closable) return null;\n\n return (\n <View style={styles.run}>\n {icon ? (\n <View testID={idFor('icon')} style={{ height: metrics.iconSize, justifyContent: 'center' }}>\n {icon}\n </View>\n ) : null}\n {hasContent ? (\n <View testID={idFor('content')} style={styles.centre}>\n {renderTextChildren(content, text, 1)}\n </View>\n ) : null}\n {closable ? (\n <Pressable\n testID={idFor('close')}\n role=\"button\"\n aria-label=\"close\"\n onPress={onClose}\n style={styles.close}\n >\n <Icon name=\"Close\" size={metrics.closeIconSize} color={text.color as string} />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n run: { flexDirection: 'row', alignItems: 'center', gap: BADGE_CONTENT_GAP },\n centre: { alignItems: 'center', justifyContent: 'center' },\n /** MUI's close `IconButton` sits half a spacing unit clear of the label. */\n close: { marginLeft: 4, alignItems: 'center', justifyContent: 'center' },\n});\n"],"mappings":"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","names":["StyleSheet","View","jsx","jsxs","View","styles","StyleSheet"]}
1
+ {"version":3,"sources":["../../../src/components/data-display/Badge/Badge.native.tsx","../../../src/components/data-display/Badge/Badge.helpers.ts","../../../src/components/data-display/Badge/Badge.metrics.ts","../../../src/components/data-display/Badge/Badge.look.native.ts","../../../src/components/data-display/Badge/BadgeContent.native.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Animated, Easing, Platform, StyleSheet, View, type ViewStyle } from 'react-native';\n\nimport {\n badgeContentOf,\n formatCount,\n makeBadgeTestId,\n resolveBadgeProps,\n type ResolvedBadgeProps,\n} from './Badge.helpers';\nimport { badgeAnchorStyle, badgeBoxStyle } from './Badge.look.native';\nimport {\n BOUNCE,\n CLOSE_DELAY_MS,\n FADE_IN_SCALE,\n PULSE,\n} from './Badge.metrics';\nimport { BadgeContent } from './BadgeContent.native';\nimport type { BadgeProps } from './Badge.types.native';\nimport { webAria } from '../../../platform/aria';\nimport { resolveTestId } from '../../../platform/test-id';\nimport { useLoopedProgress } from '../../../platform/animation';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\n\nconst nativeDriver = Platform.OS !== 'web';\ntype AnimatedStyle = Animated.WithAnimatedValue<ViewStyle>;\n\n/** MUI's `pulseAnimation`: 1 → 1.2 → 1 while the opacity dips, every two seconds. */\nfunction usePulseStyle(enabled: boolean): AnimatedStyle | null {\n const progress = useLoopedProgress(enabled, {\n durationMs: PULSE.durationMs,\n easing: Easing.inOut(Easing.ease),\n });\n if (!enabled) return null;\n return {\n opacity: progress.interpolate({ inputRange: [0, 0.7, 1], outputRange: [1, PULSE.opacity, 1] }),\n transform: [\n { scale: progress.interpolate({ inputRange: [0, 0.7, 1], outputRange: [1, PULSE.scale, 1] }) },\n ],\n };\n}\n\n/** A 0→1 progress that runs once on mount, for the entrance keyframes. */\nfunction useEntrance(enabled: boolean, durationMs: number): Animated.Value {\n const progress = React.useRef(new Animated.Value(enabled ? 0 : 1)).current;\n React.useEffect(() => {\n if (!enabled) return undefined;\n progress.setValue(0);\n const timing = Animated.timing(progress, {\n toValue: 1,\n duration: durationMs,\n easing: Easing.out(Easing.ease),\n useNativeDriver: nativeDriver,\n });\n timing.start();\n return () => timing.stop();\n }, [enabled, durationMs, progress]);\n return progress;\n}\n\n/** `bounceAnimation` when asked for, else `fadeInScaleAnimation`; neither when neither. */\nfunction useEntranceStyle(animate: boolean, bounce: boolean): AnimatedStyle | null {\n const progress = useEntrance(animate || bounce, bounce ? BOUNCE.durationMs : FADE_IN_SCALE.durationMs);\n if (bounce) {\n return {\n transform: [\n {\n translateY: progress.interpolate({\n inputRange: [0, 0.2, 0.4, 0.5, 0.6, 0.8, 1],\n outputRange: [0, 0, -BOUNCE.lift, 0, -BOUNCE.secondLift, 0, 0],\n }),\n },\n {\n scale: progress.interpolate({\n inputRange: [0, 0.2, 0.4, 0.5, 0.6, 0.8, 1],\n outputRange: [1, 1, BOUNCE.scale, 1, BOUNCE.secondScale, 1, 1],\n }),\n },\n ],\n };\n }\n if (!animate) return null;\n return {\n opacity: progress.interpolate({ inputRange: [0, 1], outputRange: [0, 1] }),\n transform: [\n {\n scale: progress.interpolate({\n inputRange: [0, 0.5, 1],\n outputRange: [FADE_IN_SCALE.from, FADE_IN_SCALE.overshoot, 1],\n }),\n },\n ],\n };\n}\n\n/** MUI's `Zoom` on close: out over 300ms, then the caller is told. */\nfunction useCloseZoom(onClose?: () => void): { style: AnimatedStyle; close: () => void } {\n const progress = React.useRef(new Animated.Value(1)).current;\n const close = React.useCallback(() => {\n Animated.timing(progress, {\n toValue: 0,\n duration: CLOSE_DELAY_MS,\n easing: Easing.out(Easing.ease),\n useNativeDriver: nativeDriver,\n }).start(({ finished }) => {\n if (finished) onClose?.();\n });\n }, [onClose, progress]);\n return { style: { opacity: progress, transform: [{ scale: progress }] }, close };\n}\n\ninterface ChipContent {\n content: React.ReactNode;\n /** A count that formatted away leaves nothing worth showing. */\n hidden: boolean;\n}\n\n/** What the chip shows, and whether there is anything to show at all. */\nfunction chipContent(resolved: ResolvedBadgeProps<BadgeProps>): ChipContent {\n const { variant, max, showZero, invisible, icon, closable } = resolved;\n const raw = badgeContentOf(resolved);\n const content = variant === 'count' ? formatCount(raw, { max, showZero }) : raw;\n // The web hides the chip only when the whole run assembles to nothing\n // (`buildBadgeContent` returns null on an empty `parts`), so a zero count\n // still draws while an icon or a close button is left to draw with it.\n const hasOtherParts = Boolean(icon) || Boolean(closable);\n return {\n content,\n hidden:\n Boolean(invisible) ||\n (variant === 'count' && content === null && !showZero && !hasOtherParts),\n };\n}\n\n/**\n * The native `Badge`: MUI's chip anchored off a corner of whatever it is\n * attached to, with the same ten variants, five sizes and content run.\n */\nexport const Badge = React.forwardRef<View, BadgeProps>((rawProps, ref) => {\n const resolved = resolveBadgeProps(rawProps);\n const {\n variant,\n size,\n color,\n glow,\n pulse,\n animate,\n bounce,\n max: _max,\n showZero: _showZero,\n position,\n invisible,\n closable,\n onClose,\n icon,\n children,\n style,\n 'aria-label': ariaLabel,\n 'aria-live': ariaLive = 'polite',\n 'aria-atomic': ariaAtomic = true,\n 'data-testid': _domTestId,\n testID: _testID,\n dataTestId: _dataTestId,\n content: _content,\n badgeContent: _badgeContent,\n shimmer: _shimmer,\n ...rest\n } = resolved;\n const theme = useUiTheme();\n const badgeId = resolveTestId(resolved);\n const idFor = makeBadgeTestId(badgeId);\n const pulseStyle = usePulseStyle(pulse && !invisible);\n const entrance = useEntranceStyle(animate && !bounce, bounce);\n const zoom = useCloseZoom(onClose);\n\n const { content, hidden } = chipContent(resolved);\n\n return (\n <View ref={ref} testID={badgeId || 'badge'} style={[styles.anchor, style]} {...rest}>\n {children}\n {hidden ? null : (\n <View style={badgeAnchorStyle(position)}>\n <Animated.View\n testID={idFor('content-wrapper')}\n aria-label={ariaLabel}\n aria-live={ariaLive}\n {...webAria({ 'aria-atomic': ariaAtomic ? 'true' : 'false' })}\n style={[badgeBoxStyle(theme, { variant, size, color, glow }), entrance, pulseStyle, zoom.style]}\n >\n <BadgeContent\n variant={variant}\n size={size}\n color={color}\n icon={icon}\n closable={closable}\n content={content}\n idFor={idFor}\n onClose={zoom.close}\n />\n </Animated.View>\n </View>\n )}\n </View>\n );\n});\n\nBadge.displayName = 'Badge';\n\nconst styles = StyleSheet.create({\n /** MUI's badge root: `inline-flex`, with the chip positioned against it. */\n anchor: { position: 'relative', alignSelf: 'flex-start', flexDirection: 'row' },\n});\n","import type { ReactNode } from 'react';\n\nimport type { BadgeBaseProps } from './Badge.base';\n\ntype BadgeDefaultedKeys =\n | 'variant'\n | 'size'\n | 'color'\n | 'glow'\n | 'pulse'\n | 'animate'\n | 'shimmer'\n | 'bounce'\n | 'max'\n | 'showZero'\n | 'position'\n | 'closable';\n\n/**\n * Generic over the renderer's own props: the web and the native `Badge` carry\n * different extras, and both come back out untouched.\n */\nexport type ResolvedBadgeProps<P extends BadgeBaseProps = BadgeBaseProps> = P &\n Required<Pick<BadgeBaseProps, BadgeDefaultedKeys>>;\n\nconst BADGE_DEFAULTS: Required<Pick<BadgeBaseProps, BadgeDefaultedKeys>> = {\n variant: 'default',\n size: 'md',\n color: 'primary',\n glow: false,\n pulse: false,\n animate: true,\n shimmer: false,\n bounce: false,\n max: 99,\n showZero: false,\n position: 'top-right',\n closable: false,\n};\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default exactly as a destructuring default would. Applied as\n// a merge rather than destructuring defaults, which would otherwise put twelve\n// branches into the component's own complexity budget.\nexport const resolveBadgeProps = <P extends BadgeBaseProps>(props: P): ResolvedBadgeProps<P> =>\n ({\n ...BADGE_DEFAULTS,\n ...(Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<P>),\n }) as ResolvedBadgeProps<P>;\n\n// `content` supersedes the older `badgeContent` prop.\nexport const badgeContentOf = (props: Pick<BadgeBaseProps, 'content' | 'badgeContent'>): ReactNode => {\n if (props.content !== undefined) return props.content;\n if (props.badgeContent !== undefined) return props.badgeContent;\n return null;\n};\n\n// Counts cap at `max` and, unless showZero is set, a zero renders nothing.\nexport const formatCount = (\n count: ReactNode,\n { max, showZero }: { max: number; showZero: boolean },\n): ReactNode => {\n if (typeof count !== 'number') return count;\n if (count === 0 && !showZero) return null;\n if (count > max) return `${max}+`;\n return count;\n};\n\n// MUI spreads these straight onto the badge span, where an explicit undefined\n// would render as an empty attribute.\nexport const definedAria = (\n aria: Record<string, string | boolean | undefined>,\n): Record<string, string | boolean> =>\n Object.fromEntries(Object.entries(aria).filter(([, value]) => value !== undefined)) as Record<\n string,\n string | boolean\n >;\n\n/** `${dataTestId}-content`, or `badge-content` when the caller named nothing. */\nexport const makeBadgeTestId =\n (dataTestId?: string) =>\n (suffix: string): string =>\n dataTestId ? `${dataTestId}-${suffix}` : `badge-${suffix}`;\n","import type { BadgePosition, BadgeSize } from './Badge.base';\nimport type { UiPaletteColor, UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\n/**\n * THE NUMBERS BOTH `Badge` RENDERERS DRAW WITH.\n *\n * `Badge.styles.ts` / `Badge.variants.ts` (web, emotion over MUI's `Badge`) and\n * `Badge.native.tsx` (React Native) read this one table: the five chips, the\n * dot inside them, the ten variants' alphas and borders, and the keyframes.\n * The web turns the px into rem and the padding into a shorthand; native uses\n * the numbers.\n */\nexport interface BadgeSizeMetrics {\n minWidth: number;\n height: number;\n /** The content's type size, in px. */\n fontSize: number;\n /** The chip's side padding, in px. `padding: '0 Npx'` on the web. */\n paddingHorizontal: number;\n dotSize: number;\n /** A leading icon's own type size, in px. */\n iconSize: number;\n /** The close glyph's type size, in px. `xl` falls back to `lg`, as the web does. */\n closeIconSize: number;\n}\n\nexport const BADGE_SIZES: Record<BadgeSize, BadgeSizeMetrics> = {\n xs: { minWidth: 14, height: 14, fontSize: 8, paddingHorizontal: 3, dotSize: 6, iconSize: 10, closeIconSize: 8 },\n sm: { minWidth: 16, height: 16, fontSize: 10, paddingHorizontal: 4, dotSize: 8, iconSize: 12, closeIconSize: 10 },\n md: { minWidth: 20, height: 20, fontSize: 12, paddingHorizontal: 6, dotSize: 10, iconSize: 14, closeIconSize: 12 },\n lg: { minWidth: 24, height: 24, fontSize: 14, paddingHorizontal: 8, dotSize: 12, iconSize: 16, closeIconSize: 14 },\n xl: { minWidth: 28, height: 28, fontSize: 16, paddingHorizontal: 10, dotSize: 14, iconSize: 18, closeIconSize: 14 },\n};\n\n/** The chip's own type weight, its tracking, and the paper ring around it. */\nexport const BADGE_FONT_WEIGHT = 600;\nexport const BADGE_DESTRUCTIVE_FONT_WEIGHT = 700;\nexport const BADGE_LETTER_SPACING_EM = 0.025;\nexport const BADGE_BORDER_WIDTH = 2;\n/** Between the icon, the content and the close button. */\nexport const BADGE_CONTENT_GAP = 2;\n\n/* ── The ten variants' washes ─────────────────────────────────────────────── */\n\nexport const GLASS_BACKGROUND_ALPHA = 0.1;\nexport const GLASS_BORDER_ALPHA = 0.2;\nexport const GLASS_BLUR_PX = 10;\nexport const GLASS_SATURATE = 2;\nexport const GLASS_INSET_HIGHLIGHT_ALPHA = 0.1;\nexport const OUTLINE_BORDER_WIDTH = 2;\nexport const SECONDARY_BACKGROUND_ALPHA = 0.15;\nexport const SECONDARY_BORDER_ALPHA = 0.3;\n\n/* ── Emphasis and animation ───────────────────────────────────────────────── */\n\n/** `glow` without `pulse`: a 15px halo, brighter under the pointer. */\nexport const GLOW = { blur: 15, spread: 3, alpha: 0.5, hoverBlur: 20, hoverSpread: 4, hoverAlpha: 0.6, brightness: 1.1 } as const;\n/** `glow` WITH `pulse`: the halo breathes between these two. */\nexport const GLOW_PULSE = { fromBlur: 5, fromSpread: 2, fromAlpha: 0.4, toBlur: 20, toSpread: 4, toAlpha: 0.8 } as const;\n/** MUI-free `pulseAnimation`: 1 → 1.2 → 1 while the opacity dips to 0.7. */\nexport const PULSE = { durationMs: 2000, scale: 1.2, opacity: 0.7 } as const;\n/** `bounceAnimation`: up 8px at 40%, 4px at 60%, over one second. */\nexport const BOUNCE = { durationMs: 1000, lift: 8, secondLift: 4, scale: 1.05, secondScale: 1.02 } as const;\n/** `fadeInScaleAnimation`: in from half size, overshooting to 1.1. */\nexport const FADE_IN_SCALE = { durationMs: 400, from: 0.5, overshoot: 1.1 } as const;\n/** The shimmer sweep, and the white it is made of. */\nexport const SHIMMER = { durationMs: 3000, alpha: 0.4 } as const;\n/** How long the mount animation is held before the flag clears. */\nexport const MOUNT_ANIMATION_MS = 1000;\n/** MUI's `Zoom` on close, and the wait before the caller is told. */\nexport const CLOSE_DELAY_MS = 300;\n/** `transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1)` on the chip. */\nexport const BADGE_TRANSITION_MS = 300;\nexport const BADGE_TRANSITION_EASING = 'cubic-bezier(0.4, 0, 0.2, 1)';\n/** The chip grows a tenth under the pointer. */\nexport const HOVER_SCALE = 1.1;\n\n/* ── Placement ────────────────────────────────────────────────────────────── */\n\nexport interface BadgeAnchor {\n vertical: 'top' | 'bottom';\n horizontal: 'left' | 'right';\n}\n\nconst BADGE_ANCHORS: Record<BadgePosition, BadgeAnchor> = {\n 'top-right': { vertical: 'top', horizontal: 'right' },\n 'top-left': { vertical: 'top', horizontal: 'left' },\n 'bottom-right': { vertical: 'bottom', horizontal: 'right' },\n 'bottom-left': { vertical: 'bottom', horizontal: 'left' },\n};\n\n/**\n * Falls back to `top-right` for anything outside the union, as the web's own\n * `positionMap[position] || positionMap['top-right']` did. Splitting on `-`\n * instead would hand MUI a half-undefined `anchorOrigin` for, say, `middle`.\n */\nexport const badgeAnchor = (position: BadgePosition): BadgeAnchor =>\n BADGE_ANCHORS[position] ?? BADGE_ANCHORS['top-right'];\n\n/**\n * `neutral` has no palette slot of its own in MUI, so `Badge.styles.ts` draws\n * it from three greys; `danger` is MUI's `error`, which is what the shared\n * theme calls `danger`. Same colours here.\n */\nexport function badgePalette(theme: UiTheme, color: ColorValue): UiPaletteColor {\n if (color === 'neutral') {\n // Grey 600 / 400 / 800 under white ink: the shared theme's own `neutral`.\n return theme.palette.neutral;\n }\n return theme.palette[color];\n}\n","import type { TextStyle, ViewStyle } from 'react-native';\n\nimport type { BadgePosition, BadgeSize, BadgeVariant } from './Badge.base';\nimport {\n BADGE_BORDER_WIDTH,\n BADGE_DESTRUCTIVE_FONT_WEIGHT,\n BADGE_FONT_WEIGHT,\n BADGE_LETTER_SPACING_EM,\n BADGE_SIZES,\n GLASS_BACKGROUND_ALPHA,\n GLASS_BORDER_ALPHA,\n GLOW,\n OUTLINE_BORDER_WIDTH,\n SECONDARY_BACKGROUND_ALPHA,\n SECONDARY_BORDER_ALPHA,\n badgeAnchor,\n badgePalette,\n type BadgeSizeMetrics,\n} from './Badge.metrics';\nimport { alpha } from '../../../tokens/color';\nimport type { UiPaletteColor, UiTheme } from '../../../tokens/theme';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\nexport interface BadgePaint {\n box: ViewStyle;\n ink: string;\n fontWeight: number;\n /** `gradient` and `glass` shout; everything else is set as written. */\n uppercase: boolean;\n}\n\n/** The chip a variant paints, as React Native styles. */\nfunction variantPaint(\n theme: UiTheme,\n variant: BadgeVariant,\n accent: UiPaletteColor,\n): BadgePaint {\n const filled = (background: string, ink: string): BadgePaint => ({\n box: { backgroundColor: background },\n ink,\n fontWeight: BADGE_FONT_WEIGHT,\n uppercase: false,\n });\n switch (variant) {\n case 'gradient':\n // React Native core has no gradient fill: the 135° run takes its first stop.\n return { ...filled(accent.main, '#fff'), uppercase: true };\n case 'glass':\n return {\n box: {\n backgroundColor: alpha(accent.main, GLASS_BACKGROUND_ALPHA),\n borderWidth: 1,\n borderColor: alpha(accent.main, GLASS_BORDER_ALPHA),\n },\n ink: accent.main,\n fontWeight: BADGE_FONT_WEIGHT,\n uppercase: true,\n };\n case 'outline':\n return {\n box: {\n backgroundColor: 'transparent',\n borderWidth: OUTLINE_BORDER_WIDTH,\n borderColor: accent.main,\n },\n ink: accent.main,\n fontWeight: BADGE_FONT_WEIGHT,\n uppercase: false,\n };\n case 'secondary':\n return {\n box: {\n backgroundColor: alpha(accent.main, SECONDARY_BACKGROUND_ALPHA),\n borderWidth: 1,\n borderColor: alpha(accent.main, SECONDARY_BORDER_ALPHA),\n },\n ink: accent.main,\n fontWeight: BADGE_FONT_WEIGHT,\n uppercase: false,\n };\n case 'destructive':\n return {\n ...filled(theme.palette.danger.main, theme.palette.danger.contrastText),\n fontWeight: BADGE_DESTRUCTIVE_FONT_WEIGHT,\n };\n case 'success':\n return filled(theme.palette.success.main, theme.palette.success.contrastText);\n case 'warning':\n return filled(theme.palette.warning.main, theme.palette.warning.contrastText);\n default:\n return filled(accent.main, accent.contrastText || '#fff');\n }\n}\n\nexport interface BadgeBoxArgs {\n variant: BadgeVariant;\n size: BadgeSize;\n color: ColorValue;\n glow: boolean;\n}\n\n/**\n * Where the chip hangs: MUI's `anchorOrigin` pins it to a corner and then\n * `translate(±50%, ∓50%)` puts its CENTRE there. It is its own node so the\n * chip's animations own `transform` outright — a React Native style array\n * replaces that property rather than composing it, as CSS would.\n */\nexport function badgeAnchorStyle(position: BadgePosition): ViewStyle {\n const anchor = badgeAnchor(position);\n return {\n position: 'absolute',\n [anchor.vertical]: 0,\n [anchor.horizontal]: 0,\n transform: [\n { translateX: anchor.horizontal === 'right' ? '50%' : '-50%' },\n { translateY: anchor.vertical === 'top' ? '-50%' : '50%' },\n ],\n };\n}\n\n/** The chip itself: MUI's paper ring, its size, and the variant's paint. */\nexport function badgeBoxStyle(theme: UiTheme, a: BadgeBoxArgs): ViewStyle {\n const metrics = BADGE_SIZES[a.size];\n const accent = badgePalette(theme, a.color);\n const paint = variantPaint(theme, a.variant, accent);\n const dot = a.variant === 'dot';\n\n return {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: BADGE_BORDER_WIDTH,\n borderColor: theme.palette.background.paper,\n ...(dot\n ? {\n width: metrics.dotSize,\n height: metrics.dotSize,\n minWidth: metrics.dotSize,\n borderRadius: metrics.dotSize / 2,\n backgroundColor: accent.main,\n }\n : {\n minWidth: metrics.minWidth,\n height: metrics.height,\n paddingHorizontal: metrics.paddingHorizontal,\n borderRadius: metrics.height / 2,\n ...paint.box,\n }),\n ...(a.glow\n ? { boxShadow: `0 0 ${GLOW.blur}px ${GLOW.spread}px ${alpha(accent.main, GLOW.alpha)}` }\n : {}),\n };\n}\n\n/** The chip's own type: the size's step, semibold, tracked a little wider. */\nexport function badgeTextStyle(\n theme: UiTheme,\n variant: BadgeVariant,\n size: BadgeSize,\n color: ColorValue,\n): TextStyle {\n const metrics = BADGE_SIZES[size];\n const paint = variantPaint(theme, variant, badgePalette(theme, color));\n return {\n fontFamily: theme.typography.fontFamily,\n fontSize: metrics.fontSize,\n fontWeight: String(paint.fontWeight) as TextStyle['fontWeight'],\n letterSpacing: metrics.fontSize * BADGE_LETTER_SPACING_EM,\n color: paint.ink,\n ...(paint.uppercase ? { textTransform: 'uppercase' } : {}),\n };\n}\n\nexport const badgeMetrics = (size: BadgeSize): BadgeSizeMetrics => BADGE_SIZES[size];\n","import * as React from 'react';\nimport { Pressable, StyleSheet, View } from 'react-native';\n\nimport type { BadgeSize, BadgeVariant } from './Badge.base';\nimport { badgeMetrics, badgeTextStyle } from './Badge.look.native';\nimport { BADGE_CONTENT_GAP } from './Badge.metrics';\nimport { Icon } from '../../../icons/Icon.native';\nimport { renderTextChildren } from '../../../platform/text-children';\nimport { useUiTheme } from '../../../provider/use-ui-theme.native';\nimport type { ColorValue } from '../../../tokens/vocabulary';\n\nexport interface BadgeContentProps {\n variant: BadgeVariant;\n size: BadgeSize;\n color: ColorValue;\n icon?: React.ReactNode;\n closable: boolean;\n content: React.ReactNode;\n idFor: (suffix: string) => string;\n onClose: () => void;\n}\n\n/**\n * The badge's inner run: optional icon, the content itself, optional close\n * button — the same three slots and the same ids `BadgeContent.tsx` builds. A\n * dot badge shows none of it.\n */\nexport function BadgeContent({\n variant,\n size,\n color,\n icon,\n closable,\n content,\n idFor,\n onClose,\n}: BadgeContentProps): React.JSX.Element | null {\n const theme = useUiTheme();\n if (variant === 'dot') return null;\n\n const metrics = badgeMetrics(size);\n const text = badgeTextStyle(theme, variant, size, color);\n const hasContent = content !== null && content !== undefined;\n if (!icon && !hasContent && !closable) return null;\n\n return (\n <View style={styles.run}>\n {icon ? (\n <View testID={idFor('icon')} style={{ height: metrics.iconSize, justifyContent: 'center' }}>\n {icon}\n </View>\n ) : null}\n {hasContent ? (\n <View testID={idFor('content')} style={styles.centre}>\n {renderTextChildren(content, text, 1)}\n </View>\n ) : null}\n {closable ? (\n <Pressable\n testID={idFor('close')}\n role=\"button\"\n aria-label=\"close\"\n onPress={onClose}\n style={styles.close}\n >\n <Icon name=\"Close\" size={metrics.closeIconSize} color={text.color as string} />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n run: { flexDirection: 'row', alignItems: 'center', gap: BADGE_CONTENT_GAP },\n centre: { alignItems: 'center', justifyContent: 'center' },\n /** MUI's close `IconButton` sits half a spacing unit clear of the label. */\n close: { marginLeft: 4, alignItems: 'center', justifyContent: 'center' },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,YAAY,WAAW;AACvB,SAAS,UAAU,QAAQ,UAAU,cAAAA,aAAY,QAAAC,aAA4B;;;ACwB7E,IAAM,iBAAqE;AAAA,EACzE,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AACZ;AAMO,IAAM,oBAAoB,CAA2B,WACzD;AAAA,EACC,GAAG;AAAA,EACH,GAAI,OAAO;AAAA,IACT,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AAAA,EACjE;AACF;AAGK,IAAM,iBAAiB,CAAC,UAAuE;AACpG,MAAI,MAAM,YAAY,OAAW,QAAO,MAAM;AAC9C,MAAI,MAAM,iBAAiB,OAAW,QAAO,MAAM;AACnD,SAAO;AACT;AAGO,IAAM,cAAc,CACzB,OACA,EAAE,KAAK,SAAS,MACF;AACd,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,UAAU,KAAK,CAAC,SAAU,QAAO;AACrC,MAAI,QAAQ,IAAK,QAAO,GAAG,GAAG;AAC9B,SAAO;AACT;AAaO,IAAM,kBACX,CAAC,eACD,CAAC,WACC,aAAa,GAAG,UAAU,IAAI,MAAM,KAAK,SAAS,MAAM;;;ACzDrD,IAAM,cAAmD;AAAA,EAC9D,IAAI,EAAE,UAAU,IAAI,QAAQ,IAAI,UAAU,GAAG,mBAAmB,GAAG,SAAS,GAAG,UAAU,IAAI,eAAe,EAAE;AAAA,EAC9G,IAAI,EAAE,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,mBAAmB,GAAG,SAAS,GAAG,UAAU,IAAI,eAAe,GAAG;AAAA,EAChH,IAAI,EAAE,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,mBAAmB,GAAG,SAAS,IAAI,UAAU,IAAI,eAAe,GAAG;AAAA,EACjH,IAAI,EAAE,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,mBAAmB,GAAG,SAAS,IAAI,UAAU,IAAI,eAAe,GAAG;AAAA,EACjH,IAAI,EAAE,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,mBAAmB,IAAI,SAAS,IAAI,UAAU,IAAI,eAAe,GAAG;AACpH;AAGO,IAAM,oBAAoB;AAC1B,IAAM,gCAAgC;AACtC,IAAM,0BAA0B;AAChC,IAAM,qBAAqB;AAE3B,IAAM,oBAAoB;AAI1B,IAAM,yBAAyB;AAC/B,IAAM,qBAAqB;AAI3B,IAAM,uBAAuB;AAC7B,IAAM,6BAA6B;AACnC,IAAM,yBAAyB;AAK/B,IAAM,OAAO,EAAE,MAAM,IAAI,QAAQ,GAAG,OAAO,KAAK,WAAW,IAAI,aAAa,GAAG,YAAY,KAAK,YAAY,IAAI;AAIhH,IAAM,QAAQ,EAAE,YAAY,KAAM,OAAO,KAAK,SAAS,IAAI;AAE3D,IAAM,SAAS,EAAE,YAAY,KAAM,MAAM,GAAG,YAAY,GAAG,OAAO,MAAM,aAAa,KAAK;AAE1F,IAAM,gBAAgB,EAAE,YAAY,KAAK,MAAM,KAAK,WAAW,IAAI;AAMnE,IAAM,iBAAiB;AAc9B,IAAM,gBAAoD;AAAA,EACxD,aAAa,EAAE,UAAU,OAAO,YAAY,QAAQ;AAAA,EACpD,YAAY,EAAE,UAAU,OAAO,YAAY,OAAO;AAAA,EAClD,gBAAgB,EAAE,UAAU,UAAU,YAAY,QAAQ;AAAA,EAC1D,eAAe,EAAE,UAAU,UAAU,YAAY,OAAO;AAC1D;AAOO,IAAM,cAAc,CAAC,aAC1B,cAAc,QAAQ,KAAK,cAAc,WAAW;AAO/C,SAAS,aAAa,OAAgB,OAAmC;AAC9E,MAAI,UAAU,WAAW;AAEvB,WAAO,MAAM,QAAQ;AAAA,EACvB;AACA,SAAO,MAAM,QAAQ,KAAK;AAC5B;;;AC/EA,SAAS,aACP,OACA,SACA,QACY;AACZ,QAAM,SAAS,CAAC,YAAoB,SAA6B;AAAA,IAC/D,KAAK,EAAE,iBAAiB,WAAW;AAAA,IACnC;AAAA,IACA,YAAY;AAAA,IACZ,WAAW;AAAA,EACb;AACA,UAAQ,SAAS;AAAA,IACf,KAAK;AAEH,aAAO,EAAE,GAAG,OAAO,OAAO,MAAM,MAAM,GAAG,WAAW,KAAK;AAAA,IAC3D,KAAK;AACH,aAAO;AAAA,QACL,KAAK;AAAA,UACH,iBAAiB,MAAM,OAAO,MAAM,sBAAsB;AAAA,UAC1D,aAAa;AAAA,UACb,aAAa,MAAM,OAAO,MAAM,kBAAkB;AAAA,QACpD;AAAA,QACA,KAAK,OAAO;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,KAAK;AAAA,UACH,iBAAiB;AAAA,UACjB,aAAa;AAAA,UACb,aAAa,OAAO;AAAA,QACtB;AAAA,QACA,KAAK,OAAO;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,KAAK;AAAA,UACH,iBAAiB,MAAM,OAAO,MAAM,0BAA0B;AAAA,UAC9D,aAAa;AAAA,UACb,aAAa,MAAM,OAAO,MAAM,sBAAsB;AAAA,QACxD;AAAA,QACA,KAAK,OAAO;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,GAAG,OAAO,MAAM,QAAQ,OAAO,MAAM,MAAM,QAAQ,OAAO,YAAY;AAAA,QACtE,YAAY;AAAA,MACd;AAAA,IACF,KAAK;AACH,aAAO,OAAO,MAAM,QAAQ,QAAQ,MAAM,MAAM,QAAQ,QAAQ,YAAY;AAAA,IAC9E,KAAK;AACH,aAAO,OAAO,MAAM,QAAQ,QAAQ,MAAM,MAAM,QAAQ,QAAQ,YAAY;AAAA,IAC9E;AACE,aAAO,OAAO,OAAO,MAAM,OAAO,gBAAgB,MAAM;AAAA,EAC5D;AACF;AAeO,SAAS,iBAAiB,UAAoC;AACnE,QAAM,SAAS,YAAY,QAAQ;AACnC,SAAO;AAAA,IACL,UAAU;AAAA,IACV,CAAC,OAAO,QAAQ,GAAG;AAAA,IACnB,CAAC,OAAO,UAAU,GAAG;AAAA,IACrB,WAAW;AAAA,MACT,EAAE,YAAY,OAAO,eAAe,UAAU,QAAQ,OAAO;AAAA,MAC7D,EAAE,YAAY,OAAO,aAAa,QAAQ,SAAS,MAAM;AAAA,IAC3D;AAAA,EACF;AACF;AAGO,SAAS,cAAc,OAAgB,GAA4B;AACxE,QAAM,UAAU,YAAY,EAAE,IAAI;AAClC,QAAM,SAAS,aAAa,OAAO,EAAE,KAAK;AAC1C,QAAM,QAAQ,aAAa,OAAO,EAAE,SAAS,MAAM;AACnD,QAAM,MAAM,EAAE,YAAY;AAE1B,SAAO;AAAA,IACL,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,aAAa,MAAM,QAAQ,WAAW;AAAA,IACtC,GAAI,MACA;AAAA,MACE,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,UAAU,QAAQ;AAAA,MAClB,cAAc,QAAQ,UAAU;AAAA,MAChC,iBAAiB,OAAO;AAAA,IAC1B,IACA;AAAA,MACE,UAAU,QAAQ;AAAA,MAClB,QAAQ,QAAQ;AAAA,MAChB,mBAAmB,QAAQ;AAAA,MAC3B,cAAc,QAAQ,SAAS;AAAA,MAC/B,GAAG,MAAM;AAAA,IACX;AAAA,IACJ,GAAI,EAAE,OACF,EAAE,WAAW,OAAO,KAAK,IAAI,MAAM,KAAK,MAAM,MAAM,MAAM,OAAO,MAAM,KAAK,KAAK,CAAC,GAAG,IACrF,CAAC;AAAA,EACP;AACF;AAGO,SAAS,eACd,OACA,SACA,MACA,OACW;AACX,QAAM,UAAU,YAAY,IAAI;AAChC,QAAM,QAAQ,aAAa,OAAO,SAAS,aAAa,OAAO,KAAK,CAAC;AACrE,SAAO;AAAA,IACL,YAAY,MAAM,WAAW;AAAA,IAC7B,UAAU,QAAQ;AAAA,IAClB,YAAY,OAAO,MAAM,UAAU;AAAA,IACnC,eAAe,QAAQ,WAAW;AAAA,IAClC,OAAO,MAAM;AAAA,IACb,GAAI,MAAM,YAAY,EAAE,eAAe,YAAY,IAAI,CAAC;AAAA,EAC1D;AACF;AAEO,IAAM,eAAe,CAAC,SAAsC,YAAY,IAAI;;;AC5KnF,SAAS,WAAW,YAAY,YAAY;AA6CxC,SAEI,KAFJ;AAnBG,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgD;AAC9C,QAAM,QAAQ,WAAW;AACzB,MAAI,YAAY,MAAO,QAAO;AAE9B,QAAM,UAAU,aAAa,IAAI;AACjC,QAAM,OAAO,eAAe,OAAO,SAAS,MAAM,KAAK;AACvD,QAAM,aAAa,YAAY,QAAQ,YAAY;AACnD,MAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAU,QAAO;AAE9C,SACE,qBAAC,QAAK,OAAO,OAAO,KACjB;AAAA,WACC,oBAAC,QAAK,QAAQ,MAAM,MAAM,GAAG,OAAO,EAAE,QAAQ,QAAQ,UAAU,gBAAgB,SAAS,GACtF,gBACH,IACE;AAAA,IACH,aACC,oBAAC,QAAK,QAAQ,MAAM,SAAS,GAAG,OAAO,OAAO,QAC3C,6BAAmB,SAAS,MAAM,CAAC,GACtC,IACE;AAAA,IACH,WACC;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,MAAM,OAAO;AAAA,QACrB,MAAK;AAAA,QACL,cAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO,OAAO;AAAA,QAEd,8BAAC,QAAK,MAAK,SAAQ,MAAM,QAAQ,eAAe,OAAO,KAAK,OAAiB;AAAA;AAAA,IAC/E,IACE;AAAA,KACN;AAEJ;AAEA,IAAM,SAAS,WAAW,OAAO;AAAA,EAC/B,KAAK,EAAE,eAAe,OAAO,YAAY,UAAU,KAAK,kBAAkB;AAAA,EAC1E,QAAQ,EAAE,YAAY,UAAU,gBAAgB,SAAS;AAAA;AAAA,EAEzD,OAAO,EAAE,YAAY,GAAG,YAAY,UAAU,gBAAgB,SAAS;AACzE,CAAC;;;AJqGG,SAWQ,OAAAC,MAXR,QAAAC,aAAA;AA1JJ,IAAM,eAAe,SAAS,OAAO;AAIrC,SAAS,cAAc,SAAwC;AAC7D,QAAM,WAAW,kBAAkB,SAAS;AAAA,IAC1C,YAAY,MAAM;AAAA,IAClB,QAAQ,OAAO,MAAM,OAAO,IAAI;AAAA,EAClC,CAAC;AACD,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO;AAAA,IACL,SAAS,SAAS,YAAY,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC;AAAA,IAC7F,WAAW;AAAA,MACT,EAAE,OAAO,SAAS,YAAY,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,EAAE;AAAA,IAC/F;AAAA,EACF;AACF;AAGA,SAAS,YAAY,SAAkB,YAAoC;AACzE,QAAM,WAAiB,aAAO,IAAI,SAAS,MAAM,UAAU,IAAI,CAAC,CAAC,EAAE;AACnE,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,QAAS,QAAO;AACrB,aAAS,SAAS,CAAC;AACnB,UAAM,SAAS,SAAS,OAAO,UAAU;AAAA,MACvC,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ,OAAO,IAAI,OAAO,IAAI;AAAA,MAC9B,iBAAiB;AAAA,IACnB,CAAC;AACD,WAAO,MAAM;AACb,WAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,GAAG,CAAC,SAAS,YAAY,QAAQ,CAAC;AAClC,SAAO;AACT;AAGA,SAAS,iBAAiB,SAAkB,QAAuC;AACjF,QAAM,WAAW,YAAY,WAAW,QAAQ,SAAS,OAAO,aAAa,cAAc,UAAU;AACrG,MAAI,QAAQ;AACV,WAAO;AAAA,MACL,WAAW;AAAA,QACT;AAAA,UACE,YAAY,SAAS,YAAY;AAAA,YAC/B,YAAY,CAAC,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,YAC1C,aAAa,CAAC,GAAG,GAAG,CAAC,OAAO,MAAM,GAAG,CAAC,OAAO,YAAY,GAAG,CAAC;AAAA,UAC/D,CAAC;AAAA,QACH;AAAA,QACA;AAAA,UACE,OAAO,SAAS,YAAY;AAAA,YAC1B,YAAY,CAAC,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,YAC1C,aAAa,CAAC,GAAG,GAAG,OAAO,OAAO,GAAG,OAAO,aAAa,GAAG,CAAC;AAAA,UAC/D,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO;AAAA,IACL,SAAS,SAAS,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAAA,IACzE,WAAW;AAAA,MACT;AAAA,QACE,OAAO,SAAS,YAAY;AAAA,UAC1B,YAAY,CAAC,GAAG,KAAK,CAAC;AAAA,UACtB,aAAa,CAAC,cAAc,MAAM,cAAc,WAAW,CAAC;AAAA,QAC9D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAGA,SAAS,aAAa,SAAmE;AACvF,QAAM,WAAiB,aAAO,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE;AACrD,QAAM,QAAc,kBAAY,MAAM;AACpC,aAAS,OAAO,UAAU;AAAA,MACxB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ,OAAO,IAAI,OAAO,IAAI;AAAA,MAC9B,iBAAiB;AAAA,IACnB,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,MAAM;AACzB,UAAI,SAAU,WAAU;AAAA,IAC1B,CAAC;AAAA,EACH,GAAG,CAAC,SAAS,QAAQ,CAAC;AACtB,SAAO,EAAE,OAAO,EAAE,SAAS,UAAU,WAAW,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,GAAG,MAAM;AACjF;AASA,SAAS,YAAY,UAAuD;AAC1E,QAAM,EAAE,SAAS,KAAK,UAAU,WAAW,MAAM,SAAS,IAAI;AAC9D,QAAM,MAAM,eAAe,QAAQ;AACnC,QAAM,UAAU,YAAY,UAAU,YAAY,KAAK,EAAE,KAAK,SAAS,CAAC,IAAI;AAI5E,QAAM,gBAAgB,QAAQ,IAAI,KAAK,QAAQ,QAAQ;AACvD,SAAO;AAAA,IACL;AAAA,IACA,QACE,QAAQ,SAAS,KAChB,YAAY,WAAW,YAAY,QAAQ,CAAC,YAAY,CAAC;AAAA,EAC9D;AACF;AAMO,IAAM,QAAc,iBAA6B,CAAC,UAAU,QAAQ;AACzE,QAAM,WAAW,kBAAkB,QAAQ;AAC3C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,aAAa,WAAW;AAAA,IACxB,eAAe,aAAa;AAAA,IAC5B,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,cAAc;AAAA,IACd,SAAS;AAAA,IACT,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,QAAQ,WAAW;AACzB,QAAM,UAAU,cAAc,QAAQ;AACtC,QAAM,QAAQ,gBAAgB,OAAO;AACrC,QAAM,aAAa,cAAc,SAAS,CAAC,SAAS;AACpD,QAAM,WAAW,iBAAiB,WAAW,CAAC,QAAQ,MAAM;AAC5D,QAAM,OAAO,aAAa,OAAO;AAEjC,QAAM,EAAE,SAAS,OAAO,IAAI,YAAY,QAAQ;AAEhD,SACE,gBAAAA,MAACC,OAAA,EAAK,KAAU,QAAQ,WAAW,SAAS,OAAO,CAACC,QAAO,QAAQ,KAAK,GAAI,GAAG,MAC5E;AAAA;AAAA,IACA,SAAS,OACR,gBAAAH,KAACE,OAAA,EAAK,OAAO,iBAAiB,QAAQ,GACpC,0BAAAF;AAAA,MAAC,SAAS;AAAA,MAAT;AAAA,QACC,QAAQ,MAAM,iBAAiB;AAAA,QAC/B,cAAY;AAAA,QACZ,aAAW;AAAA,QACV,GAAG,QAAQ,EAAE,eAAe,aAAa,SAAS,QAAQ,CAAC;AAAA,QAC5D,OAAO,CAAC,cAAc,OAAO,EAAE,SAAS,MAAM,OAAO,KAAK,CAAC,GAAG,UAAU,YAAY,KAAK,KAAK;AAAA,QAE9F,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,SAAS,KAAK;AAAA;AAAA,QAChB;AAAA;AAAA,IACF,GACF;AAAA,KAEJ;AAEJ,CAAC;AAED,MAAM,cAAc;AAEpB,IAAMG,UAASC,YAAW,OAAO;AAAA;AAAA,EAE/B,QAAQ,EAAE,UAAU,YAAY,WAAW,cAAc,eAAe,MAAM;AAChF,CAAC;","names":["StyleSheet","View","jsx","jsxs","View","styles","StyleSheet"]}
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  EmptyState
3
- } from "../chunks/chunk-OI57L6WL.js";
4
- import "../chunks/chunk-KIG4KY4W.js";
3
+ } from "../chunks/chunk-JBYDLWQA.js";
4
+ import "../chunks/chunk-ONXKFA5Z.js";
5
5
  import "../chunks/chunk-IMGBBIMT.js";
6
+ import "../chunks/chunk-ZRQHLTYG.js";
6
7
  import "../chunks/chunk-DN73KYIZ.js";
7
8
  import "../chunks/chunk-5GJ5OG5R.js";
8
9
  import "../chunks/chunk-5IASLIBI.js";