@multiplatform.one/components 7.78.0 → 7.80.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 (703) hide show
  1. package/dist/cjs/Accordion/index.native.js +1 -1
  2. package/dist/cjs/Accordion/index.native.js.map +1 -1
  3. package/dist/cjs/Alert/index.native.js.map +1 -1
  4. package/dist/cjs/AnimateHeight/index.native.js.map +1 -1
  5. package/dist/cjs/Avatar/getInitials.native.js.map +1 -1
  6. package/dist/cjs/Avatar/index.native.js.map +1 -1
  7. package/dist/cjs/Badge/index.native.js.map +1 -1
  8. package/dist/cjs/Button.native.js.map +1 -1
  9. package/dist/cjs/Card.native.js.map +1 -1
  10. package/dist/cjs/CardFooter.native.js.map +1 -1
  11. package/dist/cjs/CardHeader.native.js.map +1 -1
  12. package/dist/cjs/Carousel/index.native.js +3 -3
  13. package/dist/cjs/Carousel/index.native.js.map +1 -1
  14. package/dist/cjs/Chip/index.native.js.map +1 -1
  15. package/dist/cjs/Collapsible.native.js.map +1 -1
  16. package/dist/cjs/ContextMenu/index.native.js.map +1 -1
  17. package/dist/cjs/CopyField/CopyMenuButton.native.js +1 -1
  18. package/dist/cjs/CopyField/CopyMenuButton.native.js.map +1 -1
  19. package/dist/cjs/CopyField/index.native.js.map +1 -1
  20. package/dist/cjs/Dialog.native.js.map +1 -1
  21. package/dist/cjs/Diff/diff.cjs +84 -0
  22. package/dist/cjs/Diff/diff.native.js +108 -0
  23. package/dist/cjs/Diff/diff.native.js.map +1 -0
  24. package/dist/cjs/Diff/index.cjs +174 -0
  25. package/dist/cjs/Diff/index.native.js +181 -0
  26. package/dist/cjs/Diff/index.native.js.map +1 -0
  27. package/dist/cjs/DotIndicator/index.native.js.map +1 -1
  28. package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
  29. package/dist/cjs/DropdownMenu/menuSettle.native.js.map +1 -1
  30. package/dist/cjs/ElapsedProgress/index.cjs +102 -0
  31. package/dist/cjs/ElapsedProgress/index.native.js +112 -0
  32. package/dist/cjs/ElapsedProgress/index.native.js.map +1 -0
  33. package/dist/cjs/ErrorBoundary/index.native.js.map +1 -1
  34. package/dist/cjs/Heading.native.js.map +1 -1
  35. package/dist/cjs/Kbd/index.native.js.map +1 -1
  36. package/dist/cjs/Kbd/keys.native.js.map +1 -1
  37. package/dist/cjs/Lightbox/MediaControl.native.js.map +1 -1
  38. package/dist/cjs/Lightbox/index.gnome.native.js.map +1 -1
  39. package/dist/cjs/Lightbox/index.native.js +1 -1
  40. package/dist/cjs/Lightbox/shared.native.js.map +1 -1
  41. package/dist/cjs/Lightbox/useLightbox.native.js.map +1 -1
  42. package/dist/cjs/MachineLiteral/index.cjs +98 -0
  43. package/dist/cjs/MachineLiteral/index.native.js +102 -0
  44. package/dist/cjs/MachineLiteral/index.native.js.map +1 -0
  45. package/dist/cjs/Material/blur.cjs +34 -0
  46. package/dist/cjs/Material/blur.native.js +100 -0
  47. package/dist/cjs/Material/blur.native.js.map +1 -0
  48. package/dist/cjs/Material/index.cjs +9 -3
  49. package/dist/cjs/Material/index.native.js +9 -3
  50. package/dist/cjs/Material/index.native.js.map +1 -1
  51. package/dist/cjs/Meter/index.cjs +3 -1
  52. package/dist/cjs/Meter/index.native.js +4 -2
  53. package/dist/cjs/Meter/index.native.js.map +1 -1
  54. package/dist/cjs/Meter/meter.native.js.map +1 -1
  55. package/dist/cjs/OverflowRow/index.native.js +1 -1
  56. package/dist/cjs/OverflowRow/index.native.js.map +1 -1
  57. package/dist/cjs/Pagination.native.js +1 -1
  58. package/dist/cjs/Pagination.native.js.map +1 -1
  59. package/dist/cjs/Popover.native.js +1 -1
  60. package/dist/cjs/Popover.native.js.map +1 -1
  61. package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
  62. package/dist/cjs/Quote/index.native.js.map +1 -1
  63. package/dist/cjs/SchemeToggle/index.native.js +1 -1
  64. package/dist/cjs/SchemeToggle/index.native.js.map +1 -1
  65. package/dist/cjs/ScrollView/revealFocusedField.native.js.map +1 -1
  66. package/dist/cjs/Separator/index.native.js.map +1 -1
  67. package/dist/cjs/Sheet.native.js.map +1 -1
  68. package/dist/cjs/SheetModal/SheetHeader.native.js.map +1 -1
  69. package/dist/cjs/SheetModal/SheetNavigation.native.js.map +1 -1
  70. package/dist/cjs/SheetModal/detents.native.js.map +1 -1
  71. package/dist/cjs/SheetModal/useSheetFrameFocus.native.js.map +1 -1
  72. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  73. package/dist/cjs/SkipLink/index.native.js.map +1 -1
  74. package/dist/cjs/SortableList/SortableHandle.native.js.map +1 -1
  75. package/dist/cjs/SortableList/index.cjs +4 -1
  76. package/dist/cjs/SortableList/index.native.js +4 -1
  77. package/dist/cjs/SortableList/index.native.js.map +1 -1
  78. package/dist/cjs/SortableList/useSortableRows.native.js.map +1 -1
  79. package/dist/cjs/SortableList/useUserOrder.cjs +84 -0
  80. package/dist/cjs/SortableList/useUserOrder.native.js +107 -0
  81. package/dist/cjs/SortableList/useUserOrder.native.js.map +1 -0
  82. package/dist/cjs/Tabs/index.native.js +1 -1
  83. package/dist/cjs/Tabs/index.native.js.map +1 -1
  84. package/dist/cjs/Text.native.js.map +1 -1
  85. package/dist/cjs/ThemePresetPicker/index.native.js +2 -2
  86. package/dist/cjs/ThemePresetPicker/index.native.js.map +1 -1
  87. package/dist/cjs/Toast/index.native.js.map +1 -1
  88. package/dist/cjs/Toast/store.native.js.map +1 -1
  89. package/dist/cjs/Tooltip/nativePress.native.js.map +1 -1
  90. package/dist/cjs/Tooltip/tooltipShared.native.js.map +1 -1
  91. package/dist/cjs/TreeSelect/index.cjs +7 -1
  92. package/dist/cjs/TreeSelect/index.native.js +8 -2
  93. package/dist/cjs/TreeSelect/index.native.js.map +1 -1
  94. package/dist/cjs/TreeSelect/treeSelectModel.native.js.map +1 -1
  95. package/dist/cjs/Video/PlayerChrome.native.js.map +1 -1
  96. package/dist/cjs/Video/VideoFrame.native.js.map +1 -1
  97. package/dist/cjs/Video/types.native.js.map +1 -1
  98. package/dist/cjs/Wheel/index.native.js.map +1 -1
  99. package/dist/cjs/Wizard/index.native.js +2 -2
  100. package/dist/cjs/Wizard/index.native.js.map +1 -1
  101. package/dist/cjs/actions/ActionBar.native.js.map +1 -1
  102. package/dist/cjs/actions/DangerSection.native.js.map +1 -1
  103. package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
  104. package/dist/cjs/actions/HeaderActions.native.js +2 -2
  105. package/dist/cjs/actions/HeaderActions.native.js.map +1 -1
  106. package/dist/cjs/actions/StandardAction.native.js +1 -1
  107. package/dist/cjs/actions/StandardAction.native.js.map +1 -1
  108. package/dist/cjs/actions/devWarn.native.js.map +1 -1
  109. package/dist/cjs/actions/index.native.js.map +1 -1
  110. package/dist/cjs/actions/severity.native.js.map +1 -1
  111. package/dist/cjs/appShell/AppShell.cjs +432 -0
  112. package/dist/cjs/appShell/AppShell.native.js +499 -0
  113. package/dist/cjs/appShell/AppShell.native.js.map +1 -0
  114. package/dist/cjs/appShell/Dock.native.js.map +1 -1
  115. package/dist/cjs/appShell/MpoTabHost.native.js.map +1 -1
  116. package/dist/cjs/appShell/ScopeMenu.native.js.map +1 -1
  117. package/dist/cjs/appShell/SettingsSplit.native.js +1 -1
  118. package/dist/cjs/appShell/SettingsSplit.native.js.map +1 -1
  119. package/dist/cjs/appShell/Springboard.native.js +1 -1
  120. package/dist/cjs/appShell/Springboard.native.js.map +1 -1
  121. package/dist/cjs/appShell/SystemBar.native.js.map +1 -1
  122. package/dist/cjs/appShell/TabBar.cjs +10 -5
  123. package/dist/cjs/appShell/TabBar.native.js +11 -6
  124. package/dist/cjs/appShell/TabBar.native.js.map +1 -1
  125. package/dist/cjs/appShell/appTile.native.js +1 -1
  126. package/dist/cjs/appShell/appTile.native.js.map +1 -1
  127. package/dist/cjs/appShell/bottomChrome.native.js.map +1 -1
  128. package/dist/cjs/appShell/index.cjs +1 -0
  129. package/dist/cjs/appShell/index.native.js +1 -0
  130. package/dist/cjs/appShell/index.native.js.map +1 -1
  131. package/dist/cjs/charts/Axis.native.js.map +1 -1
  132. package/dist/cjs/charts/BarChart.native.js.map +1 -1
  133. package/dist/cjs/charts/ChartDataView.native.js +1 -1
  134. package/dist/cjs/charts/ChartDataView.native.js.map +1 -1
  135. package/dist/cjs/charts/ChartSurface.native.js.map +1 -1
  136. package/dist/cjs/charts/LineChart.native.js.map +1 -1
  137. package/dist/cjs/charts/PieChart.native.js.map +1 -1
  138. package/dist/cjs/charts/Sparkline.cjs +1 -1
  139. package/dist/cjs/charts/Sparkline.native.js +1 -1
  140. package/dist/cjs/charts/Sparkline.native.js.map +1 -1
  141. package/dist/cjs/charts/accessibility.native.js.map +1 -1
  142. package/dist/cjs/charts/chartHeight.native.js.map +1 -1
  143. package/dist/cjs/charts/composeChart.native.js.map +1 -1
  144. package/dist/cjs/charts/index.native.js.map +1 -1
  145. package/dist/cjs/charts/math.native.js.map +1 -1
  146. package/dist/cjs/charts/series.native.js.map +1 -1
  147. package/dist/cjs/charts/svg.native.js.map +1 -1
  148. package/dist/cjs/charts/types.native.js.map +1 -1
  149. package/dist/cjs/charts/useChartTheme.native.js.map +1 -1
  150. package/dist/cjs/code/Code/index.native.js.map +1 -1
  151. package/dist/cjs/code/CodeBlock/index.native.js +7 -7
  152. package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
  153. package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
  154. package/dist/cjs/code/Highlighter/houseSyntaxTheme.native.js.map +1 -1
  155. package/dist/cjs/code/Highlighter/index.native.js.map +1 -1
  156. package/dist/cjs/code/Highlighter/namedGroupMatchAll.native.js.map +1 -1
  157. package/dist/cjs/code/Pre/index.native.js.map +1 -1
  158. package/dist/cjs/code/index.native.js +5 -5
  159. package/dist/cjs/code/index.native.js.map +1 -1
  160. package/dist/cjs/componentColors.native.js.map +1 -1
  161. package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
  162. package/dist/cjs/feedback/NotifyHost.native.js +2 -2
  163. package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
  164. package/dist/cjs/feedback/copy.native.js.map +1 -1
  165. package/dist/cjs/feedback/index.native.js.map +1 -1
  166. package/dist/cjs/feedback/notify.native.js.map +1 -1
  167. package/dist/cjs/feedback/route.native.js.map +1 -1
  168. package/dist/cjs/feedback/store.native.js.map +1 -1
  169. package/dist/cjs/formLayouts/FormLayouts.native.js +1 -1
  170. package/dist/cjs/formLayouts/FormLayouts.native.js.map +1 -1
  171. package/dist/cjs/formLayouts/PreferencePanel.native.js +2 -2
  172. package/dist/cjs/formLayouts/PreferencePanel.native.js.map +1 -1
  173. package/dist/cjs/formLayouts/index.native.js.map +1 -1
  174. package/dist/cjs/hooks/index.native.js +1 -1
  175. package/dist/cjs/hooks/index.native.js.map +1 -1
  176. package/dist/cjs/hooks/useClipboard.native.js.map +1 -1
  177. package/dist/cjs/hooks/useDocumentTitle.native.js.map +1 -1
  178. package/dist/cjs/hooks/useHoldCue.native.js.map +1 -1
  179. package/dist/cjs/icons/CheckRegular.native.js.map +1 -1
  180. package/dist/cjs/icons/MinusRegular.native.js.map +1 -1
  181. package/dist/cjs/icons/index.native.js.map +1 -1
  182. package/dist/cjs/icons/lucide.native.js.map +1 -1
  183. package/dist/cjs/icons/themed.native.js.map +1 -1
  184. package/dist/cjs/images/Image/ImageFrame.native.js +1 -1
  185. package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -1
  186. package/dist/cjs/images/Image/framing.native.js.map +1 -1
  187. package/dist/cjs/images/Image/index.native.js +1 -1
  188. package/dist/cjs/images/Image/mediaRadius.native.js.map +1 -1
  189. package/dist/cjs/images/Image/shared.native.js +1 -1
  190. package/dist/cjs/images/Image/shared.native.js.map +1 -1
  191. package/dist/cjs/images/Image/types.native.js.map +1 -1
  192. package/dist/cjs/images/index.native.js.map +1 -1
  193. package/dist/cjs/index.cjs +6 -1
  194. package/dist/cjs/index.native.js +42 -37
  195. package/dist/cjs/index.native.js.map +1 -1
  196. package/dist/cjs/knobImmuneExports.native.js.map +1 -1
  197. package/dist/cjs/layouts/AsyncBoundary.native.js +2 -2
  198. package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
  199. package/dist/cjs/layouts/Debug/index.native.js.map +1 -1
  200. package/dist/cjs/layouts/EmptyState.native.js.map +1 -1
  201. package/dist/cjs/layouts/IdentityPlate.native.js.map +1 -1
  202. package/dist/cjs/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  203. package/dist/cjs/layouts/PageTemplates.native.js.map +1 -1
  204. package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
  205. package/dist/cjs/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  206. package/dist/cjs/layouts/StatusDot.native.js.map +1 -1
  207. package/dist/cjs/layouts/StatusGlyphStrip.native.js +1 -1
  208. package/dist/cjs/layouts/StatusGlyphStrip.native.js.map +1 -1
  209. package/dist/cjs/layouts/ViewSwitcher.native.js.map +1 -1
  210. package/dist/cjs/layouts/attachments.native.js +1 -1
  211. package/dist/cjs/layouts/attachments.native.js.map +1 -1
  212. package/dist/cjs/layouts/bottomAccessory.native.js.map +1 -1
  213. package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
  214. package/dist/cjs/layouts/index.native.js +3 -3
  215. package/dist/cjs/layouts/index.native.js.map +1 -1
  216. package/dist/cjs/layouts/page.cjs +3 -0
  217. package/dist/cjs/layouts/page.native.js +5 -2
  218. package/dist/cjs/layouts/page.native.js.map +1 -1
  219. package/dist/cjs/layouts/pageHeadingScope.native.js.map +1 -1
  220. package/dist/cjs/layouts/screenScroll.cjs +55 -0
  221. package/dist/cjs/layouts/screenScroll.native.js +59 -0
  222. package/dist/cjs/layouts/screenScroll.native.js.map +1 -1
  223. package/dist/cjs/layouts/shellSidebarSlot.native.js.map +1 -1
  224. package/dist/cjs/layouts/sidebar.cjs +46 -9
  225. package/dist/cjs/layouts/sidebar.native.js +50 -10
  226. package/dist/cjs/layouts/sidebar.native.js.map +1 -1
  227. package/dist/cjs/layouts/tags.native.js +2 -2
  228. package/dist/cjs/layouts/tags.native.js.map +1 -1
  229. package/dist/cjs/layouts/timeline.native.js +2 -2
  230. package/dist/cjs/layouts/timeline.native.js.map +1 -1
  231. package/dist/cjs/layouts/toolbar.native.js +1 -1
  232. package/dist/cjs/layouts/toolbar.native.js.map +1 -1
  233. package/dist/cjs/shared/actionScan.native.js.map +1 -1
  234. package/dist/cjs/shared/i18n.native.js.map +1 -1
  235. package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
  236. package/dist/cjs/shared/t.native.js.map +1 -1
  237. package/dist/cjs/shared/textRidesText.native.js.map +1 -1
  238. package/dist/cjs/shared/useReturnFocusOnClose.native.js.map +1 -1
  239. package/dist/cjs/surfaces.native.js +1 -1
  240. package/dist/cjs/surfaces.native.js.map +1 -1
  241. package/dist/cjs/tamagui.native.js +1 -1
  242. package/dist/cjs/tamagui.native.js.map +1 -1
  243. package/dist/cjs/testSetup.native.js.map +1 -1
  244. package/dist/cjs/utils/setTinted.native.js.map +1 -1
  245. package/dist/cjs/utils/unwrapText.native.js.map +1 -1
  246. package/dist/cjs/views/Calendar.native.js +1 -1
  247. package/dist/cjs/views/Calendar.native.js.map +1 -1
  248. package/dist/cjs/views/Dashboard.native.js +2 -2
  249. package/dist/cjs/views/Dashboard.native.js.map +1 -1
  250. package/dist/cjs/views/Gantt.native.js +2 -2
  251. package/dist/cjs/views/Gantt.native.js.map +1 -1
  252. package/dist/cjs/views/GanttDateGrip.native.js.map +1 -1
  253. package/dist/cjs/views/ImageGrid.native.js +2 -2
  254. package/dist/cjs/views/ImageGrid.native.js.map +1 -1
  255. package/dist/cjs/views/Kanban.native.js +1 -1
  256. package/dist/cjs/views/List.native.js.map +1 -1
  257. package/dist/cjs/views/ListGroup.native.js.map +1 -1
  258. package/dist/cjs/views/ListRow.native.js.map +1 -1
  259. package/dist/cjs/views/Matrix.native.js +2 -2
  260. package/dist/cjs/views/Matrix.native.js.map +1 -1
  261. package/dist/cjs/views/ReportBuilder.cjs +3 -3
  262. package/dist/cjs/views/ReportBuilder.native.js +5 -5
  263. package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
  264. package/dist/cjs/views/ShortcutCard.native.js.map +1 -1
  265. package/dist/cjs/views/TreeView.native.js.map +1 -1
  266. package/dist/cjs/views/calendarMath.native.js.map +1 -1
  267. package/dist/cjs/views/ganttIntervals.native.js.map +1 -1
  268. package/dist/cjs/views/ganttMath.native.js.map +1 -1
  269. package/dist/cjs/views/index.cjs +3 -1
  270. package/dist/cjs/views/index.native.js +3 -1
  271. package/dist/cjs/views/index.native.js.map +1 -1
  272. package/dist/cjs/views/kanbanDnd.native.js.map +1 -1
  273. package/dist/cjs/views/matrixMath.native.js.map +1 -1
  274. package/dist/cjs/views/sameNameScope.cjs +39 -0
  275. package/dist/cjs/views/sameNameScope.native.js +63 -0
  276. package/dist/cjs/views/sameNameScope.native.js.map +1 -0
  277. package/dist/cjs/views/treeViewDnd.native.js.map +1 -1
  278. package/dist/cjs/views/treeViewLayout.native.js.map +1 -1
  279. package/dist/cjs/views/treeViewMotion.native.js.map +1 -1
  280. package/dist/cjs/views/treeViewReveal.native.js.map +1 -1
  281. package/dist/cjs/views/usePageFlowLoadMore.native.js.map +1 -1
  282. package/dist/cjs/views/widgetChrome.native.js.map +1 -1
  283. package/dist/esm/Accordion/index.native.js.map +1 -1
  284. package/dist/esm/AnimateHeight/index.native.js.map +1 -1
  285. package/dist/esm/Avatar/getInitials.native.js.map +1 -1
  286. package/dist/esm/Avatar/index.native.js.map +1 -1
  287. package/dist/esm/Badge/index.native.js.map +1 -1
  288. package/dist/esm/Button.native.js.map +1 -1
  289. package/dist/esm/Carousel/index.native.js.map +1 -1
  290. package/dist/esm/Chip/index.native.js.map +1 -1
  291. package/dist/esm/Collapsible.native.js.map +1 -1
  292. package/dist/esm/ContextMenu/index.native.js.map +1 -1
  293. package/dist/esm/CopyField/CopyMenuButton.native.js.map +1 -1
  294. package/dist/esm/CopyField/index.native.js.map +1 -1
  295. package/dist/esm/Dialog.native.js.map +1 -1
  296. package/dist/esm/Diff/diff.mjs +58 -0
  297. package/dist/esm/Diff/diff.mjs.map +1 -0
  298. package/dist/esm/Diff/diff.native.js +79 -0
  299. package/dist/esm/Diff/diff.native.js.map +1 -0
  300. package/dist/esm/Diff/index.mjs +147 -0
  301. package/dist/esm/Diff/index.mjs.map +1 -0
  302. package/dist/esm/Diff/index.native.js +151 -0
  303. package/dist/esm/Diff/index.native.js.map +1 -0
  304. package/dist/esm/DotIndicator/index.native.js.map +1 -1
  305. package/dist/esm/DropdownMenu/index.native.js.map +1 -1
  306. package/dist/esm/DropdownMenu/menuSettle.native.js.map +1 -1
  307. package/dist/esm/ElapsedProgress/index.mjs +76 -0
  308. package/dist/esm/ElapsedProgress/index.mjs.map +1 -0
  309. package/dist/esm/ElapsedProgress/index.native.js +83 -0
  310. package/dist/esm/ElapsedProgress/index.native.js.map +1 -0
  311. package/dist/esm/ErrorBoundary/index.native.js.map +1 -1
  312. package/dist/esm/Heading.native.js.map +1 -1
  313. package/dist/esm/Kbd/index.native.js.map +1 -1
  314. package/dist/esm/Kbd/keys.native.js.map +1 -1
  315. package/dist/esm/Lightbox/MediaControl.native.js.map +1 -1
  316. package/dist/esm/Lightbox/index.gnome.native.js.map +1 -1
  317. package/dist/esm/Lightbox/shared.native.js.map +1 -1
  318. package/dist/esm/Lightbox/useLightbox.native.js.map +1 -1
  319. package/dist/esm/MachineLiteral/index.mjs +73 -0
  320. package/dist/esm/MachineLiteral/index.mjs.map +1 -0
  321. package/dist/esm/MachineLiteral/index.native.js +74 -0
  322. package/dist/esm/MachineLiteral/index.native.js.map +1 -0
  323. package/dist/esm/Material/blur.mjs +8 -0
  324. package/dist/esm/Material/blur.mjs.map +1 -0
  325. package/dist/esm/Material/blur.native.js +67 -0
  326. package/dist/esm/Material/blur.native.js.map +1 -0
  327. package/dist/esm/Material/index.mjs +10 -4
  328. package/dist/esm/Material/index.mjs.map +1 -1
  329. package/dist/esm/Material/index.native.js +10 -4
  330. package/dist/esm/Material/index.native.js.map +1 -1
  331. package/dist/esm/Meter/index.mjs +4 -3
  332. package/dist/esm/Meter/index.mjs.map +1 -1
  333. package/dist/esm/Meter/index.native.js +4 -3
  334. package/dist/esm/Meter/index.native.js.map +1 -1
  335. package/dist/esm/Meter/meter.native.js.map +1 -1
  336. package/dist/esm/OverflowRow/index.native.js.map +1 -1
  337. package/dist/esm/Pagination.native.js.map +1 -1
  338. package/dist/esm/Popover.native.js.map +1 -1
  339. package/dist/esm/ProgressSteps/index.native.js.map +1 -1
  340. package/dist/esm/Quote/index.native.js.map +1 -1
  341. package/dist/esm/SchemeToggle/index.native.js.map +1 -1
  342. package/dist/esm/ScrollView/revealFocusedField.native.js.map +1 -1
  343. package/dist/esm/Separator/index.native.js.map +1 -1
  344. package/dist/esm/Sheet.native.js.map +1 -1
  345. package/dist/esm/SheetModal/SheetHeader.native.js.map +1 -1
  346. package/dist/esm/SheetModal/SheetNavigation.native.js.map +1 -1
  347. package/dist/esm/SheetModal/detents.native.js.map +1 -1
  348. package/dist/esm/SheetModal/useSheetFrameFocus.native.js.map +1 -1
  349. package/dist/esm/Skeleton/index.native.js.map +1 -1
  350. package/dist/esm/SkipLink/index.native.js.map +1 -1
  351. package/dist/esm/SortableList/SortableHandle.native.js.map +1 -1
  352. package/dist/esm/SortableList/index.mjs +2 -1
  353. package/dist/esm/SortableList/index.mjs.map +1 -1
  354. package/dist/esm/SortableList/index.native.js +2 -1
  355. package/dist/esm/SortableList/index.native.js.map +1 -1
  356. package/dist/esm/SortableList/useSortableRows.native.js.map +1 -1
  357. package/dist/esm/SortableList/useUserOrder.mjs +58 -0
  358. package/dist/esm/SortableList/useUserOrder.mjs.map +1 -0
  359. package/dist/esm/SortableList/useUserOrder.native.js +78 -0
  360. package/dist/esm/SortableList/useUserOrder.native.js.map +1 -0
  361. package/dist/esm/Tabs/index.native.js.map +1 -1
  362. package/dist/esm/Text.native.js.map +1 -1
  363. package/dist/esm/ThemePresetPicker/index.native.js.map +1 -1
  364. package/dist/esm/Toast/index.native.js.map +1 -1
  365. package/dist/esm/Toast/store.native.js.map +1 -1
  366. package/dist/esm/Tooltip/nativePress.native.js.map +1 -1
  367. package/dist/esm/Tooltip/tooltipShared.native.js.map +1 -1
  368. package/dist/esm/TreeSelect/index.mjs +8 -2
  369. package/dist/esm/TreeSelect/index.mjs.map +1 -1
  370. package/dist/esm/TreeSelect/index.native.js +8 -2
  371. package/dist/esm/TreeSelect/index.native.js.map +1 -1
  372. package/dist/esm/TreeSelect/treeSelectModel.native.js.map +1 -1
  373. package/dist/esm/Video/PlayerChrome.native.js.map +1 -1
  374. package/dist/esm/Video/VideoFrame.native.js.map +1 -1
  375. package/dist/esm/Video/types.native.js.map +1 -1
  376. package/dist/esm/Wheel/index.native.js.map +1 -1
  377. package/dist/esm/Wizard/index.native.js.map +1 -1
  378. package/dist/esm/actions/ActionBar.native.js.map +1 -1
  379. package/dist/esm/actions/DangerSection.native.js.map +1 -1
  380. package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
  381. package/dist/esm/actions/HeaderActions.native.js.map +1 -1
  382. package/dist/esm/actions/StandardAction.native.js.map +1 -1
  383. package/dist/esm/actions/devWarn.native.js.map +1 -1
  384. package/dist/esm/actions/index.native.js.map +1 -1
  385. package/dist/esm/actions/severity.native.js.map +1 -1
  386. package/dist/esm/appShell/AppShell.mjs +406 -0
  387. package/dist/esm/appShell/AppShell.mjs.map +1 -0
  388. package/dist/esm/appShell/AppShell.native.js +470 -0
  389. package/dist/esm/appShell/AppShell.native.js.map +1 -0
  390. package/dist/esm/appShell/Dock.native.js.map +1 -1
  391. package/dist/esm/appShell/MpoTabHost.native.js.map +1 -1
  392. package/dist/esm/appShell/ScopeMenu.native.js.map +1 -1
  393. package/dist/esm/appShell/SettingsSplit.native.js.map +1 -1
  394. package/dist/esm/appShell/Springboard.native.js.map +1 -1
  395. package/dist/esm/appShell/SystemBar.native.js.map +1 -1
  396. package/dist/esm/appShell/TabBar.mjs +10 -5
  397. package/dist/esm/appShell/TabBar.mjs.map +1 -1
  398. package/dist/esm/appShell/TabBar.native.js +10 -5
  399. package/dist/esm/appShell/TabBar.native.js.map +1 -1
  400. package/dist/esm/appShell/appTile.native.js.map +1 -1
  401. package/dist/esm/appShell/bottomChrome.native.js.map +1 -1
  402. package/dist/esm/appShell/index.mjs +1 -0
  403. package/dist/esm/appShell/index.mjs.map +1 -1
  404. package/dist/esm/appShell/index.native.js +1 -0
  405. package/dist/esm/appShell/index.native.js.map +1 -1
  406. package/dist/esm/charts/Axis.native.js.map +1 -1
  407. package/dist/esm/charts/BarChart.native.js.map +1 -1
  408. package/dist/esm/charts/ChartDataView.native.js.map +1 -1
  409. package/dist/esm/charts/ChartSurface.native.js.map +1 -1
  410. package/dist/esm/charts/LineChart.native.js.map +1 -1
  411. package/dist/esm/charts/PieChart.native.js.map +1 -1
  412. package/dist/esm/charts/Sparkline.mjs +1 -1
  413. package/dist/esm/charts/Sparkline.mjs.map +1 -1
  414. package/dist/esm/charts/Sparkline.native.js +1 -1
  415. package/dist/esm/charts/Sparkline.native.js.map +1 -1
  416. package/dist/esm/charts/accessibility.native.js.map +1 -1
  417. package/dist/esm/charts/chartHeight.native.js.map +1 -1
  418. package/dist/esm/charts/composeChart.native.js.map +1 -1
  419. package/dist/esm/charts/index.native.js.map +1 -1
  420. package/dist/esm/charts/math.native.js.map +1 -1
  421. package/dist/esm/charts/series.native.js.map +1 -1
  422. package/dist/esm/charts/svg.native.js.map +1 -1
  423. package/dist/esm/charts/types.native.js.map +1 -1
  424. package/dist/esm/charts/useChartTheme.native.js.map +1 -1
  425. package/dist/esm/code/Code/index.native.js.map +1 -1
  426. package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
  427. package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
  428. package/dist/esm/code/Highlighter/houseSyntaxTheme.native.js.map +1 -1
  429. package/dist/esm/code/Highlighter/index.native.js.map +1 -1
  430. package/dist/esm/code/Highlighter/namedGroupMatchAll.native.js.map +1 -1
  431. package/dist/esm/code/Pre/index.native.js.map +1 -1
  432. package/dist/esm/code/index.native.js.map +1 -1
  433. package/dist/esm/componentColors.native.js.map +1 -1
  434. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  435. package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
  436. package/dist/esm/feedback/copy.native.js.map +1 -1
  437. package/dist/esm/feedback/index.native.js.map +1 -1
  438. package/dist/esm/feedback/notify.native.js.map +1 -1
  439. package/dist/esm/feedback/route.native.js.map +1 -1
  440. package/dist/esm/feedback/store.native.js.map +1 -1
  441. package/dist/esm/formLayouts/FormLayouts.native.js.map +1 -1
  442. package/dist/esm/formLayouts/PreferencePanel.native.js.map +1 -1
  443. package/dist/esm/formLayouts/index.native.js.map +1 -1
  444. package/dist/esm/hooks/index.native.js.map +1 -1
  445. package/dist/esm/hooks/useClipboard.native.js.map +1 -1
  446. package/dist/esm/hooks/useDocumentTitle.native.js.map +1 -1
  447. package/dist/esm/hooks/useHoldCue.native.js.map +1 -1
  448. package/dist/esm/icons/CheckRegular.native.js.map +1 -1
  449. package/dist/esm/icons/MinusRegular.native.js.map +1 -1
  450. package/dist/esm/icons/index.native.js.map +1 -1
  451. package/dist/esm/icons/lucide.native.js.map +1 -1
  452. package/dist/esm/icons/themed.native.js.map +1 -1
  453. package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
  454. package/dist/esm/images/Image/framing.native.js.map +1 -1
  455. package/dist/esm/images/Image/mediaRadius.native.js.map +1 -1
  456. package/dist/esm/images/Image/shared.native.js.map +1 -1
  457. package/dist/esm/images/Image/types.native.js.map +1 -1
  458. package/dist/esm/images/index.native.js.map +1 -1
  459. package/dist/esm/index.mjs +5 -2
  460. package/dist/esm/index.mjs.map +1 -1
  461. package/dist/esm/index.native.js +5 -2
  462. package/dist/esm/index.native.js.map +1 -1
  463. package/dist/esm/knobImmuneExports.native.js.map +1 -1
  464. package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
  465. package/dist/esm/layouts/Debug/index.native.js.map +1 -1
  466. package/dist/esm/layouts/EmptyState.native.js.map +1 -1
  467. package/dist/esm/layouts/IdentityPlate.native.js.map +1 -1
  468. package/dist/esm/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  469. package/dist/esm/layouts/PageTemplates.native.js.map +1 -1
  470. package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
  471. package/dist/esm/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  472. package/dist/esm/layouts/StatusDot.native.js.map +1 -1
  473. package/dist/esm/layouts/StatusGlyphStrip.native.js.map +1 -1
  474. package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
  475. package/dist/esm/layouts/attachments.native.js.map +1 -1
  476. package/dist/esm/layouts/bottomAccessory.native.js.map +1 -1
  477. package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
  478. package/dist/esm/layouts/index.native.js.map +1 -1
  479. package/dist/esm/layouts/page.mjs +4 -2
  480. package/dist/esm/layouts/page.mjs.map +1 -1
  481. package/dist/esm/layouts/page.native.js +4 -2
  482. package/dist/esm/layouts/page.native.js.map +1 -1
  483. package/dist/esm/layouts/pageHeadingScope.native.js.map +1 -1
  484. package/dist/esm/layouts/screenScroll.mjs +53 -1
  485. package/dist/esm/layouts/screenScroll.mjs.map +1 -1
  486. package/dist/esm/layouts/screenScroll.native.js +57 -1
  487. package/dist/esm/layouts/screenScroll.native.js.map +1 -1
  488. package/dist/esm/layouts/shellSidebarSlot.native.js.map +1 -1
  489. package/dist/esm/layouts/sidebar.mjs +45 -11
  490. package/dist/esm/layouts/sidebar.mjs.map +1 -1
  491. package/dist/esm/layouts/sidebar.native.js +48 -11
  492. package/dist/esm/layouts/sidebar.native.js.map +1 -1
  493. package/dist/esm/layouts/tags.native.js.map +1 -1
  494. package/dist/esm/layouts/timeline.native.js.map +1 -1
  495. package/dist/esm/layouts/toolbar.native.js.map +1 -1
  496. package/dist/esm/shared/actionScan.native.js.map +1 -1
  497. package/dist/esm/shared/i18n.native.js.map +1 -1
  498. package/dist/esm/shared/restoreRetries.native.js.map +1 -1
  499. package/dist/esm/shared/t.native.js.map +1 -1
  500. package/dist/esm/shared/textRidesText.native.js.map +1 -1
  501. package/dist/esm/shared/useReturnFocusOnClose.native.js.map +1 -1
  502. package/dist/esm/surfaces.native.js.map +1 -1
  503. package/dist/esm/tamagui.native.js.map +1 -1
  504. package/dist/esm/testSetup.native.js.map +1 -1
  505. package/dist/esm/utils/setTinted.native.js.map +1 -1
  506. package/dist/esm/utils/unwrapText.native.js.map +1 -1
  507. package/dist/esm/views/Calendar.native.js.map +1 -1
  508. package/dist/esm/views/Dashboard.native.js.map +1 -1
  509. package/dist/esm/views/Gantt.native.js.map +1 -1
  510. package/dist/esm/views/GanttDateGrip.native.js.map +1 -1
  511. package/dist/esm/views/ImageGrid.native.js.map +1 -1
  512. package/dist/esm/views/List.native.js.map +1 -1
  513. package/dist/esm/views/ListGroup.native.js.map +1 -1
  514. package/dist/esm/views/ListRow.native.js.map +1 -1
  515. package/dist/esm/views/Matrix.native.js.map +1 -1
  516. package/dist/esm/views/ReportBuilder.mjs +4 -4
  517. package/dist/esm/views/ReportBuilder.mjs.map +1 -1
  518. package/dist/esm/views/ReportBuilder.native.js +4 -4
  519. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  520. package/dist/esm/views/ShortcutCard.native.js.map +1 -1
  521. package/dist/esm/views/TreeView.native.js.map +1 -1
  522. package/dist/esm/views/calendarMath.native.js.map +1 -1
  523. package/dist/esm/views/ganttIntervals.native.js.map +1 -1
  524. package/dist/esm/views/ganttMath.native.js.map +1 -1
  525. package/dist/esm/views/index.mjs +2 -1
  526. package/dist/esm/views/index.mjs.map +1 -1
  527. package/dist/esm/views/index.native.js +2 -1
  528. package/dist/esm/views/index.native.js.map +1 -1
  529. package/dist/esm/views/kanbanDnd.native.js.map +1 -1
  530. package/dist/esm/views/matrixMath.native.js.map +1 -1
  531. package/dist/esm/views/sameNameScope.mjs +14 -0
  532. package/dist/esm/views/sameNameScope.mjs.map +1 -0
  533. package/dist/esm/views/sameNameScope.native.js +35 -0
  534. package/dist/esm/views/sameNameScope.native.js.map +1 -0
  535. package/dist/esm/views/treeViewDnd.native.js.map +1 -1
  536. package/dist/esm/views/treeViewLayout.native.js.map +1 -1
  537. package/dist/esm/views/treeViewMotion.native.js.map +1 -1
  538. package/dist/esm/views/treeViewReveal.native.js.map +1 -1
  539. package/dist/esm/views/usePageFlowLoadMore.native.js.map +1 -1
  540. package/dist/esm/views/widgetChrome.native.js.map +1 -1
  541. package/dist/jsx/Diff/diff.mjs +58 -0
  542. package/dist/jsx/Diff/diff.mjs.map +1 -0
  543. package/dist/jsx/Diff/diff.native.js +108 -0
  544. package/dist/jsx/Diff/diff.native.js.map +1 -0
  545. package/dist/jsx/Diff/index.mjs +147 -0
  546. package/dist/jsx/Diff/index.mjs.map +1 -0
  547. package/dist/jsx/Diff/index.native.js +181 -0
  548. package/dist/jsx/Diff/index.native.js.map +1 -0
  549. package/dist/jsx/ElapsedProgress/index.mjs +76 -0
  550. package/dist/jsx/ElapsedProgress/index.mjs.map +1 -0
  551. package/dist/jsx/ElapsedProgress/index.native.js +112 -0
  552. package/dist/jsx/ElapsedProgress/index.native.js.map +1 -0
  553. package/dist/jsx/MachineLiteral/index.mjs +73 -0
  554. package/dist/jsx/MachineLiteral/index.mjs.map +1 -0
  555. package/dist/jsx/MachineLiteral/index.native.js +102 -0
  556. package/dist/jsx/MachineLiteral/index.native.js.map +1 -0
  557. package/dist/jsx/Material/blur.mjs +8 -0
  558. package/dist/jsx/Material/blur.mjs.map +1 -0
  559. package/dist/jsx/Material/blur.native.js +100 -0
  560. package/dist/jsx/Material/blur.native.js.map +1 -0
  561. package/dist/jsx/Material/index.mjs +10 -4
  562. package/dist/jsx/Material/index.mjs.map +1 -1
  563. package/dist/jsx/Material/index.native.js +9 -3
  564. package/dist/jsx/Material/index.native.js.map +1 -1
  565. package/dist/jsx/Meter/index.mjs +4 -3
  566. package/dist/jsx/Meter/index.mjs.map +1 -1
  567. package/dist/jsx/Meter/index.native.js +3 -1
  568. package/dist/jsx/Meter/index.native.js.map +1 -1
  569. package/dist/jsx/SortableList/index.mjs +2 -1
  570. package/dist/jsx/SortableList/index.mjs.map +1 -1
  571. package/dist/jsx/SortableList/index.native.js +4 -1
  572. package/dist/jsx/SortableList/index.native.js.map +1 -1
  573. package/dist/jsx/SortableList/useUserOrder.mjs +58 -0
  574. package/dist/jsx/SortableList/useUserOrder.mjs.map +1 -0
  575. package/dist/jsx/SortableList/useUserOrder.native.js +107 -0
  576. package/dist/jsx/SortableList/useUserOrder.native.js.map +1 -0
  577. package/dist/jsx/TreeSelect/index.mjs +8 -2
  578. package/dist/jsx/TreeSelect/index.mjs.map +1 -1
  579. package/dist/jsx/TreeSelect/index.native.js +7 -1
  580. package/dist/jsx/TreeSelect/index.native.js.map +1 -1
  581. package/dist/jsx/appShell/AppShell.mjs +406 -0
  582. package/dist/jsx/appShell/AppShell.mjs.map +1 -0
  583. package/dist/jsx/appShell/AppShell.native.js +499 -0
  584. package/dist/jsx/appShell/AppShell.native.js.map +1 -0
  585. package/dist/jsx/appShell/TabBar.mjs +10 -5
  586. package/dist/jsx/appShell/TabBar.mjs.map +1 -1
  587. package/dist/jsx/appShell/TabBar.native.js +10 -5
  588. package/dist/jsx/appShell/TabBar.native.js.map +1 -1
  589. package/dist/jsx/appShell/index.mjs +1 -0
  590. package/dist/jsx/appShell/index.mjs.map +1 -1
  591. package/dist/jsx/appShell/index.native.js +1 -0
  592. package/dist/jsx/appShell/index.native.js.map +1 -1
  593. package/dist/jsx/charts/Sparkline.mjs +1 -1
  594. package/dist/jsx/charts/Sparkline.mjs.map +1 -1
  595. package/dist/jsx/charts/Sparkline.native.js +1 -1
  596. package/dist/jsx/charts/Sparkline.native.js.map +1 -1
  597. package/dist/jsx/index.js +5 -2
  598. package/dist/jsx/index.js.map +1 -1
  599. package/dist/jsx/index.mjs +5 -2
  600. package/dist/jsx/index.mjs.map +1 -1
  601. package/dist/jsx/index.native.js +6 -1
  602. package/dist/jsx/index.native.js.map +1 -1
  603. package/dist/jsx/layouts/page.mjs +4 -2
  604. package/dist/jsx/layouts/page.mjs.map +1 -1
  605. package/dist/jsx/layouts/page.native.js +3 -0
  606. package/dist/jsx/layouts/page.native.js.map +1 -1
  607. package/dist/jsx/layouts/screenScroll.mjs +53 -1
  608. package/dist/jsx/layouts/screenScroll.mjs.map +1 -1
  609. package/dist/jsx/layouts/screenScroll.native.js +59 -0
  610. package/dist/jsx/layouts/screenScroll.native.js.map +1 -1
  611. package/dist/jsx/layouts/sidebar.mjs +45 -11
  612. package/dist/jsx/layouts/sidebar.mjs.map +1 -1
  613. package/dist/jsx/layouts/sidebar.native.js +49 -9
  614. package/dist/jsx/layouts/sidebar.native.js.map +1 -1
  615. package/dist/jsx/views/ReportBuilder.mjs +4 -4
  616. package/dist/jsx/views/ReportBuilder.mjs.map +1 -1
  617. package/dist/jsx/views/ReportBuilder.native.js +3 -3
  618. package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
  619. package/dist/jsx/views/index.mjs +2 -1
  620. package/dist/jsx/views/index.mjs.map +1 -1
  621. package/dist/jsx/views/index.native.js +2 -0
  622. package/dist/jsx/views/index.native.js.map +1 -1
  623. package/dist/jsx/views/sameNameScope.mjs +14 -0
  624. package/dist/jsx/views/sameNameScope.mjs.map +1 -0
  625. package/dist/jsx/views/sameNameScope.native.js +63 -0
  626. package/dist/jsx/views/sameNameScope.native.js.map +1 -0
  627. package/package.json +18 -9
  628. package/src/Diff/Diff.spec.tsx +105 -0
  629. package/src/Diff/Diff.stories.tsx +44 -0
  630. package/src/Diff/diff.ts +61 -0
  631. package/src/Diff/index.tsx +145 -0
  632. package/src/ElapsedProgress/ElapsedProgress.spec.tsx +66 -0
  633. package/src/ElapsedProgress/ElapsedProgress.stories.tsx +43 -0
  634. package/src/ElapsedProgress/index.tsx +89 -0
  635. package/src/MachineLiteral/MachineLiteral.spec.tsx +86 -0
  636. package/src/MachineLiteral/MachineLiteral.stories.tsx +44 -0
  637. package/src/MachineLiteral/index.tsx +75 -0
  638. package/src/Material/blur.native.spec.tsx +135 -0
  639. package/src/Material/blur.native.tsx +93 -0
  640. package/src/Material/blur.ts +11 -0
  641. package/src/Material/index.tsx +18 -6
  642. package/src/Meter/index.tsx +4 -2
  643. package/src/SortableList/index.tsx +2 -0
  644. package/src/SortableList/useUserOrder.spec.tsx +110 -0
  645. package/src/SortableList/useUserOrder.ts +96 -0
  646. package/src/TreeSelect/TreeSelect.rows.spec.tsx +44 -0
  647. package/src/TreeSelect/index.tsx +12 -1
  648. package/src/appShell/AppShell.spec.tsx +259 -0
  649. package/src/appShell/AppShell.stories.tsx +112 -0
  650. package/src/appShell/AppShell.tsx +526 -0
  651. package/src/appShell/TabBar.tsx +3 -0
  652. package/src/appShell/index.ts +1 -0
  653. package/src/charts/Sparkline.tsx +3 -3
  654. package/src/index.ts +7 -0
  655. package/src/layouts/Sidebar.spec.tsx +31 -0
  656. package/src/layouts/page.tsx +8 -0
  657. package/src/layouts/screenScroll.tsx +71 -0
  658. package/src/layouts/sidebar.tsx +83 -5
  659. package/src/presentationEmpty.spec.tsx +71 -0
  660. package/src/views/ReportBuilder.tsx +4 -3
  661. package/src/views/index.ts +1 -0
  662. package/src/views/sameNameScope.spec.tsx +55 -0
  663. package/src/views/sameNameScope.ts +22 -0
  664. package/types/Diff/diff.d.ts +17 -0
  665. package/types/Diff/diff.d.ts.map +1 -0
  666. package/types/Diff/index.d.ts +15 -0
  667. package/types/Diff/index.d.ts.map +1 -0
  668. package/types/ElapsedProgress/index.d.ts +15 -0
  669. package/types/ElapsedProgress/index.d.ts.map +1 -0
  670. package/types/MachineLiteral/index.d.ts +13 -0
  671. package/types/MachineLiteral/index.d.ts.map +1 -0
  672. package/types/Material/blur.d.ts +9 -0
  673. package/types/Material/blur.d.ts.map +1 -0
  674. package/types/Material/blur.native.d.ts +38 -0
  675. package/types/Material/blur.native.d.ts.map +1 -0
  676. package/types/Material/index.d.ts.map +1 -1
  677. package/types/Meter/index.d.ts +2 -0
  678. package/types/Meter/index.d.ts.map +1 -1
  679. package/types/SortableList/index.d.ts +2 -0
  680. package/types/SortableList/index.d.ts.map +1 -1
  681. package/types/SortableList/useUserOrder.d.ts +28 -0
  682. package/types/SortableList/useUserOrder.d.ts.map +1 -0
  683. package/types/TreeSelect/index.d.ts.map +1 -1
  684. package/types/appShell/AppShell.d.ts +47 -0
  685. package/types/appShell/AppShell.d.ts.map +1 -0
  686. package/types/appShell/TabBar.d.ts.map +1 -1
  687. package/types/appShell/index.d.ts +1 -0
  688. package/types/appShell/index.d.ts.map +1 -1
  689. package/types/charts/Sparkline.d.ts +2 -2
  690. package/types/charts/Sparkline.d.ts.map +1 -1
  691. package/types/index.d.ts +5 -2
  692. package/types/index.d.ts.map +1 -1
  693. package/types/layouts/page.d.ts +5 -0
  694. package/types/layouts/page.d.ts.map +1 -1
  695. package/types/layouts/screenScroll.d.ts +24 -0
  696. package/types/layouts/screenScroll.d.ts.map +1 -1
  697. package/types/layouts/sidebar.d.ts +31 -1
  698. package/types/layouts/sidebar.d.ts.map +1 -1
  699. package/types/views/ReportBuilder.d.ts.map +1 -1
  700. package/types/views/index.d.ts +1 -0
  701. package/types/views/index.d.ts.map +1 -1
  702. package/types/views/sameNameScope.d.ts +8 -0
  703. package/types/views/sameNameScope.d.ts.map +1 -0
