@multiplatform.one/components 7.10.0 → 7.15.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 (452) hide show
  1. package/README.md +100 -2
  2. package/dist/cjs/Accordion/index.cjs +2 -6
  3. package/dist/cjs/Accordion/index.native.js +2 -6
  4. package/dist/cjs/Accordion/index.native.js.map +1 -1
  5. package/dist/cjs/AnimateHeight/index.cjs +1 -3
  6. package/dist/cjs/AnimateHeight/index.native.js +1 -3
  7. package/dist/cjs/AnimateHeight/index.native.js.map +1 -1
  8. package/dist/cjs/Chip/index.cjs +8 -1
  9. package/dist/cjs/Chip/index.native.js +8 -1
  10. package/dist/cjs/Chip/index.native.js.map +1 -1
  11. package/dist/cjs/SheetModal/index.cjs +22 -3
  12. package/dist/cjs/SheetModal/index.native.js +115 -27
  13. package/dist/cjs/SheetModal/index.native.js.map +1 -1
  14. package/dist/cjs/Tabs/index.cjs +35 -18
  15. package/dist/cjs/Tabs/index.native.js +39 -18
  16. package/dist/cjs/Tabs/index.native.js.map +1 -1
  17. package/dist/cjs/Text.cjs +2 -0
  18. package/dist/cjs/Text.native.js +2 -0
  19. package/dist/cjs/Text.native.js.map +1 -1
  20. package/dist/cjs/TreeSelect/index.cjs +55 -52
  21. package/dist/cjs/TreeSelect/index.native.js +55 -52
  22. package/dist/cjs/TreeSelect/index.native.js.map +1 -1
  23. package/dist/cjs/Video/PlayerChrome.cjs +3 -9
  24. package/dist/cjs/Video/PlayerChrome.native.js +3 -9
  25. package/dist/cjs/Video/PlayerChrome.native.js.map +1 -1
  26. package/dist/cjs/code/Code/index.cjs +6 -0
  27. package/dist/cjs/code/Code/index.native.js +7 -4
  28. package/dist/cjs/code/Code/index.native.js.map +1 -1
  29. package/dist/cjs/code/CodeBlock/index.cjs +4 -5
  30. package/dist/cjs/code/CodeBlock/index.native.js +4 -5
  31. package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
  32. package/dist/cjs/icons/themed.cjs +2 -1
  33. package/dist/cjs/icons/themed.native.js +2 -1
  34. package/dist/cjs/icons/themed.native.js.map +1 -1
  35. package/dist/cjs/knobImmuneExports.cjs +3 -3
  36. package/dist/cjs/knobImmuneExports.native.js +3 -3
  37. package/dist/cjs/layouts/PaneScaffold.cjs +70 -42
  38. package/dist/cjs/layouts/PaneScaffold.native.js +75 -48
  39. package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
  40. package/dist/cjs/layouts/page.cjs +2 -1
  41. package/dist/cjs/layouts/page.native.js +2 -1
  42. package/dist/cjs/layouts/page.native.js.map +1 -1
  43. package/dist/cjs/layouts/sidebar.cjs +1 -3
  44. package/dist/cjs/layouts/sidebar.native.js +1 -3
  45. package/dist/cjs/layouts/sidebar.native.js.map +1 -1
  46. package/dist/cjs/layouts/tags.native.js.map +1 -1
  47. package/dist/cjs/surfaces.cjs +0 -32
  48. package/dist/cjs/surfaces.native.js +0 -32
  49. package/dist/cjs/surfaces.native.js.map +1 -1
  50. package/dist/cjs/views/List.cjs +1 -3
  51. package/dist/cjs/views/List.native.js +1 -3
  52. package/dist/cjs/views/List.native.js.map +1 -1
  53. package/dist/cjs/views/Matrix.cjs +568 -0
  54. package/dist/cjs/views/Matrix.native.js +612 -0
  55. package/dist/cjs/views/Matrix.native.js.map +1 -0
  56. package/dist/cjs/views/TreeView.cjs +175 -43
  57. package/dist/cjs/views/TreeView.native.js +181 -46
  58. package/dist/cjs/views/TreeView.native.js.map +1 -1
  59. package/dist/cjs/views/ganttMath.cjs +2 -0
  60. package/dist/cjs/views/ganttMath.native.js +2 -0
  61. package/dist/cjs/views/ganttMath.native.js.map +1 -1
  62. package/dist/cjs/views/index.cjs +16 -0
  63. package/dist/cjs/views/index.native.js +16 -0
  64. package/dist/cjs/views/index.native.js.map +1 -1
  65. package/dist/cjs/views/matrixMath.cjs +157 -0
  66. package/dist/cjs/views/matrixMath.native.js +229 -0
  67. package/dist/cjs/views/matrixMath.native.js.map +1 -0
  68. package/dist/esm/Accordion/index.mjs +3 -7
  69. package/dist/esm/Accordion/index.mjs.map +1 -1
  70. package/dist/esm/Accordion/index.native.js +3 -7
  71. package/dist/esm/Accordion/index.native.js.map +1 -1
  72. package/dist/esm/AnimateHeight/index.mjs +2 -4
  73. package/dist/esm/AnimateHeight/index.mjs.map +1 -1
  74. package/dist/esm/AnimateHeight/index.native.js +2 -4
  75. package/dist/esm/AnimateHeight/index.native.js.map +1 -1
  76. package/dist/esm/Avatar/getInitials.native.js.map +1 -1
  77. package/dist/esm/Avatar/index.native.js.map +1 -1
  78. package/dist/esm/Badge/index.native.js.map +1 -1
  79. package/dist/esm/Button.native.js.map +1 -1
  80. package/dist/esm/Carousel/index.native.js.map +1 -1
  81. package/dist/esm/Chip/index.mjs +9 -2
  82. package/dist/esm/Chip/index.mjs.map +1 -1
  83. package/dist/esm/Chip/index.native.js +9 -2
  84. package/dist/esm/Chip/index.native.js.map +1 -1
  85. package/dist/esm/Collapsible.native.js.map +1 -1
  86. package/dist/esm/ContextMenu/index.native.js.map +1 -1
  87. package/dist/esm/CopyField/index.native.js.map +1 -1
  88. package/dist/esm/DotIndicator/index.native.js.map +1 -1
  89. package/dist/esm/DropdownMenu/index.native.js.map +1 -1
  90. package/dist/esm/ErrorBoundary/index.native.js.map +1 -1
  91. package/dist/esm/Heading.native.js.map +1 -1
  92. package/dist/esm/Meter/index.native.js.map +1 -1
  93. package/dist/esm/Meter/meter.native.js.map +1 -1
  94. package/dist/esm/Pagination.native.js.map +1 -1
  95. package/dist/esm/ProgressSteps/index.native.js.map +1 -1
  96. package/dist/esm/Quote/index.native.js.map +1 -1
  97. package/dist/esm/Separator/index.native.js.map +1 -1
  98. package/dist/esm/SheetModal/detents.native.js.map +1 -1
  99. package/dist/esm/SheetModal/index.mjs +22 -3
  100. package/dist/esm/SheetModal/index.mjs.map +1 -1
  101. package/dist/esm/SheetModal/index.native.js +117 -29
  102. package/dist/esm/SheetModal/index.native.js.map +1 -1
  103. package/dist/esm/Skeleton/index.native.js.map +1 -1
  104. package/dist/esm/SkipLink/index.native.js.map +1 -1
  105. package/dist/esm/SortableList/SortableHandle.native.js.map +1 -1
  106. package/dist/esm/SortableList/index.native.js.map +1 -1
  107. package/dist/esm/SortableList/useSortableRows.native.js.map +1 -1
  108. package/dist/esm/Tabs/index.mjs +36 -19
  109. package/dist/esm/Tabs/index.mjs.map +1 -1
  110. package/dist/esm/Tabs/index.native.js +40 -19
  111. package/dist/esm/Tabs/index.native.js.map +1 -1
  112. package/dist/esm/Text.mjs +3 -1
  113. package/dist/esm/Text.mjs.map +1 -1
  114. package/dist/esm/Text.native.js +3 -1
  115. package/dist/esm/Text.native.js.map +1 -1
  116. package/dist/esm/Toast/index.native.js.map +1 -1
  117. package/dist/esm/Toast/store.native.js.map +1 -1
  118. package/dist/esm/Tooltip/nativePress.native.js.map +1 -1
  119. package/dist/esm/Tooltip/tooltipShared.native.js.map +1 -1
  120. package/dist/esm/TreeSelect/index.mjs +56 -53
  121. package/dist/esm/TreeSelect/index.mjs.map +1 -1
  122. package/dist/esm/TreeSelect/index.native.js +56 -53
  123. package/dist/esm/TreeSelect/index.native.js.map +1 -1
  124. package/dist/esm/TreeSelect/treeSelectModel.native.js.map +1 -1
  125. package/dist/esm/Video/PlayerChrome.mjs +4 -10
  126. package/dist/esm/Video/PlayerChrome.mjs.map +1 -1
  127. package/dist/esm/Video/PlayerChrome.native.js +4 -10
  128. package/dist/esm/Video/PlayerChrome.native.js.map +1 -1
  129. package/dist/esm/Video/VideoFrame.native.js.map +1 -1
  130. package/dist/esm/Video/types.native.js.map +1 -1
  131. package/dist/esm/Wheel/index.native.js.map +1 -1
  132. package/dist/esm/Wizard/index.native.js.map +1 -1
  133. package/dist/esm/actions/ActionBar.native.js.map +1 -1
  134. package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
  135. package/dist/esm/actions/devWarn.native.js.map +1 -1
  136. package/dist/esm/actions/index.native.js.map +1 -1
  137. package/dist/esm/actions/severity.native.js.map +1 -1
  138. package/dist/esm/charts/Axis.native.js.map +1 -1
  139. package/dist/esm/charts/BarChart.native.js.map +1 -1
  140. package/dist/esm/charts/ChartDataView.native.js.map +1 -1
  141. package/dist/esm/charts/ChartSurface.native.js.map +1 -1
  142. package/dist/esm/charts/LineChart.native.js.map +1 -1
  143. package/dist/esm/charts/PieChart.native.js.map +1 -1
  144. package/dist/esm/charts/Sparkline.native.js.map +1 -1
  145. package/dist/esm/charts/accessibility.native.js.map +1 -1
  146. package/dist/esm/charts/composeChart.native.js.map +1 -1
  147. package/dist/esm/charts/index.native.js.map +1 -1
  148. package/dist/esm/charts/math.native.js.map +1 -1
  149. package/dist/esm/charts/series.native.js.map +1 -1
  150. package/dist/esm/charts/svg.native.js.map +1 -1
  151. package/dist/esm/charts/types.native.js.map +1 -1
  152. package/dist/esm/charts/useChartTheme.native.js.map +1 -1
  153. package/dist/esm/code/Code/index.mjs +6 -0
  154. package/dist/esm/code/Code/index.mjs.map +1 -1
  155. package/dist/esm/code/Code/index.native.js +10 -7
  156. package/dist/esm/code/Code/index.native.js.map +1 -1
  157. package/dist/esm/code/CodeBlock/index.mjs +5 -6
  158. package/dist/esm/code/CodeBlock/index.mjs.map +1 -1
  159. package/dist/esm/code/CodeBlock/index.native.js +5 -6
  160. package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
  161. package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
  162. package/dist/esm/code/Highlighter/index.native.js.map +1 -1
  163. package/dist/esm/code/Pre/index.native.js.map +1 -1
  164. package/dist/esm/code/index.native.js.map +1 -1
  165. package/dist/esm/componentColors.native.js.map +1 -1
  166. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  167. package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
  168. package/dist/esm/feedback/copy.native.js.map +1 -1
  169. package/dist/esm/feedback/index.native.js.map +1 -1
  170. package/dist/esm/feedback/notify.native.js.map +1 -1
  171. package/dist/esm/feedback/route.native.js.map +1 -1
  172. package/dist/esm/feedback/store.native.js.map +1 -1
  173. package/dist/esm/hooks/index.native.js.map +1 -1
  174. package/dist/esm/hooks/useClipboard.native.js.map +1 -1
  175. package/dist/esm/hooks/useDocumentTitle.native.js.map +1 -1
  176. package/dist/esm/icons/CheckRegular.native.js.map +1 -1
  177. package/dist/esm/icons/MinusRegular.native.js.map +1 -1
  178. package/dist/esm/icons/index.native.js.map +1 -1
  179. package/dist/esm/icons/lucide.native.js.map +1 -1
  180. package/dist/esm/icons/themed.mjs +3 -2
  181. package/dist/esm/icons/themed.mjs.map +1 -1
  182. package/dist/esm/icons/themed.native.js +3 -2
  183. package/dist/esm/icons/themed.native.js.map +1 -1
  184. package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
  185. package/dist/esm/images/Image/shared.native.js.map +1 -1
  186. package/dist/esm/images/Image/types.native.js.map +1 -1
  187. package/dist/esm/images/index.native.js.map +1 -1
  188. package/dist/esm/index.native.js.map +1 -1
  189. package/dist/esm/knobImmuneExports.mjs +3 -3
  190. package/dist/esm/knobImmuneExports.native.js +3 -3
  191. package/dist/esm/knobImmuneExports.native.js.map +1 -1
  192. package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
  193. package/dist/esm/layouts/Debug/index.native.js.map +1 -1
  194. package/dist/esm/layouts/EmptyState.native.js.map +1 -1
  195. package/dist/esm/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  196. package/dist/esm/layouts/PageTemplates.native.js.map +1 -1
  197. package/dist/esm/layouts/PaneScaffold.mjs +70 -42
  198. package/dist/esm/layouts/PaneScaffold.mjs.map +1 -1
  199. package/dist/esm/layouts/PaneScaffold.native.js +75 -48
  200. package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
  201. package/dist/esm/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  202. package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
  203. package/dist/esm/layouts/attachments.native.js.map +1 -1
  204. package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
  205. package/dist/esm/layouts/index.native.js.map +1 -1
  206. package/dist/esm/layouts/page.mjs +3 -2
  207. package/dist/esm/layouts/page.mjs.map +1 -1
  208. package/dist/esm/layouts/page.native.js +3 -2
  209. package/dist/esm/layouts/page.native.js.map +1 -1
  210. package/dist/esm/layouts/pageHeadingScope.native.js.map +1 -1
  211. package/dist/esm/layouts/sidebar.mjs +2 -4
  212. package/dist/esm/layouts/sidebar.mjs.map +1 -1
  213. package/dist/esm/layouts/sidebar.native.js +2 -4
  214. package/dist/esm/layouts/sidebar.native.js.map +1 -1
  215. package/dist/esm/layouts/tags.mjs.map +1 -1
  216. package/dist/esm/layouts/tags.native.js.map +1 -1
  217. package/dist/esm/layouts/timeline.native.js.map +1 -1
  218. package/dist/esm/layouts/toolbar.native.js.map +1 -1
  219. package/dist/esm/shared/actionScan.native.js.map +1 -1
  220. package/dist/esm/shared/i18n.native.js.map +1 -1
  221. package/dist/esm/shared/t.native.js.map +1 -1
  222. package/dist/esm/shared/textRidesText.native.js.map +1 -1
  223. package/dist/esm/shared/useReturnFocusOnClose.native.js.map +1 -1
  224. package/dist/esm/surfaces.mjs +1 -33
  225. package/dist/esm/surfaces.mjs.map +1 -1
  226. package/dist/esm/surfaces.native.js +1 -33
  227. package/dist/esm/surfaces.native.js.map +1 -1
  228. package/dist/esm/tamagui.native.js.map +1 -1
  229. package/dist/esm/testSetup.native.js.map +1 -1
  230. package/dist/esm/utils/setTinted.native.js.map +1 -1
  231. package/dist/esm/utils/unwrapText.native.js.map +1 -1
  232. package/dist/esm/views/Calendar.native.js.map +1 -1
  233. package/dist/esm/views/Dashboard.native.js.map +1 -1
  234. package/dist/esm/views/Gantt.native.js.map +1 -1
  235. package/dist/esm/views/ImageGrid.native.js.map +1 -1
  236. package/dist/esm/views/List.mjs +2 -4
  237. package/dist/esm/views/List.mjs.map +1 -1
  238. package/dist/esm/views/List.native.js +2 -4
  239. package/dist/esm/views/List.native.js.map +1 -1
  240. package/dist/esm/views/Matrix.mjs +543 -0
  241. package/dist/esm/views/Matrix.mjs.map +1 -0
  242. package/dist/esm/views/Matrix.native.js +573 -0
  243. package/dist/esm/views/Matrix.native.js.map +1 -0
  244. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  245. package/dist/esm/views/TreeView.mjs +175 -43
  246. package/dist/esm/views/TreeView.mjs.map +1 -1
  247. package/dist/esm/views/TreeView.native.js +181 -46
  248. package/dist/esm/views/TreeView.native.js.map +1 -1
  249. package/dist/esm/views/calendarMath.native.js.map +1 -1
  250. package/dist/esm/views/ganttMath.mjs +1 -1
  251. package/dist/esm/views/ganttMath.mjs.map +1 -1
  252. package/dist/esm/views/ganttMath.native.js +1 -1
  253. package/dist/esm/views/ganttMath.native.js.map +1 -1
  254. package/dist/esm/views/index.mjs +4 -2
  255. package/dist/esm/views/index.mjs.map +1 -1
  256. package/dist/esm/views/index.native.js +4 -2
  257. package/dist/esm/views/index.native.js.map +1 -1
  258. package/dist/esm/views/kanbanDnd.native.js.map +1 -1
  259. package/dist/esm/views/matrixMath.mjs +122 -0
  260. package/dist/esm/views/matrixMath.mjs.map +1 -0
  261. package/dist/esm/views/matrixMath.native.js +191 -0
  262. package/dist/esm/views/matrixMath.native.js.map +1 -0
  263. package/dist/esm/views/treeViewDnd.native.js.map +1 -1
  264. package/dist/esm/views/treeViewLayout.native.js.map +1 -1
  265. package/dist/esm/views/treeViewMotion.native.js.map +1 -1
  266. package/dist/esm/views/treeViewReveal.native.js.map +1 -1
  267. package/dist/jsx/Accordion/index.mjs +3 -7
  268. package/dist/jsx/Accordion/index.mjs.map +1 -1
  269. package/dist/jsx/Accordion/index.native.js +2 -6
  270. package/dist/jsx/Accordion/index.native.js.map +1 -1
  271. package/dist/jsx/AnimateHeight/index.mjs +2 -4
  272. package/dist/jsx/AnimateHeight/index.mjs.map +1 -1
  273. package/dist/jsx/AnimateHeight/index.native.js +1 -3
  274. package/dist/jsx/AnimateHeight/index.native.js.map +1 -1
  275. package/dist/jsx/Chip/index.mjs +9 -2
  276. package/dist/jsx/Chip/index.mjs.map +1 -1
  277. package/dist/jsx/Chip/index.native.js +8 -1
  278. package/dist/jsx/Chip/index.native.js.map +1 -1
  279. package/dist/jsx/SheetModal/index.mjs +22 -3
  280. package/dist/jsx/SheetModal/index.mjs.map +1 -1
  281. package/dist/jsx/SheetModal/index.native.js +115 -27
  282. package/dist/jsx/SheetModal/index.native.js.map +1 -1
  283. package/dist/jsx/Tabs/index.mjs +36 -19
  284. package/dist/jsx/Tabs/index.mjs.map +1 -1
  285. package/dist/jsx/Tabs/index.native.js +39 -18
  286. package/dist/jsx/Tabs/index.native.js.map +1 -1
  287. package/dist/jsx/Text.mjs +3 -1
  288. package/dist/jsx/Text.mjs.map +1 -1
  289. package/dist/jsx/Text.native.js +2 -0
  290. package/dist/jsx/Text.native.js.map +1 -1
  291. package/dist/jsx/TreeSelect/index.mjs +56 -53
  292. package/dist/jsx/TreeSelect/index.mjs.map +1 -1
  293. package/dist/jsx/TreeSelect/index.native.js +55 -52
  294. package/dist/jsx/TreeSelect/index.native.js.map +1 -1
  295. package/dist/jsx/Video/PlayerChrome.mjs +4 -10
  296. package/dist/jsx/Video/PlayerChrome.mjs.map +1 -1
  297. package/dist/jsx/Video/PlayerChrome.native.js +3 -9
  298. package/dist/jsx/Video/PlayerChrome.native.js.map +1 -1
  299. package/dist/jsx/code/Code/index.mjs +6 -0
  300. package/dist/jsx/code/Code/index.mjs.map +1 -1
  301. package/dist/jsx/code/Code/index.native.js +7 -4
  302. package/dist/jsx/code/Code/index.native.js.map +1 -1
  303. package/dist/jsx/code/CodeBlock/index.mjs +5 -6
  304. package/dist/jsx/code/CodeBlock/index.mjs.map +1 -1
  305. package/dist/jsx/code/CodeBlock/index.native.js +4 -5
  306. package/dist/jsx/code/CodeBlock/index.native.js.map +1 -1
  307. package/dist/jsx/icons/themed.mjs +3 -2
  308. package/dist/jsx/icons/themed.mjs.map +1 -1
  309. package/dist/jsx/icons/themed.native.js +2 -1
  310. package/dist/jsx/icons/themed.native.js.map +1 -1
  311. package/dist/jsx/knobImmuneExports.mjs +3 -3
  312. package/dist/jsx/knobImmuneExports.native.js +3 -3
  313. package/dist/jsx/layouts/PaneScaffold.mjs +70 -42
  314. package/dist/jsx/layouts/PaneScaffold.mjs.map +1 -1
  315. package/dist/jsx/layouts/PaneScaffold.native.js +75 -48
  316. package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
  317. package/dist/jsx/layouts/page.mjs +3 -2
  318. package/dist/jsx/layouts/page.mjs.map +1 -1
  319. package/dist/jsx/layouts/page.native.js +2 -1
  320. package/dist/jsx/layouts/page.native.js.map +1 -1
  321. package/dist/jsx/layouts/sidebar.mjs +2 -4
  322. package/dist/jsx/layouts/sidebar.mjs.map +1 -1
  323. package/dist/jsx/layouts/sidebar.native.js +1 -3
  324. package/dist/jsx/layouts/sidebar.native.js.map +1 -1
  325. package/dist/jsx/layouts/tags.mjs.map +1 -1
  326. package/dist/jsx/layouts/tags.native.js.map +1 -1
  327. package/dist/jsx/surfaces.mjs +1 -33
  328. package/dist/jsx/surfaces.mjs.map +1 -1
  329. package/dist/jsx/surfaces.native.js +0 -32
  330. package/dist/jsx/surfaces.native.js.map +1 -1
  331. package/dist/jsx/views/List.mjs +2 -4
  332. package/dist/jsx/views/List.mjs.map +1 -1
  333. package/dist/jsx/views/List.native.js +1 -3
  334. package/dist/jsx/views/List.native.js.map +1 -1
  335. package/dist/jsx/views/Matrix.mjs +543 -0
  336. package/dist/jsx/views/Matrix.mjs.map +1 -0
  337. package/dist/jsx/views/Matrix.native.js +612 -0
  338. package/dist/jsx/views/Matrix.native.js.map +1 -0
  339. package/dist/jsx/views/TreeView.mjs +175 -43
  340. package/dist/jsx/views/TreeView.mjs.map +1 -1
  341. package/dist/jsx/views/TreeView.native.js +181 -46
  342. package/dist/jsx/views/TreeView.native.js.map +1 -1
  343. package/dist/jsx/views/ganttMath.mjs +1 -1
  344. package/dist/jsx/views/ganttMath.mjs.map +1 -1
  345. package/dist/jsx/views/ganttMath.native.js +2 -0
  346. package/dist/jsx/views/ganttMath.native.js.map +1 -1
  347. package/dist/jsx/views/index.mjs +4 -2
  348. package/dist/jsx/views/index.mjs.map +1 -1
  349. package/dist/jsx/views/index.native.js +16 -0
  350. package/dist/jsx/views/index.native.js.map +1 -1
  351. package/dist/jsx/views/matrixMath.mjs +122 -0
  352. package/dist/jsx/views/matrixMath.mjs.map +1 -0
  353. package/dist/jsx/views/matrixMath.native.js +229 -0
  354. package/dist/jsx/views/matrixMath.native.js.map +1 -0
  355. package/package.json +12 -12
  356. package/src/Accordion/Accordion.spec.tsx +20 -0
  357. package/src/Accordion/index.tsx +8 -4
  358. package/src/AnimateHeight/index.tsx +143 -142
  359. package/src/Chip/Chip.borderLadder.spec.tsx +54 -0
  360. package/src/Chip/Chip.pressSlop.spec.tsx +57 -0
  361. package/src/Chip/index.tsx +15 -1
  362. package/src/Heading.native.spec.tsx +1 -1
  363. package/src/Separator/index.tsx +3 -3
  364. package/src/SheetModal/SheetModal.detentLayout.spec.tsx +173 -0
  365. package/src/SheetModal/SheetModal.fill.spec.tsx +147 -0
  366. package/src/SheetModal/SheetModal.ownedBody.spec.tsx +200 -0
  367. package/src/SheetModal/SheetModal.stories.spec.tsx +23 -2
  368. package/src/SheetModal/SheetModal.stories.tsx +275 -2
  369. package/src/SheetModal/SheetModal.touch.spec.tsx +63 -0
  370. package/src/SheetModal/index.native.tsx +143 -21
  371. package/src/SheetModal/index.tsx +40 -3
  372. package/src/Tabs/Tabs.hydration.spec.tsx +123 -0
  373. package/src/Tabs/Tabs.lifecycle.spec.tsx +123 -0
  374. package/src/Tabs/Tabs.measurement.spec.tsx +186 -0
  375. package/src/Tabs/Tabs.stories.tsx +43 -0
  376. package/src/Tabs/index.tsx +45 -15
  377. package/src/Text.spec.tsx +32 -2
  378. package/src/Text.tsx +7 -6
  379. package/src/Toast/Toast.spec.tsx +50 -0
  380. package/src/Tooltip/Tooltip.spec.tsx +55 -2
  381. package/src/TreeSelect/TreeSelect.spec.tsx +15 -15
  382. package/src/TreeSelect/index.tsx +53 -50
  383. package/src/Video/PlayerChrome.tsx +4 -3
  384. package/src/Wheel/Wheel.spec.tsx +4 -4
  385. package/src/adjacency.l1.spec.tsx +175 -0
  386. package/src/code/Code/code.spec.tsx +2 -19
  387. package/src/code/Code/index.tsx +0 -6
  388. package/src/code/CodeBlock/index.tsx +5 -3
  389. package/src/code/highlightedCode.spec.tsx +2 -2
  390. package/src/code/hostProps.spec.tsx +55 -0
  391. package/src/icons/themed.hydration.spec.tsx +60 -0
  392. package/src/icons/themed.tsx +3 -6
  393. package/src/knobImmuneExports.ts +3 -3
  394. package/src/layouts/PaneScaffold.spec.tsx +148 -2
  395. package/src/layouts/PaneScaffold.stories.tsx +33 -1
  396. package/src/layouts/PaneScaffold.tsx +101 -48
  397. package/src/layouts/page.designLaw.spec.tsx +20 -0
  398. package/src/layouts/page.tsx +2 -0
  399. package/src/layouts/sidebar.tsx +2 -3
  400. package/src/layouts/tags.tsx +2 -1
  401. package/src/overlayElevation.spec.tsx +39 -51
  402. package/src/surfaces.spec.tsx +13 -10
  403. package/src/surfaces.tsx +4 -33
  404. package/src/tamagui.spec.ts +4 -3
  405. package/src/textAccentSecondary.spec.tsx +100 -2
  406. package/src/views/List.tsx +2 -1
  407. package/src/views/Matrix.spec.tsx +339 -0
  408. package/src/views/Matrix.stories.spec.tsx +68 -0
  409. package/src/views/Matrix.stories.tsx +153 -0
  410. package/src/views/Matrix.tsx +738 -0
  411. package/src/views/TreeView.reveal.spec.tsx +7 -0
  412. package/src/views/TreeView.reveal.stories.tsx +134 -0
  413. package/src/views/TreeView.scroll-index.spec.tsx +246 -0
  414. package/src/views/TreeView.scroll.spec.tsx +711 -50
  415. package/src/views/TreeView.tsx +230 -49
  416. package/src/views/ganttMath.ts +4 -2
  417. package/src/views/index.ts +30 -0
  418. package/src/views/matrixMath.spec.ts +237 -0
  419. package/src/views/matrixMath.ts +251 -0
  420. package/src/views/views.spec.tsx +3 -1
  421. package/types/Accordion/index.d.ts.map +1 -1
  422. package/types/AnimateHeight/index.d.ts.map +1 -1
  423. package/types/Chip/index.d.ts.map +1 -1
  424. package/types/Separator/index.d.ts +3 -3
  425. package/types/SheetModal/index.d.ts +8 -1
  426. package/types/SheetModal/index.d.ts.map +1 -1
  427. package/types/SheetModal/index.native.d.ts +1 -1
  428. package/types/SheetModal/index.native.d.ts.map +1 -1
  429. package/types/Tabs/index.d.ts.map +1 -1
  430. package/types/Text.d.ts.map +1 -1
  431. package/types/TreeSelect/index.d.ts.map +1 -1
  432. package/types/Video/PlayerChrome.d.ts.map +1 -1
  433. package/types/code/Code/index.d.ts.map +1 -1
  434. package/types/code/CodeBlock/index.d.ts.map +1 -1
  435. package/types/icons/themed.d.ts.map +1 -1
  436. package/types/layouts/PaneScaffold.d.ts +14 -1
  437. package/types/layouts/PaneScaffold.d.ts.map +1 -1
  438. package/types/layouts/page.d.ts.map +1 -1
  439. package/types/layouts/sidebar.d.ts.map +1 -1
  440. package/types/layouts/tags.d.ts.map +1 -1
  441. package/types/surfaces.d.ts.map +1 -1
  442. package/types/views/List.d.ts.map +1 -1
  443. package/types/views/Matrix.d.ts +102 -0
  444. package/types/views/Matrix.d.ts.map +1 -0
  445. package/types/views/TreeView.d.ts +10 -1
  446. package/types/views/TreeView.d.ts.map +1 -1
  447. package/types/views/ganttMath.d.ts +4 -0
  448. package/types/views/ganttMath.d.ts.map +1 -1
  449. package/types/views/index.d.ts +3 -1
  450. package/types/views/index.d.ts.map +1 -1
  451. package/types/views/matrixMath.d.ts +114 -0
  452. package/types/views/matrixMath.d.ts.map +1 -0
