@multiplatform.one/components 7.23.1 → 7.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. package/dist/cjs/Alert/index.cjs +1 -1
  2. package/dist/cjs/Alert/index.native.js +1 -1
  3. package/dist/cjs/Alert/index.native.js.map +1 -1
  4. package/dist/cjs/Avatar/index.cjs +6 -4
  5. package/dist/cjs/Avatar/index.native.js +6 -4
  6. package/dist/cjs/Avatar/index.native.js.map +1 -1
  7. package/dist/cjs/ContextMenu/index.cjs +1 -1
  8. package/dist/cjs/ContextMenu/index.native.js +1 -1
  9. package/dist/cjs/ContextMenu/index.native.js.map +1 -1
  10. package/dist/cjs/DropdownMenu/index.cjs +1 -1
  11. package/dist/cjs/DropdownMenu/index.native.js +1 -1
  12. package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
  13. package/dist/cjs/ProgressSteps/index.cjs +16 -10
  14. package/dist/cjs/ProgressSteps/index.native.js +16 -10
  15. package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
  16. package/dist/cjs/SheetModal/index.native.js +7 -0
  17. package/dist/cjs/SheetModal/index.native.js.map +1 -1
  18. package/dist/cjs/Tabs/index.cjs +2 -1
  19. package/dist/cjs/Tabs/index.native.js +2 -1
  20. package/dist/cjs/Tabs/index.native.js.map +1 -1
  21. package/dist/cjs/ThemePlayground/index.cjs +114 -0
  22. package/dist/cjs/ThemePlayground/index.native.js +33 -0
  23. package/dist/cjs/ThemePlayground/index.native.js.map +1 -0
  24. package/dist/cjs/Toast/index.cjs +2 -2
  25. package/dist/cjs/Toast/index.native.js +2 -2
  26. package/dist/cjs/Toast/index.native.js.map +1 -1
  27. package/dist/cjs/TreeSelect/index.cjs +0 -1
  28. package/dist/cjs/TreeSelect/index.native.js +0 -1
  29. package/dist/cjs/TreeSelect/index.native.js.map +1 -1
  30. package/dist/cjs/Video/PlayerChrome.cjs +2 -2
  31. package/dist/cjs/Video/PlayerChrome.native.js +2 -2
  32. package/dist/cjs/Video/PlayerChrome.native.js.map +1 -1
  33. package/dist/cjs/Wizard/index.cjs +33 -33
  34. package/dist/cjs/Wizard/index.native.js +33 -33
  35. package/dist/cjs/Wizard/index.native.js.map +1 -1
  36. package/dist/cjs/code/HighlightedCode/index.cjs +3 -2
  37. package/dist/cjs/code/HighlightedCode/index.native.js +3 -2
  38. package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
  39. package/dist/cjs/index.cjs +1 -0
  40. package/dist/cjs/index.native.js +1 -0
  41. package/dist/cjs/index.native.js.map +1 -1
  42. package/dist/cjs/layouts/attachments.cjs +1 -1
  43. package/dist/cjs/layouts/attachments.native.js +1 -1
  44. package/dist/cjs/layouts/attachments.native.js.map +1 -1
  45. package/dist/cjs/layouts/page.cjs +18 -5
  46. package/dist/cjs/layouts/page.native.js +18 -6
  47. package/dist/cjs/layouts/page.native.js.map +1 -1
  48. package/dist/cjs/layouts/sidebar.cjs +20 -12
  49. package/dist/cjs/layouts/sidebar.native.js +22 -18
  50. package/dist/cjs/layouts/sidebar.native.js.map +1 -1
  51. package/dist/cjs/layouts/tags.cjs +4 -1
  52. package/dist/cjs/layouts/tags.native.js +4 -1
  53. package/dist/cjs/layouts/tags.native.js.map +1 -1
  54. package/dist/cjs/layouts/timeline.cjs +12 -7
  55. package/dist/cjs/layouts/timeline.native.js +15 -9
  56. package/dist/cjs/layouts/timeline.native.js.map +1 -1
  57. package/dist/cjs/layouts/toolbar.cjs +0 -1
  58. package/dist/cjs/layouts/toolbar.native.js +0 -1
  59. package/dist/cjs/layouts/toolbar.native.js.map +1 -1
  60. package/dist/cjs/views/Calendar.cjs +5 -5
  61. package/dist/cjs/views/Calendar.native.js +5 -5
  62. package/dist/cjs/views/Calendar.native.js.map +1 -1
  63. package/dist/cjs/views/Gantt.cjs +2 -2
  64. package/dist/cjs/views/Gantt.native.js +2 -2
  65. package/dist/cjs/views/Gantt.native.js.map +1 -1
  66. package/dist/cjs/views/ImageGrid.cjs +17 -10
  67. package/dist/cjs/views/ImageGrid.native.js +19 -10
  68. package/dist/cjs/views/ImageGrid.native.js.map +1 -1
  69. package/dist/cjs/views/TreeView.cjs +4 -1
  70. package/dist/cjs/views/TreeView.native.js +4 -1
  71. package/dist/cjs/views/TreeView.native.js.map +1 -1
  72. package/dist/esm/Accordion/index.native.js.map +1 -1
  73. package/dist/esm/Alert/index.mjs +1 -1
  74. package/dist/esm/Alert/index.mjs.map +1 -1
  75. package/dist/esm/Alert/index.native.js +1 -1
  76. package/dist/esm/Alert/index.native.js.map +1 -1
  77. package/dist/esm/AnimateHeight/index.native.js.map +1 -1
  78. package/dist/esm/Avatar/getInitials.native.js.map +1 -1
  79. package/dist/esm/Avatar/index.mjs +7 -5
  80. package/dist/esm/Avatar/index.mjs.map +1 -1
  81. package/dist/esm/Avatar/index.native.js +7 -5
  82. package/dist/esm/Avatar/index.native.js.map +1 -1
  83. package/dist/esm/Badge/index.native.js.map +1 -1
  84. package/dist/esm/Button.native.js.map +1 -1
  85. package/dist/esm/Carousel/index.native.js.map +1 -1
  86. package/dist/esm/Chip/index.native.js.map +1 -1
  87. package/dist/esm/Collapsible.native.js.map +1 -1
  88. package/dist/esm/ContextMenu/index.mjs +1 -1
  89. package/dist/esm/ContextMenu/index.mjs.map +1 -1
  90. package/dist/esm/ContextMenu/index.native.js +1 -1
  91. package/dist/esm/ContextMenu/index.native.js.map +1 -1
  92. package/dist/esm/CopyField/index.native.js.map +1 -1
  93. package/dist/esm/DotIndicator/index.native.js.map +1 -1
  94. package/dist/esm/DropdownMenu/index.mjs +1 -1
  95. package/dist/esm/DropdownMenu/index.mjs.map +1 -1
  96. package/dist/esm/DropdownMenu/index.native.js +1 -1
  97. package/dist/esm/DropdownMenu/index.native.js.map +1 -1
  98. package/dist/esm/ErrorBoundary/index.native.js.map +1 -1
  99. package/dist/esm/Heading.native.js.map +1 -1
  100. package/dist/esm/Meter/index.native.js.map +1 -1
  101. package/dist/esm/Meter/meter.native.js.map +1 -1
  102. package/dist/esm/Pagination.native.js.map +1 -1
  103. package/dist/esm/ProgressSteps/index.mjs +16 -10
  104. package/dist/esm/ProgressSteps/index.mjs.map +1 -1
  105. package/dist/esm/ProgressSteps/index.native.js +16 -10
  106. package/dist/esm/ProgressSteps/index.native.js.map +1 -1
  107. package/dist/esm/Quote/index.native.js.map +1 -1
  108. package/dist/esm/Separator/index.native.js.map +1 -1
  109. package/dist/esm/SheetModal/detents.native.js.map +1 -1
  110. package/dist/esm/SheetModal/index.native.js +7 -0
  111. package/dist/esm/SheetModal/index.native.js.map +1 -1
  112. package/dist/esm/Skeleton/index.native.js.map +1 -1
  113. package/dist/esm/SkipLink/index.native.js.map +1 -1
  114. package/dist/esm/SortableList/SortableHandle.native.js.map +1 -1
  115. package/dist/esm/SortableList/index.native.js.map +1 -1
  116. package/dist/esm/SortableList/useSortableRows.native.js.map +1 -1
  117. package/dist/esm/Tabs/index.mjs +2 -1
  118. package/dist/esm/Tabs/index.mjs.map +1 -1
  119. package/dist/esm/Tabs/index.native.js +2 -1
  120. package/dist/esm/Tabs/index.native.js.map +1 -1
  121. package/dist/esm/Text.native.js.map +1 -1
  122. package/dist/esm/ThemePlayground/index.mjs +78 -0
  123. package/dist/esm/ThemePlayground/index.mjs.map +1 -0
  124. package/dist/esm/ThemePlayground/index.native.js +5 -0
  125. package/dist/esm/ThemePlayground/index.native.js.map +1 -0
  126. package/dist/esm/Toast/index.mjs +2 -2
  127. package/dist/esm/Toast/index.mjs.map +1 -1
  128. package/dist/esm/Toast/index.native.js +2 -2
  129. package/dist/esm/Toast/index.native.js.map +1 -1
  130. package/dist/esm/Toast/store.native.js.map +1 -1
  131. package/dist/esm/Tooltip/nativePress.native.js.map +1 -1
  132. package/dist/esm/Tooltip/tooltipShared.native.js.map +1 -1
  133. package/dist/esm/TreeSelect/index.mjs +0 -1
  134. package/dist/esm/TreeSelect/index.mjs.map +1 -1
  135. package/dist/esm/TreeSelect/index.native.js +0 -1
  136. package/dist/esm/TreeSelect/index.native.js.map +1 -1
  137. package/dist/esm/TreeSelect/treeSelectModel.native.js.map +1 -1
  138. package/dist/esm/Video/PlayerChrome.mjs +2 -2
  139. package/dist/esm/Video/PlayerChrome.mjs.map +1 -1
  140. package/dist/esm/Video/PlayerChrome.native.js +2 -2
  141. package/dist/esm/Video/PlayerChrome.native.js.map +1 -1
  142. package/dist/esm/Video/VideoFrame.native.js.map +1 -1
  143. package/dist/esm/Video/types.native.js.map +1 -1
  144. package/dist/esm/Wheel/index.native.js.map +1 -1
  145. package/dist/esm/Wizard/index.mjs +33 -33
  146. package/dist/esm/Wizard/index.mjs.map +1 -1
  147. package/dist/esm/Wizard/index.native.js +33 -33
  148. package/dist/esm/Wizard/index.native.js.map +1 -1
  149. package/dist/esm/actions/ActionBar.native.js.map +1 -1
  150. package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
  151. package/dist/esm/actions/devWarn.native.js.map +1 -1
  152. package/dist/esm/actions/index.native.js.map +1 -1
  153. package/dist/esm/actions/severity.native.js.map +1 -1
  154. package/dist/esm/charts/Axis.native.js.map +1 -1
  155. package/dist/esm/charts/BarChart.native.js.map +1 -1
  156. package/dist/esm/charts/ChartDataView.native.js.map +1 -1
  157. package/dist/esm/charts/ChartSurface.native.js.map +1 -1
  158. package/dist/esm/charts/LineChart.native.js.map +1 -1
  159. package/dist/esm/charts/PieChart.native.js.map +1 -1
  160. package/dist/esm/charts/Sparkline.native.js.map +1 -1
  161. package/dist/esm/charts/accessibility.native.js.map +1 -1
  162. package/dist/esm/charts/composeChart.native.js.map +1 -1
  163. package/dist/esm/charts/index.native.js.map +1 -1
  164. package/dist/esm/charts/math.native.js.map +1 -1
  165. package/dist/esm/charts/series.native.js.map +1 -1
  166. package/dist/esm/charts/svg.native.js.map +1 -1
  167. package/dist/esm/charts/types.native.js.map +1 -1
  168. package/dist/esm/charts/useChartTheme.native.js.map +1 -1
  169. package/dist/esm/code/Code/index.native.js.map +1 -1
  170. package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
  171. package/dist/esm/code/HighlightedCode/index.mjs +4 -3
  172. package/dist/esm/code/HighlightedCode/index.mjs.map +1 -1
  173. package/dist/esm/code/HighlightedCode/index.native.js +4 -3
  174. package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
  175. package/dist/esm/code/Highlighter/index.native.js.map +1 -1
  176. package/dist/esm/code/Pre/index.native.js.map +1 -1
  177. package/dist/esm/code/index.native.js.map +1 -1
  178. package/dist/esm/componentColors.native.js.map +1 -1
  179. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  180. package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
  181. package/dist/esm/feedback/copy.native.js.map +1 -1
  182. package/dist/esm/feedback/index.native.js.map +1 -1
  183. package/dist/esm/feedback/notify.native.js.map +1 -1
  184. package/dist/esm/feedback/route.native.js.map +1 -1
  185. package/dist/esm/feedback/store.native.js.map +1 -1
  186. package/dist/esm/hooks/index.native.js.map +1 -1
  187. package/dist/esm/hooks/useClipboard.native.js.map +1 -1
  188. package/dist/esm/hooks/useDocumentTitle.native.js.map +1 -1
  189. package/dist/esm/icons/CheckRegular.native.js.map +1 -1
  190. package/dist/esm/icons/MinusRegular.native.js.map +1 -1
  191. package/dist/esm/icons/index.native.js.map +1 -1
  192. package/dist/esm/icons/lucide.native.js.map +1 -1
  193. package/dist/esm/icons/themed.native.js.map +1 -1
  194. package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
  195. package/dist/esm/images/Image/shared.native.js.map +1 -1
  196. package/dist/esm/images/Image/types.native.js.map +1 -1
  197. package/dist/esm/images/index.native.js.map +1 -1
  198. package/dist/esm/index.mjs +1 -0
  199. package/dist/esm/index.mjs.map +1 -1
  200. package/dist/esm/index.native.js +1 -0
  201. package/dist/esm/index.native.js.map +1 -1
  202. package/dist/esm/knobImmuneExports.native.js.map +1 -1
  203. package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
  204. package/dist/esm/layouts/Debug/index.native.js.map +1 -1
  205. package/dist/esm/layouts/EmptyState.native.js.map +1 -1
  206. package/dist/esm/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  207. package/dist/esm/layouts/PageTemplates.native.js.map +1 -1
  208. package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
  209. package/dist/esm/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  210. package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
  211. package/dist/esm/layouts/attachments.mjs +1 -1
  212. package/dist/esm/layouts/attachments.mjs.map +1 -1
  213. package/dist/esm/layouts/attachments.native.js +1 -1
  214. package/dist/esm/layouts/attachments.native.js.map +1 -1
  215. package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
  216. package/dist/esm/layouts/index.native.js.map +1 -1
  217. package/dist/esm/layouts/page.mjs +18 -5
  218. package/dist/esm/layouts/page.mjs.map +1 -1
  219. package/dist/esm/layouts/page.native.js +18 -6
  220. package/dist/esm/layouts/page.native.js.map +1 -1
  221. package/dist/esm/layouts/pageHeadingScope.native.js.map +1 -1
  222. package/dist/esm/layouts/sidebar.mjs +20 -12
  223. package/dist/esm/layouts/sidebar.mjs.map +1 -1
  224. package/dist/esm/layouts/sidebar.native.js +22 -18
  225. package/dist/esm/layouts/sidebar.native.js.map +1 -1
  226. package/dist/esm/layouts/tags.mjs +5 -2
  227. package/dist/esm/layouts/tags.mjs.map +1 -1
  228. package/dist/esm/layouts/tags.native.js +5 -2
  229. package/dist/esm/layouts/tags.native.js.map +1 -1
  230. package/dist/esm/layouts/timeline.mjs +13 -8
  231. package/dist/esm/layouts/timeline.mjs.map +1 -1
  232. package/dist/esm/layouts/timeline.native.js +16 -10
  233. package/dist/esm/layouts/timeline.native.js.map +1 -1
  234. package/dist/esm/layouts/toolbar.mjs +0 -1
  235. package/dist/esm/layouts/toolbar.mjs.map +1 -1
  236. package/dist/esm/layouts/toolbar.native.js +0 -1
  237. package/dist/esm/layouts/toolbar.native.js.map +1 -1
  238. package/dist/esm/shared/actionScan.native.js.map +1 -1
  239. package/dist/esm/shared/i18n.native.js.map +1 -1
  240. package/dist/esm/shared/t.native.js.map +1 -1
  241. package/dist/esm/shared/textRidesText.native.js.map +1 -1
  242. package/dist/esm/shared/useReturnFocusOnClose.native.js.map +1 -1
  243. package/dist/esm/surfaces.native.js.map +1 -1
  244. package/dist/esm/tamagui.native.js.map +1 -1
  245. package/dist/esm/testSetup.native.js.map +1 -1
  246. package/dist/esm/utils/setTinted.native.js.map +1 -1
  247. package/dist/esm/utils/unwrapText.native.js.map +1 -1
  248. package/dist/esm/views/Calendar.mjs +5 -5
  249. package/dist/esm/views/Calendar.mjs.map +1 -1
  250. package/dist/esm/views/Calendar.native.js +5 -5
  251. package/dist/esm/views/Calendar.native.js.map +1 -1
  252. package/dist/esm/views/Dashboard.native.js.map +1 -1
  253. package/dist/esm/views/Gantt.mjs +2 -2
  254. package/dist/esm/views/Gantt.mjs.map +1 -1
  255. package/dist/esm/views/Gantt.native.js +2 -2
  256. package/dist/esm/views/Gantt.native.js.map +1 -1
  257. package/dist/esm/views/ImageGrid.mjs +17 -10
  258. package/dist/esm/views/ImageGrid.mjs.map +1 -1
  259. package/dist/esm/views/ImageGrid.native.js +19 -10
  260. package/dist/esm/views/ImageGrid.native.js.map +1 -1
  261. package/dist/esm/views/List.native.js.map +1 -1
  262. package/dist/esm/views/Matrix.native.js.map +1 -1
  263. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  264. package/dist/esm/views/TreeView.mjs +5 -2
  265. package/dist/esm/views/TreeView.mjs.map +1 -1
  266. package/dist/esm/views/TreeView.native.js +5 -2
  267. package/dist/esm/views/TreeView.native.js.map +1 -1
  268. package/dist/esm/views/calendarMath.native.js.map +1 -1
  269. package/dist/esm/views/ganttMath.native.js.map +1 -1
  270. package/dist/esm/views/index.native.js.map +1 -1
  271. package/dist/esm/views/kanbanDnd.native.js.map +1 -1
  272. package/dist/esm/views/matrixMath.native.js.map +1 -1
  273. package/dist/esm/views/treeViewDnd.native.js.map +1 -1
  274. package/dist/esm/views/treeViewLayout.native.js.map +1 -1
  275. package/dist/esm/views/treeViewMotion.native.js.map +1 -1
  276. package/dist/esm/views/treeViewReveal.native.js.map +1 -1
  277. package/dist/jsx/Accordion/index.native.js +1 -1
  278. package/dist/jsx/Accordion/index.native.js.map +1 -1
  279. package/dist/jsx/Alert/index.mjs +1 -1
  280. package/dist/jsx/Alert/index.mjs.map +1 -1
  281. package/dist/jsx/Alert/index.native.js +1 -1
  282. package/dist/jsx/Alert/index.native.js.map +1 -1
  283. package/dist/jsx/AnimateHeight/index.native.js.map +1 -1
  284. package/dist/jsx/Avatar/getInitials.native.js.map +1 -1
  285. package/dist/jsx/Avatar/index.mjs +7 -5
  286. package/dist/jsx/Avatar/index.mjs.map +1 -1
  287. package/dist/jsx/Avatar/index.native.js +6 -4
  288. package/dist/jsx/Avatar/index.native.js.map +1 -1
  289. package/dist/jsx/Badge/index.native.js.map +1 -1
  290. package/dist/jsx/Button.native.js.map +1 -1
  291. package/dist/jsx/Card.native.js.map +1 -1
  292. package/dist/jsx/CardFooter.native.js.map +1 -1
  293. package/dist/jsx/CardHeader.native.js.map +1 -1
  294. package/dist/jsx/Carousel/index.native.js +2 -2
  295. package/dist/jsx/Carousel/index.native.js.map +1 -1
  296. package/dist/jsx/Chip/index.native.js.map +1 -1
  297. package/dist/jsx/Collapsible.native.js.map +1 -1
  298. package/dist/jsx/ContextMenu/index.mjs +1 -1
  299. package/dist/jsx/ContextMenu/index.mjs.map +1 -1
  300. package/dist/jsx/ContextMenu/index.native.js +1 -1
  301. package/dist/jsx/ContextMenu/index.native.js.map +1 -1
  302. package/dist/jsx/CopyField/index.native.js.map +1 -1
  303. package/dist/jsx/DotIndicator/index.native.js.map +1 -1
  304. package/dist/jsx/DropdownMenu/index.mjs +1 -1
  305. package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
  306. package/dist/jsx/DropdownMenu/index.native.js +1 -1
  307. package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
  308. package/dist/jsx/ErrorBoundary/index.native.js.map +1 -1
  309. package/dist/jsx/Heading.native.js.map +1 -1
  310. package/dist/jsx/Meter/index.native.js +1 -1
  311. package/dist/jsx/Meter/index.native.js.map +1 -1
  312. package/dist/jsx/Meter/meter.native.js.map +1 -1
  313. package/dist/jsx/Pagination.native.js +1 -1
  314. package/dist/jsx/Pagination.native.js.map +1 -1
  315. package/dist/jsx/ProgressSteps/index.mjs +16 -10
  316. package/dist/jsx/ProgressSteps/index.mjs.map +1 -1
  317. package/dist/jsx/ProgressSteps/index.native.js +16 -10
  318. package/dist/jsx/ProgressSteps/index.native.js.map +1 -1
  319. package/dist/jsx/Quote/index.native.js.map +1 -1
  320. package/dist/jsx/Separator/index.native.js.map +1 -1
  321. package/dist/jsx/SheetModal/detents.native.js.map +1 -1
  322. package/dist/jsx/SheetModal/index.native.js +7 -0
  323. package/dist/jsx/SheetModal/index.native.js.map +1 -1
  324. package/dist/jsx/Skeleton/index.native.js.map +1 -1
  325. package/dist/jsx/SkipLink/index.native.js.map +1 -1
  326. package/dist/jsx/SortableList/SortableHandle.native.js.map +1 -1
  327. package/dist/jsx/SortableList/index.native.js.map +1 -1
  328. package/dist/jsx/SortableList/useSortableRows.native.js.map +1 -1
  329. package/dist/jsx/Tabs/index.mjs +2 -1
  330. package/dist/jsx/Tabs/index.mjs.map +1 -1
  331. package/dist/jsx/Tabs/index.native.js +3 -2
  332. package/dist/jsx/Tabs/index.native.js.map +1 -1
  333. package/dist/jsx/Text.native.js.map +1 -1
  334. package/dist/jsx/ThemePlayground/index.mjs +78 -0
  335. package/dist/jsx/ThemePlayground/index.mjs.map +1 -0
  336. package/dist/jsx/ThemePlayground/index.native.js +33 -0
  337. package/dist/jsx/ThemePlayground/index.native.js.map +1 -0
  338. package/dist/jsx/Toast/index.mjs +2 -2
  339. package/dist/jsx/Toast/index.mjs.map +1 -1
  340. package/dist/jsx/Toast/index.native.js +2 -2
  341. package/dist/jsx/Toast/index.native.js.map +1 -1
  342. package/dist/jsx/Toast/store.native.js.map +1 -1
  343. package/dist/jsx/Tooltip/nativePress.native.js.map +1 -1
  344. package/dist/jsx/Tooltip/tooltipShared.native.js.map +1 -1
  345. package/dist/jsx/TreeSelect/index.mjs +0 -1
  346. package/dist/jsx/TreeSelect/index.mjs.map +1 -1
  347. package/dist/jsx/TreeSelect/index.native.js +1 -2
  348. package/dist/jsx/TreeSelect/index.native.js.map +1 -1
  349. package/dist/jsx/TreeSelect/treeSelectModel.native.js.map +1 -1
  350. package/dist/jsx/Video/PlayerChrome.mjs +2 -2
  351. package/dist/jsx/Video/PlayerChrome.mjs.map +1 -1
  352. package/dist/jsx/Video/PlayerChrome.native.js +2 -2
  353. package/dist/jsx/Video/PlayerChrome.native.js.map +1 -1
  354. package/dist/jsx/Video/VideoFrame.native.js.map +1 -1
  355. package/dist/jsx/Video/types.native.js.map +1 -1
  356. package/dist/jsx/Wheel/index.native.js.map +1 -1
  357. package/dist/jsx/Wizard/index.mjs +33 -33
  358. package/dist/jsx/Wizard/index.mjs.map +1 -1
  359. package/dist/jsx/Wizard/index.native.js +35 -35
  360. package/dist/jsx/Wizard/index.native.js.map +1 -1
  361. package/dist/jsx/actions/ActionBar.native.js.map +1 -1
  362. package/dist/jsx/actions/DestructiveAction.native.js.map +1 -1
  363. package/dist/jsx/actions/devWarn.native.js.map +1 -1
  364. package/dist/jsx/actions/index.native.js.map +1 -1
  365. package/dist/jsx/actions/severity.native.js.map +1 -1
  366. package/dist/jsx/charts/Axis.native.js.map +1 -1
  367. package/dist/jsx/charts/BarChart.native.js.map +1 -1
  368. package/dist/jsx/charts/ChartDataView.native.js.map +1 -1
  369. package/dist/jsx/charts/ChartSurface.native.js.map +1 -1
  370. package/dist/jsx/charts/LineChart.native.js.map +1 -1
  371. package/dist/jsx/charts/PieChart.native.js.map +1 -1
  372. package/dist/jsx/charts/Sparkline.native.js.map +1 -1
  373. package/dist/jsx/charts/accessibility.native.js.map +1 -1
  374. package/dist/jsx/charts/composeChart.native.js.map +1 -1
  375. package/dist/jsx/charts/index.native.js.map +1 -1
  376. package/dist/jsx/charts/math.native.js.map +1 -1
  377. package/dist/jsx/charts/series.native.js.map +1 -1
  378. package/dist/jsx/charts/svg.native.js.map +1 -1
  379. package/dist/jsx/charts/types.native.js.map +1 -1
  380. package/dist/jsx/charts/useChartTheme.native.js.map +1 -1
  381. package/dist/jsx/code/Code/index.native.js.map +1 -1
  382. package/dist/jsx/code/CodeBlock/index.native.js +6 -6
  383. package/dist/jsx/code/CodeBlock/index.native.js.map +1 -1
  384. package/dist/jsx/code/HighlightedCode/index.mjs +4 -3
  385. package/dist/jsx/code/HighlightedCode/index.mjs.map +1 -1
  386. package/dist/jsx/code/HighlightedCode/index.native.js +3 -2
  387. package/dist/jsx/code/HighlightedCode/index.native.js.map +1 -1
  388. package/dist/jsx/code/Highlighter/index.native.js.map +1 -1
  389. package/dist/jsx/code/Pre/index.native.js.map +1 -1
  390. package/dist/jsx/code/index.native.js +5 -5
  391. package/dist/jsx/code/index.native.js.map +1 -1
  392. package/dist/jsx/componentColors.native.js.map +1 -1
  393. package/dist/jsx/feedback/ConfirmDialog.native.js.map +1 -1
  394. package/dist/jsx/feedback/NotifyHost.native.js +2 -2
  395. package/dist/jsx/feedback/NotifyHost.native.js.map +1 -1
  396. package/dist/jsx/feedback/copy.native.js.map +1 -1
  397. package/dist/jsx/feedback/index.native.js.map +1 -1
  398. package/dist/jsx/feedback/notify.native.js.map +1 -1
  399. package/dist/jsx/feedback/route.native.js.map +1 -1
  400. package/dist/jsx/feedback/store.native.js.map +1 -1
  401. package/dist/jsx/hooks/index.native.js +1 -1
  402. package/dist/jsx/hooks/index.native.js.map +1 -1
  403. package/dist/jsx/hooks/useClipboard.native.js.map +1 -1
  404. package/dist/jsx/hooks/useDocumentTitle.native.js.map +1 -1
  405. package/dist/jsx/icons/CheckRegular.native.js.map +1 -1
  406. package/dist/jsx/icons/MinusRegular.native.js.map +1 -1
  407. package/dist/jsx/icons/index.native.js.map +1 -1
  408. package/dist/jsx/icons/lucide.native.js.map +1 -1
  409. package/dist/jsx/icons/themed.native.js.map +1 -1
  410. package/dist/jsx/images/Image/ImageFrame.native.js +1 -1
  411. package/dist/jsx/images/Image/ImageFrame.native.js.map +1 -1
  412. package/dist/jsx/images/Image/index.native.js +1 -1
  413. package/dist/jsx/images/Image/shared.native.js +1 -1
  414. package/dist/jsx/images/Image/shared.native.js.map +1 -1
  415. package/dist/jsx/images/Image/types.native.js.map +1 -1
  416. package/dist/jsx/images/index.native.js.map +1 -1
  417. package/dist/jsx/index.js +1 -0
  418. package/dist/jsx/index.js.map +1 -1
  419. package/dist/jsx/index.mjs +1 -0
  420. package/dist/jsx/index.mjs.map +1 -1
  421. package/dist/jsx/index.native.js +30 -29
  422. package/dist/jsx/index.native.js.map +1 -1
  423. package/dist/jsx/knobImmuneExports.native.js.map +1 -1
  424. package/dist/jsx/layouts/AsyncBoundary.native.js +2 -2
  425. package/dist/jsx/layouts/AsyncBoundary.native.js.map +1 -1
  426. package/dist/jsx/layouts/Debug/index.native.js.map +1 -1
  427. package/dist/jsx/layouts/EmptyState.native.js.map +1 -1
  428. package/dist/jsx/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  429. package/dist/jsx/layouts/PageTemplates.native.js.map +1 -1
  430. package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
  431. package/dist/jsx/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  432. package/dist/jsx/layouts/ViewSwitcher.native.js.map +1 -1
  433. package/dist/jsx/layouts/attachments.mjs +1 -1
  434. package/dist/jsx/layouts/attachments.mjs.map +1 -1
  435. package/dist/jsx/layouts/attachments.native.js +2 -2
  436. package/dist/jsx/layouts/attachments.native.js.map +1 -1
  437. package/dist/jsx/layouts/breadcrumbs.native.js.map +1 -1
  438. package/dist/jsx/layouts/index.native.js +3 -3
  439. package/dist/jsx/layouts/index.native.js.map +1 -1
  440. package/dist/jsx/layouts/page.mjs +18 -5
  441. package/dist/jsx/layouts/page.mjs.map +1 -1
  442. package/dist/jsx/layouts/page.native.js +18 -6
  443. package/dist/jsx/layouts/page.native.js.map +1 -1
  444. package/dist/jsx/layouts/pageHeadingScope.native.js.map +1 -1
  445. package/dist/jsx/layouts/sidebar.mjs +20 -12
  446. package/dist/jsx/layouts/sidebar.mjs.map +1 -1
  447. package/dist/jsx/layouts/sidebar.native.js +22 -18
  448. package/dist/jsx/layouts/sidebar.native.js.map +1 -1
  449. package/dist/jsx/layouts/tags.mjs +5 -2
  450. package/dist/jsx/layouts/tags.mjs.map +1 -1
  451. package/dist/jsx/layouts/tags.native.js +5 -2
  452. package/dist/jsx/layouts/tags.native.js.map +1 -1
  453. package/dist/jsx/layouts/timeline.mjs +13 -8
  454. package/dist/jsx/layouts/timeline.mjs.map +1 -1
  455. package/dist/jsx/layouts/timeline.native.js +17 -11
  456. package/dist/jsx/layouts/timeline.native.js.map +1 -1
  457. package/dist/jsx/layouts/toolbar.mjs +0 -1
  458. package/dist/jsx/layouts/toolbar.mjs.map +1 -1
  459. package/dist/jsx/layouts/toolbar.native.js +0 -1
  460. package/dist/jsx/layouts/toolbar.native.js.map +1 -1
  461. package/dist/jsx/shared/actionScan.native.js.map +1 -1
  462. package/dist/jsx/shared/i18n.native.js.map +1 -1
  463. package/dist/jsx/shared/t.native.js.map +1 -1
  464. package/dist/jsx/shared/textRidesText.native.js.map +1 -1
  465. package/dist/jsx/shared/useReturnFocusOnClose.native.js.map +1 -1
  466. package/dist/jsx/surfaces.native.js +1 -1
  467. package/dist/jsx/surfaces.native.js.map +1 -1
  468. package/dist/jsx/tamagui.native.js +1 -1
  469. package/dist/jsx/tamagui.native.js.map +1 -1
  470. package/dist/jsx/testSetup.native.js.map +1 -1
  471. package/dist/jsx/utils/setTinted.native.js.map +1 -1
  472. package/dist/jsx/utils/unwrapText.native.js.map +1 -1
  473. package/dist/jsx/views/Calendar.mjs +5 -5
  474. package/dist/jsx/views/Calendar.mjs.map +1 -1
  475. package/dist/jsx/views/Calendar.native.js +5 -5
  476. package/dist/jsx/views/Calendar.native.js.map +1 -1
  477. package/dist/jsx/views/Dashboard.native.js +1 -1
  478. package/dist/jsx/views/Dashboard.native.js.map +1 -1
  479. package/dist/jsx/views/Gantt.mjs +2 -2
  480. package/dist/jsx/views/Gantt.mjs.map +1 -1
  481. package/dist/jsx/views/Gantt.native.js +3 -3
  482. package/dist/jsx/views/Gantt.native.js.map +1 -1
  483. package/dist/jsx/views/ImageGrid.mjs +17 -10
  484. package/dist/jsx/views/ImageGrid.mjs.map +1 -1
  485. package/dist/jsx/views/ImageGrid.native.js +20 -11
  486. package/dist/jsx/views/ImageGrid.native.js.map +1 -1
  487. package/dist/jsx/views/Kanban.native.js +1 -1
  488. package/dist/jsx/views/List.native.js.map +1 -1
  489. package/dist/jsx/views/Matrix.native.js +1 -1
  490. package/dist/jsx/views/Matrix.native.js.map +1 -1
  491. package/dist/jsx/views/ReportBuilder.native.js +1 -1
  492. package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
  493. package/dist/jsx/views/TreeView.mjs +5 -2
  494. package/dist/jsx/views/TreeView.mjs.map +1 -1
  495. package/dist/jsx/views/TreeView.native.js +4 -1
  496. package/dist/jsx/views/TreeView.native.js.map +1 -1
  497. package/dist/jsx/views/calendarMath.native.js.map +1 -1
  498. package/dist/jsx/views/ganttMath.native.js.map +1 -1
  499. package/dist/jsx/views/index.native.js +1 -1
  500. package/dist/jsx/views/index.native.js.map +1 -1
  501. package/dist/jsx/views/kanbanDnd.native.js.map +1 -1
  502. package/dist/jsx/views/matrixMath.native.js.map +1 -1
  503. package/dist/jsx/views/treeViewDnd.native.js.map +1 -1
  504. package/dist/jsx/views/treeViewLayout.native.js.map +1 -1
  505. package/dist/jsx/views/treeViewMotion.native.js.map +1 -1
  506. package/dist/jsx/views/treeViewReveal.native.js.map +1 -1
  507. package/package.json +13 -9
  508. package/src/Alert/index.tsx +1 -1
  509. package/src/Avatar/index.tsx +10 -4
  510. package/src/ContextMenu/index.tsx +1 -1
  511. package/src/DropdownMenu/index.tsx +1 -1
  512. package/src/ProgressSteps/index.tsx +21 -14
  513. package/src/SheetModal/SheetModal.touch.spec.tsx +42 -1
  514. package/src/SheetModal/index.native.tsx +15 -1
  515. package/src/Tabs/index.tsx +6 -2
  516. package/src/ThemePlayground/ThemePlayground.spec.tsx +36 -0
  517. package/src/ThemePlayground/index.native.tsx +8 -0
  518. package/src/ThemePlayground/index.tsx +83 -0
  519. package/src/Toast/index.tsx +2 -2
  520. package/src/TreeSelect/index.tsx +1 -7
  521. package/src/Video/PlayerChrome.tsx +2 -2
  522. package/src/Wizard/index.tsx +34 -33
  523. package/src/code/HighlightedCode/index.tsx +4 -3
  524. package/src/index.ts +1 -0
  525. package/src/layouts/Timeline.stories.tsx +17 -16
  526. package/src/layouts/attachments.tsx +2 -1
  527. package/src/layouts/page.tsx +12 -9
  528. package/src/layouts/sidebar.tsx +21 -20
  529. package/src/layouts/tags.tsx +5 -2
  530. package/src/layouts/timeline.tsx +31 -26
  531. package/src/layouts/toolbar.tsx +0 -1
  532. package/src/views/Calendar.tsx +6 -15
  533. package/src/views/Gantt.tsx +2 -2
  534. package/src/views/ImageGrid.tsx +15 -16
  535. package/src/views/Kanban.stories.tsx +3 -3
  536. package/src/views/TreeView.tsx +5 -3
  537. package/types/Avatar/index.d.ts.map +1 -1
  538. package/types/ProgressSteps/index.d.ts.map +1 -1
  539. package/types/SheetModal/index.native.d.ts.map +1 -1
  540. package/types/Tabs/index.d.ts.map +1 -1
  541. package/types/ThemePlayground/index.d.ts +11 -0
  542. package/types/ThemePlayground/index.d.ts.map +1 -0
  543. package/types/ThemePlayground/index.native.d.ts +5 -0
  544. package/types/ThemePlayground/index.native.d.ts.map +1 -0
  545. package/types/TreeSelect/index.d.ts.map +1 -1
  546. package/types/Wizard/index.d.ts.map +1 -1
  547. package/types/code/HighlightedCode/index.d.ts.map +1 -1
  548. package/types/index.d.ts +1 -0
  549. package/types/index.d.ts.map +1 -1
  550. package/types/layouts/attachments.d.ts.map +1 -1
  551. package/types/layouts/page.d.ts.map +1 -1
  552. package/types/layouts/sidebar.d.ts.map +1 -1
  553. package/types/layouts/tags.d.ts.map +1 -1
  554. package/types/layouts/timeline.d.ts.map +1 -1
  555. package/types/views/Calendar.d.ts.map +1 -1
  556. package/types/views/ImageGrid.d.ts.map +1 -1
  557. package/types/views/TreeView.d.ts.map +1 -1
