@multiplatform.one/components 7.77.1 → 7.78.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 (493) 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/DotIndicator/index.native.js.map +1 -1
  22. package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
  23. package/dist/cjs/DropdownMenu/menuSettle.native.js.map +1 -1
  24. package/dist/cjs/ErrorBoundary/index.native.js.map +1 -1
  25. package/dist/cjs/Heading.native.js.map +1 -1
  26. package/dist/cjs/Kbd/index.native.js.map +1 -1
  27. package/dist/cjs/Kbd/keys.native.js.map +1 -1
  28. package/dist/cjs/Lightbox/MediaControl.cjs +2 -6
  29. package/dist/cjs/Lightbox/MediaControl.native.js +2 -8
  30. package/dist/cjs/Lightbox/MediaControl.native.js.map +1 -1
  31. package/dist/cjs/Lightbox/index.gnome.native.js.map +1 -1
  32. package/dist/cjs/Lightbox/index.native.js +1 -1
  33. package/dist/cjs/Lightbox/shared.native.js.map +1 -1
  34. package/dist/cjs/Lightbox/useLightbox.native.js.map +1 -1
  35. package/dist/cjs/Material/index.native.js.map +1 -1
  36. package/dist/cjs/Meter/index.native.js +1 -1
  37. package/dist/cjs/Meter/index.native.js.map +1 -1
  38. package/dist/cjs/Meter/meter.native.js.map +1 -1
  39. package/dist/cjs/OverflowRow/index.native.js +1 -1
  40. package/dist/cjs/OverflowRow/index.native.js.map +1 -1
  41. package/dist/cjs/Pagination.native.js +1 -1
  42. package/dist/cjs/Pagination.native.js.map +1 -1
  43. package/dist/cjs/Popover.native.js +1 -1
  44. package/dist/cjs/Popover.native.js.map +1 -1
  45. package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
  46. package/dist/cjs/Quote/index.native.js.map +1 -1
  47. package/dist/cjs/SchemeToggle/index.native.js +1 -1
  48. package/dist/cjs/SchemeToggle/index.native.js.map +1 -1
  49. package/dist/cjs/ScrollView/revealFocusedField.native.js.map +1 -1
  50. package/dist/cjs/Separator/index.native.js.map +1 -1
  51. package/dist/cjs/Sheet.native.js.map +1 -1
  52. package/dist/cjs/SheetModal/SheetHeader.native.js.map +1 -1
  53. package/dist/cjs/SheetModal/SheetNavigation.native.js.map +1 -1
  54. package/dist/cjs/SheetModal/detents.native.js.map +1 -1
  55. package/dist/cjs/SheetModal/useSheetFrameFocus.native.js.map +1 -1
  56. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  57. package/dist/cjs/SkipLink/index.native.js.map +1 -1
  58. package/dist/cjs/SortableList/SortableHandle.native.js.map +1 -1
  59. package/dist/cjs/SortableList/index.native.js.map +1 -1
  60. package/dist/cjs/SortableList/useSortableRows.native.js.map +1 -1
  61. package/dist/cjs/Tabs/index.native.js +1 -1
  62. package/dist/cjs/Tabs/index.native.js.map +1 -1
  63. package/dist/cjs/Text.native.js.map +1 -1
  64. package/dist/cjs/ThemePresetPicker/index.native.js +2 -2
  65. package/dist/cjs/ThemePresetPicker/index.native.js.map +1 -1
  66. package/dist/cjs/Toast/index.native.js.map +1 -1
  67. package/dist/cjs/Toast/store.native.js.map +1 -1
  68. package/dist/cjs/Tooltip/nativePress.native.js.map +1 -1
  69. package/dist/cjs/Tooltip/tooltipShared.native.js.map +1 -1
  70. package/dist/cjs/TreeSelect/index.native.js +1 -1
  71. package/dist/cjs/TreeSelect/index.native.js.map +1 -1
  72. package/dist/cjs/TreeSelect/treeSelectModel.native.js.map +1 -1
  73. package/dist/cjs/Video/PlayerChrome.native.js.map +1 -1
  74. package/dist/cjs/Video/VideoFrame.native.js.map +1 -1
  75. package/dist/cjs/Video/types.native.js.map +1 -1
  76. package/dist/cjs/Wheel/index.native.js.map +1 -1
  77. package/dist/cjs/Wizard/index.native.js +2 -2
  78. package/dist/cjs/Wizard/index.native.js.map +1 -1
  79. package/dist/cjs/actions/ActionBar.native.js.map +1 -1
  80. package/dist/cjs/actions/DangerSection.native.js.map +1 -1
  81. package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
  82. package/dist/cjs/actions/HeaderActions.native.js +2 -2
  83. package/dist/cjs/actions/HeaderActions.native.js.map +1 -1
  84. package/dist/cjs/actions/StandardAction.native.js +1 -1
  85. package/dist/cjs/actions/StandardAction.native.js.map +1 -1
  86. package/dist/cjs/actions/devWarn.native.js.map +1 -1
  87. package/dist/cjs/actions/index.native.js.map +1 -1
  88. package/dist/cjs/actions/severity.native.js.map +1 -1
  89. package/dist/cjs/appShell/Dock.native.js.map +1 -1
  90. package/dist/cjs/appShell/MpoTabHost.native.js.map +1 -1
  91. package/dist/cjs/appShell/ScopeMenu.native.js.map +1 -1
  92. package/dist/cjs/appShell/SettingsSplit.native.js +1 -1
  93. package/dist/cjs/appShell/SettingsSplit.native.js.map +1 -1
  94. package/dist/cjs/appShell/Springboard.native.js +1 -1
  95. package/dist/cjs/appShell/Springboard.native.js.map +1 -1
  96. package/dist/cjs/appShell/SystemBar.native.js.map +1 -1
  97. package/dist/cjs/appShell/TabBar.native.js +1 -1
  98. package/dist/cjs/appShell/TabBar.native.js.map +1 -1
  99. package/dist/cjs/appShell/TabHost.native.js +1 -0
  100. package/dist/cjs/appShell/TabHost.native.js.map +1 -1
  101. package/dist/cjs/appShell/appTile.native.js +1 -1
  102. package/dist/cjs/appShell/appTile.native.js.map +1 -1
  103. package/dist/cjs/appShell/bottomChrome.native.js.map +1 -1
  104. package/dist/cjs/appShell/index.native.js.map +1 -1
  105. package/dist/cjs/charts/Axis.native.js.map +1 -1
  106. package/dist/cjs/charts/BarChart.native.js.map +1 -1
  107. package/dist/cjs/charts/ChartDataView.native.js +1 -1
  108. package/dist/cjs/charts/ChartDataView.native.js.map +1 -1
  109. package/dist/cjs/charts/ChartSurface.native.js.map +1 -1
  110. package/dist/cjs/charts/LineChart.native.js.map +1 -1
  111. package/dist/cjs/charts/PieChart.native.js.map +1 -1
  112. package/dist/cjs/charts/Sparkline.native.js.map +1 -1
  113. package/dist/cjs/charts/accessibility.native.js.map +1 -1
  114. package/dist/cjs/charts/chartHeight.native.js.map +1 -1
  115. package/dist/cjs/charts/composeChart.native.js.map +1 -1
  116. package/dist/cjs/charts/index.native.js.map +1 -1
  117. package/dist/cjs/charts/math.native.js.map +1 -1
  118. package/dist/cjs/charts/series.native.js.map +1 -1
  119. package/dist/cjs/charts/svg.native.js.map +1 -1
  120. package/dist/cjs/charts/types.native.js.map +1 -1
  121. package/dist/cjs/charts/useChartTheme.native.js.map +1 -1
  122. package/dist/cjs/code/Code/index.native.js.map +1 -1
  123. package/dist/cjs/code/CodeBlock/index.native.js +7 -7
  124. package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
  125. package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
  126. package/dist/cjs/code/Highlighter/houseSyntaxTheme.native.js.map +1 -1
  127. package/dist/cjs/code/Highlighter/index.native.js.map +1 -1
  128. package/dist/cjs/code/Highlighter/namedGroupMatchAll.native.js.map +1 -1
  129. package/dist/cjs/code/Pre/index.native.js.map +1 -1
  130. package/dist/cjs/code/index.native.js +5 -5
  131. package/dist/cjs/code/index.native.js.map +1 -1
  132. package/dist/cjs/componentColors.cjs +1 -1
  133. package/dist/cjs/componentColors.native.js +1 -1
  134. package/dist/cjs/componentColors.native.js.map +1 -1
  135. package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
  136. package/dist/cjs/feedback/NotifyHost.native.js +2 -2
  137. package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
  138. package/dist/cjs/feedback/copy.native.js.map +1 -1
  139. package/dist/cjs/feedback/index.native.js.map +1 -1
  140. package/dist/cjs/feedback/notify.native.js.map +1 -1
  141. package/dist/cjs/feedback/route.native.js.map +1 -1
  142. package/dist/cjs/feedback/store.native.js.map +1 -1
  143. package/dist/cjs/formLayouts/FormLayouts.native.js +1 -1
  144. package/dist/cjs/formLayouts/FormLayouts.native.js.map +1 -1
  145. package/dist/cjs/formLayouts/PreferencePanel.native.js +2 -2
  146. package/dist/cjs/formLayouts/PreferencePanel.native.js.map +1 -1
  147. package/dist/cjs/formLayouts/index.native.js.map +1 -1
  148. package/dist/cjs/hooks/index.native.js +1 -1
  149. package/dist/cjs/hooks/index.native.js.map +1 -1
  150. package/dist/cjs/hooks/useClipboard.native.js.map +1 -1
  151. package/dist/cjs/hooks/useDocumentTitle.native.js.map +1 -1
  152. package/dist/cjs/hooks/useHoldCue.native.js.map +1 -1
  153. package/dist/cjs/icons/CheckRegular.native.js.map +1 -1
  154. package/dist/cjs/icons/MinusRegular.native.js.map +1 -1
  155. package/dist/cjs/icons/index.native.js.map +1 -1
  156. package/dist/cjs/icons/lucide.native.js.map +1 -1
  157. package/dist/cjs/icons/themed.native.js.map +1 -1
  158. package/dist/cjs/images/Image/ImageFrame.native.js +1 -1
  159. package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -1
  160. package/dist/cjs/images/Image/framing.native.js.map +1 -1
  161. package/dist/cjs/images/Image/index.native.js +1 -1
  162. package/dist/cjs/images/Image/mediaRadius.native.js.map +1 -1
  163. package/dist/cjs/images/Image/shared.native.js +1 -1
  164. package/dist/cjs/images/Image/shared.native.js.map +1 -1
  165. package/dist/cjs/images/Image/types.native.js.map +1 -1
  166. package/dist/cjs/images/index.native.js.map +1 -1
  167. package/dist/cjs/index.native.js +36 -36
  168. package/dist/cjs/index.native.js.map +1 -1
  169. package/dist/cjs/knobImmuneExports.native.js.map +1 -1
  170. package/dist/cjs/layouts/AsyncBoundary.native.js +2 -2
  171. package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
  172. package/dist/cjs/layouts/Debug/index.native.js.map +1 -1
  173. package/dist/cjs/layouts/EmptyState.native.js.map +1 -1
  174. package/dist/cjs/layouts/IdentityPlate.native.js.map +1 -1
  175. package/dist/cjs/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  176. package/dist/cjs/layouts/PageTemplates.native.js.map +1 -1
  177. package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
  178. package/dist/cjs/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  179. package/dist/cjs/layouts/StatusDot.native.js.map +1 -1
  180. package/dist/cjs/layouts/StatusGlyphStrip.native.js +1 -1
  181. package/dist/cjs/layouts/StatusGlyphStrip.native.js.map +1 -1
  182. package/dist/cjs/layouts/ViewSwitcher.native.js.map +1 -1
  183. package/dist/cjs/layouts/attachments.native.js +1 -1
  184. package/dist/cjs/layouts/attachments.native.js.map +1 -1
  185. package/dist/cjs/layouts/bottomAccessory.native.js.map +1 -1
  186. package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
  187. package/dist/cjs/layouts/index.native.js +3 -3
  188. package/dist/cjs/layouts/index.native.js.map +1 -1
  189. package/dist/cjs/layouts/page.cjs +0 -4
  190. package/dist/cjs/layouts/page.native.js +2 -6
  191. package/dist/cjs/layouts/page.native.js.map +1 -1
  192. package/dist/cjs/layouts/pageHeadingScope.native.js.map +1 -1
  193. package/dist/cjs/layouts/screenScroll.native.js.map +1 -1
  194. package/dist/cjs/layouts/shellSidebarSlot.native.js.map +1 -1
  195. package/dist/cjs/layouts/sidebar.native.js +1 -1
  196. package/dist/cjs/layouts/sidebar.native.js.map +1 -1
  197. package/dist/cjs/layouts/tags.native.js +2 -2
  198. package/dist/cjs/layouts/tags.native.js.map +1 -1
  199. package/dist/cjs/layouts/timeline.native.js +2 -2
  200. package/dist/cjs/layouts/timeline.native.js.map +1 -1
  201. package/dist/cjs/layouts/toolbar.native.js +1 -1
  202. package/dist/cjs/layouts/toolbar.native.js.map +1 -1
  203. package/dist/cjs/shared/actionScan.native.js.map +1 -1
  204. package/dist/cjs/shared/i18n.native.js.map +1 -1
  205. package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
  206. package/dist/cjs/shared/t.native.js.map +1 -1
  207. package/dist/cjs/shared/textRidesText.native.js.map +1 -1
  208. package/dist/cjs/shared/useReturnFocusOnClose.native.js.map +1 -1
  209. package/dist/cjs/surfaces.native.js +1 -1
  210. package/dist/cjs/surfaces.native.js.map +1 -1
  211. package/dist/cjs/tamagui.native.js +1 -1
  212. package/dist/cjs/tamagui.native.js.map +1 -1
  213. package/dist/cjs/testSetup.native.js.map +1 -1
  214. package/dist/cjs/utils/setTinted.native.js.map +1 -1
  215. package/dist/cjs/utils/unwrapText.native.js.map +1 -1
  216. package/dist/cjs/views/Calendar.native.js +1 -1
  217. package/dist/cjs/views/Calendar.native.js.map +1 -1
  218. package/dist/cjs/views/Dashboard.native.js +2 -2
  219. package/dist/cjs/views/Dashboard.native.js.map +1 -1
  220. package/dist/cjs/views/Gantt.native.js +2 -2
  221. package/dist/cjs/views/Gantt.native.js.map +1 -1
  222. package/dist/cjs/views/GanttDateGrip.native.js.map +1 -1
  223. package/dist/cjs/views/ImageGrid.cjs +9 -12
  224. package/dist/cjs/views/ImageGrid.native.js +11 -18
  225. package/dist/cjs/views/ImageGrid.native.js.map +1 -1
  226. package/dist/cjs/views/Kanban.native.js +1 -1
  227. package/dist/cjs/views/List.native.js.map +1 -1
  228. package/dist/cjs/views/ListGroup.native.js.map +1 -1
  229. package/dist/cjs/views/ListRow.native.js.map +1 -1
  230. package/dist/cjs/views/Matrix.native.js +2 -2
  231. package/dist/cjs/views/Matrix.native.js.map +1 -1
  232. package/dist/cjs/views/ReportBuilder.native.js +2 -2
  233. package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
  234. package/dist/cjs/views/ShortcutCard.native.js.map +1 -1
  235. package/dist/cjs/views/TreeView.native.js.map +1 -1
  236. package/dist/cjs/views/calendarMath.native.js.map +1 -1
  237. package/dist/cjs/views/ganttIntervals.native.js.map +1 -1
  238. package/dist/cjs/views/ganttMath.native.js.map +1 -1
  239. package/dist/cjs/views/index.native.js +1 -1
  240. package/dist/cjs/views/index.native.js.map +1 -1
  241. package/dist/cjs/views/kanbanDnd.native.js.map +1 -1
  242. package/dist/cjs/views/matrixMath.native.js.map +1 -1
  243. package/dist/cjs/views/treeViewDnd.native.js.map +1 -1
  244. package/dist/cjs/views/treeViewLayout.native.js.map +1 -1
  245. package/dist/cjs/views/treeViewMotion.native.js.map +1 -1
  246. package/dist/cjs/views/treeViewReveal.native.js.map +1 -1
  247. package/dist/cjs/views/usePageFlowLoadMore.cjs +83 -0
  248. package/dist/cjs/views/usePageFlowLoadMore.native.js +93 -0
  249. package/dist/cjs/views/usePageFlowLoadMore.native.js.map +1 -0
  250. package/dist/cjs/views/widgetChrome.native.js.map +1 -1
  251. package/dist/esm/Accordion/index.native.js.map +1 -1
  252. package/dist/esm/AnimateHeight/index.native.js.map +1 -1
  253. package/dist/esm/Avatar/getInitials.native.js.map +1 -1
  254. package/dist/esm/Avatar/index.native.js.map +1 -1
  255. package/dist/esm/Badge/index.native.js.map +1 -1
  256. package/dist/esm/Button.native.js.map +1 -1
  257. package/dist/esm/Carousel/index.native.js.map +1 -1
  258. package/dist/esm/Chip/index.native.js.map +1 -1
  259. package/dist/esm/Collapsible.native.js.map +1 -1
  260. package/dist/esm/ContextMenu/index.native.js.map +1 -1
  261. package/dist/esm/CopyField/CopyMenuButton.native.js.map +1 -1
  262. package/dist/esm/CopyField/index.native.js.map +1 -1
  263. package/dist/esm/Dialog.native.js.map +1 -1
  264. package/dist/esm/DotIndicator/index.native.js.map +1 -1
  265. package/dist/esm/DropdownMenu/index.native.js.map +1 -1
  266. package/dist/esm/DropdownMenu/menuSettle.native.js.map +1 -1
  267. package/dist/esm/ErrorBoundary/index.native.js.map +1 -1
  268. package/dist/esm/Heading.native.js.map +1 -1
  269. package/dist/esm/Kbd/index.native.js.map +1 -1
  270. package/dist/esm/Kbd/keys.native.js.map +1 -1
  271. package/dist/esm/Lightbox/MediaControl.mjs +3 -7
  272. package/dist/esm/Lightbox/MediaControl.mjs.map +1 -1
  273. package/dist/esm/Lightbox/MediaControl.native.js +3 -9
  274. package/dist/esm/Lightbox/MediaControl.native.js.map +1 -1
  275. package/dist/esm/Lightbox/index.gnome.native.js.map +1 -1
  276. package/dist/esm/Lightbox/shared.native.js.map +1 -1
  277. package/dist/esm/Lightbox/useLightbox.native.js.map +1 -1
  278. package/dist/esm/Material/index.native.js.map +1 -1
  279. package/dist/esm/Meter/index.native.js.map +1 -1
  280. package/dist/esm/Meter/meter.native.js.map +1 -1
  281. package/dist/esm/OverflowRow/index.native.js.map +1 -1
  282. package/dist/esm/Pagination.native.js.map +1 -1
  283. package/dist/esm/Popover.native.js.map +1 -1
  284. package/dist/esm/ProgressSteps/index.native.js.map +1 -1
  285. package/dist/esm/Quote/index.native.js.map +1 -1
  286. package/dist/esm/SchemeToggle/index.native.js.map +1 -1
  287. package/dist/esm/ScrollView/revealFocusedField.native.js.map +1 -1
  288. package/dist/esm/Separator/index.native.js.map +1 -1
  289. package/dist/esm/Sheet.native.js.map +1 -1
  290. package/dist/esm/SheetModal/SheetHeader.native.js.map +1 -1
  291. package/dist/esm/SheetModal/SheetNavigation.native.js.map +1 -1
  292. package/dist/esm/SheetModal/detents.native.js.map +1 -1
  293. package/dist/esm/SheetModal/useSheetFrameFocus.native.js.map +1 -1
  294. package/dist/esm/Skeleton/index.native.js.map +1 -1
  295. package/dist/esm/SkipLink/index.native.js.map +1 -1
  296. package/dist/esm/SortableList/SortableHandle.native.js.map +1 -1
  297. package/dist/esm/SortableList/index.native.js.map +1 -1
  298. package/dist/esm/SortableList/useSortableRows.native.js.map +1 -1
  299. package/dist/esm/Tabs/index.native.js.map +1 -1
  300. package/dist/esm/Text.native.js.map +1 -1
  301. package/dist/esm/ThemePresetPicker/index.native.js.map +1 -1
  302. package/dist/esm/Toast/index.native.js.map +1 -1
  303. package/dist/esm/Toast/store.native.js.map +1 -1
  304. package/dist/esm/Tooltip/nativePress.native.js.map +1 -1
  305. package/dist/esm/Tooltip/tooltipShared.native.js.map +1 -1
  306. package/dist/esm/TreeSelect/index.native.js.map +1 -1
  307. package/dist/esm/TreeSelect/treeSelectModel.native.js.map +1 -1
  308. package/dist/esm/Video/PlayerChrome.native.js.map +1 -1
  309. package/dist/esm/Video/VideoFrame.native.js.map +1 -1
  310. package/dist/esm/Video/types.native.js.map +1 -1
  311. package/dist/esm/Wheel/index.native.js.map +1 -1
  312. package/dist/esm/Wizard/index.native.js.map +1 -1
  313. package/dist/esm/actions/ActionBar.native.js.map +1 -1
  314. package/dist/esm/actions/DangerSection.native.js.map +1 -1
  315. package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
  316. package/dist/esm/actions/HeaderActions.native.js.map +1 -1
  317. package/dist/esm/actions/StandardAction.native.js.map +1 -1
  318. package/dist/esm/actions/devWarn.native.js.map +1 -1
  319. package/dist/esm/actions/index.native.js.map +1 -1
  320. package/dist/esm/actions/severity.native.js.map +1 -1
  321. package/dist/esm/appShell/Dock.native.js.map +1 -1
  322. package/dist/esm/appShell/MpoTabHost.native.js.map +1 -1
  323. package/dist/esm/appShell/ScopeMenu.native.js.map +1 -1
  324. package/dist/esm/appShell/SettingsSplit.native.js.map +1 -1
  325. package/dist/esm/appShell/Springboard.native.js.map +1 -1
  326. package/dist/esm/appShell/SystemBar.native.js.map +1 -1
  327. package/dist/esm/appShell/TabBar.native.js.map +1 -1
  328. package/dist/esm/appShell/TabHost.native.js +1 -0
  329. package/dist/esm/appShell/TabHost.native.js.map +1 -1
  330. package/dist/esm/appShell/appTile.native.js.map +1 -1
  331. package/dist/esm/appShell/bottomChrome.native.js.map +1 -1
  332. package/dist/esm/appShell/index.native.js.map +1 -1
  333. package/dist/esm/charts/Axis.native.js.map +1 -1
  334. package/dist/esm/charts/BarChart.native.js.map +1 -1
  335. package/dist/esm/charts/ChartDataView.native.js.map +1 -1
  336. package/dist/esm/charts/ChartSurface.native.js.map +1 -1
  337. package/dist/esm/charts/LineChart.native.js.map +1 -1
  338. package/dist/esm/charts/PieChart.native.js.map +1 -1
  339. package/dist/esm/charts/Sparkline.native.js.map +1 -1
  340. package/dist/esm/charts/accessibility.native.js.map +1 -1
  341. package/dist/esm/charts/chartHeight.native.js.map +1 -1
  342. package/dist/esm/charts/composeChart.native.js.map +1 -1
  343. package/dist/esm/charts/index.native.js.map +1 -1
  344. package/dist/esm/charts/math.native.js.map +1 -1
  345. package/dist/esm/charts/series.native.js.map +1 -1
  346. package/dist/esm/charts/svg.native.js.map +1 -1
  347. package/dist/esm/charts/types.native.js.map +1 -1
  348. package/dist/esm/charts/useChartTheme.native.js.map +1 -1
  349. package/dist/esm/code/Code/index.native.js.map +1 -1
  350. package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
  351. package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
  352. package/dist/esm/code/Highlighter/houseSyntaxTheme.native.js.map +1 -1
  353. package/dist/esm/code/Highlighter/index.native.js.map +1 -1
  354. package/dist/esm/code/Highlighter/namedGroupMatchAll.native.js.map +1 -1
  355. package/dist/esm/code/Pre/index.native.js.map +1 -1
  356. package/dist/esm/code/index.native.js.map +1 -1
  357. package/dist/esm/componentColors.mjs +1 -1
  358. package/dist/esm/componentColors.native.js +1 -1
  359. package/dist/esm/componentColors.native.js.map +1 -1
  360. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  361. package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
  362. package/dist/esm/feedback/copy.native.js.map +1 -1
  363. package/dist/esm/feedback/index.native.js.map +1 -1
  364. package/dist/esm/feedback/notify.native.js.map +1 -1
  365. package/dist/esm/feedback/route.native.js.map +1 -1
  366. package/dist/esm/feedback/store.native.js.map +1 -1
  367. package/dist/esm/formLayouts/FormLayouts.native.js.map +1 -1
  368. package/dist/esm/formLayouts/PreferencePanel.native.js.map +1 -1
  369. package/dist/esm/formLayouts/index.native.js.map +1 -1
  370. package/dist/esm/hooks/index.native.js.map +1 -1
  371. package/dist/esm/hooks/useClipboard.native.js.map +1 -1
  372. package/dist/esm/hooks/useDocumentTitle.native.js.map +1 -1
  373. package/dist/esm/hooks/useHoldCue.native.js.map +1 -1
  374. package/dist/esm/icons/CheckRegular.native.js.map +1 -1
  375. package/dist/esm/icons/MinusRegular.native.js.map +1 -1
  376. package/dist/esm/icons/index.native.js.map +1 -1
  377. package/dist/esm/icons/lucide.native.js.map +1 -1
  378. package/dist/esm/icons/themed.native.js.map +1 -1
  379. package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
  380. package/dist/esm/images/Image/framing.native.js.map +1 -1
  381. package/dist/esm/images/Image/mediaRadius.native.js.map +1 -1
  382. package/dist/esm/images/Image/shared.native.js.map +1 -1
  383. package/dist/esm/images/Image/types.native.js.map +1 -1
  384. package/dist/esm/images/index.native.js.map +1 -1
  385. package/dist/esm/index.native.js.map +1 -1
  386. package/dist/esm/knobImmuneExports.native.js.map +1 -1
  387. package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
  388. package/dist/esm/layouts/Debug/index.native.js.map +1 -1
  389. package/dist/esm/layouts/EmptyState.native.js.map +1 -1
  390. package/dist/esm/layouts/IdentityPlate.native.js.map +1 -1
  391. package/dist/esm/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  392. package/dist/esm/layouts/PageTemplates.native.js.map +1 -1
  393. package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
  394. package/dist/esm/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  395. package/dist/esm/layouts/StatusDot.native.js.map +1 -1
  396. package/dist/esm/layouts/StatusGlyphStrip.native.js.map +1 -1
  397. package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
  398. package/dist/esm/layouts/attachments.native.js.map +1 -1
  399. package/dist/esm/layouts/bottomAccessory.native.js.map +1 -1
  400. package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
  401. package/dist/esm/layouts/index.native.js.map +1 -1
  402. package/dist/esm/layouts/page.mjs +0 -4
  403. package/dist/esm/layouts/page.mjs.map +1 -1
  404. package/dist/esm/layouts/page.native.js +0 -4
  405. package/dist/esm/layouts/page.native.js.map +1 -1
  406. package/dist/esm/layouts/pageHeadingScope.native.js.map +1 -1
  407. package/dist/esm/layouts/screenScroll.native.js.map +1 -1
  408. package/dist/esm/layouts/shellSidebarSlot.native.js.map +1 -1
  409. package/dist/esm/layouts/sidebar.native.js.map +1 -1
  410. package/dist/esm/layouts/tags.native.js.map +1 -1
  411. package/dist/esm/layouts/timeline.native.js.map +1 -1
  412. package/dist/esm/layouts/toolbar.native.js.map +1 -1
  413. package/dist/esm/shared/actionScan.native.js.map +1 -1
  414. package/dist/esm/shared/i18n.native.js.map +1 -1
  415. package/dist/esm/shared/restoreRetries.native.js.map +1 -1
  416. package/dist/esm/shared/t.native.js.map +1 -1
  417. package/dist/esm/shared/textRidesText.native.js.map +1 -1
  418. package/dist/esm/shared/useReturnFocusOnClose.native.js.map +1 -1
  419. package/dist/esm/surfaces.native.js.map +1 -1
  420. package/dist/esm/tamagui.native.js.map +1 -1
  421. package/dist/esm/testSetup.native.js.map +1 -1
  422. package/dist/esm/utils/setTinted.native.js.map +1 -1
  423. package/dist/esm/utils/unwrapText.native.js.map +1 -1
  424. package/dist/esm/views/Calendar.native.js.map +1 -1
  425. package/dist/esm/views/Dashboard.native.js.map +1 -1
  426. package/dist/esm/views/Gantt.native.js.map +1 -1
  427. package/dist/esm/views/GanttDateGrip.native.js.map +1 -1
  428. package/dist/esm/views/ImageGrid.mjs +10 -13
  429. package/dist/esm/views/ImageGrid.mjs.map +1 -1
  430. package/dist/esm/views/ImageGrid.native.js +10 -17
  431. package/dist/esm/views/ImageGrid.native.js.map +1 -1
  432. package/dist/esm/views/List.native.js.map +1 -1
  433. package/dist/esm/views/ListGroup.native.js.map +1 -1
  434. package/dist/esm/views/ListRow.native.js.map +1 -1
  435. package/dist/esm/views/Matrix.native.js.map +1 -1
  436. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  437. package/dist/esm/views/ShortcutCard.native.js.map +1 -1
  438. package/dist/esm/views/TreeView.native.js.map +1 -1
  439. package/dist/esm/views/calendarMath.native.js.map +1 -1
  440. package/dist/esm/views/ganttIntervals.native.js.map +1 -1
  441. package/dist/esm/views/ganttMath.native.js.map +1 -1
  442. package/dist/esm/views/index.native.js.map +1 -1
  443. package/dist/esm/views/kanbanDnd.native.js.map +1 -1
  444. package/dist/esm/views/matrixMath.native.js.map +1 -1
  445. package/dist/esm/views/treeViewDnd.native.js.map +1 -1
  446. package/dist/esm/views/treeViewLayout.native.js.map +1 -1
  447. package/dist/esm/views/treeViewMotion.native.js.map +1 -1
  448. package/dist/esm/views/treeViewReveal.native.js.map +1 -1
  449. package/dist/esm/views/usePageFlowLoadMore.mjs +57 -0
  450. package/dist/esm/views/usePageFlowLoadMore.mjs.map +1 -0
  451. package/dist/esm/views/usePageFlowLoadMore.native.js +64 -0
  452. package/dist/esm/views/usePageFlowLoadMore.native.js.map +1 -0
  453. package/dist/esm/views/widgetChrome.native.js.map +1 -1
  454. package/dist/jsx/Lightbox/MediaControl.mjs +3 -7
  455. package/dist/jsx/Lightbox/MediaControl.mjs.map +1 -1
  456. package/dist/jsx/Lightbox/MediaControl.native.js +2 -8
  457. package/dist/jsx/Lightbox/MediaControl.native.js.map +1 -1
  458. package/dist/jsx/appShell/TabHost.native.js +1 -0
  459. package/dist/jsx/appShell/TabHost.native.js.map +1 -1
  460. package/dist/jsx/componentColors.mjs +1 -1
  461. package/dist/jsx/componentColors.native.js +1 -1
  462. package/dist/jsx/layouts/page.mjs +0 -4
  463. package/dist/jsx/layouts/page.mjs.map +1 -1
  464. package/dist/jsx/layouts/page.native.js +0 -4
  465. package/dist/jsx/layouts/page.native.js.map +1 -1
  466. package/dist/jsx/views/ImageGrid.mjs +10 -13
  467. package/dist/jsx/views/ImageGrid.mjs.map +1 -1
  468. package/dist/jsx/views/ImageGrid.native.js +9 -16
  469. package/dist/jsx/views/ImageGrid.native.js.map +1 -1
  470. package/dist/jsx/views/usePageFlowLoadMore.mjs +57 -0
  471. package/dist/jsx/views/usePageFlowLoadMore.mjs.map +1 -0
  472. package/dist/jsx/views/usePageFlowLoadMore.native.js +93 -0
  473. package/dist/jsx/views/usePageFlowLoadMore.native.js.map +1 -0
  474. package/package.json +9 -9
  475. package/src/Lightbox/Lightbox.spec.tsx +1 -1
  476. package/src/Lightbox/MediaControl.tsx +6 -14
  477. package/src/appShell/TabHost.native.spec.tsx +21 -1
  478. package/src/appShell/TabHost.native.tsx +8 -0
  479. package/src/componentColors.ts +1 -1
  480. package/src/layouts/page.tsx +1 -8
  481. package/src/layouts/pageChrome.phone.spec.tsx +14 -0
  482. package/src/views/ImageGrid.native-press.spec.tsx +172 -0
  483. package/src/views/ImageGrid.tsx +11 -17
  484. package/src/views/usePageFlowLoadMore.ts +79 -0
  485. package/types/Lightbox/MediaControl.d.ts +2 -4
  486. package/types/Lightbox/MediaControl.d.ts.map +1 -1
  487. package/types/appShell/TabHost.native.d.ts +1 -0
  488. package/types/appShell/TabHost.native.d.ts.map +1 -1
  489. package/types/componentColors.d.ts +1 -1
  490. package/types/layouts/page.d.ts.map +1 -1
  491. package/types/views/ImageGrid.d.ts.map +1 -1
  492. package/types/views/usePageFlowLoadMore.d.ts +26 -0
  493. package/types/views/usePageFlowLoadMore.d.ts.map +1 -0