package/src/Text.spec.tsx CHANGED
@@ -21,10 +21,10 @@
21
21
  */
22
22
  import { cleanup, screen } from "@testing-library/react";
23
23
  import { renderWithProviders } from "@multiplatform.one/test-utils";
24
- import { Preset } from "@multiplatform.one/theme";
24
+ import { Preset, useAccentOnSurface } from "@multiplatform.one/theme";
25
25
  import { XStack } from "tamagui";
26
26
  import { afterEach, describe, expect, it } from "vitest";
27
- import { Text } from "./Text";
27
+ import { Anchor, Text } from "./Text";
28
28
 
29
29
  afterEach(cleanup);
30
30
 
@@ -181,6 +181,36 @@ describe("house Text — fontWeight and bodyFont reach the text node", () => {
181
181
  });
182
182
  });
183
183
 
184
+ describe("house Anchor — link chrome is house Text's, in the accent (MPO-21 G11-A)", () => {
185
+ function AccentProbe({ onInk }: { onInk: (ink: string) => void }) {
186
+ onInk(useAccentOnSurface());
187
+ return null;
188
+ }
189
+
190
+ it("paints the AA-safe accent ink, not tamagui's link colour", () => {
191
+ let ink = "";
192
+ const anchor = renderTextClasses(
193
+ <>
194
+ <AccentProbe onInk={(value) => (ink = value)} />
195
+ <Anchor href="#">{LABEL}</Anchor>
196
+ </>,
197
+ ["_col-"],
198
+ );
199
+ expect(ink).not.toBe("");
200
+ const accented = renderTextClasses(<Anchor color={ink as never}>{LABEL}</Anchor>, ["_col-"]);
201
+ const body = renderTextClasses(<Text>{LABEL}</Text>, ["_col-"]);
202
+ expect(anchor).not.toHaveLength(0);
203
+ expect(anchor).toEqual(accented);
204
+ expect(anchor).not.toEqual(body);
205
+ });
206
+
207
+ it("a consumer colour still ejects (STD-EJECT-LAST)", () => {
208
+ const ejected = renderTextClasses(<Anchor color="$color9">{LABEL}</Anchor>, ["_col-"]);
209
+ const explicit = renderTextClasses(<Text color="$color9">{LABEL}</Text>, ["_col-"]);
210
+ expect(ejected).toEqual(explicit);
211
+ });
212
+ });
213
+
184
214
  // The NATIVE arm lives in ./Text.native.spec.tsx. It used to sit here as a