@@ -20,6 +20,7 @@ import {
20
20
  View,
21
21
  XStack,
22
22
  getVariableValue,
23
+ styled,
23
24
  withStaticProperties,
24
25
  } from "tamagui";
25
26
  import { getSize } from "@tamagui/get-token";
@@ -347,6 +348,11 @@ function AvatarRoot({
347
348
  );
348
349
  }
349
350
 
351
+ const AvatarGroupItem = styled(View, {
352
+ name: "AvatarGroupItem",
353
+ flexShrink: 0,
354
+ });
355
+
350
356
  function AvatarGroup({
351
357
  children,
352
358
  max = 4,
@@ -378,9 +384,9 @@ function AvatarGroup({
378
384
  key={index}
379
385
  value={{ size, circular, nested, compact, overlap, index, count: total }}
380
386
  >
381
- <View zIndex={index} marginStart={index > 0 ? -overlapPx : 0} flexShrink={0}>
387
+ <AvatarGroupItem zIndex={index} marginStart={index > 0 ? -overlapPx : 0}>
382
388
  {child}
383
- </View>
389
+ </AvatarGroupItem>
384
390
  </GroupCtx.Provider>
385
391
  ))}
386
392
  {extra > 0 ? (
@@ -395,7 +401,7 @@ function AvatarGroup({
395
401
  count: total,
396
402
  }}
397
403
  >
398
- <View zIndex={shown.length} marginStart={-overlapPx} flexShrink={0}>
404
+ <AvatarGroupItem zIndex={shown.length} marginStart={-overlapPx}>
399
405
  <AvatarRoot
400
406
  initials={overflowLabel}
401
407
  fallbackBackgroundColor="$color4"
@@ -405,7 +411,7 @@ function AvatarGroup({
405
411
  compact={compact}
406
412
  size={size}
407
413
  />
408
- </View>
414
+ </AvatarGroupItem>
409
415
  </GroupCtx.Provider>
410
416
  ) : null}
411
417
  </XStack>
@@ -530,7 +530,7 @@ const ContextMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(function C
530
530
  color={knobProps.textAccentColor}
531
531
  fontSize="$1"
532
532
  flexShrink={0}
533
- marginInlineStart="$4"
533
+ paddingInlineStart="$4"
534
534
  opacity={0.9}
535
535
  >
536
536
  {shortcut}
@@ -765,7 +765,7 @@ const DropdownMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(
765
765
  color={knobProps.textAccentColor}
766
766
  fontSize="$1"
767
767
  flexShrink={0}
768
- marginInlineStart="$4"
768
+ paddingInlineStart="$4"
769
769
  opacity={0.9}
770
770
  >
771
771
  {shortcut}
@@ -96,6 +96,10 @@ const StepButton = styled(View, {
96
96
  focusVisibleStyle: { outlineWidth: 0, outlineStyle: "none" as any },
97
97
  });
98
98
 
99
+ const StepMarkerTarget = styled(View, {
100
+ name: "ProgressStepMarkerTarget",
101
+ });
102
+
99
103
  const Connector = styled(View, {
100
104
  name: "ProgressStepConnector",
101
105
  flexShrink: 0,
@@ -261,7 +265,7 @@ export function ProgressSteps({
261
265
  );
262
266
 
263
267
  const markerTarget = (
264
- <View
268
+ <StepMarkerTarget
265
269
  width={MIN_PRESS_TARGET}
266
270
  height={MIN_PRESS_TARGET}
267
271
  minWidth={MIN_PRESS_TARGET}
@@ -274,7 +278,7 @@ export function ProgressSteps({
274
278
  hitSlop={hitSlop ?? pressTargetHitSlop(markerPx)}
275
279
  >
276
280
  {marker}
277
- </View>
281
+ </StepMarkerTarget>
278
282
  );
279
283
 
280
284
  const labelBlock = (
@@ -282,7 +286,7 @@ export function ProgressSteps({
282
286
  gap="$0.5"
283
287
  flexShrink={1}
284
288
  {...(horizontal
285
- ? { alignItems: "center", marginTop: gapToken, maxWidth: 160 }
289
+ ? { alignItems: "center", maxWidth: 160 }
286
290
  : { flexGrow: 1, justifyContent: "center" })}
287
291
  >
288
292
  <SizableText
@@ -321,32 +325,35 @@ export function ProgressSteps({
321
325
  flexGrow={1}
322
326
  minHeight={16}
323
327
  backgroundColor={connectorFill}
324
- marginTop={2}
325
328
  transition={knobProps.transition}
326
329
  />
327
330
  ) : null;
328
331
 
329
332
  const horizontalConnector = !isLast ? (
330
- <Connector
333
+ <XStack
331
334
  flexGrow={1}
332
- height={connectorThickness}
333
- backgroundColor={connectorFill}
334
- marginTop={(markerPx - connectorThickness) / 2}
335
- marginHorizontal={gapToken}
336
- minWidth={16}
337
- transition={knobProps.transition}
338
- />
335
+ paddingTop={(markerPx - connectorThickness) / 2}
336
+ paddingHorizontal={gapToken}
337
+ >
338
+ <Connector
339
+ flexGrow={1}
340
+ height={connectorThickness}
341
+ backgroundColor={connectorFill}
342
+ minWidth={16}
343
+ transition={knobProps.transition}
344
+ />
345
+ </XStack>
339
346
  ) : null;
340
347
 
341
348
  const showLabels = labels !== "hidden";
342
349
  const body = horizontal ? (
343
- <YStack alignItems="center" flexShrink={0}>
350
+ <YStack alignItems="center" flexShrink={0} gap={gapToken}>
344
351
  {markerTarget}
345
352
  {showLabels ? labelBlock : null}
346
353
  </YStack>
347
354
  ) : (
348
355
  <XStack alignItems="stretch" gap={gapToken} minHeight={MIN_PRESS_TARGET}>
349
- <YStack alignItems="center" width={MIN_PRESS_TARGET} flexShrink={0}>
356
+ <YStack alignItems="center" width={MIN_PRESS_TARGET} flexShrink={0} gap={2}>
350
357
  {markerTarget}
351
358
  {verticalConnector}
352
359
  </YStack>
@@ -6,9 +6,16 @@
6
6
  * responder claim (`onStartShouldSetResponder` returning true). A surface
7
7
  * holding that claim takes every touch that starts on plain content inside
8
8
  * it, and a responder ancestor stops the ScrollView's own pan.
9
+ *
10
+ * The sheet's RN Modal is its own native window, but its touch events still
11
+ * bubble through the React tree to whatever rendered it. A screen ScrollView
12
+ * up there saw onTouchStart, marked itself touching, took the responder on
13
+ * the first scroll event of a list in the sheet, and on release blurred the
14
+ * focused input: the keyboard dropped on the first scroll (MPO-299 AC3).
9
15
  */
10
16
  import { renderWithProviders } from "@multiplatform.one/test-utils";
11
- import { cleanup } from "@testing-library/react";
17
+ import { cleanup, fireEvent } from "@testing-library/react";
18
+ import { View } from "react-native";
12
19
  import { afterEach, expect, it, vi } from "vitest";
13
20
  import { Text } from "tamagui";
14
21
  import { SheetModal } from "./index.native";
@@ -61,3 +68,37 @@ it("keeps every native sheet stack out of the touch responder", () => {
61
68
  stacks.clear();
62
69
  }
63
70
  });
71
+
72
+ it("keeps touches inside the sheet from bubbling to React ancestors outside the modal", () => {
73
+ const outside = { start: vi.fn(), move: vi.fn(), end: vi.fn(), cancel: vi.fn() };
74
+ const inside = vi.fn();
75
+ for (const fill of [false, true]) {
76
+ const view = renderWithProviders(
77
+ <div
78
+ onTouchStart={outside.start}
79
+ onTouchMove={outside.move}
80
+ onTouchEnd={outside.end}
81
+ onTouchCancel={outside.cancel}
82
+ >
83
+ <SheetModal open onOpenChange={() => {}} fill={fill} scrollable>
84
+ <View onTouchStart={inside}>
85
+ <Text>row</Text>
86
+ </View>
87
+ </SheetModal>
88
+ </div>,
89
+ );
90
+ const row = view.getByText("row");
91
+ const touch = { identifier: 0, clientX: 10, clientY: 10, pageX: 10, pageY: 10, force: 1 };
92
+ const down = { touches: [touch], changedTouches: [touch] };
93
+ const up = { touches: [], changedTouches: [touch] };
94
+ fireEvent.touchStart(row, down);
95
+ fireEvent.touchMove(row, down);
96
+ fireEvent.touchEnd(row, up);
97
+ fireEvent.touchCancel(row, up);
98
+ cleanup();
99
+ }
100
+ expect(inside).toHaveBeenCalledTimes(2);
101
+ for (const [phase, handler] of Object.entries(outside)) {
102
+ expect(handler, phase).not.toHaveBeenCalled();
103
+ }
104
+ });
@@ -30,6 +30,7 @@ import {
30
30
  StyleSheet,
31
31
  View as RNView,
32
32
  useWindowDimensions,
33
+ type GestureResponderEvent,
33
34
  } from "react-native";
34
35
  import { SafeAreaInsetsContext, initialWindowMetrics } from "react-native-safe-area-context";
35
36
  import { useResolvedKnobs } from "@multiplatform.one/theme";
@@ -57,6 +58,13 @@ const IN_DIALOG_REGION = { inDialogRegion: true } as const;
57
58
  */
58
59
  const fillSlot = { flex: 1, minHeight: 0 } as const;
59
60
  const nonShrinking = { flexShrink: 0 } as const;
61
+ /*
62
+ * MPO-299: the Modal is its own native window, yet its touch events bubble
63
+ * through the React tree to whatever rendered it. A screen ScrollView there
64
+ * marks itself touching, takes the responder on the first scroll of a list
65
+ * in the sheet, and blurs the focused input on release.
66
+ */
67
+ const stopAtModal = (event: GestureResponderEvent) => event.stopPropagation();
60
68
 
61
69
  export function SheetModal({
62
70
  open,
@@ -348,7 +356,13 @@ export function SheetModal({
348
356
  onRequestClose={close}
349
357
  onShow={enter}
350
358
  >
351
- <RNView style={{ flex: 1, justifyContent: "flex-end", paddingBottom: keyboardInset }}>
359
+ <RNView
360
+ style={{ flex: 1, justifyContent: "flex-end", paddingBottom: keyboardInset }}
361
+ onTouchStart={stopAtModal}
362
+ onTouchMove={stopAtModal}
363
+ onTouchEnd={stopAtModal}
364
+ onTouchCancel={stopAtModal}
365
+ >
352
366
  <Pressable
353
367
  style={StyleSheet.absoluteFill}
354
368
  onPress={handleBackdropPress}
@@ -236,6 +236,10 @@ const StripWrapper = styled(View, {
236
236
  position: "relative",
237
237
  });
238
238
 
239
+ // A slot name for the spec's ## Slot margins table, not styled(): a styled
240
+ // wrapper drops onScroll on native (MPO-368).
241
+ const TabStripScroll = ScrollView;
242
+
239
243
  const TabsList = styled(TamaguiTabs.List, {
240
244
  name: "MpTabsList",
241
245
  unstyled: true,
@@ -732,7 +736,7 @@ function TabsRoot({
732
736
  {tabList}
733
737
  </View>
734
738
  ) : (
735
- <ScrollView
739
+ <TabStripScroll
736
740
  ref={scrollRef}
737
741
  data-tabs-scroll="true"
738
742
  horizontal
@@ -755,7 +759,7 @@ function TabsRoot({
755
759
  }}
756
760
  >
757
761
  {tabList}
758
- </ScrollView>
762
+ </TabStripScroll>
759
763
  )}
760
764
  </StripWrapper>
761
765
 
@@ -0,0 +1,36 @@
1
+ /**
2
+ * MPO-411. The theme playground is the catalog's: a palette toggle that opens
3
+ * the house ThemeDevtoolsPanel in a SheetModal, so a reader flips the scheme,
4
+ * the preset and the style knobs and watches the page restyle live. Web only;
5
+ * the native twin renders nothing because the panel draws raw DOM.
6
+ */
7
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
8
+ import { cleanup, fireEvent, screen, waitFor } from "@testing-library/react";
9
+ import { afterEach, describe, expect, it } from "vitest";
10
+ import { ThemePlayground } from "./index";
11
+ import { ThemePlayground as NativeThemePlayground } from "./index.native";
12
+
13
+ afterEach(cleanup);
14
+
15
+ describe("ThemePlayground", () => {
16
+ it("offers a labelled palette toggle, closed until pressed", async () => {
17
+ renderWithProviders(<ThemePlayground testID="playground" />);
18
+ const toggle = await screen.findByTestId("playground", {}, { timeout: 10000 });
19
+ expect(toggle.getAttribute("aria-label")).toBe("Theme");
20
+ expect(toggle.getAttribute("aria-expanded")).toBe("false");
21
+ });
22
+
23
+ it("opens the playground sheet from the toggle", async () => {
24
+ renderWithProviders(<ThemePlayground testID="playground" />);
25
+ fireEvent.click(await screen.findByTestId("playground", {}, { timeout: 10000 }));
26
+ await waitFor(() =>
27
+ expect(screen.getByTestId("playground").getAttribute("aria-expanded")).toBe("true"),
28
+ );
29
+ expect(await screen.findByText("Theme playground", {}, { timeout: 10000 })).toBeTruthy();
30
+ });
31
+
32
+ it("renders nothing on native", () => {
33
+ const { container } = renderWithProviders(<NativeThemePlayground testID="playground" />);
34
+ expect(container.querySelector('[data-testid="playground"]')).toBeNull();
35
+ });
36
+ });
@@ -0,0 +1,8 @@
1
+ import type { ThemePlaygroundProps } from "./index";
2
+
3
+ export type { ThemePlaygroundProps } from "./index";
4
+
5
+ /** The panel draws raw DOM, so native offers no playground. */
6
+ export function ThemePlayground(_props: ThemePlaygroundProps): null {
7
+ return null;
8
+ }
@@ -0,0 +1,83 @@
1
+ import { ThemeDevtoolsPanel } from "@multiplatform.one/theme";
2
+ import { PaletteIcon } from "@phosphor-icons/react";
3
+ import { Suspense, lazy, useState, type ComponentType } from "react";
4
+ import { useTranslation } from "react-i18next";
5
+ import { SizableText, Text, YStack } from "tamagui";
6
+ import { Button } from "../Button";
7
+ import { SheetModal } from "../SheetModal";
8
+ import { Tooltip } from "../Tooltip";
9
+
10
+ export interface ThemePlaygroundProps {
11
+ testID?: string;
12
+ }
13
+
14
+ /**
15
+ * The panel reads the reader's color scheme through `@vxrn/color-scheme`,
16
+ * an optional peer: without it the panel still opens, minus the scheme row.
17
+ */
18
+ const ScopedPanel = lazy(async (): Promise<{ default: ComponentType<object> }> => {
19
+ const scheme = await import("@vxrn/color-scheme").catch(() => undefined);
20
+ const useUserScheme = scheme?.useUserScheme;
21
+ if (!useUserScheme) {
22
+ return { default: () => <ThemeDevtoolsPanel /> };
23
+ }
24
+ const Panel = () => (
25
+ <ThemeDevtoolsPanel useUserScheme={useUserScheme} devtoolsTheme={useUserScheme().value} />
26
+ );
27
+ return { default: Panel };
28
+ });
29
+
30
+ /**
31
+ * A palette toggle opening the house ThemeDevtoolsPanel in a sheet: scheme,
32
+ * preset and style knobs, restyling the page live (LC-18 as a reader-facing
33
+ * control). The panel stays mounted after the first open so closing the
34
+ * sheet does not blank it mid-slide.
35
+ */
36
+ export function ThemePlayground({ testID }: ThemePlaygroundProps) {
37
+ const { t } = useTranslation();
38
+ const [open, setOpen] = useState(false);
39
+ const [opened, setOpened] = useState(false);
40
+ const change = (next: boolean) => {
41
+ setOpen(next);
42
+ if (next) setOpened(true);
43
+ };
44
+ return (
45
+ <>
46
+ <Tooltip content={t("Restyle the page live: scheme, preset and style knobs")}>
47
+ <Button
48
+ variant={open ? undefined : "outlined"}
49
+ theme={open ? "accent" : undefined}
50
+ minHeight={44}
51
+ minWidth={44}
52
+ onPress={() => change(true)}
53
+ icon={<PaletteIcon size={16} />}
54
+ aria-label={t("Theme")}
55
+ aria-expanded={open}
56
+ testID={testID}
57
+ />
58
+ </Tooltip>
59
+ <SheetModal
60
+ open={open}
61
+ onOpenChange={change}
62
+ snapPoint={85}
63
+ scrollable
64
+ header={
65
+ <YStack>
66
+ <SizableText size="$6" fontWeight="700">
67
+ {t("Theme playground")}
68
+ </SizableText>
69
+ <Text fontSize="$2" color="$color10">
70
+ {t("Changes restyle the page live")}
71
+ </Text>
72
+ </YStack>
73
+ }
74
+ >
75
+ {opened ? (
76
+ <Suspense fallback={null}>
77
+ <ScopedPanel />
78
+ </Suspense>
79
+ ) : null}
80
+ </SheetModal>
81
+ </>
82
+ );
83
+ }
@@ -467,9 +467,9 @@ function ToastBody({
467
467
  <>
468
468
  <View
469
469
  flexShrink={0}
470
- height={iconPx}
470
+ height={iconPx + 1}
471
471
  justifyContent="center"
472
- marginTop={1}
472
+ paddingTop={1}
473
473
  accessible={false}
474
474
  accessibilityElementsHidden
475
475
  importantForAccessibility="no"
@@ -254,13 +254,7 @@ function TreeSelectRows({
254
254
  {node.label}
255
255
  </Text>
256
256
  {hasChildren && childCount > 0 ? (
257
- <Text
258
- fontFamily="$mono"
259
- fontSize={11}
260
- lineHeight={21}
261
- color="$color8"
262
- marginLeft="auto"
263
- >
257
+ <Text fontFamily="$mono" fontSize={11} lineHeight={21} color="$color8">
264
258
  {childCount}
265
259
  </Text>
266
260
  ) : null}
@@ -220,8 +220,8 @@ function SeekBar({
220
220
  left={`${ratio * 100}%`}
221
221
  width={hot ? 14 : 12}
222
222
  height={hot ? 14 : 12}
223
- marginTop={hot ? -7 : -6}
224
- marginLeft={hot ? -7 : -6}
223
+ x={hot ? -7 : -6}
224
+ y={hot ? -7 : -6}
225
225
  backgroundColor="$color12"
226
226
  borderRadius={radius}
227
227
  pointerEvents="none"
@@ -518,6 +518,7 @@ function WizardRoot({
518
518
  ref={shellRef}
519
519
  data-wizard-status="ready"
520
520
  data-wizard-current={String(current)}
521
+ {...knobProps.gap}
521
522
  {...props}
522
523
  >
523
524
  <YStack data-wizard-rail="" width="100%">
@@ -532,7 +533,7 @@ function WizardRoot({
532
533
  }}
533
534
  />
534
535
  </YStack>
535
- <YStack marginTop={knobProps.gap.gap} width="100%">
536
+ <YStack width="100%">
536
537
  <WizardRule />
537
538
  </YStack>
538
539
  {stepErrors.length > 0 ? (
@@ -542,7 +543,6 @@ function WizardRoot({
542
543
  {...knobProps.borderRadius}
543
544
  borderWidth={1}
544
545
  borderColor="$red9"
545
- marginTop={knobProps.gap.gap}
546
546
  width="100%"
547
547
  >
548
548
  <ErrorSummary
@@ -553,42 +553,43 @@ function WizardRoot({
553
553
  />
554
554
  </YStack>
555
555
  ) : null}
556
- <YStack marginTop={knobProps.gap.gap} width="100%">
557
- {steps.map((step, index) => {
558
- const legend = hideLabels ? stepCaption(t, index, steps) : step.label;
559
- return (
560
- <YStack
561
- key={step.id || index}
562
- ref={(node) => {
563
- panelRefs.current[index] = node as HTMLElement | null;
564
- }}
565
- data-wizard-panel=""
566
- data-wizard-fields=""
567
- data-wizard-step-caption={hideLabels ? "" : undefined}
568
- data-active={index === current ? "true" : "false"}
569
- data-step-id={step.id}
570
- display={index === current ? "flex" : "none"}
571
- aria-hidden={index !== current || undefined}
572
- width="100%"
573
- maxWidth={formReadableMaxWidth}
574
- alignSelf="flex-start"
575
- {...knobProps.gap}
576
- >
577
- <FormSection label={legend} compact={compact}>
578
- {panels[index]}
579
- </FormSection>
580
- </YStack>
581
- );
582
- })}
583
- </YStack>
584
- <YStack marginTop={knobProps.gapLg.gap} width="100%">
585
- <WizardRule />
556
+ <YStack {...knobProps.gapLg} width="100%">
557
+ <YStack width="100%">
558
+ {steps.map((step, index) => {
559
+ const legend = hideLabels ? stepCaption(t, index, steps) : step.label;
560
+ return (
561
+ <YStack
562
+ key={step.id || index}
563
+ ref={(node) => {
564
+ panelRefs.current[index] = node as HTMLElement | null;
565
+ }}
566
+ data-wizard-panel=""
567
+ data-wizard-fields=""
568
+ data-wizard-step-caption={hideLabels ? "" : undefined}
569
+ data-active={index === current ? "true" : "false"}
570
+ data-step-id={step.id}
571
+ display={index === current ? "flex" : "none"}
572
+ aria-hidden={index !== current || undefined}
573
+ width="100%"
574
+ maxWidth={formReadableMaxWidth}
575
+ alignSelf="flex-start"
576
+ {...knobProps.gap}
577
+ >
578
+ <FormSection label={legend} compact={compact}>
579
+ {panels[index]}
580
+ </FormSection>
581
+ </YStack>
582
+ );
583
+ })}
584
+ </YStack>
585
+ <YStack width="100%">
586
+ <WizardRule />
587
+ </YStack>
586
588
  </YStack>
587
589
  <ActionBar
588
590
  id={`${reactId}-footer`}
589
591
  data-wizard-footer=""
590
592
  align={hasLeading ? "between" : "end"}
591
- marginTop={knobProps.gap.gap}
592
593
  cancel={
593
594
  hasLeading ? (
594
595
  <XStack gap="$2" flexWrap="wrap" alignItems="center">
@@ -9,7 +9,7 @@
9
9
 
10
10
  import { useResolvedKnobs } from "@multiplatform.one/theme";
11
11
  import type { ReactNode } from "react";
12
- import { Text, isWeb } from "tamagui";
12
+ import { Text, getTokenValue, isWeb } from "tamagui";
13
13
  import type { HighlightLine } from "../Highlighter";
14
14
  import { componentColors } from "../../componentColors";
15
15
 
@@ -50,6 +50,7 @@ export function HighlightedCode({
50
50
  // it (LC-18). $color8 line-number ink fails AA (SB-M-020); $color11
51
51
  // (text.secondary) is the lowest ramp that stays readable on code surfaces.
52
52
  const gutterWidth = lineNumberGutterBySize[String(resolvedFontSize)] ?? 40;
53
+ const gutterGap = getTokenValue("$2" as Parameters<typeof getTokenValue>[0], "space") as number;
53
54
  // While tokens are loading, show the raw children (plain text fallback)
54
55
  // — geometry rides the surrounding type scale, not a fixed catalog px.
55
56
  if (!tokens) {
@@ -79,12 +80,12 @@ export function HighlightedCode({
79
80
  <Text
80
81
  color={knobProps.textAccentColor}
81
82
  fontSize={resolvedFontSize}
82
- width={gutterWidth}
83
+ width={gutterWidth + gutterGap}
84
+ paddingInlineEnd={gutterGap}
83
85
  data-line-number=""
84
86
  display="inline-flex"
85
87
  // "end" is web-only CSS; native textAlign has no logical values
86
88
  textAlign={(isWeb ? "end" : "right") as any}
87
- marginInlineEnd="$2"
88
89
  userSelect="none"
89
90
  >
90
91
  {lineNumber}
package/src/index.ts CHANGED
@@ -23,6 +23,7 @@ export * from "./Meter";
23
23
  export * from "./ProgressSteps";
24
24
  export * from "./TreeSelect";
25
25
  export * from "./Quote";
26
+ export * from "./ThemePlayground";
26
27
  export * from "./Skeleton";
27
28
  export * from "./SkipLink";
28
29
  export * from "./Toast";
@@ -243,22 +243,23 @@ export const CustomEntryRenderer = () => (
243
243
  <Timeline
244
244
  entries={sampleEntries}
245
245
  renderEntry={(entry: TimelineEntry, defaultContent) => (
246
- <YStack
247
- key={entry.id}
248
- padding="$3"
249
- backgroundColor={entry.type === "comment" ? "$blue2" : "$gray2"}
250
- borderRadius="$3"
251
- marginBottom="$2"
252
- >
253
- <XStack justifyContent="space-between" marginBottom="$1">
254
- <Text fontSize="$2" fontWeight="600">
255
- {entry.author}
256
- </Text>
257
- <Text fontSize="$1" color="$gray10">
258
- {entry.type}
259
- </Text>
260
- </XStack>
261
- {defaultContent}
246
+ <YStack key={entry.id} paddingBottom="$2">
247
+ <YStack
248
+ padding="$3"
249
+ gap="$1"
250
+ backgroundColor={entry.type === "comment" ? "$blue2" : "$gray2"}
251
+ borderRadius="$3"
252
+ >
253
+ <XStack justifyContent="space-between">
254
+ <Text fontSize="$2" fontWeight="600">
255
+ {entry.author}
256
+ </Text>
257
+ <Text fontSize="$1" color="$gray10">
258
+ {entry.type}
259
+ </Text>
260
+ </XStack>
261
+ {defaultContent}
262
+ </YStack>
262
263
  </YStack>
263
264
  )}
264
265
  />
@@ -617,6 +617,7 @@ export function Attachments({
617
617
  <YStack
618
618
  {...(compact ? { padding: "$2" } : knobProps.panelPadding)}
619
619
  alignItems="center"
620
+ gap="$2"
620
621
  {...knobProps.borderRadius}
621
622
  borderWidth={canAdd ? 1 : 0}
622
623
  borderStyle={canAdd ? "dashed" : undefined}
@@ -629,7 +630,7 @@ export function Attachments({
629
630
  {...dropHandlers}
630
631
  >
631
632
  <PaperclipIcon size={compact ? 20 : 28} />
632
- <Text color={knobProps.textAccentColor} fontSize={compact ? "$2" : "$3"} marginTop="$2">
633
+ <Text color={knobProps.textAccentColor} fontSize={compact ? "$2" : "$3"}>
633
634
  {noAttachmentsLabel}
634
635
  </Text>
635
636
  </YStack>