@@ -0,0 +1,57 @@
1
+ import { useEffect, useRef } from "react";
2
+ import { isWeb, useWindowDimensions } from "tamagui";
3
+ const PAGE_FLOW_POLL_MS = 250;
4
+ function usePageFlowLoadMore({
5
+ sentinelRef,
6
+ enabled,
7
+ onLoadMore,
8
+ rearmKey
9
+ }) {
10
+ const onLoadMoreRef = useRef(onLoadMore);
11
+ onLoadMoreRef.current = onLoadMore;
12
+ const {
13
+ width,
14
+ height
15
+ } = useWindowDimensions();
16
+ const windowRef = useRef({
17
+ width,
18
+ height
19
+ });
20
+ windowRef.current = {
21
+ width,
22
+ height
23
+ };
24
+ const live = enabled && Boolean(onLoadMore);
25
+ useEffect(() => {
26
+ if (!live) return;
27
+ if (isWeb) {
28
+ if (typeof IntersectionObserver === "undefined") return;
29
+ const el = sentinelRef.current;
30
+ if (!el) return;
31
+ const observer = new IntersectionObserver(entries => {
32
+ if (entries.some(entry => entry.isIntersecting)) onLoadMoreRef.current?.();
33
+ });
34
+ observer.observe(el);
35
+ return () => observer.disconnect();
36
+ }
37
+ let active = true;
38
+ let inside = false;
39
+ const timer = setInterval(() => {
40
+ const node = sentinelRef.current;
41
+ if (typeof node?.measureInWindow !== "function") return;
42
+ node.measureInWindow((x, y, w, h) => {
43
+ if (!active || w <= 0) return;
44
+ const win = windowRef.current;
45
+ const now = y <= win.height && y + h >= 0 && x < win.width && x + w > 0;
46
+ if (now && !inside) onLoadMoreRef.current?.();
47
+ inside = now;
48
+ });
49
+ }, PAGE_FLOW_POLL_MS);
50
+ return () => {
51
+ active = false;
52
+ clearInterval(timer);
53
+ };
54
+ }, [live, rearmKey, sentinelRef]);
55
+ }
56
+ export { PAGE_FLOW_POLL_MS, usePageFlowLoadMore };
57
+ //# sourceMappingURL=usePageFlowLoadMore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","isWeb","useWindowDimensions","PAGE_FLOW_POLL_MS","usePageFlowLoadMore","sentinelRef","enabled","onLoadMore","rearmKey","onLoadMoreRef","current","width","height","windowRef","live","Boolean","IntersectionObserver","el","observer","entries","some","entry","isIntersecting","observe","disconnect","active","inside","timer","setInterval","node","measureInWindow","x","y","w","h","win","now","clearInterval"],"sources":["../../../src/views/usePageFlowLoadMore.ts"],"sourcesContent":[null],"mappings":"AAAA,SAAyBA,SAAA,EAAWC,MAAA,QAAc;AAClD,SAASC,KAAA,EAAOC,mBAAA,QAA2B;AAGpC,MAAMC,iBAAA,GAAoB;AA8B1B,SAASC,oBAAoB;EAClCC,WAAA;EACAC,OAAA;EACAC,UAAA;EACAC;AACF,GAAkC;EAChC,MAAMC,aAAA,GAAgBT,MAAA,CAAOO,UAAU;EACvCE,aAAA,CAAcC,OAAA,GAAUH,UAAA;EACxB,MAAM;IAAEI,KAAA;IAAOC;EAAO,IAAIV,mBAAA,CAAoB;EAC9C,MAAMW,SAAA,GAAYb,MAAA,CAAO;IAAEW,KAAA;IAAOC;EAAO,CAAC;EAC1CC,SAAA,CAAUH,OAAA,GAAU;IAAEC,KAAA;IAAOC;EAAO;EACpC,MAAME,IAAA,GAAOR,OAAA,IAAWS,OAAA,CAAQR,UAAU;EAE1CR,SAAA,CAAU,MAAM;IACd,IAAI,CAACe,IAAA,EAAM;IACX,IAAIb,KAAA,EAAO;MACT,IAAI,OAAOe,oBAAA,KAAyB,aAAa;MACjD,MAAMC,EAAA,GAAKZ,WAAA,CAAYK,OAAA;MACvB,IAAI,CAACO,EAAA,EAAI;MACT,MAAMC,QAAA,GAAW,IAAIF,oBAAA,CAAsBG,OAAA,IAAY;QACrD,IAAIA,OAAA,CAAQC,IAAA,CAAMC,KAAA,IAAUA,KAAA,CAAMC,cAAc,GAAGb,aAAA,CAAcC,OAAA,GAAU;MAC7E,CAAC;MACDQ,QAAA,CAASK,OAAA,CAAQN,EAAE;MACnB,OAAO,MAAMC,QAAA,CAASM,UAAA,CAAW;IACnC;IACA,IAAIC,MAAA,GAAS;IACb,IAAIC,MAAA,GAAS;IACb,MAAMC,KAAA,GAAQC,WAAA,CAAY,MAAM;MAC9B,MAAMC,IAAA,GAAOxB,WAAA,CAAYK,OAAA;MACzB,IAAI,OAAOmB,IAAA,EAAMC,eAAA,KAAoB,YAAY;MACjDD,IAAA,CAAKC,eAAA,CAAgB,CAACC,CAAA,EAAGC,CAAA,EAAGC,CAAA,EAAGC,CAAA,KAAM;QAEnC,IAAI,CAACT,MAAA,IAAUQ,CAAA,IAAK,GAAG;QACvB,MAAME,GAAA,GAAMtB,SAAA,CAAUH,OAAA;QACtB,MAAM0B,GAAA,GAAMJ,CAAA,IAAKG,GAAA,CAAIvB,MAAA,IAAUoB,CAAA,GAAIE,CAAA,IAAK,KAAKH,CAAA,GAAII,GAAA,CAAIxB,KAAA,IAASoB,CAAA,GAAIE,CAAA,GAAI;QACtE,IAAIG,GAAA,IAAO,CAACV,MAAA,EAAQjB,aAAA,CAAcC,OAAA,GAAU;QAC5CgB,MAAA,GAASU,GAAA;MACX,CAAC;IACH,GAAGjC,iBAAiB;IACpB,OAAO,MAAM;MACXsB,MAAA,GAAS;MACTY,aAAA,CAAcV,KAAK;IACrB;EACF,GAAG,CAACb,IAAA,EAAMN,QAAA,EAAUH,WAAW,CAAC;AAClC","ignoreList":[]}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
23
+ value: true
24
+ }), mod);
25
+ var usePageFlowLoadMore_exports = {};
26
+ __export(usePageFlowLoadMore_exports, {
27
+ PAGE_FLOW_POLL_MS: () => PAGE_FLOW_POLL_MS,
28
+ usePageFlowLoadMore: () => usePageFlowLoadMore
29
+ });
30
+ module.exports = __toCommonJS(usePageFlowLoadMore_exports);
31
+ var import_react = require("react");
32
+ var import_tamagui = require("tamagui");
33
+ var PAGE_FLOW_POLL_MS = 250;
34
+ function usePageFlowLoadMore(param) {
35
+ var {
36
+ sentinelRef,
37
+ enabled,
38
+ onLoadMore,
39
+ rearmKey
40
+ } = param;
41
+ var onLoadMoreRef = (0, import_react.useRef)(onLoadMore);
42
+ onLoadMoreRef.current = onLoadMore;
43
+ var {
44
+ width,
45
+ height
46
+ } = (0, import_tamagui.useWindowDimensions)();
47
+ var windowRef = (0, import_react.useRef)({
48
+ width,
49
+ height
50
+ });
51
+ windowRef.current = {
52
+ width,
53
+ height
54
+ };
55
+ var live = enabled && Boolean(onLoadMore);
56
+ (0, import_react.useEffect)(function () {
57
+ if (!live) return;
58
+ if (import_tamagui.isWeb) {
59
+ if (typeof IntersectionObserver === "undefined") return;
60
+ var el = sentinelRef.current;
61
+ if (!el) return;
62
+ var observer = new IntersectionObserver(function (entries) {
63
+ var _onLoadMoreRef_current;
64
+ if (entries.some(function (entry) {
65
+ return entry.isIntersecting;
66
+ })) (_onLoadMoreRef_current = onLoadMoreRef.current) === null || _onLoadMoreRef_current === void 0 ? void 0 : _onLoadMoreRef_current.call(onLoadMoreRef);
67
+ });
68
+ observer.observe(el);
69
+ return function () {
70
+ return observer.disconnect();
71
+ };
72
+ }
73
+ var active = true;
74
+ var inside = false;
75
+ var timer = setInterval(function () {
76
+ var node = sentinelRef.current;
77
+ if (typeof (node === null || node === void 0 ? void 0 : node.measureInWindow) !== "function") return;
78
+ node.measureInWindow(function (x, y, w, h) {
79
+ var _onLoadMoreRef_current;
80
+ if (!active || w <= 0) return;
81
+ var win = windowRef.current;
82
+ var now = y <= win.height && y + h >= 0 && x < win.width && x + w > 0;
83
+ if (now && !inside) (_onLoadMoreRef_current = onLoadMoreRef.current) === null || _onLoadMoreRef_current === void 0 ? void 0 : _onLoadMoreRef_current.call(onLoadMoreRef);
84
+ inside = now;
85
+ });
86
+ }, PAGE_FLOW_POLL_MS);
87
+ return function () {
88
+ active = false;
89
+ clearInterval(timer);
90
+ };
91
+ }, [live, rearmKey, sentinelRef]);
92
+ }
93
+ //# sourceMappingURL=usePageFlowLoadMore.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","usePageFlowLoadMore_exports","PAGE_FLOW_POLL_MS","usePageFlowLoadMore","module","exports","import_react","require","import_tamagui","param","sentinelRef","enabled","onLoadMore","rearmKey","onLoadMoreRef","useRef","current","width","height","useWindowDimensions","windowRef","live","Boolean","useEffect","isWeb","IntersectionObserver","el"],"sources":["../../../src/views/usePageFlowLoadMore.ts"],"sourcesContent":[null],"mappings":"AAAA,YAAyB;;AACzB,IAAAA,SAAS,GAAOC,MAAA,CAAAC,cAAA;AAGT,IAAAC,gBAAM,GAAAF,MAAoB,CAAAG,wBAAA;AA8B1B,IAAAC,iBAAS,GAAAJ,MAAoB,CAAAK,mBAAA;AAAA,IAClCC,YAAA,GAAAN,MAAA,CAAAO,SAAA,CAAAC,cAAA;AAAA,IACAC,QAAA,GAAAA,CAAAC,MAAA,EAAAC,GAAA;EACA,SAAAC,IAAA,IAAAD,GAAA,EACAZ,SAAA,CAAAW,MAAA,EAAAE,IAAA;IAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AACF;AACE,IAAAC,WAAM,GAAAA,CAAAC,EAAA,EAAAC,IAAgB,EAAAC,MAAO,EAAAC,IAAU;EACvC,IAAAF,IAAA,WAAcA,IAAA,KAAU,mBAAAA,IAAA;IACxB,KAAM,IAAEG,GAAA,IAAOhB,iBAAW,CAAAa,IAAA,GAC1B,IAAM,CAAAX,YAAY,CAAAe,IAAO,CAAEL,EAAA,EAAAI,GAAO,KAAAA,GAAQ,KAAAF,MAAA,EAC1CnB,SAAU,CAAAiB,EAAA,EAAUI,GAAE;MAAAP,GAAO,EAAAA,CAAA,KAAOI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EACpC;EAEA,OAAAE,EAAA;AACE;AACA,IAAAM,YAAW,GAAAC,GAAA,IAAAR,WAAA,CAAAhB,SAAA;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AACT,IAAAE,2BAAW;AACXhB,QAAA,CAAAgB,2BAAuB;EACvBC,iBAAS,EAAAA,CAAA,KAAAA,iBAAA;EACTC,mBAAM,EAAWA,CAAA,KAAIA;AACnB;AAA2EC,MAC7E,CAACC,OAAA,GAAAP,YAAA,CAAAG,2BAAA;AACD,IAAAK,YAAS,GAAAC,OAAU;AACnB,IAAAC,cAAO,GAAMD,OAAS,WAAW;AAAA,IACnCL,iBAAA;AACA,SAAIC,mBAASA,CAAAM,KAAA;EACb;IAAIC,WAAS;IAAAC,OAAA;IAAAC,UAAA;IAAAC;EAAA,IAAAJ,KAAA;EACb,IAAAK,aAAc,OAAAR,YAAkB,CAAAS,MAAA,EAAAH,UAAA;EAC9BE,aAAM,CAAAE,OAAO,GAAAJ,UAAY;EACzB;IAAAK,KAAI;IAAAC;EAAO,CAAM,OAAAV,cAAoB,CAAAW,mBAAY;EACjD,IAAAC,SAAK,OAAAd,YAAuB,CAAAS,MAAG,EAAM;IAEnCE,KAAA;IACAC;EACA;EACAE,SAAA,CAAIJ,OAAO,GAAC;IACZC,KAAA;IAASC;EACV;EAEH,IAAAG,IAAA,GAAOV,OAAM,IAAAW,OAAA,CAAAV,UAAA;EACX,IAAAN,YAAS,CAAAiB,SAAA;IACT,KAAAF,IAAA;IACF,IAAAb,cAAA,CAAAgB,KAAA;MACE,WAAMC,oBAAsB;MAClC,IAAAC,EAAA,GAAAhB,WAAA,CAAAM,OAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/components",
3
- "version": "7.77.1",
3
+ "version": "7.78.0",
4
4
  "description": "multiplatform.one ui components",