185
215
  // `vi.resetModules()` + dynamic-import block, but that returned a SPLIT module
186
216
  // graph — a fresh `renderWithProviders` over a stale `useResolvedKnobs` — and
package/src/Text.tsx CHANGED
@@ -24,10 +24,10 @@
24
24
  * 500/600 are not label weights; see tamagui-rendered-reference.md §9)
25
25
  * - textAccent → knobProps.textAccentColor (high $color / medium+low
26
26
  * $color11, the AA legibility floor) on Text/SizableText/Paragraph.
27
- * Anchor keeps tamagui's link ink: link chrome has no owning LC rule yet
28
- * (the former registry row's ADJUDICATION-CANDIDATE stands, tracked in
29
- * the MR), and painting body accent over it would silently restyle every
30
- * link before that adjudication.
27
+ * - link ink → Anchor paints the accent, as the most chromatic step of the
28
+ * theme's accent ramp that still clears AA on both page surfaces
29
+ * (`useAccentOnSurface`). House Text owns link chrome (Clay 2026-09-26,
30
+ * MPO-21 G11-A); a consumer `color` still ejects.
31
31
  *
32
32
  * Default body/label ramp (tamagui-rendered-reference.md §9, the $4 / $true
33
33
  * stop): 14px / 25px / 400. createInterFont's size+10 table yields 14/24;
