@multiplatform.one/components 7.80.0 → 7.81.1

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 (615) 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/CheckGlyph/MenuCheckColumn.cjs +56 -0
  15. package/dist/cjs/CheckGlyph/MenuCheckColumn.native.js +60 -0
  16. package/dist/cjs/CheckGlyph/MenuCheckColumn.native.js.map +1 -0
  17. package/dist/cjs/CheckGlyph/index.cjs +40 -0
  18. package/dist/cjs/CheckGlyph/index.native.js +44 -0
  19. package/dist/cjs/CheckGlyph/index.native.js.map +1 -0
  20. package/dist/cjs/Chip/index.native.js.map +1 -1
  21. package/dist/cjs/Collapsible.native.js.map +1 -1
  22. package/dist/cjs/ContextMenu/index.cjs +5 -22
  23. package/dist/cjs/ContextMenu/index.native.js +7 -25
  24. package/dist/cjs/ContextMenu/index.native.js.map +1 -1
  25. package/dist/cjs/CopyField/CopyMenuButton.native.js +1 -1
  26. package/dist/cjs/CopyField/CopyMenuButton.native.js.map +1 -1
  27. package/dist/cjs/CopyField/index.native.js.map +1 -1
  28. package/dist/cjs/Dialog.native.js.map +1 -1
  29. package/dist/cjs/Diff/diff.native.js.map +1 -1
  30. package/dist/cjs/Diff/index.native.js.map +1 -1
  31. package/dist/cjs/DotIndicator/index.native.js.map +1 -1
  32. package/dist/cjs/DropdownMenu/index.cjs +5 -17
  33. package/dist/cjs/DropdownMenu/index.native.js +7 -19
  34. package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
  35. package/dist/cjs/DropdownMenu/menuSettle.native.js.map +1 -1
  36. package/dist/cjs/ElapsedProgress/index.native.js.map +1 -1
  37. package/dist/cjs/ErrorBoundary/index.native.js.map +1 -1
  38. package/dist/cjs/Heading.native.js.map +1 -1
  39. package/dist/cjs/Kbd/index.native.js.map +1 -1
  40. package/dist/cjs/Kbd/keys.native.js.map +1 -1
  41. package/dist/cjs/Lightbox/MediaControl.native.js.map +1 -1
  42. package/dist/cjs/Lightbox/index.gnome.native.js.map +1 -1
  43. package/dist/cjs/Lightbox/index.native.js +1 -1
  44. package/dist/cjs/Lightbox/shared.native.js.map +1 -1
  45. package/dist/cjs/Lightbox/useLightbox.native.js.map +1 -1
  46. package/dist/cjs/MachineLiteral/index.native.js.map +1 -1
  47. package/dist/cjs/Material/index.native.js.map +1 -1
  48. package/dist/cjs/Meter/index.native.js +1 -1
  49. package/dist/cjs/Meter/index.native.js.map +1 -1
  50. package/dist/cjs/Meter/meter.native.js.map +1 -1
  51. package/dist/cjs/OverflowRow/index.native.js +1 -1
  52. package/dist/cjs/OverflowRow/index.native.js.map +1 -1
  53. package/dist/cjs/Pagination.native.js +1 -1
  54. package/dist/cjs/Pagination.native.js.map +1 -1
  55. package/dist/cjs/Popover.cjs +2 -2
  56. package/dist/cjs/Popover.native.js +3 -3
  57. package/dist/cjs/Popover.native.js.map +1 -1
  58. package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
  59. package/dist/cjs/Quote/index.native.js.map +1 -1
  60. package/dist/cjs/SchemeToggle/index.cjs +2 -2
  61. package/dist/cjs/SchemeToggle/index.native.js +3 -3
  62. package/dist/cjs/SchemeToggle/index.native.js.map +1 -1
  63. package/dist/cjs/ScrollView/revealFocusedField.native.js.map +1 -1
  64. package/dist/cjs/Separator/index.native.js.map +1 -1
  65. package/dist/cjs/Sheet.native.js.map +1 -1
  66. package/dist/cjs/SheetModal/SheetHeader.native.js.map +1 -1
  67. package/dist/cjs/SheetModal/SheetNavigation.native.js.map +1 -1
  68. package/dist/cjs/SheetModal/detents.native.js.map +1 -1
  69. package/dist/cjs/SheetModal/index.cjs +5 -10
  70. package/dist/cjs/SheetModal/index.native.js +8 -12
  71. package/dist/cjs/SheetModal/index.native.js.map +1 -1
  72. package/dist/cjs/SheetModal/useSheetFrameFocus.native.js.map +1 -1
  73. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  74. package/dist/cjs/SkipLink/index.native.js.map +1 -1
  75. package/dist/cjs/SortableList/SortableHandle.native.js.map +1 -1
  76. package/dist/cjs/SortableList/index.native.js.map +1 -1
  77. package/dist/cjs/SortableList/useSortableRows.native.js.map +1 -1
  78. package/dist/cjs/SortableList/useUserOrder.native.js.map +1 -1
  79. package/dist/cjs/Tabs/index.native.js +1 -1
  80. package/dist/cjs/Tabs/index.native.js.map +1 -1
  81. package/dist/cjs/Text.native.js.map +1 -1
  82. package/dist/cjs/ThemePresetPicker/index.native.js +2 -2
  83. package/dist/cjs/ThemePresetPicker/index.native.js.map +1 -1
  84. package/dist/cjs/Toast/index.native.js.map +1 -1
  85. package/dist/cjs/Toast/store.native.js.map +1 -1
  86. package/dist/cjs/Tooltip/nativePress.native.js.map +1 -1
  87. package/dist/cjs/Tooltip/tooltipShared.native.js.map +1 -1
  88. package/dist/cjs/TreeSelect/index.cjs +2 -6
  89. package/dist/cjs/TreeSelect/index.native.js +3 -7
  90. package/dist/cjs/TreeSelect/index.native.js.map +1 -1
  91. package/dist/cjs/TreeSelect/treeSelectModel.native.js.map +1 -1
  92. package/dist/cjs/Video/PlayerChrome.native.js.map +1 -1
  93. package/dist/cjs/Video/VideoFrame.native.js.map +1 -1
  94. package/dist/cjs/Video/types.native.js.map +1 -1
  95. package/dist/cjs/Wheel/index.native.js.map +1 -1
  96. package/dist/cjs/Wizard/index.native.js +2 -2
  97. package/dist/cjs/Wizard/index.native.js.map +1 -1
  98. package/dist/cjs/actions/ActionBar.native.js.map +1 -1
  99. package/dist/cjs/actions/DangerSection.native.js.map +1 -1
  100. package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
  101. package/dist/cjs/actions/HeaderActions.native.js +2 -2
  102. package/dist/cjs/actions/HeaderActions.native.js.map +1 -1
  103. package/dist/cjs/actions/StandardAction.native.js +1 -1
  104. package/dist/cjs/actions/StandardAction.native.js.map +1 -1
  105. package/dist/cjs/actions/devWarn.native.js.map +1 -1
  106. package/dist/cjs/actions/index.native.js.map +1 -1
  107. package/dist/cjs/actions/severity.native.js.map +1 -1
  108. package/dist/cjs/appShell/AppShell.cjs +31 -17
  109. package/dist/cjs/appShell/AppShell.native.js +37 -23
  110. package/dist/cjs/appShell/AppShell.native.js.map +1 -1
  111. package/dist/cjs/appShell/Dock.native.js.map +1 -1
  112. package/dist/cjs/appShell/MpoTabHost.native.js.map +1 -1
  113. package/dist/cjs/appShell/ScopeMenu.cjs +39 -16
  114. package/dist/cjs/appShell/ScopeMenu.native.js +43 -17
  115. package/dist/cjs/appShell/ScopeMenu.native.js.map +1 -1
  116. package/dist/cjs/appShell/SettingsSplit.native.js +1 -1
  117. package/dist/cjs/appShell/SettingsSplit.native.js.map +1 -1
  118. package/dist/cjs/appShell/Springboard.native.js +1 -1
  119. package/dist/cjs/appShell/Springboard.native.js.map +1 -1
  120. package/dist/cjs/appShell/SystemBar.native.js.map +1 -1
  121. package/dist/cjs/appShell/TabBar.native.js +1 -1
  122. package/dist/cjs/appShell/TabBar.native.js.map +1 -1
  123. package/dist/cjs/appShell/TabHost.native.js +48 -11
  124. package/dist/cjs/appShell/TabHost.native.js.map +1 -1
  125. package/dist/cjs/appShell/appTile.native.js +1 -1
  126. package/dist/cjs/appShell/appTile.native.js.map +1 -1
  127. package/dist/cjs/appShell/bottomChrome.cjs +12 -1
  128. package/dist/cjs/appShell/bottomChrome.native.js +13 -1
  129. package/dist/cjs/appShell/bottomChrome.native.js.map +1 -1
  130. package/dist/cjs/appShell/index.native.js.map +1 -1
  131. package/dist/cjs/charts/Axis.native.js.map +1 -1
  132. package/dist/cjs/charts/BarChart.native.js.map +1 -1
  133. package/dist/cjs/charts/ChartDataView.native.js +1 -1
  134. package/dist/cjs/charts/ChartDataView.native.js.map +1 -1
  135. package/dist/cjs/charts/ChartSurface.native.js.map +1 -1
  136. package/dist/cjs/charts/LineChart.native.js.map +1 -1
  137. package/dist/cjs/charts/PieChart.native.js.map +1 -1
  138. package/dist/cjs/charts/Sparkline.native.js.map +1 -1
  139. package/dist/cjs/charts/accessibility.native.js.map +1 -1
  140. package/dist/cjs/charts/chartHeight.native.js.map +1 -1
  141. package/dist/cjs/charts/composeChart.native.js.map +1 -1
  142. package/dist/cjs/charts/index.native.js.map +1 -1
  143. package/dist/cjs/charts/math.native.js.map +1 -1
  144. package/dist/cjs/charts/series.native.js.map +1 -1
  145. package/dist/cjs/charts/svg.native.js.map +1 -1
  146. package/dist/cjs/charts/types.native.js.map +1 -1
  147. package/dist/cjs/charts/useChartTheme.native.js.map +1 -1
  148. package/dist/cjs/code/Code/index.native.js.map +1 -1
  149. package/dist/cjs/code/CodeBlock/index.native.js +7 -7
  150. package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
  151. package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
  152. package/dist/cjs/code/Highlighter/houseSyntaxTheme.native.js.map +1 -1
  153. package/dist/cjs/code/Highlighter/index.native.js.map +1 -1
  154. package/dist/cjs/code/Highlighter/namedGroupMatchAll.native.js.map +1 -1
  155. package/dist/cjs/code/Pre/index.native.js.map +1 -1
  156. package/dist/cjs/code/index.native.js +5 -5
  157. package/dist/cjs/code/index.native.js.map +1 -1
  158. package/dist/cjs/componentColors.native.js.map +1 -1
  159. package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
  160. package/dist/cjs/feedback/NotifyHost.native.js +2 -2
  161. package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
  162. package/dist/cjs/feedback/copy.native.js.map +1 -1
  163. package/dist/cjs/feedback/index.native.js.map +1 -1
  164. package/dist/cjs/feedback/notify.native.js.map +1 -1
  165. package/dist/cjs/feedback/route.native.js.map +1 -1
  166. package/dist/cjs/feedback/store.native.js.map +1 -1
  167. package/dist/cjs/formLayouts/FormLayouts.native.js +1 -1
  168. package/dist/cjs/formLayouts/FormLayouts.native.js.map +1 -1
  169. package/dist/cjs/formLayouts/PreferencePanel.native.js +2 -2
  170. package/dist/cjs/formLayouts/PreferencePanel.native.js.map +1 -1
  171. package/dist/cjs/formLayouts/index.native.js.map +1 -1
  172. package/dist/cjs/hooks/index.native.js +1 -1
  173. package/dist/cjs/hooks/index.native.js.map +1 -1
  174. package/dist/cjs/hooks/useClipboard.native.js.map +1 -1
  175. package/dist/cjs/hooks/useDocumentTitle.native.js.map +1 -1
  176. package/dist/cjs/hooks/useHoldCue.native.js.map +1 -1
  177. package/dist/cjs/icons/CheckRegular.native.js.map +1 -1
  178. package/dist/cjs/icons/MinusRegular.native.js.map +1 -1
  179. package/dist/cjs/icons/index.native.js.map +1 -1
  180. package/dist/cjs/icons/lucide.native.js.map +1 -1
  181. package/dist/cjs/icons/themed.native.js.map +1 -1
  182. package/dist/cjs/images/Image/ImageFrame.native.js +1 -1
  183. package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -1
  184. package/dist/cjs/images/Image/framing.native.js.map +1 -1
  185. package/dist/cjs/images/Image/index.native.js +1 -1
  186. package/dist/cjs/images/Image/mediaRadius.native.js.map +1 -1
  187. package/dist/cjs/images/Image/shared.native.js +1 -1
  188. package/dist/cjs/images/Image/shared.native.js.map +1 -1
  189. package/dist/cjs/images/Image/types.native.js.map +1 -1
  190. package/dist/cjs/images/index.native.js.map +1 -1
  191. package/dist/cjs/index.native.js +39 -39
  192. package/dist/cjs/index.native.js.map +1 -1
  193. package/dist/cjs/knobImmuneExports.native.js.map +1 -1
  194. package/dist/cjs/layouts/AsyncBoundary.native.js +2 -2
  195. package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
  196. package/dist/cjs/layouts/Debug/index.native.js.map +1 -1
  197. package/dist/cjs/layouts/EmptyState.native.js.map +1 -1
  198. package/dist/cjs/layouts/IdentityPlate.native.js.map +1 -1
  199. package/dist/cjs/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  200. package/dist/cjs/layouts/PageTemplates.native.js.map +1 -1
  201. package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
  202. package/dist/cjs/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  203. package/dist/cjs/layouts/StatusDot.native.js.map +1 -1
  204. package/dist/cjs/layouts/StatusGlyphStrip.native.js +1 -1
  205. package/dist/cjs/layouts/StatusGlyphStrip.native.js.map +1 -1
  206. package/dist/cjs/layouts/ViewSwitcher.native.js.map +1 -1
  207. package/dist/cjs/layouts/attachments.native.js +1 -1
  208. package/dist/cjs/layouts/attachments.native.js.map +1 -1
  209. package/dist/cjs/layouts/bottomAccessory.native.js.map +1 -1
  210. package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
  211. package/dist/cjs/layouts/index.native.js +3 -3
  212. package/dist/cjs/layouts/index.native.js.map +1 -1
  213. package/dist/cjs/layouts/page.native.js +2 -2
  214. package/dist/cjs/layouts/page.native.js.map +1 -1
  215. package/dist/cjs/layouts/pageHeadingScope.native.js.map +1 -1
  216. package/dist/cjs/layouts/screenScroll.native.js.map +1 -1
  217. package/dist/cjs/layouts/shellSidebarSlot.native.js.map +1 -1
  218. package/dist/cjs/layouts/sidebar.cjs +29 -8
  219. package/dist/cjs/layouts/sidebar.native.js +31 -9
  220. package/dist/cjs/layouts/sidebar.native.js.map +1 -1
  221. package/dist/cjs/layouts/tags.native.js +2 -2
  222. package/dist/cjs/layouts/tags.native.js.map +1 -1
  223. package/dist/cjs/layouts/timeline.native.js +2 -2
  224. package/dist/cjs/layouts/timeline.native.js.map +1 -1
  225. package/dist/cjs/layouts/toolbar.native.js +1 -1
  226. package/dist/cjs/layouts/toolbar.native.js.map +1 -1
  227. package/dist/cjs/shared/actionScan.native.js.map +1 -1
  228. package/dist/cjs/shared/i18n.native.js.map +1 -1
  229. package/dist/cjs/shared/restoreRetries.native.js.map +1 -1
  230. package/dist/cjs/shared/t.native.js.map +1 -1
  231. package/dist/cjs/shared/textRidesText.native.js.map +1 -1
  232. package/dist/cjs/shared/useReturnFocusOnClose.native.js.map +1 -1
  233. package/dist/cjs/surfaces.native.js +1 -1
  234. package/dist/cjs/surfaces.native.js.map +1 -1
  235. package/dist/cjs/tamagui.native.js +1 -1
  236. package/dist/cjs/tamagui.native.js.map +1 -1
  237. package/dist/cjs/testSetup.native.js.map +1 -1
  238. package/dist/cjs/utils/setTinted.native.js.map +1 -1
  239. package/dist/cjs/utils/unwrapText.native.js.map +1 -1
  240. package/dist/cjs/views/Calendar.native.js +1 -1
  241. package/dist/cjs/views/Calendar.native.js.map +1 -1
  242. package/dist/cjs/views/Dashboard.native.js +2 -2
  243. package/dist/cjs/views/Dashboard.native.js.map +1 -1
  244. package/dist/cjs/views/Gantt.native.js +2 -2
  245. package/dist/cjs/views/Gantt.native.js.map +1 -1
  246. package/dist/cjs/views/GanttDateGrip.native.js.map +1 -1
  247. package/dist/cjs/views/ImageGrid.native.js +2 -2
  248. package/dist/cjs/views/ImageGrid.native.js.map +1 -1
  249. package/dist/cjs/views/Kanban.native.js +1 -1
  250. package/dist/cjs/views/List.native.js.map +1 -1
  251. package/dist/cjs/views/ListGroup.native.js.map +1 -1
  252. package/dist/cjs/views/ListRow.native.js.map +1 -1
  253. package/dist/cjs/views/Matrix.native.js +2 -2
  254. package/dist/cjs/views/Matrix.native.js.map +1 -1
  255. package/dist/cjs/views/ReportBuilder.native.js +2 -2
  256. package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
  257. package/dist/cjs/views/ShortcutCard.native.js.map +1 -1
  258. package/dist/cjs/views/TreeView.native.js.map +1 -1
  259. package/dist/cjs/views/calendarMath.native.js.map +1 -1
  260. package/dist/cjs/views/ganttIntervals.native.js.map +1 -1
  261. package/dist/cjs/views/ganttMath.native.js.map +1 -1
  262. package/dist/cjs/views/index.native.js +1 -1
  263. package/dist/cjs/views/index.native.js.map +1 -1
  264. package/dist/cjs/views/kanbanDnd.native.js.map +1 -1
  265. package/dist/cjs/views/matrixMath.native.js.map +1 -1
  266. package/dist/cjs/views/sameNameScope.native.js.map +1 -1
  267. package/dist/cjs/views/treeViewDnd.native.js.map +1 -1
  268. package/dist/cjs/views/treeViewLayout.native.js.map +1 -1
  269. package/dist/cjs/views/treeViewMotion.native.js.map +1 -1
  270. package/dist/cjs/views/treeViewReveal.native.js.map +1 -1
  271. package/dist/cjs/views/usePageFlowLoadMore.native.js.map +1 -1
  272. package/dist/cjs/views/widgetChrome.native.js.map +1 -1
  273. package/dist/esm/Accordion/index.native.js.map +1 -1
  274. package/dist/esm/AnimateHeight/index.native.js.map +1 -1
  275. package/dist/esm/Avatar/getInitials.native.js.map +1 -1
  276. package/dist/esm/Avatar/index.native.js.map +1 -1
  277. package/dist/esm/Badge/index.native.js.map +1 -1
  278. package/dist/esm/Button.native.js.map +1 -1
  279. package/dist/esm/Carousel/index.native.js.map +1 -1
  280. package/dist/esm/CheckGlyph/MenuCheckColumn.mjs +31 -0
  281. package/dist/esm/CheckGlyph/MenuCheckColumn.mjs.map +1 -0
  282. package/dist/esm/CheckGlyph/MenuCheckColumn.native.js +32 -0
  283. package/dist/esm/CheckGlyph/MenuCheckColumn.native.js.map +1 -0
  284. package/dist/esm/CheckGlyph/index.mjs +15 -0
  285. package/dist/esm/CheckGlyph/index.mjs.map +1 -0
  286. package/dist/esm/CheckGlyph/index.native.js +16 -0
  287. package/dist/esm/CheckGlyph/index.native.js.map +1 -0
  288. package/dist/esm/Chip/index.native.js.map +1 -1
  289. package/dist/esm/Collapsible.native.js.map +1 -1
  290. package/dist/esm/ContextMenu/index.mjs +6 -23
  291. package/dist/esm/ContextMenu/index.mjs.map +1 -1
  292. package/dist/esm/ContextMenu/index.native.js +8 -26
  293. package/dist/esm/ContextMenu/index.native.js.map +1 -1
  294. package/dist/esm/CopyField/CopyMenuButton.native.js.map +1 -1
  295. package/dist/esm/CopyField/index.native.js.map +1 -1
  296. package/dist/esm/Dialog.native.js.map +1 -1
  297. package/dist/esm/Diff/diff.native.js.map +1 -1
  298. package/dist/esm/Diff/index.native.js.map +1 -1
  299. package/dist/esm/DotIndicator/index.native.js.map +1 -1
  300. package/dist/esm/DropdownMenu/index.mjs +6 -18
  301. package/dist/esm/DropdownMenu/index.mjs.map +1 -1
  302. package/dist/esm/DropdownMenu/index.native.js +8 -20
  303. package/dist/esm/DropdownMenu/index.native.js.map +1 -1
  304. package/dist/esm/DropdownMenu/menuSettle.native.js.map +1 -1
  305. package/dist/esm/ElapsedProgress/index.native.js.map +1 -1
  306. package/dist/esm/ErrorBoundary/index.native.js.map +1 -1
  307. package/dist/esm/Heading.native.js.map +1 -1
  308. package/dist/esm/Kbd/index.native.js.map +1 -1
  309. package/dist/esm/Kbd/keys.native.js.map +1 -1
  310. package/dist/esm/Lightbox/MediaControl.native.js.map +1 -1
  311. package/dist/esm/Lightbox/index.gnome.native.js.map +1 -1
  312. package/dist/esm/Lightbox/shared.native.js.map +1 -1
  313. package/dist/esm/Lightbox/useLightbox.native.js.map +1 -1
  314. package/dist/esm/MachineLiteral/index.native.js.map +1 -1
  315. package/dist/esm/Material/index.native.js.map +1 -1
  316. package/dist/esm/Meter/index.native.js.map +1 -1
  317. package/dist/esm/Meter/meter.native.js.map +1 -1
  318. package/dist/esm/OverflowRow/index.native.js.map +1 -1
  319. package/dist/esm/Pagination.native.js.map +1 -1
  320. package/dist/esm/Popover.mjs +2 -2
  321. package/dist/esm/Popover.mjs.map +1 -1
  322. package/dist/esm/Popover.native.js +2 -2
  323. package/dist/esm/Popover.native.js.map +1 -1
  324. package/dist/esm/ProgressSteps/index.native.js.map +1 -1
  325. package/dist/esm/Quote/index.native.js.map +1 -1
  326. package/dist/esm/SchemeToggle/index.mjs +3 -3
  327. package/dist/esm/SchemeToggle/index.mjs.map +1 -1
  328. package/dist/esm/SchemeToggle/index.native.js +3 -3
  329. package/dist/esm/SchemeToggle/index.native.js.map +1 -1
  330. package/dist/esm/ScrollView/revealFocusedField.native.js.map +1 -1
  331. package/dist/esm/Separator/index.native.js.map +1 -1
  332. package/dist/esm/Sheet.native.js.map +1 -1
  333. package/dist/esm/SheetModal/SheetHeader.native.js.map +1 -1
  334. package/dist/esm/SheetModal/SheetNavigation.native.js.map +1 -1
  335. package/dist/esm/SheetModal/detents.native.js.map +1 -1
  336. package/dist/esm/SheetModal/index.mjs +6 -11
  337. package/dist/esm/SheetModal/index.mjs.map +1 -1
  338. package/dist/esm/SheetModal/index.native.js +9 -13
  339. package/dist/esm/SheetModal/index.native.js.map +1 -1
  340. package/dist/esm/SheetModal/useSheetFrameFocus.native.js.map +1 -1
  341. package/dist/esm/Skeleton/index.native.js.map +1 -1
  342. package/dist/esm/SkipLink/index.native.js.map +1 -1
  343. package/dist/esm/SortableList/SortableHandle.native.js.map +1 -1
  344. package/dist/esm/SortableList/index.native.js.map +1 -1
  345. package/dist/esm/SortableList/useSortableRows.native.js.map +1 -1
  346. package/dist/esm/SortableList/useUserOrder.native.js.map +1 -1
  347. package/dist/esm/Tabs/index.native.js.map +1 -1
  348. package/dist/esm/Text.native.js.map +1 -1
  349. package/dist/esm/ThemePresetPicker/index.native.js.map +1 -1
  350. package/dist/esm/Toast/index.native.js.map +1 -1
  351. package/dist/esm/Toast/store.native.js.map +1 -1
  352. package/dist/esm/Tooltip/nativePress.native.js.map +1 -1
  353. package/dist/esm/Tooltip/tooltipShared.native.js.map +1 -1
  354. package/dist/esm/TreeSelect/index.mjs +4 -8
  355. package/dist/esm/TreeSelect/index.mjs.map +1 -1
  356. package/dist/esm/TreeSelect/index.native.js +4 -8
  357. package/dist/esm/TreeSelect/index.native.js.map +1 -1
  358. package/dist/esm/TreeSelect/treeSelectModel.native.js.map +1 -1
  359. package/dist/esm/Video/PlayerChrome.native.js.map +1 -1
  360. package/dist/esm/Video/VideoFrame.native.js.map +1 -1
  361. package/dist/esm/Video/types.native.js.map +1 -1
  362. package/dist/esm/Wheel/index.native.js.map +1 -1
  363. package/dist/esm/Wizard/index.native.js.map +1 -1
  364. package/dist/esm/actions/ActionBar.native.js.map +1 -1
  365. package/dist/esm/actions/DangerSection.native.js.map +1 -1
  366. package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
  367. package/dist/esm/actions/HeaderActions.native.js.map +1 -1
  368. package/dist/esm/actions/StandardAction.native.js.map +1 -1
  369. package/dist/esm/actions/devWarn.native.js.map +1 -1
  370. package/dist/esm/actions/index.native.js.map +1 -1
  371. package/dist/esm/actions/severity.native.js.map +1 -1
  372. package/dist/esm/appShell/AppShell.mjs +32 -18
  373. package/dist/esm/appShell/AppShell.mjs.map +1 -1
  374. package/dist/esm/appShell/AppShell.native.js +37 -23
  375. package/dist/esm/appShell/AppShell.native.js.map +1 -1
  376. package/dist/esm/appShell/Dock.native.js.map +1 -1
  377. package/dist/esm/appShell/MpoTabHost.native.js.map +1 -1
  378. package/dist/esm/appShell/ScopeMenu.mjs +43 -20
  379. package/dist/esm/appShell/ScopeMenu.mjs.map +1 -1
  380. package/dist/esm/appShell/ScopeMenu.native.js +47 -21
  381. package/dist/esm/appShell/ScopeMenu.native.js.map +1 -1
  382. package/dist/esm/appShell/SettingsSplit.native.js.map +1 -1
  383. package/dist/esm/appShell/Springboard.native.js.map +1 -1
  384. package/dist/esm/appShell/SystemBar.native.js.map +1 -1
  385. package/dist/esm/appShell/TabBar.mjs.map +1 -1
  386. package/dist/esm/appShell/TabBar.native.js.map +1 -1
  387. package/dist/esm/appShell/TabHost.native.js +48 -13
  388. package/dist/esm/appShell/TabHost.native.js.map +1 -1
  389. package/dist/esm/appShell/appTile.native.js.map +1 -1
  390. package/dist/esm/appShell/bottomChrome.mjs +13 -3
  391. package/dist/esm/appShell/bottomChrome.mjs.map +1 -1
  392. package/dist/esm/appShell/bottomChrome.native.js +14 -3
  393. package/dist/esm/appShell/bottomChrome.native.js.map +1 -1
  394. package/dist/esm/appShell/index.native.js.map +1 -1
  395. package/dist/esm/charts/Axis.native.js.map +1 -1
  396. package/dist/esm/charts/BarChart.native.js.map +1 -1
  397. package/dist/esm/charts/ChartDataView.native.js.map +1 -1
  398. package/dist/esm/charts/ChartSurface.native.js.map +1 -1
  399. package/dist/esm/charts/LineChart.native.js.map +1 -1
  400. package/dist/esm/charts/PieChart.native.js.map +1 -1
  401. package/dist/esm/charts/Sparkline.native.js.map +1 -1
  402. package/dist/esm/charts/accessibility.native.js.map +1 -1
  403. package/dist/esm/charts/chartHeight.native.js.map +1 -1
  404. package/dist/esm/charts/composeChart.native.js.map +1 -1
  405. package/dist/esm/charts/index.native.js.map +1 -1
  406. package/dist/esm/charts/math.native.js.map +1 -1
  407. package/dist/esm/charts/series.native.js.map +1 -1
  408. package/dist/esm/charts/svg.native.js.map +1 -1
  409. package/dist/esm/charts/types.native.js.map +1 -1
  410. package/dist/esm/charts/useChartTheme.native.js.map +1 -1
  411. package/dist/esm/code/Code/index.native.js.map +1 -1
  412. package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
  413. package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
  414. package/dist/esm/code/Highlighter/houseSyntaxTheme.native.js.map +1 -1
  415. package/dist/esm/code/Highlighter/index.native.js.map +1 -1
  416. package/dist/esm/code/Highlighter/namedGroupMatchAll.native.js.map +1 -1
  417. package/dist/esm/code/Pre/index.native.js.map +1 -1
  418. package/dist/esm/code/index.native.js.map +1 -1
  419. package/dist/esm/componentColors.native.js.map +1 -1
  420. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  421. package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
  422. package/dist/esm/feedback/copy.native.js.map +1 -1
  423. package/dist/esm/feedback/index.native.js.map +1 -1
  424. package/dist/esm/feedback/notify.native.js.map +1 -1
  425. package/dist/esm/feedback/route.native.js.map +1 -1
  426. package/dist/esm/feedback/store.native.js.map +1 -1
  427. package/dist/esm/formLayouts/FormLayouts.native.js.map +1 -1
  428. package/dist/esm/formLayouts/PreferencePanel.native.js.map +1 -1
  429. package/dist/esm/formLayouts/index.native.js.map +1 -1
  430. package/dist/esm/hooks/index.native.js.map +1 -1
  431. package/dist/esm/hooks/useClipboard.native.js.map +1 -1
  432. package/dist/esm/hooks/useDocumentTitle.native.js.map +1 -1
  433. package/dist/esm/hooks/useHoldCue.native.js.map +1 -1
  434. package/dist/esm/icons/CheckRegular.native.js.map +1 -1
  435. package/dist/esm/icons/MinusRegular.native.js.map +1 -1
  436. package/dist/esm/icons/index.native.js.map +1 -1
  437. package/dist/esm/icons/lucide.native.js.map +1 -1
  438. package/dist/esm/icons/themed.native.js.map +1 -1
  439. package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
  440. package/dist/esm/images/Image/framing.native.js.map +1 -1
  441. package/dist/esm/images/Image/mediaRadius.native.js.map +1 -1
  442. package/dist/esm/images/Image/shared.native.js.map +1 -1
  443. package/dist/esm/images/Image/types.native.js.map +1 -1
  444. package/dist/esm/images/index.native.js.map +1 -1
  445. package/dist/esm/index.native.js.map +1 -1
  446. package/dist/esm/knobImmuneExports.native.js.map +1 -1
  447. package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
  448. package/dist/esm/layouts/Debug/index.native.js.map +1 -1
  449. package/dist/esm/layouts/EmptyState.native.js.map +1 -1
  450. package/dist/esm/layouts/IdentityPlate.native.js.map +1 -1
  451. package/dist/esm/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  452. package/dist/esm/layouts/PageTemplates.native.js.map +1 -1
  453. package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
  454. package/dist/esm/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  455. package/dist/esm/layouts/StatusDot.native.js.map +1 -1
  456. package/dist/esm/layouts/StatusGlyphStrip.native.js.map +1 -1
  457. package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
  458. package/dist/esm/layouts/attachments.native.js.map +1 -1
  459. package/dist/esm/layouts/bottomAccessory.native.js.map +1 -1
  460. package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
  461. package/dist/esm/layouts/index.native.js.map +1 -1
  462. package/dist/esm/layouts/page.native.js.map +1 -1
  463. package/dist/esm/layouts/pageHeadingScope.native.js.map +1 -1
  464. package/dist/esm/layouts/screenScroll.native.js.map +1 -1
  465. package/dist/esm/layouts/shellSidebarSlot.native.js.map +1 -1
  466. package/dist/esm/layouts/sidebar.mjs +31 -10
  467. package/dist/esm/layouts/sidebar.mjs.map +1 -1
  468. package/dist/esm/layouts/sidebar.native.js +32 -10
  469. package/dist/esm/layouts/sidebar.native.js.map +1 -1
  470. package/dist/esm/layouts/tags.native.js.map +1 -1
  471. package/dist/esm/layouts/timeline.native.js.map +1 -1
  472. package/dist/esm/layouts/toolbar.native.js.map +1 -1
  473. package/dist/esm/shared/actionScan.native.js.map +1 -1
  474. package/dist/esm/shared/i18n.native.js.map +1 -1
  475. package/dist/esm/shared/restoreRetries.native.js.map +1 -1
  476. package/dist/esm/shared/t.native.js.map +1 -1
  477. package/dist/esm/shared/textRidesText.native.js.map +1 -1
  478. package/dist/esm/shared/useReturnFocusOnClose.native.js.map +1 -1
  479. package/dist/esm/surfaces.native.js.map +1 -1
  480. package/dist/esm/tamagui.native.js.map +1 -1
  481. package/dist/esm/testSetup.native.js.map +1 -1
  482. package/dist/esm/utils/setTinted.native.js.map +1 -1
  483. package/dist/esm/utils/unwrapText.native.js.map +1 -1
  484. package/dist/esm/views/Calendar.native.js.map +1 -1
  485. package/dist/esm/views/Dashboard.native.js.map +1 -1
  486. package/dist/esm/views/Gantt.native.js.map +1 -1
  487. package/dist/esm/views/GanttDateGrip.native.js.map +1 -1
  488. package/dist/esm/views/ImageGrid.native.js.map +1 -1
  489. package/dist/esm/views/List.native.js.map +1 -1
  490. package/dist/esm/views/ListGroup.native.js.map +1 -1
  491. package/dist/esm/views/ListRow.native.js.map +1 -1
  492. package/dist/esm/views/Matrix.native.js.map +1 -1
  493. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  494. package/dist/esm/views/ShortcutCard.native.js.map +1 -1
  495. package/dist/esm/views/TreeView.native.js.map +1 -1
  496. package/dist/esm/views/calendarMath.native.js.map +1 -1
  497. package/dist/esm/views/ganttIntervals.native.js.map +1 -1
  498. package/dist/esm/views/ganttMath.native.js.map +1 -1
  499. package/dist/esm/views/index.native.js.map +1 -1
  500. package/dist/esm/views/kanbanDnd.native.js.map +1 -1
  501. package/dist/esm/views/matrixMath.native.js.map +1 -1
  502. package/dist/esm/views/sameNameScope.native.js.map +1 -1
  503. package/dist/esm/views/treeViewDnd.native.js.map +1 -1
  504. package/dist/esm/views/treeViewLayout.native.js.map +1 -1
  505. package/dist/esm/views/treeViewMotion.native.js.map +1 -1
  506. package/dist/esm/views/treeViewReveal.native.js.map +1 -1
  507. package/dist/esm/views/usePageFlowLoadMore.native.js.map +1 -1
  508. package/dist/esm/views/widgetChrome.native.js.map +1 -1
  509. package/dist/jsx/CheckGlyph/MenuCheckColumn.mjs +31 -0
  510. package/dist/jsx/CheckGlyph/MenuCheckColumn.mjs.map +1 -0
  511. package/dist/jsx/CheckGlyph/MenuCheckColumn.native.js +60 -0
  512. package/dist/jsx/CheckGlyph/MenuCheckColumn.native.js.map +1 -0
  513. package/dist/jsx/CheckGlyph/index.mjs +15 -0
  514. package/dist/jsx/CheckGlyph/index.mjs.map +1 -0
  515. package/dist/jsx/CheckGlyph/index.native.js +44 -0
  516. package/dist/jsx/CheckGlyph/index.native.js.map +1 -0
  517. package/dist/jsx/ContextMenu/index.mjs +6 -23
  518. package/dist/jsx/ContextMenu/index.mjs.map +1 -1
  519. package/dist/jsx/ContextMenu/index.native.js +7 -25
  520. package/dist/jsx/ContextMenu/index.native.js.map +1 -1
  521. package/dist/jsx/DropdownMenu/index.mjs +6 -18
  522. package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
  523. package/dist/jsx/DropdownMenu/index.native.js +7 -19
  524. package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
  525. package/dist/jsx/Popover.mjs +2 -2
  526. package/dist/jsx/Popover.mjs.map +1 -1
  527. package/dist/jsx/Popover.native.js +2 -2
  528. package/dist/jsx/Popover.native.js.map +1 -1
  529. package/dist/jsx/SchemeToggle/index.mjs +3 -3
  530. package/dist/jsx/SchemeToggle/index.mjs.map +1 -1
  531. package/dist/jsx/SchemeToggle/index.native.js +2 -2
  532. package/dist/jsx/SchemeToggle/index.native.js.map +1 -1
  533. package/dist/jsx/SheetModal/index.mjs +6 -11
  534. package/dist/jsx/SheetModal/index.mjs.map +1 -1
  535. package/dist/jsx/SheetModal/index.native.js +8 -12
  536. package/dist/jsx/SheetModal/index.native.js.map +1 -1
  537. package/dist/jsx/TreeSelect/index.mjs +4 -8
  538. package/dist/jsx/TreeSelect/index.mjs.map +1 -1
  539. package/dist/jsx/TreeSelect/index.native.js +2 -6
  540. package/dist/jsx/TreeSelect/index.native.js.map +1 -1
  541. package/dist/jsx/appShell/AppShell.mjs +32 -18
  542. package/dist/jsx/appShell/AppShell.mjs.map +1 -1
  543. package/dist/jsx/appShell/AppShell.native.js +36 -22
  544. package/dist/jsx/appShell/AppShell.native.js.map +1 -1
  545. package/dist/jsx/appShell/ScopeMenu.mjs +43 -20
  546. package/dist/jsx/appShell/ScopeMenu.mjs.map +1 -1
  547. package/dist/jsx/appShell/ScopeMenu.native.js +43 -17
  548. package/dist/jsx/appShell/ScopeMenu.native.js.map +1 -1
  549. package/dist/jsx/appShell/TabBar.mjs.map +1 -1
  550. package/dist/jsx/appShell/TabBar.native.js.map +1 -1
  551. package/dist/jsx/appShell/TabHost.native.js +48 -11
  552. package/dist/jsx/appShell/TabHost.native.js.map +1 -1
  553. package/dist/jsx/appShell/bottomChrome.mjs +13 -3
  554. package/dist/jsx/appShell/bottomChrome.mjs.map +1 -1
  555. package/dist/jsx/appShell/bottomChrome.native.js +13 -1
  556. package/dist/jsx/appShell/bottomChrome.native.js.map +1 -1
  557. package/dist/jsx/layouts/sidebar.mjs +31 -10
  558. package/dist/jsx/layouts/sidebar.mjs.map +1 -1
  559. package/dist/jsx/layouts/sidebar.native.js +30 -8
  560. package/dist/jsx/layouts/sidebar.native.js.map +1 -1
  561. package/package.json +9 -9
  562. package/src/CheckGlyph/CheckGlyph.spec.tsx +46 -0
  563. package/src/CheckGlyph/MenuCheckColumn.tsx +32 -0
  564. package/src/CheckGlyph/index.tsx +12 -0
  565. package/src/ContextMenu/ContextMenu.spec.tsx +46 -1
  566. package/src/ContextMenu/index.tsx +5 -22
  567. package/src/DropdownMenu/DropdownMenu.avatarTrigger.spec.tsx +6 -9
  568. package/src/DropdownMenu/index.tsx +5 -18
  569. package/src/Popover.coverTrigger.spec.tsx +3 -3
  570. package/src/Popover.tsx +5 -5
  571. package/src/SchemeToggle/SchemeToggle.spec.tsx +5 -11
  572. package/src/SchemeToggle/SchemeToggle.stories.tsx +21 -0
  573. package/src/SchemeToggle/index.tsx +2 -1
  574. package/src/ScrollView/ScrollView.native.spec.tsx +14 -2
  575. package/src/SheetFrame.stories.tsx +2 -8
  576. package/src/SheetModal/SheetModal.grabber.spec.tsx +51 -0
  577. package/src/SheetModal/index.native.tsx +15 -18
  578. package/src/SheetModal/index.tsx +12 -15
  579. package/src/TreeSelect/index.tsx +2 -4
  580. package/src/appShell/AppShell.spec.tsx +51 -0
  581. package/src/appShell/AppShell.tsx +30 -14
  582. package/src/appShell/ScopeMenu.spec.tsx +22 -0
  583. package/src/appShell/ScopeMenu.tsx +57 -18
  584. package/src/appShell/TabBar.tsx +13 -3
  585. package/src/appShell/TabHost.native.spec.tsx +63 -6
  586. package/src/appShell/TabHost.native.tsx +56 -15
  587. package/src/appShell/TabHost.stories.tsx +72 -0
  588. package/src/appShell/bottomChrome.ts +24 -3
  589. package/src/layouts/PageHeader.stories.tsx +3 -3
  590. package/src/layouts/Sidebar.spec.tsx +61 -1
  591. package/src/layouts/pageActionButton.spec.tsx +7 -3
  592. package/src/layouts/sidebar.tsx +22 -8
  593. package/types/CheckGlyph/MenuCheckColumn.d.ts +11 -0
  594. package/types/CheckGlyph/MenuCheckColumn.d.ts.map +1 -0
  595. package/types/CheckGlyph/index.d.ts +10 -0
  596. package/types/CheckGlyph/index.d.ts.map +1 -0
  597. package/types/ContextMenu/index.d.ts.map +1 -1
  598. package/types/DropdownMenu/index.d.ts.map +1 -1
  599. package/types/Popover.d.ts +1 -1
  600. package/types/Popover.d.ts.map +1 -1
  601. package/types/SchemeToggle/index.d.ts.map +1 -1
  602. package/types/SheetModal/index.d.ts.map +1 -1
  603. package/types/SheetModal/index.native.d.ts.map +1 -1
  604. package/types/TreeSelect/index.d.ts.map +1 -1
  605. package/types/appShell/AppShell.d.ts.map +1 -1
  606. package/types/appShell/ScopeMenu.d.ts +0 -18
  607. package/types/appShell/ScopeMenu.d.ts.map +1 -1
  608. package/types/appShell/TabBar.d.ts +12 -6
  609. package/types/appShell/TabBar.d.ts.map +1 -1
  610. package/types/appShell/TabHost.native.d.ts +23 -5
  611. package/types/appShell/TabHost.native.d.ts.map +1 -1
  612. package/types/appShell/bottomChrome.d.ts +11 -1
  613. package/types/appShell/bottomChrome.d.ts.map +1 -1
  614. package/types/layouts/sidebar.d.ts +7 -1
  615. package/types/layouts/sidebar.d.ts.map +1 -1