5
5
  "keywords": [
6
6
  "components",
@@ -58,11 +58,11 @@
58
58
  },
59
59
  "dependencies": {
60
60
  "@floating-ui/react": "^0.27.20",
61
- "@multiplatform.one/forms": "^7.77.1",
62
- "@multiplatform.one/i18n": "^7.77.1",
63
- "@multiplatform.one/platform": "^7.77.1",
64
- "@multiplatform.one/router": "^7.77.1",
65
- "@multiplatform.one/theme": "^7.77.1",
61
+ "@multiplatform.one/forms": "^7.78.0",
62
+ "@multiplatform.one/i18n": "^7.78.0",
63
+ "@multiplatform.one/platform": "^7.78.0",
64
+ "@multiplatform.one/router": "^7.78.0",
65
+ "@multiplatform.one/theme": "^7.78.0",
66
66
  "@phosphor-icons/react": "^2.1.10",
67
67
  "@shopify/flash-list": "^2.3.1",
68
68
  "@tamagui/colors": "2.7.6",
@@ -89,9 +89,9 @@
89
89
  "tamagui": "2.7.6"
90
90
  },
91
91
  "devDependencies": {
92
- "@multiplatform.one/config": "7.77.1",
93
- "@multiplatform.one/storybook": "7.77.1",
94
- "@multiplatform.one/test-utils": "7.77.1",
92
+ "@multiplatform.one/config": "7.78.0",
93
+ "@multiplatform.one/storybook": "7.78.0",
94
+ "@multiplatform.one/test-utils": "7.78.0",
95
95
  "@tamagui/build": "2.7.6",
96
96
  "@testing-library/jest-dom": "^7.0.1",
97
97
  "@testing-library/react": "^16.3.3",
@@ -109,7 +109,7 @@ describe("Lightbox (web)", () => {
109
109
  expect(dialog()).toBeNull();
110
110
  });
111
111
 
112
- it("floats every control on a material plate over the photo (LC-176)", () => {
112
+ it("floats every control on a flat plate over the photo (LC-176)", () => {
113
113
  renderWithProviders(<Harness />);
114
114
  for (const name of ["Close", "Previous", "Next"]) {
115
115
  const control = dialog()?.querySelector(`[aria-label="${name}"]`);
@@ -1,9 +1,8 @@
1
1
  import { useResolvedKnobs } from "@multiplatform.one/theme";
2
2
  import type { ComponentProps } from "react";
3
- import { useTheme } from "tamagui";
3
+ import { YStack } from "tamagui";
4
4
  import { Button } from "../Button";
5
5
  import { componentColors } from "../componentColors";
6
- import { Material, materialOpacity, translucent } from "../Material";
7
6
 
8
7
  type MediaControlProps = Pick<
9
8
  ComponentProps<typeof Button>,
@@ -12,21 +11,14 @@ type MediaControlProps = Pick<
12
11
 
13
12
  /**
14
13
  * An icon-only control floating over a photo (LC-176 ICON-BUTTON, over-media
15
- * case): a bare glyph on a round plate of the MPO material, so it stays
16
- * legible on any frame. The blur comes from Material, the one sanctioned
17
- * backdrop blur (LC-206). Swaps for the shared IconButton's over-media
18
- * variant once FZ-8020 lands.
14
+ * case): a bare glyph on a flat round plate, so it stays legible on any frame.
15
+ * The plate is a fill and nothing else; it does not pretend to be glass.
19
16
  */
20
17
  export function MediaControl(props: MediaControlProps) {
21
18
  const { knobProps } = useResolvedKnobs({ component: "Lightbox" });
22
- const theme = useTheme() as unknown as Record<string, { val?: unknown } | undefined>;
23
- const fillToken = componentColors.mediaPlate.fill;
24
- const fill = theme[fillToken.slice(1)]?.val;
25
19
  return (
26
- <Material
27
- backgroundColor={
28
- translucent(typeof fill === "string" ? fill : undefined, materialOpacity()) ?? fillToken
29
- }
20
+ <YStack
21
+ backgroundColor={componentColors.mediaPlate.fill}
30
22
  borderRadius={1000}
31
23
  overflow="hidden"
32
24
  flexShrink={0}
@@ -39,6 +31,6 @@ export function MediaControl(props: MediaControlProps) {
39
31
  color={componentColors.mediaPlate.glyph}
40
32
  {...props}
41
33
  />
42
- </Material>
34
+ </YStack>
43
35
  );
44
36
  }
@@ -46,10 +46,18 @@ const fakeTabs: NativeTabs = {
46
46
  />
47
47
  </div>
48
48
  ),
49
- Screen: ({ children, tabKey, isFocused, icon, title }) => (
49
+ Screen: ({
50
+ children,
51
+ tabKey,
52
+ isFocused,
53
+ icon,
54
+ title,
55
+ overrideScrollViewContentInsetAdjustmentBehavior,
56
+ }) => (
50
57
  <section
51
58
  data-testid={`native-screen-${tabKey}`}
52
59
  data-focused={String(Boolean(isFocused))}
60
+ data-inset-adjust={String(overrideScrollViewContentInsetAdjustmentBehavior)}
53
61
  data-symbol={icon?.ios.name}
54
62
  aria-label={title}
55
63
  >
@@ -164,6 +172,18 @@ describe("NativeTabHost", () => {
164
172
  );
165
173
  expect(screen.getByTestId("inset").textContent).toBe("0");
166
174
  });
175
+
176
+ it("clears the bar once: the published inset, never the native scroll-inset adjustment too (FZ-8640)", () => {
177
+ renderNative("/pokemon");
178
+ expect(Number(screen.getByTestId("inset").textContent)).toBeGreaterThanOrEqual(
179
+ nativeTabBarHeight,
180
+ );
181
+ for (const item of items) {
182
+ expect(
183
+ screen.getByTestId(`native-screen-${item.key}`).getAttribute("data-inset-adjust"),
184
+ ).toBe("false");
185
+ }
186
+ });
167
187
  });
168
188
 
169
189
  describe("TabHost fallback", () => {
@@ -13,6 +13,12 @@
13
13
  * without RNSTabsHost, a platform other than iOS, or an item without an SF
14
14
  * Symbol keeps the MPO TabBar. Android stays on the MPO TabBar until the
15
15
  * items carry image icons the Material bar can draw.
16
+ *
17
+ * The bar's clearance is the inset this host publishes, as with the MPO
18
+ * TabBar, so a Screen pads by it whether or not it scrolls. Each tab screen
19
+ * leaves its scroll view's inset adjustment off: react-native-screens would
20
+ * otherwise flip the first scroll view to `automatic`, and UIKit would add
21
+ * the bar's height a second time (FZ-8640).
16
22
  */
17
23
  import { useGlyphColor, useIdentityInkOnSurface } from "@multiplatform.one/theme";
18
24
  import { type ComponentType, type ReactNode, useEffect, useRef, useState } from "react";
@@ -53,6 +59,7 @@ export interface NativeTabs {
53
59
  selectedIcon?: IconProp["ios"];
54
60
  tabBarItemAccessibilityLabel?: string;
55
61
  tabBarItemTestID?: string;
62
+ overrideScrollViewContentInsetAdjustmentBehavior?: boolean;
56
63
  }>;
57
64
  }
58
65
 
@@ -139,6 +146,7 @@ export function NativeTabHost({
139
146
  }
140
147
  tabBarItemAccessibilityLabel={item.label}
141
148
  tabBarItemTestID={`tab-bar-item-${item.key.replace(/^\/+/, "") || "root"}`}
149
+ overrideScrollViewContentInsetAdjustmentBehavior={false}
142
150
  >
143
151
  {item.key === focusedKey ? children : null}
144
152
  </Screen>
@@ -131,7 +131,7 @@ export const componentColors = {
131
131
  debug: "$color9",
132
132
 
133
133
  /**
134
- * The round material plate under an icon control floating over a photo
134
+ * The flat round plate under an icon control floating over a photo
135
135
  * (LC-176). The fill sits steps above the viewer's dark ground so the
136
136
  * plate reads on black as well as on a bright frame (FZ-8009 r2).
137
137
  */
@@ -517,14 +517,7 @@ export function PageHeader({
517
517
  >
518
518
  {/* LC-153: page-head actions are a bar; neutral buttons go plain. */}
519
519
  <Surface bar>
520
- <IconButtonGroup
521
- {...knobProps.gap}
522
- justifyContent="flex-end"
523
- flexWrap="wrap"
524
- flexGrow={1}
525
- flexShrink={1}
526
- minWidth={0}
527
- >
520
+ <IconButtonGroup {...knobProps.gap} justifyContent="flex-end">
528
521
  {actions}
529
522
  </IconButtonGroup>
530
523
  </Surface>
@@ -61,4 +61,18 @@ describe("PageHeader actions (LC-142)", () => {
61
61
  expect(atoms(row, "_jc-")).toEqual(["_jc-flex-end"]);
62
62
  expect(atoms(row?.parentElement ?? null, "_fw-")).toEqual([]);
63
63
  });
64
+
65
+ it("hug their buttons: the group never wraps or grows (FZ-8521)", () => {
66
+ const { container } = renderWithProviders(
67
+ <PageHeader
68
+ title="Pokemon"
69
+ subtitle="21 Pokemon in the Pokédex"
70
+ actions={<button type="button">Add</button>}
71
+ />,
72
+ );
73
+ const group = container.querySelector("[data-page-header-actions] [data-mp-icon-button-group]");
74
+ expect(group).toBeTruthy();
75
+ expect(atoms(group, "_fw-")).toEqual([]);
76
+ expect(atoms(group, "_fg-")).toEqual([]);
77
+ });
64
78
  });
@@ -0,0 +1,172 @@
1
+ /**
2
+ * FZ-8659, under tamagui's NATIVE build (vitest.native.config.mjs): a
3
+ * page-flow ImageGrid loads its next page when the user scrolls to the end.
4
+ *
5
+ * The grid flows with the screen's scroll, so it never sees a scroll event.
6
+ * Native measures the sentinel under the last row in window coordinates, and
7
+ * "scrolling" here moves where that measurement says the sentinel sits.
8
+ */
9
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
10
+ import { act, cleanup } from "@testing-library/react";
11
+ import { useCallback, useState } from "react";
12
+ import { isWeb } from "tamagui";
13
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
14
+ import { ImageGrid } from "./ImageGrid";
15
+ import { PAGE_FLOW_POLL_MS } from "./usePageFlowLoadMore";
16
+
17
+ type Rect = [x: number, y: number, width: number, height: number];
18
+
19
+ const columns = 3;
20
+ const rowHeight = 1000;
21
+ /** Scroll offset of the screen's ScrollView, or null for a sentinel not laid out yet. */
22
+ let scrollY: number | null = 0;
23
+
24
+ const tileCount = () => document.querySelectorAll('[data-testid="tile"]').length;
25
+ const contentHeight = () => Math.ceil(tileCount() / columns) * rowHeight;
26
+ const sentinelRect = (): Rect =>
27
+ scrollY === null ? [0, 0, 0, 0] : [0, contentHeight() - scrollY, 390, 1];
28
+
29
+ // A phone's window. The test DOM reports 0 x 0, which no sentinel can enter.
30
+ vi.mock("tamagui", async (importOriginal) => ({
31
+ ...(await importOriginal<typeof import("tamagui")>()),
32
+ useWindowDimensions: () => ({ width: 390, height: 844, scale: 3, fontScale: 1 }),
33
+ }));
34
+ const windowHeight = 844;
35
+
36
+ /** The host view's own measureInWindow answers with the modelled scroll position. */
37
+ const stubSentinel = () => {
38
+ const el = document.querySelector('[data-testid="image-grid-sentinel"]') as
39
+ | (HTMLElement & { measureInWindow?: (cb: (...rect: Rect) => void) => void })
40
+ | null;
41
+ if (el) el.measureInWindow = (cb) => cb(...sentinelRect());
42
+ };
43
+
44
+ beforeEach(() => {
45
+ vi.useFakeTimers();
46
+ scrollY = 0;
47
+ });
48
+
49
+ afterEach(() => {
50
+ cleanup();
51
+ vi.useRealTimers();
52
+ });
53
+
54
+ const all = Array.from({ length: 21 }, (_, i) => ({ id: i + 1 }));
55
+
56
+ /** The FrappeList bridge's shape: onLoadMore widens the slice, 12 per page. */
57
+ function Paged({
58
+ onRequest,
59
+ isLoading = false,
60
+ pageSize = 12,
61
+ step = pageSize,
62
+ }: {
63
+ onRequest: () => void;
64
+ isLoading?: boolean;
65
+ pageSize?: number;
66
+ /** Rows a request adds; 0 pins the grid so nothing but the latch stops a repeat. */
67
+ step?: number;
68
+ }) {
69
+ const [limit, setLimit] = useState(pageSize);
70
+ const onLoadMore = useCallback(() => {
71
+ onRequest();
72
+ setLimit((prev) => prev + step);
73
+ }, [onRequest, step]);
74
+ const items = all.slice(0, limit);
75
+ return (
76
+ <ImageGrid
77
+ items={items}
78
+ columns={columns}
79
+ isLoading={isLoading}
80
+ hasMore={all.length > limit}
81
+ onLoadMore={onLoadMore}
82
+ renderItem={(item) => <span data-testid="tile">{item.id}</span>}
83
+ />
84
+ );
85
+ }
86
+
87
+ const poll = (times = 1) => {
88
+ for (let i = 0; i < times; i++) {
89
+ stubSentinel();
90
+ act(() => {
91
+ vi.advanceTimersByTime(PAGE_FLOW_POLL_MS);
92
+ });
93
+ }
94
+ };
95
+
96
+ /** Scroll until the grid's last row sits on the window's bottom edge. */
97
+ const scrollToEnd = (polls = 1) => {
98
+ scrollY = contentHeight() - windowHeight + 1;
99
+ poll(polls);
100
+ };
101
+ const scrollToTop = (polls = 1) => {
102
+ scrollY = 0;
103
+ poll(polls);
104
+ };
105
+
106
+ describe("ImageGrid page-flow load-more under tamagui's NATIVE build (FZ-8659)", () => {
107
+ it("runs tamagui's native build", () => {
108
+ expect(isWeb).toBe(false);
109
+ });
110
+
111
+ it("requests nothing while the end of the grid is below the window", () => {
112
+ const onRequest = vi.fn();
113
+ renderWithProviders(<Paged onRequest={onRequest} />);
114
+ scrollToTop(8);
115
+ expect(onRequest).not.toHaveBeenCalled();
116
+ });
117
+
118
+ it("requests the next page once per scroll to the end, then stops when nothing remains", () => {
119
+ const onRequest = vi.fn();
120
+ renderWithProviders(<Paged onRequest={onRequest} pageSize={8} />);
121
+ expect(tileCount()).toBe(8);
122
+
123
+ scrollToEnd(6);
124
+ expect(onRequest).toHaveBeenCalledTimes(1);
125
+ expect(tileCount()).toBe(16);
126
+
127
+ scrollToEnd(6);
128
+ expect(onRequest).toHaveBeenCalledTimes(2);
129
+ expect(tileCount()).toBe(21);
130
+
131
+ scrollToTop(2);
132
+ scrollToEnd(6);
133
+ expect(onRequest).toHaveBeenCalledTimes(2);
134
+ });
135
+
136
+ it("fires once while the user rests at the end, and again after leaving and coming back", () => {
137
+ const onRequest = vi.fn();
138
+ renderWithProviders(<Paged onRequest={onRequest} step={0} />);
139
+ scrollToEnd(12);
140
+ expect(onRequest).toHaveBeenCalledTimes(1);
141
+ scrollToTop(2);
142
+ scrollToEnd(12);
143
+ expect(onRequest).toHaveBeenCalledTimes(2);
144
+ });
145
+
146
+ it("loads all 21 of the reference bench's records in 12-row pages", () => {
147
+ const onRequest = vi.fn();
148
+ renderWithProviders(<Paged onRequest={onRequest} />);
149
+ expect(tileCount()).toBe(12);
150
+ scrollToEnd(8);
151
+ expect(onRequest).toHaveBeenCalledTimes(1);
152
+ expect(tileCount()).toBe(21);
153
+ });
154
+
155
+ it("holds while a page is in flight and fires once when it clears", () => {
156
+ const onRequest = vi.fn();
157
+ const view = renderWithProviders(<Paged onRequest={onRequest} isLoading />);
158
+ scrollToEnd(6);
159
+ expect(onRequest).not.toHaveBeenCalled();
160
+ view.rerender(<Paged onRequest={onRequest} />);
161
+ poll(6);
162
+ expect(onRequest).toHaveBeenCalledTimes(1);
163
+ });
164
+
165
+ it("never fires for a sentinel that has not been laid out", () => {
166
+ const onRequest = vi.fn();
167
+ renderWithProviders(<Paged onRequest={onRequest} />);
168
+ scrollY = null;
169
+ poll(6);
170
+ expect(onRequest).not.toHaveBeenCalled();
171
+ });
172
+ });
@@ -19,8 +19,9 @@ import {
19
19
  } from "@multiplatform.one/theme";
20
20
  import { useHotkey } from "@tanstack/react-hotkeys";
21
21
  import type { RegisterableHotkey } from "@tanstack/react-hotkeys";
22
- import React, { useCallback, useEffect, useId, useRef, useState } from "react";
22
+ import React, { useCallback, useId, useRef, useState } from "react";
23
23
  import { useTranslation } from "../shared/i18n";
24
+ import { usePageFlowLoadMore } from "./usePageFlowLoadMore";
24
25
  // useWindowDimensions from tamagui, NOT react-native: importing react-native
25
26
  // here pulls react-native-web's CJS inline-style-prefixer into the SSR module
26
27
  // graph, which the SSR runner evaluates as ESM ("exports is not defined").
@@ -429,21 +430,14 @@ export function ImageGrid<T>({
429
430
  hotkeyOpts,
430
431
  );
431
432
 
432
- // Page-flow mode (no explicit height): fire infinite loads when the
433
- // bottom sentinel enters the viewport. IntersectionObserver is web-only;
434
- // native consumers needing infinite scroll pass an explicit `height` so
435
- // the grid owns its own scroll container.
436
- useEffect(() => {
437
- if (height !== undefined || !onLoadMore || !hasMore || isLoading) return;
438
- if (typeof IntersectionObserver === "undefined") return;
439
- const el = sentinelRef.current;
440
- if (!el) return;
441
- const observer = new IntersectionObserver((entries) => {
442
- if (entries.some((entry) => entry.isIntersecting)) onLoadMore();
443
- });
444
- observer.observe(el);
445
- return () => observer.disconnect();
446
- }, [height, onLoadMore, hasMore, isLoading]);
433
+ // Page-flow mode (no explicit height): load the next page when the bottom
434
+ // sentinel enters the window, on the web and on native (FZ-8659).
435
+ usePageFlowLoadMore({
436
+ sentinelRef,
437
+ enabled: height === undefined && hasMore && !isLoading,
438
+ onLoadMore,
439
+ rearmKey: items.length,
440
+ });
447
441
 
448
442
  // Error wins over empty (DG-ST-01); initial load renders the grid twin.
449
443
  const hasError = resolveAsyncStatus({ error }) === "error";
@@ -533,7 +527,7 @@ export function ImageGrid<T>({
533
527
  <Spinner size="small" />
534
528
  </YStack>
535
529
  )}
536
- <View ref={sentinelRef as any} height={1} />
530
+ <View ref={sentinelRef as any} height={1} testID="image-grid-sentinel" />
537
531
  </View>
538
532
  );
539
533