@@ -38,7 +38,7 @@
38
38
  * Raw primitives stay reachable as TamaguiText / TamaguiSizableText /
39
39
  * TamaguiParagraph / TamaguiAnchor (./tamagui.ts escape hatches, LC-45).
40
40
  */
41
- import { useResolvedKnobs } from "@multiplatform.one/theme";
41
+ import { useAccentOnSurface, useResolvedKnobs } from "@multiplatform.one/theme";
42
42
  import {
43
43
  Anchor as RawAnchor,
44
44
  type AnchorProps,
@@ -81,5 +81,6 @@ export function Paragraph(props: ParagraphProps) {
81
81
 
82
82
  export function Anchor(props: AnchorProps) {
83
83
  const { knobProps } = useResolvedKnobs();
84
- return <RawAnchor {...knobProps.body} {...props} />;
84
+ const linkInk = useAccentOnSurface();
85
+ return <RawAnchor {...knobProps.body} color={linkInk} {...props} />;
85
86
  }
@@ -735,6 +735,56 @@ describe("Toast data attributes reach the DOM", () => {
735
735
  });
736
736
  });
737
737
 
738
+ describe("Toast density moves padX and gap on the host (MPO-42)", () => {
739
+ afterEach(cleanup);
740
+
741
+ const padX = ["_px-", "_pl-", "_pr-"];
742
+ const gap = ["_gap-"];
743
+
744
+ function hostAtoms(node: ReactElement) {
745
+ renderWithProviders(node);
746
+ const host = screen.getByTestId("toast");
747
+ const measured = {
748
+ density: host.getAttribute("data-density"),
749
+ padX: classesByPrefix(host, padX),
750
+ gap: classesByPrefix(host, gap),
751
+ };
752
+ cleanup();
753
+ return measured;
754
+ }
755
+
756
+ it("the density knob changes padX and gap between the two stops", () => {
757
+ const comfortable = hostAtoms(
758
+ <Preset overrides={{ density: "comfortable" }}>
759
+ <Toast title="Saved" onDismiss={() => {}} />
760
+ </Preset>,
761
+ );
762
+ const compact = hostAtoms(
763
+ <Preset overrides={{ density: "compact" }}>
764
+ <Toast title="Saved" onDismiss={() => {}} />
765
+ </Preset>,
766
+ );
767
+ expect(comfortable.density).toBe("comfortable");
768
+ expect(compact.density).toBe("compact");
769
+ expect(comfortable.padX.length).toBeGreaterThan(0);
770
+ expect(comfortable.gap.length).toBeGreaterThan(0);
771
+ expect(compact.padX).not.toEqual(comfortable.padX);
772
+ expect(compact.gap).not.toEqual(comfortable.gap);
773
+ });
774
+
775
+ it("the compact prop lands the same padX and gap as the density knob", () => {
776
+ const knob = hostAtoms(
777
+ <Preset overrides={{ density: "compact" }}>
778
+ <Toast title="Saved" onDismiss={() => {}} />
779
+ </Preset>,
780
+ );
781
+ const prop = hostAtoms(<Toast compact title="Saved" onDismiss={() => {}} />);
782
+ expect(prop.density).toBe("compact");
783
+ expect(prop.padX).toEqual(knob.padX);
784
+ expect(prop.gap).toEqual(knob.gap);
785
+ });
786
+ });
787
+
738
788
  describe("Toast action label weight and contrast (TEXT NODE)", () => {
739
789
  it("Undo is weight 400 on the TEXT NODE, never 600 (R7 / §6.1)", () => {
740
790
  const action = renderActionWeight(
@@ -2,8 +2,8 @@
2
2
  * @vitest-environment jsdom
3
3
  */
4
4
 
5
- import { fireEvent } from "@testing-library/react";
6
- import { OVERLAY_ANCHOR_GAP, __resetDevWarnSeen } from "@multiplatform.one/theme";
5
+ import { act, fireEvent } from "@testing-library/react";
6
+ import { OVERLAY_ANCHOR_GAP, Preset, __resetDevWarnSeen } from "@multiplatform.one/theme";
7
7
  import { renderWithProviders } from "@multiplatform.one/test-utils";
8
8
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
9
9
  import { Button } from "@multiplatform.one/forms";
@@ -99,6 +99,59 @@ describe("Tooltip interaction", () => {
99
99
  });
100
100
  });
101
101
 
102
+ describe("Tooltip content rides the border, elevation and animation knobs", () => {
103
+ const stops = [
104
+ { borderWidth: "none", elevation: "none", animation: "none" },
105
+ { borderWidth: "small", elevation: "small", animation: "quick" },
106
+ { borderWidth: "large", elevation: "large", animation: "slow" },
107
+ ] as const;
108
+
109
+ async function measure(stop: (typeof stops)[number]) {
110
+ const result = renderWithProviders(
111
+ <Preset overrides={stop}>
112
+ <Tooltip content="Hint" open>
113
+ <Button>Edit</Button>
114
+ </Tooltip>
115
+ </Preset>,
116
+ );
117
+ await act(async () => {
118
+ await new Promise((resolve) => setTimeout(resolve, 50));
119
+ });
120
+ const content = document.querySelector<HTMLElement>("[data-tooltip='content']");
121
+ const classes = content?.className.split(/\s+/) ?? [];
122
+ const measured = {
123
+ mounted: content !== null,
124
+ border: classes.find((c) => c.startsWith("_btw-")),
125
+ shadow: classes.find((c) => c.startsWith("_bxsh-"))?.match(/^_bxsh-\d+px\d+px\d+px/)?.[0],
126
+ transition: content?.style.transition.match(/^all \d+ms/)?.[0],
127
+ };
128
+ result.unmount();
129
+ return measured;
130
+ }
131
+
132
+ it("follows each stop on the mounted bubble, and none carries no border, shadow or motion", async () => {
133
+ const none = await measure(stops[0]);
134
+ const small = await measure(stops[1]);
135
+ const large = await measure(stops[2]);
136
+ expect(none).toEqual({
137
+ mounted: true,
138
+ border: "_btw-0px",
139
+ shadow: undefined,
140
+ transition: undefined,
141
+ });
142
+ expect(small).toMatchObject({
143
+ mounted: true,
144
+ border: "_btw-0--5px",
145
+ shadow: "_bxsh-0px3px6px",
146
+ });
147
+ // Overlay large is the ladder's own $5 dialog stop, not the control $4 (MPO-99).
148
+ expect(large).toMatchObject({ mounted: true, border: "_btw-2px", shadow: "_bxsh-0px12px24px" });
149
+ expect(small.transition).toMatch(/^all \d+ms$/);
150
+ expect(large.transition).toMatch(/^all \d+ms$/);
151
+ expect(large.transition).not.toBe(small.transition);
152
+ });
153
+ });
154
+
102
155
  describe("Tooltip native long-press open path", () => {
103
156
  beforeEach(() => {
104
157
  vi.useFakeTimers();
@@ -84,7 +84,7 @@ describe("TreeSelect cover + width (MPO-53 AC-3)", () => {
84
84
  open
85
85
  />,
86
86
  );
87
- const trigger = result.container.querySelector(
87
+ const trigger = result.baseElement.querySelector(
88
88
  '[data-testid="tree-select-trigger"]',
89
89
  ) as HTMLElement;
90
90
  expect(trigger).toBeTruthy();
@@ -93,7 +93,7 @@ describe("TreeSelect cover + width (MPO-53 AC-3)", () => {
93
93
 
94
94
  try {
95
95
  await waitFor(() => {
96
- const panel = result.container.querySelector(
96
+ const panel = result.baseElement.querySelector(
97
97
  '[data-testid="tree-select-panel"]',
98
98
  ) as HTMLElement | null;
99
99
  expect(panel).toBeTruthy();
@@ -114,7 +114,7 @@ describe("TreeSelect LC-49 one tab stop", () => {
114
114
  const result = renderWithProviders(
115
115
  <TreeSelect label="Account" nodes={accounts} value="hdfc" />,
116
116
  );
117
- const closedStops = tabStops(result.container);
117
+ const closedStops = tabStops(result.baseElement);
118
118
  expect(closedStops.length).toBe(1);
119
119
  expect(closedStops[0]?.getAttribute("data-testid")).toBe("tree-select-trigger");
120
120
 
@@ -128,7 +128,7 @@ describe("TreeSelect LC-49 one tab stop", () => {
128
128
  />,
129
129
  );
130
130
  await waitFor(() => {
131
- expect(result.container.querySelector('[data-testid="tree-select-search"]')).toBeTruthy();
131
+ expect(result.baseElement.querySelector('[data-testid="tree-select-search"]')).toBeTruthy();
132
132
  });
133
133
  const openRoot = result.baseElement;
134
134
  const search = openRoot.querySelector(
@@ -169,16 +169,16 @@ describe("TreeSelect LC-21 commit vs expand", () => {
169
169
  />,
170
170
  );
171
171
  await waitFor(() => {
172
- expect(result.container.querySelector("[data-treeselect-caret]")).toBeTruthy();
172
+ expect(result.baseElement.querySelector("[data-treeselect-caret]")).toBeTruthy();
173
173
  });
174
- const caret = result.container.querySelector("[data-treeselect-caret]") as HTMLElement;
174
+ const caret = result.baseElement.querySelector("[data-treeselect-caret]") as HTMLElement;
175
175
  await act(async () => {
176
176
  fireEvent.click(caret);
177
177
  });
178
178
  expect(onChange).not.toHaveBeenCalled();
179
179
  expect(onOpenChange).not.toHaveBeenCalledWith(false);
180
180
 
181
- const cash = result.container.querySelector(
181
+ const cash = result.baseElement.querySelector(
182
182
  '[data-treeselect-row="liabilities"]',
183
183
  ) as HTMLElement;
184
184
  await act(async () => {
@@ -201,10 +201,10 @@ describe("TreeSelect sheet at <=640", () => {
201
201
  />,
202
202
  );
203
203
  await waitFor(() => {
204
- expect(desktop.container.querySelector("[data-treeselect-row]")).toBeTruthy();
204
+ expect(desktop.baseElement.querySelector("[data-treeselect-row]")).toBeTruthy();
205
205
  });
206
- const desktopTree = desktop.container.querySelector('[data-testid="tree-select-tree"]');
207
- const desktopRows = [...desktop.container.querySelectorAll("[data-treeselect-row]")].map(
206
+ const desktopTree = desktop.baseElement.querySelector('[data-testid="tree-select-tree"]');
207
+ const desktopRows = [...desktop.baseElement.querySelectorAll("[data-treeselect-row]")].map(
208
208
  (el) => ({
209
209
  id: el.getAttribute("data-treeselect-row"),
210
210
  depth: el.getAttribute("data-depth"),
@@ -226,7 +226,7 @@ describe("TreeSelect sheet at <=640", () => {
226
226
  await waitFor(() => {
227
227
  expect(mobile.baseElement.querySelector("[data-treeselect-row]")).toBeTruthy();
228
228
  });
229
- expect(mobile.container.querySelector('[data-testid="floating-panel-viewport"]')).toBeNull();
229
+ expect(mobile.baseElement.querySelector('[data-testid="floating-panel-viewport"]')).toBeNull();
230
230
  const mobileTree = mobile.baseElement.querySelector('[data-testid="tree-select-tree"]');
231
231
  const mobileRows = [...mobile.baseElement.querySelectorAll("[data-treeselect-row]")].map(
232
232
  (el) => ({
@@ -247,19 +247,19 @@ describe("TreeSelect empty filter", () => {
247
247
  <TreeSelect label="Account" nodes={accounts} open emptyMessage="No matching accounts" />,
248
248
  );
249
249
  await waitFor(() => {
250
- expect(result.container.querySelector('[data-testid="tree-select-search"]')).toBeTruthy();
250
+ expect(result.baseElement.querySelector('[data-testid="tree-select-search"]')).toBeTruthy();
251
251
  });
252
- const search = result.container.querySelector(
252
+ const search = result.baseElement.querySelector(
253
253
  '[data-testid="tree-select-search"] input',
254
254
  ) as HTMLInputElement;
255
255
  await act(async () => {
256
256
  fireEvent.change(search, { target: { value: "xyzzy" } });
257
257
  });
258
- const empty = result.container.querySelector(
258
+ const empty = result.baseElement.querySelector(
259
259
  '[data-testid="tree-select-empty"]',
260
260
  ) as HTMLElement;
261
261
  expect(empty).toBeTruthy();
262
262
  expect(empty.textContent).toContain("No matching accounts");
263
- expect(result.container.querySelector('[data-testid="empty-state"]')).toBeNull();
263
+ expect(result.baseElement.querySelector('[data-testid="empty-state"]')).toBeNull();
264
264
  });
265
265
  });
@@ -3,6 +3,7 @@ import {
3
3
  FloatingPanel,
4
4
  formCommonColors,
5
5
  InputParts,
6
+ PanelPortal,
6
7
  useFloatingPanel,
7
8
  useFormField,
8
9
  useViewportGtSm,
@@ -751,59 +752,61 @@ function FloatingTreeSelect({
751
752
  accessibilityLabel={accessibilityLabel}
752
753
  />
753
754
  {panel.mounted && (
754
- <FloatingFocusManager context={panel.context} modal={false} initialFocus={-1}>
755
- <YStack
756
- {...getFloatingProps({
757
- ref: panel.refs.setFloating,
758
- })}
759
- data-testid="tree-select-panel"
760
- data-cover=""
761
- data-width-mode={TREE_SELECT_WIDTH_MODE}
762
- data-dismiss-class="commit"
763
- data-fp-panel=""
764
- outlineWidth={0}
765
- pointerEvents={panel.visible ? "auto" : "none"}
766
- {...panel.knobProps.elevatedSurface}
767
- borderRadius={panel.dropdownRadius}
768
- overflow="hidden"
769
- style={
770
- {
771
- position: "fixed",
772
- top: overlayStyle.current?.top ?? 0,
773
- left: 0,
774
- zIndex: zIndex.dropdown,
775
- opacity: panel.visible ? 1 : 0,
776
- transform: panel.visible ? "scale(1)" : "scale(0.96)",
777
- transition: panelTransition,
778
- boxSizing: "border-box",
779
- } as Record<string, unknown>
780
- }
781
- >
782
- <SearchRow
783
- value={state.filter}
784
- placeholder={searchPlaceholder}
785
- inputRef={searchRef}
786
- onChange={state.setFilter}
787
- onKeyDown={onSearchKeyDown}
788
- treeId={treeId}
789
- activeDescendant={activeDescendant}
790
- sizeToken={sizeToken}
791
- />
792
- <YStack overflow="scroll" maxHeight={320} id={treeId}>
793
- <TreeSelectPanelBody
794
- rows={state.rows}
795
- selectedId={value}
796
- activeIndex={state.activeIndex}
797
- keyboardRing={state.keyboardRing}
755
+ <PanelPortal anchor={panel.triggerRef.current}>
756
+ <FloatingFocusManager context={panel.context} modal={false} initialFocus={-1}>
757
+ <YStack
758
+ {...getFloatingProps({
759
+ ref: panel.refs.setFloating,
760
+ })}
761
+ data-testid="tree-select-panel"
762
+ data-cover=""
763
+ data-width-mode={TREE_SELECT_WIDTH_MODE}
764
+ data-dismiss-class="commit"
765
+ data-fp-panel=""
766
+ outlineWidth={0}
767
+ pointerEvents={panel.visible ? "auto" : "none"}
768
+ {...panel.knobProps.elevatedSurface}
769
+ borderRadius={panel.dropdownRadius}
770
+ overflow="hidden"
771
+ style={
772
+ {
773
+ position: "fixed",
774
+ top: overlayStyle.current?.top ?? 0,
775
+ left: 0,
776
+ zIndex: zIndex.dropdown,
777
+ opacity: panel.visible ? 1 : 0,
778
+ transform: panel.visible ? "scale(1)" : "scale(0.96)",
779
+ transition: panelTransition,
780
+ boxSizing: "border-box",
781
+ } as Record<string, unknown>
782
+ }
783
+ >
784
+ <SearchRow
785
+ value={state.filter}
786
+ placeholder={searchPlaceholder}
787
+ inputRef={searchRef}
788
+ onChange={state.setFilter}
789
+ onKeyDown={onSearchKeyDown}
798
790
  treeId={treeId}
799
- emptyMessage={emptyMessage}
800
- loading={loading}
801
- onCommit={commit}
802
- onToggle={state.toggle}
791
+ activeDescendant={activeDescendant}
792
+ sizeToken={sizeToken}
803
793
  />
794
+ <YStack overflow="scroll" maxHeight={320} id={treeId}>
795
+ <TreeSelectPanelBody
796
+ rows={state.rows}
797
+ selectedId={value}
798
+ activeIndex={state.activeIndex}
799
+ keyboardRing={state.keyboardRing}
800
+ treeId={treeId}
801
+ emptyMessage={emptyMessage}
802
+ loading={loading}
803
+ onCommit={commit}
804
+ onToggle={state.toggle}
805
+ />
806
+ </YStack>
804
807
  </YStack>
805
- </YStack>
806
- </FloatingFocusManager>
808
+ </FloatingFocusManager>
809
+ </PanelPortal>
807
810
  )}
808
811
  </>
809
812
  );
@@ -2,6 +2,7 @@ import {
2
2
  MIN_PRESS_TARGET,
3
3
  ensureKeyboardModalityTracking,
4
4
  useResolvedKnobs,
5
+ transitionProps,
5
6
  } from "@multiplatform.one/theme";
6
7
  import {
7
8
  CornersInIcon,
@@ -83,7 +84,7 @@ function ChromeButton({
83
84
  hoverStyle={{ backgroundColor: "$color4" }}
84
85
  pressStyle={{ opacity: 0.85 }}
85
86
  focusVisibleStyle={{ ...control.focusVisibleKnobProps }}
86
- {...(knobProps.transition ? { transition: knobProps.transition } : {})}
87
+ {...transitionProps(knobProps.transition)}
87
88
  onPress={(e: { stopPropagation?: () => void }) => {
88
89
  e.stopPropagation?.();
89
90
  onPress();
@@ -205,7 +206,7 @@ function SeekBar({
205
206
  backgroundColor="$color8"
206
207
  borderRadius={radius}
207
208
  overflow="hidden"
208
- {...(knobProps.transition ? { transition: knobProps.transition } : {})}
209
+ {...transitionProps(knobProps.transition)}
209
210
  >
210
211
  <YStack
211
212
  height="100%"
@@ -300,7 +301,7 @@ export function PlayerChrome({
300
301
  onFocusChange(false);
301
302
  },
302
303
  } as Record<string, unknown>)}
303
- {...(knobProps.transition ? { transition: knobProps.transition } : {})}
304
+ {...transitionProps(knobProps.transition)}
304
305
  >
305
306
  <YStack flex={1} alignItems="center" justifyContent="center" pointerEvents="none">
306
307
  {playing ? null : (
@@ -275,7 +275,7 @@ describe("Wheel design-law (MPO-60)", () => {
275
275
  expect("default" in mod).toBe(false);
276
276
  });
277
277
 
278
- it("selected row type stays on body weight 400, never 600 (R7 / design-audit)", () => {
278
+ it("selected row type stays on the body weight channel (400/700), never 500/600 (R7 / design-audit)", () => {
279
279
  renderWithProviders(
280
280
  <Wheel items={[1, 2, 3, 4, 5]} value={3} onChange={() => {}} visibleItems={5} />,
281
281
  );
@@ -284,7 +284,7 @@ describe("Wheel design-law (MPO-60)", () => {
284
284
  .querySelector('[data-testid="wheel-item"][data-selected="true"]') as HTMLElement;
285
285
  expect(selected).toBeTruthy();
286
286
  const text = selected.querySelector("[class]") as HTMLElement;
287
- expect(text.className).toMatch(/_fow-400\b/);
287
+ expect(text.className).toMatch(/_fow-(400|700|bold)\b/);
288
288
  expect(text.className).not.toMatch(/_fow-600\b/);
289
289
  expect(text.className).not.toMatch(/_fow-500\b/);
290
290
  });
@@ -298,7 +298,7 @@ describe("Wheel design-law (MPO-60)", () => {
298
298
  const noneFrame = none.container.querySelector('[data-testid="wheel"]') as HTMLElement;
299
299
  const noneAtoms = String(noneFrame.className)
300
300
  .split(" ")
301
- .filter((c) => c.startsWith("_btlr-"));
301
+ .filter((c) => c.startsWith("_btlr-") && c !== "_btlr-0px");
302
302
  none.unmount();
303
303
 
304
304
  const full = renderWithProviders(
@@ -309,7 +309,7 @@ describe("Wheel design-law (MPO-60)", () => {
309
309
  const fullFrame = full.container.querySelector('[data-testid="wheel"]') as HTMLElement;
310
310
  const fullAtoms = String(fullFrame.className)
311
311
  .split(" ")
312
- .filter((c) => c.startsWith("_btlr-"));
312
+ .filter((c) => c.startsWith("_btlr-") && c !== "_btlr-0px");
313
313
  expect(noneAtoms).toEqual([]);
314
314
  expect(fullAtoms).toEqual([]);
315
315
  });