@@ -2,7 +2,8 @@ import { fireEvent, waitFor } from "@testing-library/react";
2
2
  import { afterEach, describe, expect, it, vi } from "vitest";
3
3
  import { renderWithProviders } from "@multiplatform.one/test-utils";
4
4
  import { Button } from "@multiplatform.one/forms";
5
- import { OVERLAY_ANCHOR_GAP } from "@multiplatform.one/theme";
5
+ import { SunIcon } from "@phosphor-icons/react";
6
+ import { menuRowCheckGlyph, menuRowIconGlyph, OVERLAY_ANCHOR_GAP } from "@multiplatform.one/theme";
6
7
  import { ContextMenu } from "./index";
7
8
 
8
9
  function renderOpen(onSelect = vi.fn()) {
@@ -73,6 +74,50 @@ describe("ContextMenu", () => {
73
74
  expect(selected?.lastElementChild).toBe(check);
74
75
  });
75
76
 
77
+ it("draws a check beside row icons at their glyph, so it shares their stroke (FZ-8557 r3)", async () => {
78
+ renderWithProviders(
79
+ <ContextMenu
80
+ defaultOpen
81
+ items={[
82
+ {
83
+ label: "Light",
84
+ icon: <SunIcon size={menuRowIconGlyph.size} weight={menuRowIconGlyph.weight} />,
85
+ checked: true,
86
+ },
87
+ { label: "Pinned", checked: true },
88
+ ]}
89
+ >
90
+ <Button>Target</Button>
91
+ </ContextMenu>,
92
+ );
93
+ await waitFor(() => {
94
+ expect(document.querySelectorAll('[role="menuitemcheckbox"]')).toHaveLength(2);
95
+ });
96
+ const [iconRow, textRow] = Array.from(
97
+ document.querySelectorAll<HTMLElement>('[role="menuitemcheckbox"]'),
98
+ );
99
+ const checkOf = (row: HTMLElement | undefined) =>
100
+ row?.querySelector("[data-mp-check] svg")?.getAttribute("width");
101
+ expect(checkOf(iconRow)).toBe(String(menuRowIconGlyph.size));
102
+ expect(checkOf(textRow)).toBe(String(menuRowCheckGlyph.size));
103
+ });
104
+
105
+ it("sits a trailing check on the row's padding, with no X column (FZ-8665)", async () => {
106
+ renderWithProviders(
107
+ <ContextMenu defaultOpen anchor="trigger" items={[{ label: "Pinned", checked: true }]}>
108
+ <Button>Target</Button>
109
+ </ContextMenu>,
110
+ );
111
+ await waitFor(() => {
112
+ expect(document.querySelector('[role="menuitemcheckbox"]')).toBeTruthy();
113
+ });
114
+ const row = document.querySelector<HTMLElement>('[role="menuitemcheckbox"]') as HTMLElement;
115
+ const check = row.querySelector<HTMLElement>("[data-mp-check]") as HTMLElement;
116
+ expect(row.lastElementChild).toBe(check);
117
+ expect(check.className).not.toMatch(/_(mr|me|mie|marginInlineEnd)-/);
118
+ expect(check.style.marginInlineEnd).toBe("");
119
+ });
120
+
76
121
  it("selects a plain item and closes (LC-21 COMMIT)", async () => {
77
122
  const onSelect = vi.fn();
78
123
  renderOpen(onSelect);
@@ -22,11 +22,11 @@ import { IconSlot } from "@multiplatform.one/theme";
22
22
  * Sheet at ≤640 via FloatingPanel's overlay family pivot.
23
23
  */
24
24
 
25
+ import { MenuCheckColumn } from "../CheckGlyph/MenuCheckColumn";
25
26
  import {
26
27
  transitionProps,
27
28
  hairline,
28
29
  keyboardFocusRingProps,
29
- useMenuRowCheckInk,
30
30
  menuRowChecked,
31
31
  menuRowFrame,
32
32
  useResolvedKnobs,
@@ -49,7 +49,6 @@ import {
49
49
  type RefObject,
50
50
  } from "react";
51
51
 
52
- import { CheckIcon } from "@phosphor-icons/react";
53
52
  import { FloatingPanel } from "@multiplatform.one/forms";
54
53
  import type { GetProps, TamaguiElement } from "tamagui";
55
54
  import {
@@ -257,16 +256,15 @@ function ContextMenuRoot({
257
256
  contentPadding="none"
258
257
  triggerSizing={triggerSizing}
259
258
  {...freeOverlay}
260
- // LC-112 (FZ-8480 Round 37): a bar button's menu opens ON the button
261
- // at every width and draws the button again in place as an X, so
262
- // pressing the button's spot closes the menu.
259
+ // LC-112 (FZ-8665 Round 45): a bar button's menu opens ON the button
260
+ // at every width, and its rows start at its top edge.
263
261
  {...(anchor === "trigger"
264
262
  ? {
265
263
  compactFace: "menu" as const,
266
264
  anchorMode: "cover-trigger" as const,
267
265
  coverAlign: "auto" as const,
268
266
  triggerEcho: false,
269
- iconEcho: "menu" as const,
267
+ iconCover: true,
270
268
  }
271
269
  : null)}
272
270
  >
@@ -618,7 +616,6 @@ export interface ContextMenuCheckboxItemProps extends Omit<ContextMenuItemProps,
618
616
 
619
617
  const ContextMenuCheckboxItem = forwardRef<TamaguiElement, ContextMenuCheckboxItemProps>(
620
618
  function ContextMenuCheckboxItem({ checked, onCheckedChange, onSelect, ...props }, ref) {
621
- const checkInk = useMenuRowCheckInk();
622
619
  return (
623
620
  <ContextMenuItemBody
624
621
  ref={ref}
@@ -630,21 +627,7 @@ const ContextMenuCheckboxItem = forwardRef<TamaguiElement, ContextMenuCheckboxIt
630
627
  onCheckedChange?.(!checked);
631
628
  onSelect?.();
632
629
  }}
633
- trailing={
634
- <View
635
- width={18}
636
- flexShrink={0}
637
- alignItems="center"
638
- justifyContent="center"
639
- opacity={checked ? 1 : 0}
640
- data-mp-check="trailing"
641
- {...(isWeb && checkInk
642
- ? ({ style: { color: checkInk } } as Record<string, unknown>)
643
- : {})}
644
- >
645
- <IconSlot icon={<CheckIcon size={14} weight="bold" color={checkInk} />} />
646
- </View>
647
- }
630
+ trailing={<MenuCheckColumn checked={checked} iconRow={props.icon != null} />}
648
631
  {...props}
649
632
  />
650
633
  );
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * FZ-8220, LC-112, LC-262: an avatar trigger is an icon trigger. The account
3
3
  * menu opens on it (FZ-8438) with no text echo row, the avatar alone or inside
4
- * the press boxes an app wraps around it, and draws the avatar again in its
5
- * own spot as an X in the avatar's circle, where a press closes the menu
6
- * (FZ-8480 Round 37).
4
+ * the press boxes an app wraps around it. It covers the avatar and repeats
5
+ * nothing: no X, and the rows start at the panel's top edge (FZ-8665 Round 45).
7
6
  */
8
7
  import { renderWithProviders } from "@multiplatform.one/test-utils";
9
8
  import { waitFor } from "@testing-library/react";
@@ -62,7 +61,7 @@ describe("DropdownMenu avatar trigger (FZ-8220)", () => {
62
61
  expect(identity?.textContent).toContain("clayrisser@gmail.com");
63
62
  });
64
63
 
65
- it("draws the avatar again in place as an X at phone width, a menu and not a sheet (FZ-8480)", async () => {
64
+ it("covers the avatar at phone width, a menu and not a sheet, with no X (FZ-8665)", async () => {
66
65
  const width = window.innerWidth;
67
66
  Object.defineProperty(window, "innerWidth", { configurable: true, writable: true, value: 390 });
68
67
  try {
@@ -81,11 +80,9 @@ describe("DropdownMenu avatar trigger (FZ-8220)", () => {
81
80
  expect(found?.querySelector('[role="menu"]')).toBeTruthy();
82
81
  return found as HTMLElement;
83
82
  });
84
- const echo = panel.querySelector<HTMLElement>('[data-testid="floating-panel-icon-echo"]');
85
- expect(echo?.getAttribute("aria-label")).toBe("Close");
86
- // The avatar turns into an X: no initials, an X glyph.
87
- expect(echo?.textContent).toBe("");
88
- expect(echo?.querySelector("svg")).toBeTruthy();
83
+ expect(panel.querySelector('[aria-label="Close"]')).toBeNull();
84
+ // The avatar's initials stay on the page, under the panel.
85
+ expect(panel.textContent).not.toContain("CR");
89
86
  } finally {
90
87
  Object.defineProperty(window, "innerWidth", {
91
88
  configurable: true,
@@ -21,12 +21,12 @@ import { IconSlot } from "@multiplatform.one/theme";
21
21
  * `onCheckedChange` and `onSelect`.
22
22
  */
23
23
 
24
+ import { MenuCheckColumn } from "../CheckGlyph/MenuCheckColumn";
24
25
  import {
25
26
  transitionProps,
26
27
  Surface,
27
28
  hairline,
28
29
  keyboardFocusRingProps,
29
- useMenuRowCheckInk,
30
30
  menuRowChecked,
31
31
  menuRowFrame,
32
32
  useResolvedKnobs,
@@ -53,7 +53,6 @@ import {
53
53
  type RefObject,
54
54
  } from "react";
55
55
 
56
- import { CheckIcon } from "@phosphor-icons/react";
57
56
  import { FloatingPanel, type PanelWidth } from "@multiplatform.one/forms";
58
57
  import type { GetProps, SizeTokens, TamaguiElement } from "tamagui";
59
58
  import {
@@ -457,9 +456,9 @@ function DropdownMenuRoot({
457
456
  anchorMode={resolvedAnchorMode}
458
457
  triggerEcho={!iconTrigger}
459
458
  coverAlign={iconTrigger ? "auto" : "start"}
460
- // LC-112 (FZ-8480 Round 37): the menu covers its button and draws
461
- // it again in place as an X that closes the menu.
462
- iconEcho={iconTrigger ? "menu" : undefined}
459
+ // LC-112 (FZ-8665 Round 45): the menu covers its button, and its
460
+ // rows start at its top edge.
461
+ iconCover={iconTrigger}
463
462
  triggerRow={triggerRow}
464
463
  contentPadding="none"
465
464
  triggerSizing={triggerSizing}
@@ -906,7 +905,6 @@ export interface DropdownMenuCheckboxItemProps extends Omit<DropdownMenuItemProp
906
905
 
907
906
  const DropdownMenuCheckboxItem = forwardRef<TamaguiElement, DropdownMenuCheckboxItemProps>(
908
907
  function DropdownMenuCheckboxItem({ checked, onCheckedChange, onSelect, ...props }, ref) {
909
- const checkInk = useMenuRowCheckInk();
910
908
  return (
911
909
  <DropdownMenuItemBody
912
910
  ref={ref}
@@ -918,18 +916,7 @@ const DropdownMenuCheckboxItem = forwardRef<TamaguiElement, DropdownMenuCheckbox
918
916
  onCheckedChange?.(!checked);
919
917
  onSelect?.();
920
918
  }}
921
- trailing={
922
- <View
923
- width={18}
924
- flexShrink={0}
925
- alignItems="center"
926
- justifyContent="center"
927
- opacity={checked ? 1 : 0}
928
- data-mp-check="trailing"
929
- >
930
- <IconSlot icon={<CheckIcon size={14} weight="bold" color={checkInk} />} />
931
- </View>
932
- }
919
+ trailing={<MenuCheckColumn checked={checked} iconRow={props.icon != null} />}
933
920
  {...props}
934
921
  />
935
922
  );
@@ -97,7 +97,7 @@ describe("Popover cover-trigger adapter", () => {
97
97
  fireEvent.click(result.getByRole("button", { name: "Apply filters" }));
98
98
  await waitFor(() => expect(result.queryByTestId("floating-panel-viewport")).toBeNull());
99
99
  });
100
- it("an icon trigger's panel covers the button and draws it again as an X that closes it (FZ-8480)", async () => {
100
+ it("an icon trigger's panel covers the button with no X, a press outside closing it (FZ-8665)", async () => {
101
101
  const result = renderWithProviders(
102
102
  <Popover anchorMode="cover-trigger">
103
103
  <Popover.Trigger asChild>
@@ -112,8 +112,8 @@ describe("Popover cover-trigger adapter", () => {
112
112
  const panel = await result.findByTestId("floating-panel-viewport");
113
113
  expect(within(panel).queryByRole("button", { name: "Add node" })).toBeNull();
114
114
  expect(panel.querySelector("[data-fp-trigger-row]")).toBeNull();
115
- const close = within(panel).getByRole("button", { name: "Close" });
116
- fireEvent.click(close);
115
+ expect(within(panel).queryByRole("button", { name: "Close" })).toBeNull();
116
+ fireEvent.click(document.body);
117
117
  await waitFor(() => expect(result.queryByTestId("floating-panel-viewport")).toBeNull());
118
118
  });
119
119
  });
package/src/Popover.tsx CHANGED
@@ -143,9 +143,9 @@ const CoverPopover = forwardRef<Popover, PopoverProps>(function CoverPopover(
143
143
  }
144
144
  }, [content.length, unsupportedContent]);
145
145
  const trigger = triggerPart?.props.children ?? triggerRow;
146
- // LC-112 (FZ-8480): a glyph trigger (the "+") is covered by its panel and
147
- // drawn again in its spot as an X that closes it, the iOS + to X morph. The
148
- // panel stays a panel at phone width, sized by its content.
146
+ // LC-112 (FZ-8665): a glyph trigger (the "+") is covered by its panel, and a
147
+ // press outside closes it. The panel stays a panel at phone width, sized by
148
+ // its content.
149
149
  const iconTrigger = triggerRow == null && isIconTrigger(trigger);
150
150
  const decorated = isValidElement(trigger)
151
151
  ? cloneElement(trigger as ReactElement<Record<string, unknown>>, {
@@ -168,7 +168,7 @@ const CoverPopover = forwardRef<Popover, PopoverProps>(function CoverPopover(
168
168
  {...(iconTrigger
169
169
  ? {
170
170
  triggerEcho: false,
171
- iconEcho: "close" as const,
171
+ iconCover: true,
172
172
  coverAlign: "auto" as const,
173
173
  compactFace: "menu" as const,
174
174
  widthMode: "fit-content" as const,
@@ -220,7 +220,7 @@ export const Popover = withStaticProperties(PopoverRoot, {
220
220
  Trigger: TamaguiPopover.Trigger,
221
221
  Content: StackedPopoverContent,
222
222
  Close: PopoverClose,
223
- /** A panel's title row; over a + panel it shares the X's line (LC-112). */
223
+ /** A panel's title row, on the panel's padding (LC-112). */
224
224
  Header: PanelHeader,
225
225
  Anchor: TamaguiPopover.Anchor,
226
226
  Adapt: TamaguiPopover.Adapt,
@@ -1,4 +1,4 @@
1
- import { CircleHalfIcon, MoonIcon, SunIcon, XIcon } from "@phosphor-icons/react";
1
+ import { CircleHalfIcon, MoonIcon, SunIcon } from "@phosphor-icons/react";
2
2
  import { fireEvent, render, waitFor } from "@testing-library/react";
3
3
  import { describe, expect, it, vi } from "vitest";
4
4
  import { renderWithProviders } from "@multiplatform.one/test-utils";
@@ -43,7 +43,7 @@ describe("SchemeToggle (FZ-8158)", () => {
43
43
  expect(set).toHaveBeenCalledWith("system");
44
44
  });
45
45
 
46
- it("opens its menu on the button and draws the button again in place as an X, a press there closing it (FZ-8480)", async () => {
46
+ it("opens its menu on the button with no X, a press outside closing it (FZ-8665)", async () => {
47
47
  const { useUserScheme } = preference("dark", "dark");
48
48
  const { getByRole } = renderWithProviders(<SchemeToggle useUserScheme={useUserScheme} />);
49
49
  const live = getByRole("button", { name: "Appearance: Dark" });
@@ -53,15 +53,9 @@ describe("SchemeToggle (FZ-8158)", () => {
53
53
  expect(found?.querySelector('[role="menu"]')).toBeTruthy();
54
54
  return found as HTMLElement;
55
55
  });
56
- const echo = panel.querySelector<HTMLElement>('[data-testid="floating-panel-icon-echo"]');
57
- expect(echo?.getAttribute("aria-label")).toBe("Close");
58
- const pathOf = (node: ParentNode | null | undefined) =>
59
- node?.querySelector("svg path")?.getAttribute("d");
60
- const x = render(<XIcon weight="bold" />);
61
- expect(pathOf(echo)).toBe(pathOf(x.container));
62
- expect(pathOf(echo)).not.toBe(pathOf(live));
63
- x.unmount();
64
- fireEvent.click(echo as HTMLElement);
56
+ expect(panel.querySelector('[aria-label="Close"]')).toBeNull();
57
+ expect(panel.querySelector(`[aria-label="${live.getAttribute("aria-label")}"]`)).toBeNull();
58
+ fireEvent.click(document.body);
65
59
  await waitFor(() => expect(document.querySelector('[role="menu"]')).toBeFalsy());
66
60
  });
67
61
 
@@ -0,0 +1,21 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
2
+ import { XStack } from "tamagui";
3
+ import { SchemeToggle } from "./index";
4
+
5
+ const meta: Meta<typeof SchemeToggle> = {
6
+ title: "Components/SchemeToggle",
7
+ component: SchemeToggle,
8
+ parameters: { status: { type: "beta" } },
9
+ };
10
+
11
+ export default meta;
12
+ type Story = StoryObj<typeof SchemeToggle>;
13
+
14
+ /** A tap flips light and dark; a right-click (long-press on native) opens System, Light and Dark. */
15
+ export const Default: Story = {
16
+ render: () => (
17
+ <XStack padding="$4" justifyContent="flex-end">
18
+ <SchemeToggle />
19
+ </XStack>
20
+ ),
21
+ };
@@ -1,6 +1,7 @@
1
1
  import { CircleHalfIcon, MoonIcon, SunIcon } from "@phosphor-icons/react";
2
2
  import { IconButton, type IconButtonProps } from "@multiplatform.one/forms";
3
3
  import {
4
+ menuRowIconGlyph,
4
5
  useSchemePreference,
5
6
  type SchemePreference,
6
7
  type ThemeScheme,
@@ -60,7 +61,7 @@ export function SchemeToggle({
60
61
  const Glyph = schemeGlyphs[value];
61
62
  return {
62
63
  label: name(value),
63
- icon: <Glyph size={18} weight="bold" />,
64
+ icon: <Glyph size={menuRowIconGlyph.size} weight={menuRowIconGlyph.weight} />,
64
65
  checked: scheme.setting === value,
65
66
  onSelect: () => scheme.set(value),
66
67
  };
@@ -206,6 +206,15 @@ describe("catalog scroll owners (MPO-457)", () => {
206
206
  });
207
207
  expect(offenders).toEqual([]);
208
208
  });
209
+
210
+ it("reads a type argument as no tag, so a ref typed by the RN ScrollView owns no scroll", () => {
211
+ const code = [
212
+ "const scrollRef = useRef<RNScrollView | null>(null);",
213
+ "const Scroller = forwardRef<RNScrollView, Props>(render);",
214
+ "return <RNScrollView ref={scrollRef} />;",
215
+ ].join("\n");
216
+ expect(openingTags(code, "RNScrollView").map((tag) => tag.line)).toEqual([3]);
217
+ });
209
218
  });
210
219
 
211
220
  function sourceFiles(dir: string): string[] {
@@ -245,10 +254,13 @@ function aliasesOf(code: string, local: string): string[] {
245
254
  return [...code.matchAll(re)].map((match) => match[1]!);
246
255
  }
247
256
 
248
- /** Every JSX opening tag of `name`, props included, with its line. */
257
+ /**
258
+ * Every JSX opening tag of `name`, props included, with its line. A `<` right
259
+ * after an identifier or a closing bracket opens a type argument, not a tag.
260
+ */
249
261
  function openingTags(code: string, name: string): Array<{ text: string; line: number }> {
250
262
  const out: Array<{ text: string; line: number }> = [];
251
- for (const match of code.matchAll(new RegExp(`<${name}(?![\\w.])`, "g"))) {
263
+ for (const match of code.matchAll(new RegExp(`(?<![\\w$.)\\]])<${name}(?![\\w.])`, "g"))) {
252
264
  let depth = 0;
253
265
  let end = match.index + match[0].length;
254
266
  for (; end < code.length; end++) {
@@ -2,6 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
2
2
  import { useEffect, useState } from "react";
3
3
  // Catalog Button (G-15 story honesty / LC-18, UX-P06).
4
4
  import { Button } from "@multiplatform.one/forms";
5
+ import { sheetGrabber } from "@multiplatform.one/theme";
5
6
  import { isWeb, Sheet, YStack } from "tamagui";
6
7
  import { ScrollView } from "./ScrollView";
7
8
  import { SheetModal } from "./SheetModal";
@@ -81,14 +82,7 @@ function TabsInSheetHarness() {
81
82
  onPositionChange={setPosition}
82
83
  dismissOnSnapToBottom={false}
83
84
  >
84
- <Sheet.Handle
85
- backgroundColor="$color8"
86
- opacity={0.45}
87
- height={5}
88
- width={36}
89
- borderRadius={100}
90
- aria-label="Resize"
91
- />
85
+ <Sheet.Handle {...sheetGrabber} aria-label="Resize" />
92
86
  <SheetFrame borderBottomLeftRadius={0} borderBottomRightRadius={0}>
93
87
  <SizableText fontWeight="600">Stack</SizableText>
94
88
  <Tabs
@@ -0,0 +1,51 @@
1
+ /**
2
+ * FZ-8648: one grabber. SheetModal draws the theme's `sheetGrabber` on the web
3
+ * and on native, with no local transform or margin, the recipe the
4
+ * FloatingPanel sheet draws too (`public/forms/.../sheetGrabber.spec.tsx`).
5
+ */
6
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
7
+ import { sheetGrabber } from "@multiplatform.one/theme";
8
+ import { describe, expect, it, vi } from "vitest";
9
+ import { Text, View } from "tamagui";
10
+ import { SheetModal as NativeSheetModal } from "./index.native";
11
+ import { SheetModal } from "./index";
12
+
13
+ vi.mock("react-native-web", async (importOriginal) => ({
14
+ ...(await importOriginal<typeof import("react-native")>()),
15
+ ActionSheetIOS: undefined,
16
+ Modal: ({ children }: { children: import("react").ReactNode }) => children,
17
+ }));
18
+
19
+ const atoms = (node: Element) => String(node.className).split(/\s+/).filter(Boolean);
20
+
21
+ function recipeAtoms() {
22
+ const view = renderWithProviders(<View testID="recipe" {...sheetGrabber} />);
23
+ const list = atoms(view.getByTestId("recipe"));
24
+ view.unmount();
25
+ return list;
26
+ }
27
+
28
+ describe("SheetModal grabber (FZ-8648)", () => {
29
+ it("draws the recipe on native", () => {
30
+ const recipe = recipeAtoms();
31
+ const result = renderWithProviders(
32
+ <NativeSheetModal open onOpenChange={() => {}}>
33
+ <Text>Body</Text>
34
+ </NativeSheetModal>,
35
+ );
36
+ const capsule = result.getByTestId("sheet-modal-grabber").firstElementChild as Element;
37
+ expect(atoms(capsule)).toEqual(expect.arrayContaining(recipe));
38
+ });
39
+
40
+ it("draws the recipe on the web, with no transform", async () => {
41
+ const recipe = recipeAtoms();
42
+ const result = renderWithProviders(
43
+ <SheetModal open onOpenChange={() => {}}>
44
+ <Text>Body</Text>
45
+ </SheetModal>,
46
+ );
47
+ const handle = await result.findByLabelText("Resize");
48
+ expect(atoms(handle)).toEqual(expect.arrayContaining(recipe));
49
+ expect(handle.getAttribute("style") ?? "").not.toMatch(/transform/);
50
+ });
51
+ });
@@ -28,6 +28,9 @@ import {
28
28
  useResolvedKnobs,
29
29
  type MotionStop,
30
30
  nativeAnimationConfig as animationConfig,
31
+ overlayScrim,
32
+ sheetGrabber,
33
+ sheetGrabberZone,
31
34
  } from "@multiplatform.one/theme";
32
35
  import {
33
36
  useCallback,
@@ -424,7 +427,7 @@ export function SheetModal({
424
427
  accessibilityRole="button"
425
428
  accessibilityLabel={t("Close")}
426
429
  >
427
- <View flex={1} backgroundColor="$shadow6" />
430
+ <View flex={1} backgroundColor={overlayScrim} />
428
431
  </Pressable>
429
432
  <Animated.View
430
433
  onLayout={(e) => {
@@ -456,12 +459,19 @@ export function SheetModal({
456
459
  {...knobProps.borderRadius}
457
460
  borderBottomLeftRadius={0}
458
461
  borderBottomRightRadius={0}
459
- {...(regular ? { borderBottomWidth: 0 } : { elevation: knobProps.elevation })}
462
+ // A compact sheet spans the screen: only its top edge meets the page.
463
+ {...(regular
464
+ ? { borderBottomWidth: 0 }
465
+ : {
466
+ elevation: knobProps.elevation,
467
+ borderLeftWidth: 0,
468
+ borderRightWidth: 0,
469
+ borderBottomWidth: 0,
470
+ })}
460
471
  maxHeight={maxHeight}
461
472
  flexShrink={1}
462
473
  minHeight={0}
463
474
  {...(fill ? fillSlot : null)}
464
- paddingTop="$2"
465
475
  paddingBottom={keyboardInset > 0 ? 8 : bottomInset}
466
476
  // No focus or press pseudo on this surface: on native tamagui
467
477
  // turns one into a touch-responder claim, and a responder here
@@ -489,22 +499,9 @@ export function SheetModal({
489
499
  accessibilityRole="adjustable"
490
500
  accessibilityLabel={t("Drag to resize")}
491
501
  testID="sheet-modal-grabber"
492
- style={{
493
- alignSelf: "stretch",
494
- alignItems: "center",
495
- paddingTop: 3,
496
- paddingBottom: 11,
497
- ...(fill ? nonShrinking : null),
498
- }}
502
+ style={{ ...sheetGrabberZone, ...(fill ? nonShrinking : null) }}
499
503
  >
500
- <View
501
- width={36}
502
- height={5}
503
- borderRadius={100}
504
- backgroundColor="$color8"
505
- opacity={0.45}
506
- accessible={false}
507
- />
504
+ <View {...sheetGrabber} accessible={false} />
508
505
  </RNView>
509
506
  <DialogRegionContext.Provider value={IN_DIALOG_REGION}>
510
507
  <Surface elevated={regular || undefined}>
@@ -9,7 +9,12 @@
9
9
  * on device). Dismissal: overlay tap / snap-to-bottom / Escape (LC-21).
10
10
  */
11
11
 
12
- import { transitionProps, useResolvedKnobs } from "@multiplatform.one/theme";
12
+ import {
13
+ overlayScrim,
14
+ sheetGrabber,
15
+ transitionProps,
16
+ useResolvedKnobs,
17
+ } from "@multiplatform.one/theme";
13
18
  import { OverlayStackProvider, useOverlayZIndex } from "@multiplatform.one/forms";
14
19
  import { useEffect, useId, useRef, type ReactNode } from "react";
15
20
  import { isWeb, Sheet, View, useWindowDimensions } from "tamagui";
@@ -128,24 +133,13 @@ export function SheetModal({
128
133
  portalProps={{ zIndex: sheetZIndex }}
129
134
  >
130
135
  <Sheet.Overlay
131
- backgroundColor="$shadow6"
136
+ backgroundColor={overlayScrim}
132
137
  {...transitionProps(knobProps.motion.scrim)}
133
138
  enterStyle={{ opacity: 0 }}
134
139
  exitStyle={{ opacity: 0 }}
135
140
  />
136
- {/* Apple grabber: 36×5 capsule, muted fill, VoiceOver resize affordance. */}
137
- <Sheet.Handle
138
- backgroundColor="$color8"
139
- opacity={0.45}
140
- height={5}
141
- width={36}
142
- borderRadius={100}
143
- marginBottom={0}
144
- marginHorizontal={0}
145
- alignSelf="center"
146
- y={10}
147
- aria-label="Resize"
148
- />
141
+ {/* VoiceOver resize affordance. */}
142
+ <Sheet.Handle {...sheetGrabber} aria-label="Resize" />
149
143
  <SheetFrame
150
144
  ref={frameRef as never}
151
145
  {...({
@@ -160,6 +154,9 @@ export function SheetModal({
160
154
  : null)}
161
155
  borderBottomLeftRadius={0}
162
156
  borderBottomRightRadius={0}
157
+ borderLeftWidth={0}
158
+ borderRightWidth={0}
159
+ borderBottomWidth={0}
163
160
  overflow="hidden"
164
161
  {...frameRingReset}
165
162
  >
@@ -11,11 +11,11 @@ import {
11
11
  panelViewportPadding,
12
12
  useOverlayZIndex,
13
13
  } from "@multiplatform.one/forms";
14
+ import { CheckGlyph } from "../CheckGlyph";
14
15
  import {
15
16
  CaretDownIcon,
16
17
  CaretLeftIcon,
17
18
  CaretRightIcon,
18
- CheckIcon,
19
19
  FileIcon,
20
20
  FolderIcon,
21
21
  FolderOpenIcon,
@@ -27,7 +27,6 @@ import {
27
27
  ensureKeyboardModalityTracking,
28
28
  keyboardFocusRingProps,
29
29
  listHeightForRows,
30
- useMenuRowCheckInk,
31
30
  menuRowChecked,
32
31
  useResolvedKnobs,
33
32
  } from "@multiplatform.one/theme";
@@ -110,7 +109,6 @@ function TreeSelectRows({
110
109
  }) {
111
110
  const { t } = useTranslation();
112
111
  const { knobProps } = useResolvedKnobs();
113
- const checkInk = useMenuRowCheckInk();
114
112
  const checkedFill = menuRowChecked(knobProps.scheme);
115
113
  const nestedPx = knobProps.nestedControl.px;
116
114
  const indentStep = 16;
@@ -271,7 +269,7 @@ function TreeSelectRows({
271
269
  ) : null}
272
270
  {isSelected ? (
273
271
  <View flexShrink={0} width={14} height={14}>
274
- <CheckIcon size={14} weight="bold" color={checkInk} />
272
+ <CheckGlyph />
275
273
  </View>
276
274
  ) : null}
277
275
  </XStack>