@@ -0,0 +1,96 @@
1
+ import { useCallback, useEffect, useMemo, useState } from "react";
2
+
3
+ /** Where a user's arrangement lives; defaults to the browser's localStorage. */
4
+ export interface UserOrderStorage {
5
+ getItem: (key: string) => string | null;
6
+ setItem: (key: string, value: string) => void;
7
+ }
8
+
9
+ const memory = new Map<string, string>();
10
+ const memoryStorage: UserOrderStorage = {
11
+ getItem: (key) => memory.get(key) ?? null,
12
+ setItem: (key, value) => {
13
+ memory.set(key, value);
14
+ },
15
+ };
16
+
17
+ function defaultStorage(): UserOrderStorage {
18
+ try {
19
+ const local = (globalThis as { localStorage?: UserOrderStorage }).localStorage;
20
+ if (local && typeof local.getItem === "function") return local;
21
+ } catch {
22
+ // storage blocked
23
+ }
24
+ return memoryStorage;
25
+ }
26
+
27
+ function readOrder(storage: UserOrderStorage, key: string): string[] {
28
+ try {
29
+ const parsed = JSON.parse(storage.getItem(key) ?? "[]") as unknown;
30
+ return Array.isArray(parsed) ? parsed.filter((id): id is string => typeof id === "string") : [];
31
+ } catch {
32
+ return [];
33
+ }
34
+ }
35
+
36
+ /**
37
+ * The items in the user's order (LC-209): known ids keep their saved place,
38
+ * new ids land at the end in the order the source gave them. Ids missing
39
+ * from this read keep their slot in `order`, so a partial refresh never
40
+ * reshuffles them.
41
+ */
42
+ export function applyUserOrder<T>(
43
+ items: readonly T[],
44
+ order: readonly string[],
45
+ getId: (item: T) => string,
46
+ ): { items: T[]; order: string[] } {
47
+ const byId = new Map(items.map((item) => [getId(item), item] as const));
48
+ const known = new Set(order);
49
+ const placed = order.flatMap((id) => {
50
+ const item = byId.get(id);
51
+ return item === undefined ? [] : [item];
52
+ });
53
+ const added = items.filter((item) => !known.has(getId(item)));
54
+ return {
55
+ items: [...placed, ...added],
56
+ order: [...order, ...added.map(getId)],
57
+ };
58
+ }
59
+
60
+ export interface UseUserOrderOptions {
61
+ storage?: UserOrderStorage;
62
+ }
63
+
64
+ /**
65
+ * Keeps a hand-arranged collection in the user's order across data refreshes
66
+ * and reloads. Feed `items` from any source order; render the returned
67
+ * `items`; pass `onChange` to SortableList.
68
+ */
69
+ export function useUserOrder<T>(
70
+ key: string,
71
+ items: readonly T[],
72
+ getId: (item: T) => string,
73
+ options: UseUserOrderOptions = {},
74
+ ) {
75
+ const storage = useMemo(() => options.storage ?? defaultStorage(), [options.storage]);
76
+ const [order, setOrder] = useState(() => readOrder(storage, key));
77
+ const arranged = useMemo(() => applyUserOrder(items, order, getId), [items, order, getId]);
78
+
79
+ useEffect(() => {
80
+ if (arranged.order.length === order.length) return;
81
+ storage.setItem(key, JSON.stringify(arranged.order));
82
+ setOrder(arranged.order);
83
+ }, [arranged.order, order.length, storage, key]);
84
+
85
+ const onChange = useCallback(
86
+ (next: T[]) => {
87
+ const shown = new Set(next.map(getId));
88
+ const ids = [...next.map(getId), ...order.filter((id) => !shown.has(id))];
89
+ storage.setItem(key, JSON.stringify(ids));
90
+ setOrder(ids);
91
+ },
92
+ [getId, order, storage, key],
93
+ );
94
+
95
+ return { items: arranged.items, onChange };
96
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * LC-222 LIST-HEIGHT-IN-ROWS: the desktop tree panel caps its scroller at a
3
+ * visible-row count times its row pitch, not a pixel literal.
4
+ */
5
+ import { listHeightForRows } from "@multiplatform.one/theme";
6
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
7
+ import { cleanup, waitFor } from "@testing-library/react";
8
+ import { afterEach, describe, expect, it } from "vitest";
9
+ import type { TreeNode } from "../views/TreeView";
10
+ import { TreeSelect } from "./index";
11
+
12
+ afterEach(cleanup);
13
+
14
+ const nodes: TreeNode[] = Array.from({ length: 12 }, (_, index) => ({
15
+ id: `n${index}`,
16
+ label: `Account ${index + 1}`,
17
+ }));
18
+
19
+ describe("TreeSelect panel height (LC-222)", () => {
20
+ it("states its cap as eight rows at the row pitch", async () => {
21
+ Object.defineProperty(window, "innerWidth", {
22
+ configurable: true,
23
+ writable: true,
24
+ value: 1200,
25
+ });
26
+ window.dispatchEvent(new Event("resize"));
27
+ const { baseElement } = renderWithProviders(<TreeSelect label="Account" nodes={nodes} open />);
28
+ const scroller = await waitFor(() => {
29
+ const found = baseElement.querySelector("[data-visible-rows]") as HTMLElement | null;
30
+ expect(found).toBeTruthy();
31
+ return found as HTMLElement;
32
+ });
33
+ const rows = Number(scroller.getAttribute("data-visible-rows"));
34
+ const pitch = Number(scroller.getAttribute("data-row-pitch"));
35
+ expect(rows).toBe(8);
36
+ expect(pitch).toBeGreaterThan(0);
37
+ const rowHeights = [...baseElement.querySelectorAll("[data-row-height]")].map((row) =>
38
+ Number(row.getAttribute("data-row-height")),
39
+ );
40
+ expect(new Set(rowHeights)).toEqual(new Set([pitch]));
41
+ const style = `${scroller.getAttribute("style") ?? ""} ${scroller.className}`;
42
+ expect(style).toContain(String(listHeightForRows(rows, pitch)));
43
+ });
44
+ });
@@ -26,6 +26,7 @@ import {
26
26
  ensureFocusVisibleRing,
27
27
  ensureKeyboardModalityTracking,
28
28
  keyboardFocusRingProps,
29
+ listHeightForRows,
29
30
  useMenuRowCheckInk,
30
31
  menuRowChecked,
31
32
  useResolvedKnobs,
@@ -617,6 +618,9 @@ function handleTreeKeys(args: {
617
618
  }
618
619
  }
619
620
 
621
+ /** Rows the desktop tree panel shows before it scrolls (LC-222). */
622
+ const TREE_SELECT_VISIBLE_ROWS = 8;
623
+
620
624
  function FloatingTreeSelect({
621
625
  nodes,
622
626
  value,
@@ -653,6 +657,7 @@ function FloatingTreeSelect({
653
657
  accessibilityLabel?: string;
654
658
  }) {
655
659
  const overlayZIndex = useOverlayZIndex("dropdown");
660
+ const { knobProps } = useResolvedKnobs();
656
661
  const treeId = useId();
657
662
  const searchRef = useRef<HTMLInputElement | null>(null);
658
663
  const state = useTreeSelectState({ nodes, value, open, defaultExpandedIds });
@@ -790,7 +795,13 @@ function FloatingTreeSelect({
790
795
  activeDescendant={activeDescendant}
791
796
  sizeToken={sizeToken}
792
797
  />
793
- <YStack overflow="scroll" maxHeight={320} id={treeId}>
798
+ <YStack
799
+ overflow="scroll"
800
+ maxHeight={listHeightForRows(TREE_SELECT_VISIBLE_ROWS, knobProps.nestedControl.px)}
801
+ data-visible-rows={TREE_SELECT_VISIBLE_ROWS}
802
+ data-row-pitch={knobProps.nestedControl.px}
803
+ id={treeId}
804
+ >
794
805
  <TreeSelectPanelBody
795
806
  rows={state.rows}
796
807
  selectedId={value}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * FZ-7996 (LC-175 MPO-ONLY-REUSE): one composed app frame. An app passes its
3
+ * destinations and the path; the shell picks the phone or the split layout,
4
+ * selects the destination, draws back on a pushed route and steps aside for a
5
+ * route that mounts its own chrome or a page that pins its own top bar.
6
+ */
7
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
8
+ import { HouseIcon, LightningIcon, SparkleIcon } from "@phosphor-icons/react";
9
+ import { act, cleanup, fireEvent, screen } from "@testing-library/react";
10
+ import { afterEach, describe, expect, it, vi } from "vitest";
11
+ import {
12
+ CONTENT_MAX_WIDTH,
13
+ PageHeader,
14
+ READABLE_MAX_WIDTH,
15
+ Screen,
16
+ ScreenToolbar,
17
+ } from "../layouts/page";
18
+ import { ListPageLayout } from "../layouts/PageTemplates";
19
+ import { AppShell, appShellRoute, type AppShellDestination } from "./AppShell";
20
+
21
+ const size = vi.hoisted(() => ({ value: "compact" as string }));
22
+ vi.mock("@multiplatform.one/theme", async (importOriginal) => ({
23
+ ...(await importOriginal<typeof import("@multiplatform.one/theme")>()),
24
+ useLayoutSizeClass: () => size.value,
25
+ }));
26
+
27
+ afterEach(() => {
28
+ cleanup();
29
+ size.value = "compact";
30
+ });
31
+
32
+ const destinations: AppShellDestination[] = [
33
+ { key: "/", label: "Home", icon: HouseIcon },
34
+ { key: "/pokemon", label: "Pokemon", icon: SparkleIcon },
35
+ { key: "/moves", label: "Moves", icon: LightningIcon, placement: "more" },
36
+ ];
37
+
38
+ function shell(path: string, props: Partial<Parameters<typeof AppShell>[0]> = {}) {
39
+ const onNavigate = vi.fn();
40
+ const onBack = vi.fn();
41
+ const view = renderWithProviders(
42
+ <AppShell
43
+ destinations={destinations}
44
+ path={path}
45
+ onNavigate={onNavigate}
46
+ onBack={onBack}
47
+ title="multiplatform.one"
48
+ logo={<span data-testid="logo" />}
49
+ actions={<button type="button">Theme</button>}
50
+ ownChrome={["/desk"]}
51
+ {...props}
52
+ >
53
+ {props.children ?? <span data-testid="page">page</span>}
54
+ </AppShell>,
55
+ );
56
+ return { ...view, onNavigate, onBack };
57
+ }
58
+
59
+ describe("appShellRoute", () => {
60
+ it("selects the longest destination the path sits under", () => {
61
+ expect(appShellRoute(destinations, "/")).toMatchObject({ pushed: false });
62
+ expect(appShellRoute(destinations, "/").destination?.key).toBe("/");
63
+ expect(appShellRoute(destinations, "/pokemon").destination?.key).toBe("/pokemon");
64
+ expect(appShellRoute(destinations, "/pokemon/").pushed).toBe(false);
65
+ const detail = appShellRoute(destinations, "/pokemon/pikachu");
66
+ expect(detail.destination?.key).toBe("/pokemon");
67
+ expect(detail.pushed).toBe(true);
68
+ });
69
+
70
+ it("matches no destination outside them, and '/' only exactly", () => {
71
+ expect(appShellRoute(destinations, "/todos").destination).toBeUndefined();
72
+ expect(appShellRoute(destinations, "/pokemonx").destination).toBeUndefined();
73
+ });
74
+ });
75
+
76
+ describe("AppShell on a phone", () => {
77
+ it("draws the nav bar, the content and the tab bar of the tab destinations", () => {
78
+ shell("/pokemon");
79
+ expect(screen.getByTestId("app-shell").getAttribute("data-size")).toBe("compact");
80
+ expect(screen.getByTestId("app-shell-bar")).toBeTruthy();
81
+ expect(screen.getByTestId("page")).toBeTruthy();
82
+ const tabs = screen.getAllByRole("tab");
83
+ expect(tabs.map((tab) => tab.getAttribute("aria-label"))).toEqual(["Home", "Pokemon"]);
84
+ expect(tabs[1]!.getAttribute("aria-selected")).toBe("true");
85
+ expect(screen.queryByTestId("app-shell-sidebar")).toBeNull();
86
+ });
87
+
88
+ it("navigates from a tab", () => {
89
+ const { onNavigate } = shell("/pokemon");
90
+ fireEvent.click(screen.getAllByRole("tab")[0]!);
91
+ expect(onNavigate).toHaveBeenCalledWith("/");
92
+ });
93
+
94
+ it("puts the more destinations in the bar's pull-down", () => {
95
+ shell("/");
96
+ expect(screen.getByTestId("app-shell-more")).toBeTruthy();
97
+ });
98
+
99
+ it("draws the pull-down trigger as the bar's icon action, a bare accent glyph (LC-176)", () => {
100
+ shell("/");
101
+ expect(
102
+ screen
103
+ .getByTestId("app-shell-more")
104
+ .closest("[data-top-bar-control]")
105
+ ?.getAttribute("data-top-bar-control"),
106
+ ).toBe("action");
107
+ });
108
+
109
+ it("leads with the app's mark at a tab root and a tinted back on a pushed route", () => {
110
+ shell("/pokemon");
111
+ expect(screen.getByTestId("app-shell-home").getAttribute("aria-label")).toBe(
112
+ "multiplatform.one",
113
+ );
114
+ cleanup();
115
+ const { onBack } = shell("/pokemon/pikachu");
116
+ const back = document.querySelector("[data-top-bar-control='back']") as HTMLElement;
117
+ expect(back.textContent).toContain("Pokemon");
118
+ fireEvent.click(back);
119
+ expect(onBack).toHaveBeenCalledWith("/pokemon");
120
+ expect(screen.getAllByRole("tab")[1]!.getAttribute("aria-selected")).toBe("true");
121
+ });
122
+
123
+ it("shows the destination as the inline title when the page has no large title", () => {
124
+ shell("/pokemon");
125
+ const title = screen.getByTestId("app-shell-bar-title");
126
+ expect(title.textContent).toBe("Pokemon");
127
+ expect(title.getAttribute("aria-hidden")).toBe("false");
128
+ });
129
+
130
+ it("keeps the page's large title out of the bar until it scrolls away", () => {
131
+ shell("/pokemon", {
132
+ children: (
133
+ <Screen>
134
+ <PageHeader title="All Pokemon" />
135
+ </Screen>
136
+ ),
137
+ });
138
+ const title = screen.getByTestId("app-shell-bar-title");
139
+ expect(title.textContent).toBe("All Pokemon");
140
+ expect(title.getAttribute("aria-hidden")).toBe("true");
141
+ });
142
+
143
+ it("steps aside for a page that pins its own top bar", () => {
144
+ shell("/pokemon/pikachu", {
145
+ children: (
146
+ <Screen topBar={<ScreenToolbar leading={<span>own back</span>} />}>
147
+ <span>record</span>
148
+ </Screen>
149
+ ),
150
+ });
151
+ expect(screen.queryByTestId("app-shell-bar")).toBeNull();
152
+ expect(screen.getByText("own back")).toBeTruthy();
153
+ expect(screen.getAllByRole("tab")).toHaveLength(2);
154
+ });
155
+
156
+ it("draws no tab bar outside the tab destinations", () => {
157
+ shell("/todos");
158
+ expect(screen.queryByRole("tablist")).toBeNull();
159
+ expect(screen.getByTestId("app-shell-bar")).toBeTruthy();
160
+ });
161
+
162
+ it("hands the bottom accessory to the tab bar, which floats it above its row (LC-174)", () => {
163
+ shell("/pokemon", { accessory: <span data-testid="pager">pager</span> });
164
+ const accessory = screen.getByTestId("tab-bar-accessory");
165
+ expect(accessory.contains(screen.getByTestId("pager"))).toBe(true);
166
+ expect(screen.getByTestId("tab-bar").contains(accessory)).toBe(true);
167
+ const tablist = screen.getByRole("tablist");
168
+ expect(accessory.compareDocumentPosition(tablist) & Node.DOCUMENT_POSITION_FOLLOWING).toBe(
169
+ Node.DOCUMENT_POSITION_FOLLOWING,
170
+ );
171
+ });
172
+
173
+ it("still hosts the accessory on a pushed route, where no tab bar shows", () => {
174
+ shell("/todos", { accessory: <span data-testid="pager">pager</span> });
175
+ expect(screen.queryByRole("tablist")).toBeNull();
176
+ const frame = screen.getByTestId("app-shell-content").parentElement;
177
+ expect(frame?.contains(screen.getByTestId("pager"))).toBe(true);
178
+ });
179
+
180
+ it("draws nothing around a route that mounts its own chrome", () => {
181
+ shell("/desk/Pokemon");
182
+ expect(screen.getByTestId("app-shell").getAttribute("data-chrome")).toBe("own");
183
+ expect(screen.queryByTestId("app-shell-bar")).toBeNull();
184
+ expect(screen.queryByRole("tablist")).toBeNull();
185
+ expect(screen.getByTestId("page")).toBeTruthy();
186
+ });
187
+ });
188
+
189
+ describe("AppShell at regular width", () => {
190
+ it("lists every destination in the sidebar, under the app's name, and no tab bar", () => {
191
+ size.value = "expanded";
192
+ const { onNavigate } = shell("/pokemon/pikachu");
193
+ expect(screen.getByTestId("app-shell").getAttribute("data-size")).toBe("regular");
194
+ const sidebar = screen.getByTestId("app-shell-sidebar");
195
+ expect(sidebar.textContent).toContain("multiplatform.one");
196
+ const rows = sidebar.querySelectorAll("[data-sidebar-row]");
197
+ expect([...rows].map((row) => row.textContent)).toEqual(["Home", "Pokemon", "Moves"]);
198
+ expect(rows[1]!.getAttribute("aria-current")).toBe("page");
199
+ fireEvent.click(rows[2]!);
200
+ expect(onNavigate).toHaveBeenCalledWith("/moves");
201
+ expect(screen.queryByRole("tablist")).toBeNull();
202
+ expect(screen.queryByTestId("app-shell-more")).toBeNull();
203
+ });
204
+
205
+ it("puts the app's actions at the sidebar's foot and draws no bar on a destination root", () => {
206
+ size.value = "expanded";
207
+ shell("/pokemon");
208
+ const actions = screen.getByTestId("app-shell-sidebar-actions");
209
+ expect(actions.textContent).toContain("Theme");
210
+ expect(screen.getByTestId("app-shell-sidebar").contains(actions)).toBe(true);
211
+ expect(screen.queryByTestId("app-shell-bar")).toBeNull();
212
+ });
213
+
214
+ it("draws the bar with the tinted back on a pushed route, without the actions", () => {
215
+ size.value = "expanded";
216
+ const { onBack } = shell("/pokemon/pikachu");
217
+ const bar = screen.getByTestId("app-shell-bar");
218
+ expect(bar.textContent).toContain("Pokemon");
219
+ expect(bar.textContent).not.toContain("Theme");
220
+ fireEvent.click(bar.querySelector('[data-top-bar-control="back"]') as HTMLElement);
221
+ expect(onBack).toHaveBeenCalledWith("/pokemon");
222
+ });
223
+
224
+ it("centres the content in the readable column", () => {
225
+ size.value = "expanded";
226
+ shell("/pokemon");
227
+ const readable = screen.getByTestId("app-shell-readable");
228
+ expect(screen.getByTestId("app-shell-content").contains(readable)).toBe(true);
229
+ expect(readable.contains(screen.getByTestId("page"))).toBe(true);
230
+ expect(READABLE_MAX_WIDTH).toBeLessThan(CONTENT_MAX_WIDTH);
231
+ });
232
+
233
+ it("puts the app's name in the sidebar's pinned header", () => {
234
+ size.value = "expanded";
235
+ shell("/pokemon");
236
+ const header = screen
237
+ .getByTestId("app-shell-sidebar")
238
+ .querySelector("[data-sidebar-header]") as HTMLElement;
239
+ expect(header.textContent).toContain("multiplatform.one");
240
+ });
241
+
242
+ it("stacks a page's panel under the sidebar's rows (LC-101)", async () => {
243
+ size.value = "expanded";
244
+ await act(async () => {
245
+ shell("/pokemon", {
246
+ children: (
247
+ <ListPageLayout title="Pokemon" sidebar={<span>filters</span>} sidebarLabel="Filters">
248
+ <span>grid</span>
249
+ </ListPageLayout>
250
+ ),
251
+ });
252
+ });
253
+ const panel = screen.getByTestId("app-shell-page-panel");
254
+ expect(panel.textContent).toContain("Filters");
255
+ expect(panel.textContent).toContain("filters");
256
+ expect(screen.getByTestId("app-shell-sidebar").contains(panel)).toBe(true);
257
+ expect(screen.queryByTestId("list-page-sidebar")).toBeNull();
258
+ });
259
+ });
@@ -0,0 +1,112 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
2
+ import {
3
+ GearIcon,
4
+ HouseIcon,
5
+ LightningIcon,
6
+ SparkleIcon,
7
+ SquaresFourIcon,
8
+ StackIcon,
9
+ } from "@phosphor-icons/react";
10
+ import { useState } from "react";
11
+ import { XStack, YStack } from "tamagui";
12
+ import { Button } from "@multiplatform.one/forms";
13
+ import { useResolvedKnobs } from "@multiplatform.one/theme";
14
+ import { PageBarButton, PageHeader, PageSection, Screen } from "../layouts/page";
15
+ import { Pagination } from "../Pagination";
16
+ import { Text } from "../Text";
17
+ import { AppShell, type AppShellDestination } from "./AppShell";
18
+
19
+ const destinations: AppShellDestination[] = [
20
+ { key: "/", label: "Home", icon: HouseIcon },
21
+ { key: "/pokemon", label: "Pokemon", icon: SparkleIcon },
22
+ { key: "/moves", label: "Moves", icon: LightningIcon },
23
+ { key: "/backoffice", label: "Backoffice", icon: SquaresFourIcon },
24
+ { key: "/settings", label: "Settings", icon: GearIcon, placement: "more" },
25
+ ];
26
+
27
+ function Mark() {
28
+ const { knobProps } = useResolvedKnobs();
29
+ return (
30
+ <YStack
31
+ width="$2"
32
+ height="$2"
33
+ borderRadius="$3"
34
+ backgroundColor="$color4"
35
+ alignItems="center"
36
+ justifyContent="center"
37
+ >
38
+ <StackIcon size={knobProps.controlIcon.width} weight="bold" />
39
+ </YStack>
40
+ );
41
+ }
42
+
43
+ function DemoPage({ path, open }: { path: string; open: (path: string) => void }) {
44
+ const pushed = path.split("/").filter(Boolean).length > 1;
45
+ const name = destinations.find((item) => path.startsWith(item.key) && item.key !== "/");
46
+ const title = pushed ? "Pikachu" : (name?.label ?? "Home");
47
+ return (
48
+ <Screen>
49
+ <PageHeader title={title} subtitle={pushed ? "#025 · Electric" : "1,025 entries"} />
50
+ <PageSection title="Recent">
51
+ {Array.from({ length: 14 }, (_, index) => (
52
+ <XStack key={index} alignItems="center" minHeight="$4">
53
+ <Text flexGrow={1}>Row {index + 1}</Text>
54
+ {pushed ? null : (
55
+ <Button
56
+ size="$3"
57
+ chromeless
58
+ onPress={() => open(`${path === "/" ? "" : path}/pikachu`)}
59
+ >
60
+ Open
61
+ </Button>
62
+ )}
63
+ </XStack>
64
+ ))}
65
+ </PageSection>
66
+ </Screen>
67
+ );
68
+ }
69
+
70
+ function Demo({ initialPath, accessory }: { initialPath: string; accessory?: boolean }) {
71
+ const [path, setPath] = useState(initialPath);
72
+ return (
73
+ <AppShell
74
+ destinations={destinations}
75
+ path={path}
76
+ onNavigate={setPath}
77
+ onBack={setPath}
78
+ title="multiplatform.one"
79
+ logo={<Mark />}
80
+ actions={<PageBarButton aria-label="Theme" icon={GearIcon} edge="end" />}
81
+ accessory={accessory ? <Pagination total={41} defaultPage={1} variant="dots" /> : undefined}
82
+ ownChrome={["/backoffice"]}
83
+ >
84
+ <DemoPage path={path} open={setPath} />
85
+ </AppShell>
86
+ );
87
+ }
88
+
89
+ /**
90
+ * The composed app frame (LC-175). Size class follows the viewport: below
91
+ * `md` the phone frame (nav bar, content, bottom accessory, tab bar), above
92
+ * it the split frame (sidebar of destinations beside the content column).
93
+ */
94
+ const meta: Meta<typeof AppShell> = {
95
+ title: "Components/AppShell",
96
+ component: AppShell,
97
+ parameters: { layout: "fullscreen", status: { type: "beta" } },
98
+ };
99
+
100
+ export default meta;
101
+ type Story = StoryObj<typeof AppShell>;
102
+
103
+ /** A tab root: the mark leads, the large title sits in the page, tabs below. */
104
+ export const TabRoot: Story = { render: () => <Demo initialPath="/pokemon" /> };
105
+
106
+ /** A pushed route: tinted back to the destination, its tab still selected. */
107
+ export const Pushed: Story = { render: () => <Demo initialPath="/pokemon/pikachu" /> };
108
+
109
+ /** A page that hands the shell a bottom accessory: the tab bar floats it above itself. */
110
+ export const WithAccessory: Story = {
111
+ render: () => <Demo initialPath="/pokemon" accessory />,
112
+ };