@multiplatform.one/components 7.7.4 → 7.8.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 (849) hide show
  1. package/dist/cjs/Accordion/index.cjs +4 -0
  2. package/dist/cjs/Accordion/index.native.js +5 -1
  3. package/dist/cjs/Accordion/index.native.js.map +1 -1
  4. package/dist/cjs/Alert/index.native.js.map +1 -1
  5. package/dist/cjs/AnimateHeight/index.cjs +29 -2
  6. package/dist/cjs/AnimateHeight/index.native.js +30 -2
  7. package/dist/cjs/AnimateHeight/index.native.js.map +1 -1
  8. package/dist/cjs/Avatar/getInitials.native.js.map +1 -1
  9. package/dist/cjs/Avatar/index.native.js.map +1 -1
  10. package/dist/cjs/Badge/index.native.js.map +1 -1
  11. package/dist/cjs/Button.native.js.map +1 -1
  12. package/dist/cjs/Card.cjs +7 -1
  13. package/dist/cjs/Card.native.js +11 -1
  14. package/dist/cjs/Card.native.js.map +1 -1
  15. package/dist/cjs/CardFooter.cjs +1 -0
  16. package/dist/cjs/CardFooter.native.js +1 -0
  17. package/dist/cjs/CardFooter.native.js.map +1 -1
  18. package/dist/cjs/CardHeader.native.js.map +1 -1
  19. package/dist/cjs/Carousel/index.native.js +1 -1
  20. package/dist/cjs/Carousel/index.native.js.map +1 -1
  21. package/dist/cjs/Chip/index.native.js.map +1 -1
  22. package/dist/cjs/Collapsible.cjs +48 -0
  23. package/dist/cjs/Collapsible.native.js +56 -0
  24. package/dist/cjs/Collapsible.native.js.map +1 -0
  25. package/dist/cjs/ContextMenu/index.native.js.map +1 -1
  26. package/dist/cjs/CopyField/index.cjs +6 -1
  27. package/dist/cjs/CopyField/index.native.js +6 -1
  28. package/dist/cjs/CopyField/index.native.js.map +1 -1
  29. package/dist/cjs/DotIndicator/index.native.js.map +1 -1
  30. package/dist/cjs/DropdownMenu/index.cjs +31 -1
  31. package/dist/cjs/DropdownMenu/index.native.js +31 -1
  32. package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
  33. package/dist/cjs/ErrorBoundary/index.native.js.map +1 -1
  34. package/dist/cjs/Heading.native.js.map +1 -1
  35. package/dist/cjs/Meter/index.cjs +12 -5
  36. package/dist/cjs/Meter/index.native.js +13 -6
  37. package/dist/cjs/Meter/index.native.js.map +1 -1
  38. package/dist/cjs/Meter/meter.native.js.map +1 -1
  39. package/dist/cjs/Pagination.cjs +28 -9
  40. package/dist/cjs/Pagination.native.js +29 -10
  41. package/dist/cjs/Pagination.native.js.map +1 -1
  42. package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
  43. package/dist/cjs/Quote/index.native.js.map +1 -1
  44. package/dist/cjs/Separator/index.native.js.map +1 -1
  45. package/dist/cjs/SheetModal/detents.native.js.map +1 -1
  46. package/dist/cjs/Skeleton/index.native.js.map +1 -1
  47. package/dist/cjs/SkipLink/index.native.js.map +1 -1
  48. package/dist/cjs/SortableList/SortableHandle.native.js.map +1 -1
  49. package/dist/cjs/SortableList/index.native.js.map +1 -1
  50. package/dist/cjs/SortableList/useSortableRows.native.js.map +1 -1
  51. package/dist/cjs/Tabs/index.cjs +145 -91
  52. package/dist/cjs/Tabs/index.native.js +187 -123
  53. package/dist/cjs/Tabs/index.native.js.map +1 -1
  54. package/dist/cjs/Text.native.js.map +1 -1
  55. package/dist/cjs/Toast/index.cjs +53 -2
  56. package/dist/cjs/Toast/index.native.js +55 -2
  57. package/dist/cjs/Toast/index.native.js.map +1 -1
  58. package/dist/cjs/Toast/store.native.js.map +1 -1
  59. package/dist/cjs/Tooltip/nativePress.native.js.map +1 -1
  60. package/dist/cjs/Tooltip/tooltipShared.native.js.map +1 -1
  61. package/dist/cjs/TreeSelect/index.native.js +1 -1
  62. package/dist/cjs/TreeSelect/index.native.js.map +1 -1
  63. package/dist/cjs/TreeSelect/treeSelectModel.native.js.map +1 -1
  64. package/dist/cjs/Video/PlayerChrome.native.js.map +1 -1
  65. package/dist/cjs/Video/VideoFrame.native.js.map +1 -1
  66. package/dist/cjs/Video/types.native.js.map +1 -1
  67. package/dist/cjs/Wheel/index.native.js.map +1 -1
  68. package/dist/cjs/Wizard/index.native.js +2 -2
  69. package/dist/cjs/Wizard/index.native.js.map +1 -1
  70. package/dist/cjs/actions/ActionBar.native.js.map +1 -1
  71. package/dist/cjs/actions/DestructiveAction.cjs +7 -13
  72. package/dist/cjs/actions/DestructiveAction.native.js +7 -15
  73. package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
  74. package/dist/cjs/actions/devWarn.native.js.map +1 -1
  75. package/dist/cjs/actions/index.native.js.map +1 -1
  76. package/dist/cjs/actions/severity.native.js.map +1 -1
  77. package/dist/cjs/charts/Axis.cjs +5 -0
  78. package/dist/cjs/charts/Axis.native.js +5 -0
  79. package/dist/cjs/charts/Axis.native.js.map +1 -1
  80. package/dist/cjs/charts/BarChart.cjs +71 -57
  81. package/dist/cjs/charts/BarChart.native.js +81 -67
  82. package/dist/cjs/charts/BarChart.native.js.map +1 -1
  83. package/dist/cjs/charts/ChartDataView.cjs +212 -0
  84. package/dist/cjs/charts/ChartDataView.native.js +224 -0
  85. package/dist/cjs/charts/ChartDataView.native.js.map +1 -0
  86. package/dist/cjs/charts/ChartSurface.cjs +5 -1
  87. package/dist/cjs/charts/ChartSurface.native.js +5 -1
  88. package/dist/cjs/charts/ChartSurface.native.js.map +1 -1
  89. package/dist/cjs/charts/LineChart.cjs +81 -67
  90. package/dist/cjs/charts/LineChart.native.js +94 -80
  91. package/dist/cjs/charts/LineChart.native.js.map +1 -1
  92. package/dist/cjs/charts/PieChart.cjs +98 -73
  93. package/dist/cjs/charts/PieChart.native.js +109 -84
  94. package/dist/cjs/charts/PieChart.native.js.map +1 -1
  95. package/dist/cjs/charts/Sparkline.cjs +10 -1
  96. package/dist/cjs/charts/Sparkline.native.js +10 -1
  97. package/dist/cjs/charts/Sparkline.native.js.map +1 -1
  98. package/dist/cjs/charts/accessibility.cjs +4 -0
  99. package/dist/cjs/charts/accessibility.native.js +7 -0
  100. package/dist/cjs/charts/accessibility.native.js.map +1 -1
  101. package/dist/cjs/charts/composeChart.native.js.map +1 -1
  102. package/dist/cjs/charts/index.cjs +3 -1
  103. package/dist/cjs/charts/index.native.js +2 -0
  104. package/dist/cjs/charts/index.native.js.map +1 -1
  105. package/dist/cjs/charts/math.cjs +16 -0
  106. package/dist/cjs/charts/math.native.js +18 -0
  107. package/dist/cjs/charts/math.native.js.map +1 -1
  108. package/dist/cjs/charts/series.cjs +49 -7
  109. package/dist/cjs/charts/series.native.js +53 -11
  110. package/dist/cjs/charts/series.native.js.map +1 -1
  111. package/dist/cjs/charts/svg.cjs +46 -3
  112. package/dist/cjs/charts/svg.native.js +46 -3
  113. package/dist/cjs/charts/svg.native.js.map +1 -1
  114. package/dist/cjs/charts/types.native.js.map +1 -1
  115. package/dist/cjs/charts/useChartTheme.native.js.map +1 -1
  116. package/dist/cjs/code/Code/index.native.js.map +1 -1
  117. package/dist/cjs/code/CodeBlock/index.cjs +6 -1
  118. package/dist/cjs/code/CodeBlock/index.native.js +12 -7
  119. package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
  120. package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
  121. package/dist/cjs/code/Highlighter/index.native.js.map +1 -1
  122. package/dist/cjs/code/Pre/index.native.js.map +1 -1
  123. package/dist/cjs/code/index.native.js +5 -5
  124. package/dist/cjs/code/index.native.js.map +1 -1
  125. package/dist/cjs/componentColors.native.js.map +1 -1
  126. package/dist/cjs/feedback/ConfirmDialog.cjs +7 -21
  127. package/dist/cjs/feedback/ConfirmDialog.native.js +7 -22
  128. package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
  129. package/dist/cjs/feedback/NotifyHost.cjs +2 -1
  130. package/dist/cjs/feedback/NotifyHost.native.js +5 -4
  131. package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
  132. package/dist/cjs/feedback/copy.cjs +36 -4
  133. package/dist/cjs/feedback/copy.native.js +38 -4
  134. package/dist/cjs/feedback/copy.native.js.map +1 -1
  135. package/dist/cjs/feedback/index.cjs +1 -0
  136. package/dist/cjs/feedback/index.native.js +1 -0
  137. package/dist/cjs/feedback/index.native.js.map +1 -1
  138. package/dist/cjs/feedback/notify.cjs +1 -0
  139. package/dist/cjs/feedback/notify.native.js +1 -0
  140. package/dist/cjs/feedback/notify.native.js.map +1 -1
  141. package/dist/cjs/feedback/route.cjs +3 -0
  142. package/dist/cjs/feedback/route.native.js +3 -0
  143. package/dist/cjs/feedback/route.native.js.map +1 -1
  144. package/dist/cjs/feedback/store.cjs +6 -0
  145. package/dist/cjs/feedback/store.native.js +8 -0
  146. package/dist/cjs/feedback/store.native.js.map +1 -1
  147. package/dist/cjs/hooks/index.native.js +1 -1
  148. package/dist/cjs/hooks/index.native.js.map +1 -1
  149. package/dist/cjs/hooks/useClipboard.native.js.map +1 -1
  150. package/dist/cjs/hooks/useDocumentTitle.native.js.map +1 -1
  151. package/dist/cjs/icons/CheckRegular.native.js.map +1 -1
  152. package/dist/cjs/icons/MinusRegular.native.js.map +1 -1
  153. package/dist/cjs/icons/index.native.js.map +1 -1
  154. package/dist/cjs/icons/lucide.cjs +2 -1
  155. package/dist/cjs/icons/lucide.native.js +2 -1
  156. package/dist/cjs/icons/lucide.native.js.map +1 -1
  157. package/dist/cjs/icons/themed.native.js.map +1 -1
  158. package/dist/cjs/images/Image/ImageFrame.native.js +1 -1
  159. package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -1
  160. package/dist/cjs/images/Image/index.native.js +1 -1
  161. package/dist/cjs/images/Image/shared.native.js +1 -1
  162. package/dist/cjs/images/Image/shared.native.js.map +1 -1
  163. package/dist/cjs/images/Image/types.native.js.map +1 -1
  164. package/dist/cjs/images/index.native.js.map +1 -1
  165. package/dist/cjs/index.native.js +29 -29
  166. package/dist/cjs/index.native.js.map +1 -1
  167. package/dist/cjs/knobImmuneExports.cjs +0 -1
  168. package/dist/cjs/knobImmuneExports.native.js +0 -1
  169. package/dist/cjs/knobImmuneExports.native.js.map +1 -1
  170. package/dist/cjs/layouts/AsyncBoundary.native.js +2 -2
  171. package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
  172. package/dist/cjs/layouts/Debug/index.native.js.map +1 -1
  173. package/dist/cjs/layouts/EmptyState.native.js.map +1 -1
  174. package/dist/cjs/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  175. package/dist/cjs/layouts/PageTemplates.native.js.map +1 -1
  176. package/dist/cjs/layouts/PaneScaffold.cjs +96 -41
  177. package/dist/cjs/layouts/PaneScaffold.native.js +97 -41
  178. package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
  179. package/dist/cjs/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  180. package/dist/cjs/layouts/ViewSwitcher.native.js.map +1 -1
  181. package/dist/cjs/layouts/attachments.native.js +1 -1
  182. package/dist/cjs/layouts/attachments.native.js.map +1 -1
  183. package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
  184. package/dist/cjs/layouts/index.cjs +2 -0
  185. package/dist/cjs/layouts/index.native.js +5 -3
  186. package/dist/cjs/layouts/index.native.js.map +1 -1
  187. package/dist/cjs/layouts/page.cjs +48 -7
  188. package/dist/cjs/layouts/page.native.js +50 -7
  189. package/dist/cjs/layouts/page.native.js.map +1 -1
  190. package/dist/cjs/layouts/pageHeadingScope.native.js.map +1 -1
  191. package/dist/cjs/layouts/sidebar.native.js.map +1 -1
  192. package/dist/cjs/layouts/tags.native.js +1 -1
  193. package/dist/cjs/layouts/tags.native.js.map +1 -1
  194. package/dist/cjs/layouts/timeline.native.js +2 -2
  195. package/dist/cjs/layouts/timeline.native.js.map +1 -1
  196. package/dist/cjs/layouts/toolbar.native.js.map +1 -1
  197. package/dist/cjs/shared/actionScan.native.js.map +1 -1
  198. package/dist/cjs/shared/i18n.native.js.map +1 -1
  199. package/dist/cjs/shared/t.native.js.map +1 -1
  200. package/dist/cjs/shared/textRidesText.native.js.map +1 -1
  201. package/dist/cjs/shared/useKeyboardInset.cjs +1 -19
  202. package/dist/cjs/shared/useKeyboardInset.native.js +3 -3
  203. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  204. package/dist/cjs/shared/useReturnFocusOnClose.native.js.map +1 -1
  205. package/dist/cjs/surfaces.native.js +1 -1
  206. package/dist/cjs/surfaces.native.js.map +1 -1
  207. package/dist/cjs/tamagui.cjs +3 -2
  208. package/dist/cjs/tamagui.native.js +2 -1
  209. package/dist/cjs/tamagui.native.js.map +1 -1
  210. package/dist/cjs/testSetup.native.js.map +1 -1
  211. package/dist/cjs/utils/setTinted.native.js.map +1 -1
  212. package/dist/cjs/utils/unwrapText.native.js.map +1 -1
  213. package/dist/cjs/views/Calendar.native.js.map +1 -1
  214. package/dist/cjs/views/Dashboard.cjs +110 -17
  215. package/dist/cjs/views/Dashboard.native.js +152 -46
  216. package/dist/cjs/views/Dashboard.native.js.map +1 -1
  217. package/dist/cjs/views/Gantt.cjs +374 -91
  218. package/dist/cjs/views/Gantt.native.js +444 -95
  219. package/dist/cjs/views/Gantt.native.js.map +1 -1
  220. package/dist/cjs/views/ImageGrid.native.js +1 -1
  221. package/dist/cjs/views/ImageGrid.native.js.map +1 -1
  222. package/dist/cjs/views/List.native.js.map +1 -1
  223. package/dist/cjs/views/ReportBuilder.native.js +1 -1
  224. package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
  225. package/dist/cjs/views/TreeView.native.js.map +1 -1
  226. package/dist/cjs/views/calendarMath.native.js.map +1 -1
  227. package/dist/cjs/views/ganttMath.cjs +91 -2
  228. package/dist/cjs/views/ganttMath.native.js +113 -3
  229. package/dist/cjs/views/ganttMath.native.js.map +1 -1
  230. package/dist/cjs/views/index.cjs +20 -1
  231. package/dist/cjs/views/index.native.js +21 -2
  232. package/dist/cjs/views/index.native.js.map +1 -1
  233. package/dist/cjs/views/kanbanDnd.native.js.map +1 -1
  234. package/dist/cjs/views/treeViewDnd.native.js.map +1 -1
  235. package/dist/cjs/views/treeViewLayout.native.js.map +1 -1
  236. package/dist/cjs/views/treeViewMotion.native.js.map +1 -1
  237. package/dist/esm/Accordion/index.mjs +4 -0
  238. package/dist/esm/Accordion/index.mjs.map +1 -1
  239. package/dist/esm/Accordion/index.native.js +4 -0
  240. package/dist/esm/Accordion/index.native.js.map +1 -1
  241. package/dist/esm/AnimateHeight/index.mjs +29 -2
  242. package/dist/esm/AnimateHeight/index.mjs.map +1 -1
  243. package/dist/esm/AnimateHeight/index.native.js +30 -2
  244. package/dist/esm/AnimateHeight/index.native.js.map +1 -1
  245. package/dist/esm/Avatar/getInitials.native.js.map +1 -1
  246. package/dist/esm/Avatar/index.native.js.map +1 -1
  247. package/dist/esm/Badge/index.native.js.map +1 -1
  248. package/dist/esm/Button.mjs.map +1 -1
  249. package/dist/esm/Button.native.js.map +1 -1
  250. package/dist/esm/Card.mjs +8 -2
  251. package/dist/esm/Card.mjs.map +1 -1
  252. package/dist/esm/Card.native.js +12 -2
  253. package/dist/esm/Card.native.js.map +1 -1
  254. package/dist/esm/CardFooter.mjs +1 -0
  255. package/dist/esm/CardFooter.mjs.map +1 -1
  256. package/dist/esm/CardFooter.native.js +1 -0
  257. package/dist/esm/CardFooter.native.js.map +1 -1
  258. package/dist/esm/Carousel/index.native.js.map +1 -1
  259. package/dist/esm/Chip/index.native.js.map +1 -1
  260. package/dist/esm/Collapsible.mjs +23 -0
  261. package/dist/esm/Collapsible.mjs.map +1 -0
  262. package/dist/esm/Collapsible.native.js +28 -0
  263. package/dist/esm/Collapsible.native.js.map +1 -0
  264. package/dist/esm/ContextMenu/index.native.js.map +1 -1
  265. package/dist/esm/CopyField/index.mjs +7 -2
  266. package/dist/esm/CopyField/index.mjs.map +1 -1
  267. package/dist/esm/CopyField/index.native.js +7 -2
  268. package/dist/esm/CopyField/index.native.js.map +1 -1
  269. package/dist/esm/DotIndicator/index.native.js.map +1 -1
  270. package/dist/esm/DropdownMenu/index.mjs +32 -2
  271. package/dist/esm/DropdownMenu/index.mjs.map +1 -1
  272. package/dist/esm/DropdownMenu/index.native.js +32 -2
  273. package/dist/esm/DropdownMenu/index.native.js.map +1 -1
  274. package/dist/esm/ErrorBoundary/index.native.js.map +1 -1
  275. package/dist/esm/Heading.native.js.map +1 -1
  276. package/dist/esm/Meter/index.mjs +12 -5
  277. package/dist/esm/Meter/index.mjs.map +1 -1
  278. package/dist/esm/Meter/index.native.js +12 -5
  279. package/dist/esm/Meter/index.native.js.map +1 -1
  280. package/dist/esm/Meter/meter.native.js.map +1 -1
  281. package/dist/esm/Pagination.mjs +28 -9
  282. package/dist/esm/Pagination.mjs.map +1 -1
  283. package/dist/esm/Pagination.native.js +28 -9
  284. package/dist/esm/Pagination.native.js.map +1 -1
  285. package/dist/esm/ProgressSteps/index.native.js.map +1 -1
  286. package/dist/esm/Quote/index.native.js.map +1 -1
  287. package/dist/esm/Separator/index.native.js.map +1 -1
  288. package/dist/esm/SheetModal/detents.native.js.map +1 -1
  289. package/dist/esm/Skeleton/index.native.js.map +1 -1
  290. package/dist/esm/SkipLink/index.native.js.map +1 -1
  291. package/dist/esm/SortableList/SortableHandle.native.js.map +1 -1
  292. package/dist/esm/SortableList/index.native.js.map +1 -1
  293. package/dist/esm/SortableList/useSortableRows.native.js.map +1 -1
  294. package/dist/esm/Tabs/index.mjs +145 -91
  295. package/dist/esm/Tabs/index.mjs.map +1 -1
  296. package/dist/esm/Tabs/index.native.js +187 -123
  297. package/dist/esm/Tabs/index.native.js.map +1 -1
  298. package/dist/esm/Text.native.js.map +1 -1
  299. package/dist/esm/Toast/index.mjs +52 -3
  300. package/dist/esm/Toast/index.mjs.map +1 -1
  301. package/dist/esm/Toast/index.native.js +54 -3
  302. package/dist/esm/Toast/index.native.js.map +1 -1
  303. package/dist/esm/Toast/store.native.js.map +1 -1
  304. package/dist/esm/Tooltip/nativePress.native.js.map +1 -1
  305. package/dist/esm/Tooltip/tooltipShared.native.js.map +1 -1
  306. package/dist/esm/TreeSelect/index.native.js.map +1 -1
  307. package/dist/esm/TreeSelect/treeSelectModel.native.js.map +1 -1
  308. package/dist/esm/Video/PlayerChrome.native.js.map +1 -1
  309. package/dist/esm/Video/VideoFrame.native.js.map +1 -1
  310. package/dist/esm/Video/types.native.js.map +1 -1
  311. package/dist/esm/Wheel/index.native.js.map +1 -1
  312. package/dist/esm/Wizard/index.native.js.map +1 -1
  313. package/dist/esm/actions/ActionBar.native.js.map +1 -1
  314. package/dist/esm/actions/DestructiveAction.mjs +8 -14
  315. package/dist/esm/actions/DestructiveAction.mjs.map +1 -1
  316. package/dist/esm/actions/DestructiveAction.native.js +8 -16
  317. package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
  318. package/dist/esm/actions/devWarn.native.js.map +1 -1
  319. package/dist/esm/actions/index.native.js.map +1 -1
  320. package/dist/esm/actions/severity.native.js.map +1 -1
  321. package/dist/esm/charts/Axis.mjs +6 -1
  322. package/dist/esm/charts/Axis.mjs.map +1 -1
  323. package/dist/esm/charts/Axis.native.js +6 -1
  324. package/dist/esm/charts/Axis.native.js.map +1 -1
  325. package/dist/esm/charts/BarChart.mjs +72 -58
  326. package/dist/esm/charts/BarChart.mjs.map +1 -1
  327. package/dist/esm/charts/BarChart.native.js +82 -68
  328. package/dist/esm/charts/BarChart.native.js.map +1 -1
  329. package/dist/esm/charts/ChartDataView.mjs +185 -0
  330. package/dist/esm/charts/ChartDataView.mjs.map +1 -0
  331. package/dist/esm/charts/ChartDataView.native.js +194 -0
  332. package/dist/esm/charts/ChartDataView.native.js.map +1 -0
  333. package/dist/esm/charts/ChartSurface.mjs +5 -1
  334. package/dist/esm/charts/ChartSurface.mjs.map +1 -1
  335. package/dist/esm/charts/ChartSurface.native.js +5 -1
  336. package/dist/esm/charts/ChartSurface.native.js.map +1 -1
  337. package/dist/esm/charts/LineChart.mjs +82 -68
  338. package/dist/esm/charts/LineChart.mjs.map +1 -1
  339. package/dist/esm/charts/LineChart.native.js +95 -81
  340. package/dist/esm/charts/LineChart.native.js.map +1 -1
  341. package/dist/esm/charts/PieChart.mjs +100 -75
  342. package/dist/esm/charts/PieChart.mjs.map +1 -1
  343. package/dist/esm/charts/PieChart.native.js +111 -86
  344. package/dist/esm/charts/PieChart.native.js.map +1 -1
  345. package/dist/esm/charts/Sparkline.mjs +11 -2
  346. package/dist/esm/charts/Sparkline.mjs.map +1 -1
  347. package/dist/esm/charts/Sparkline.native.js +11 -2
  348. package/dist/esm/charts/Sparkline.native.js.map +1 -1
  349. package/dist/esm/charts/accessibility.mjs +4 -1
  350. package/dist/esm/charts/accessibility.mjs.map +1 -1
  351. package/dist/esm/charts/accessibility.native.js +7 -1
  352. package/dist/esm/charts/accessibility.native.js.map +1 -1
  353. package/dist/esm/charts/composeChart.native.js.map +1 -1
  354. package/dist/esm/charts/index.mjs +2 -1
  355. package/dist/esm/charts/index.mjs.map +1 -1
  356. package/dist/esm/charts/index.native.js +2 -1
  357. package/dist/esm/charts/index.native.js.map +1 -1
  358. package/dist/esm/charts/math.mjs +16 -1
  359. package/dist/esm/charts/math.mjs.map +1 -1
  360. package/dist/esm/charts/math.native.js +18 -1
  361. package/dist/esm/charts/math.native.js.map +1 -1
  362. package/dist/esm/charts/series.mjs +51 -9
  363. package/dist/esm/charts/series.mjs.map +1 -1
  364. package/dist/esm/charts/series.native.js +55 -13
  365. package/dist/esm/charts/series.native.js.map +1 -1
  366. package/dist/esm/charts/svg.mjs +40 -4
  367. package/dist/esm/charts/svg.mjs.map +1 -1
  368. package/dist/esm/charts/svg.native.js +40 -4
  369. package/dist/esm/charts/svg.native.js.map +1 -1
  370. package/dist/esm/charts/types.native.js.map +1 -1
  371. package/dist/esm/charts/useChartTheme.native.js.map +1 -1
  372. package/dist/esm/code/CodeBlock/index.mjs +7 -2
  373. package/dist/esm/code/CodeBlock/index.mjs.map +1 -1
  374. package/dist/esm/code/CodeBlock/index.native.js +7 -2
  375. package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
  376. package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
  377. package/dist/esm/code/Highlighter/index.native.js.map +1 -1
  378. package/dist/esm/code/Pre/index.native.js.map +1 -1
  379. package/dist/esm/code/index.native.js.map +1 -1
  380. package/dist/esm/componentColors.native.js.map +1 -1
  381. package/dist/esm/feedback/ConfirmDialog.mjs +8 -22
  382. package/dist/esm/feedback/ConfirmDialog.mjs.map +1 -1
  383. package/dist/esm/feedback/ConfirmDialog.native.js +8 -23
  384. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  385. package/dist/esm/feedback/NotifyHost.mjs +2 -1
  386. package/dist/esm/feedback/NotifyHost.mjs.map +1 -1
  387. package/dist/esm/feedback/NotifyHost.native.js +3 -2
  388. package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
  389. package/dist/esm/feedback/copy.mjs +35 -4
  390. package/dist/esm/feedback/copy.mjs.map +1 -1
  391. package/dist/esm/feedback/copy.native.js +37 -4
  392. package/dist/esm/feedback/copy.native.js.map +1 -1
  393. package/dist/esm/feedback/index.mjs +2 -2
  394. package/dist/esm/feedback/index.mjs.map +1 -1
  395. package/dist/esm/feedback/index.native.js +2 -2
  396. package/dist/esm/feedback/index.native.js.map +1 -1
  397. package/dist/esm/feedback/notify.mjs +1 -0
  398. package/dist/esm/feedback/notify.mjs.map +1 -1
  399. package/dist/esm/feedback/notify.native.js +1 -0
  400. package/dist/esm/feedback/notify.native.js.map +1 -1
  401. package/dist/esm/feedback/route.mjs +3 -0
  402. package/dist/esm/feedback/route.mjs.map +1 -1
  403. package/dist/esm/feedback/route.native.js +3 -0
  404. package/dist/esm/feedback/route.native.js.map +1 -1
  405. package/dist/esm/feedback/store.mjs +6 -1
  406. package/dist/esm/feedback/store.mjs.map +1 -1
  407. package/dist/esm/feedback/store.native.js +8 -1
  408. package/dist/esm/feedback/store.native.js.map +1 -1
  409. package/dist/esm/hooks/index.native.js.map +1 -1
  410. package/dist/esm/hooks/useClipboard.native.js.map +1 -1
  411. package/dist/esm/hooks/useDocumentTitle.native.js.map +1 -1
  412. package/dist/esm/icons/CheckRegular.native.js.map +1 -1
  413. package/dist/esm/icons/MinusRegular.native.js.map +1 -1
  414. package/dist/esm/icons/index.native.js.map +1 -1
  415. package/dist/esm/icons/lucide.mjs +2 -2
  416. package/dist/esm/icons/lucide.mjs.map +1 -1
  417. package/dist/esm/icons/lucide.native.js +2 -2
  418. package/dist/esm/icons/lucide.native.js.map +1 -1
  419. package/dist/esm/icons/themed.native.js.map +1 -1
  420. package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
  421. package/dist/esm/images/Image/shared.native.js.map +1 -1
  422. package/dist/esm/images/Image/types.native.js.map +1 -1
  423. package/dist/esm/images/index.native.js.map +1 -1
  424. package/dist/esm/index.native.js.map +1 -1
  425. package/dist/esm/knobImmuneExports.mjs +0 -1
  426. package/dist/esm/knobImmuneExports.mjs.map +1 -1
  427. package/dist/esm/knobImmuneExports.native.js +0 -1
  428. package/dist/esm/knobImmuneExports.native.js.map +1 -1
  429. package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
  430. package/dist/esm/layouts/Debug/index.native.js.map +1 -1
  431. package/dist/esm/layouts/EmptyState.native.js.map +1 -1
  432. package/dist/esm/layouts/KeyboardAvoidingWrapper/behavior.native.js.map +1 -1
  433. package/dist/esm/layouts/PageTemplates.native.js.map +1 -1
  434. package/dist/esm/layouts/PaneScaffold.mjs +97 -42
  435. package/dist/esm/layouts/PaneScaffold.mjs.map +1 -1
  436. package/dist/esm/layouts/PaneScaffold.native.js +98 -42
  437. package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
  438. package/dist/esm/layouts/SafeAreaWrapper/insets.native.js.map +1 -1
  439. package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
  440. package/dist/esm/layouts/attachments.native.js.map +1 -1
  441. package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
  442. package/dist/esm/layouts/index.mjs +2 -1
  443. package/dist/esm/layouts/index.mjs.map +1 -1
  444. package/dist/esm/layouts/index.native.js +2 -1
  445. package/dist/esm/layouts/index.native.js.map +1 -1
  446. package/dist/esm/layouts/page.mjs +49 -8
  447. package/dist/esm/layouts/page.mjs.map +1 -1
  448. package/dist/esm/layouts/page.native.js +51 -8
  449. package/dist/esm/layouts/page.native.js.map +1 -1
  450. package/dist/esm/layouts/pageHeadingScope.native.js.map +1 -1
  451. package/dist/esm/layouts/sidebar.native.js.map +1 -1
  452. package/dist/esm/layouts/tags.native.js.map +1 -1
  453. package/dist/esm/layouts/timeline.native.js.map +1 -1
  454. package/dist/esm/layouts/toolbar.native.js.map +1 -1
  455. package/dist/esm/shared/actionScan.native.js.map +1 -1
  456. package/dist/esm/shared/i18n.native.js.map +1 -1
  457. package/dist/esm/shared/t.native.js.map +1 -1
  458. package/dist/esm/shared/textRidesText.native.js.map +1 -1
  459. package/dist/esm/shared/useKeyboardInset.mjs +1 -19
  460. package/dist/esm/shared/useKeyboardInset.mjs.map +1 -1
  461. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  462. package/dist/esm/shared/useReturnFocusOnClose.native.js.map +1 -1
  463. package/dist/esm/surfaces.native.js.map +1 -1
  464. package/dist/esm/tamagui.mjs +2 -1
  465. package/dist/esm/tamagui.mjs.map +1 -1
  466. package/dist/esm/tamagui.native.js +2 -1
  467. package/dist/esm/tamagui.native.js.map +1 -1
  468. package/dist/esm/testSetup.native.js.map +1 -1
  469. package/dist/esm/utils/setTinted.native.js.map +1 -1
  470. package/dist/esm/utils/unwrapText.native.js.map +1 -1
  471. package/dist/esm/views/Calendar.native.js.map +1 -1
  472. package/dist/esm/views/Dashboard.mjs +112 -19
  473. package/dist/esm/views/Dashboard.mjs.map +1 -1
  474. package/dist/esm/views/Dashboard.native.js +153 -47
  475. package/dist/esm/views/Dashboard.native.js.map +1 -1
  476. package/dist/esm/views/Gantt.mjs +376 -93
  477. package/dist/esm/views/Gantt.mjs.map +1 -1
  478. package/dist/esm/views/Gantt.native.js +445 -96
  479. package/dist/esm/views/Gantt.native.js.map +1 -1
  480. package/dist/esm/views/ImageGrid.native.js.map +1 -1
  481. package/dist/esm/views/List.native.js.map +1 -1
  482. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  483. package/dist/esm/views/TreeView.native.js.map +1 -1
  484. package/dist/esm/views/calendarMath.native.js.map +1 -1
  485. package/dist/esm/views/ganttMath.mjs +84 -3
  486. package/dist/esm/views/ganttMath.mjs.map +1 -1
  487. package/dist/esm/views/ganttMath.native.js +106 -4
  488. package/dist/esm/views/ganttMath.native.js.map +1 -1
  489. package/dist/esm/views/index.mjs +2 -2
  490. package/dist/esm/views/index.mjs.map +1 -1
  491. package/dist/esm/views/index.native.js +2 -2
  492. package/dist/esm/views/index.native.js.map +1 -1
  493. package/dist/esm/views/kanbanDnd.native.js.map +1 -1
  494. package/dist/esm/views/treeViewDnd.native.js.map +1 -1
  495. package/dist/esm/views/treeViewLayout.native.js.map +1 -1
  496. package/dist/esm/views/treeViewMotion.native.js.map +1 -1
  497. package/dist/jsx/Accordion/index.mjs +4 -0
  498. package/dist/jsx/Accordion/index.mjs.map +1 -1
  499. package/dist/jsx/Accordion/index.native.js +4 -0
  500. package/dist/jsx/Accordion/index.native.js.map +1 -1
  501. package/dist/jsx/AnimateHeight/index.mjs +29 -2
  502. package/dist/jsx/AnimateHeight/index.mjs.map +1 -1
  503. package/dist/jsx/AnimateHeight/index.native.js +30 -2
  504. package/dist/jsx/AnimateHeight/index.native.js.map +1 -1
  505. package/dist/jsx/Button.mjs.map +1 -1
  506. package/dist/jsx/Button.native.js.map +1 -1
  507. package/dist/jsx/Card.mjs +8 -2
  508. package/dist/jsx/Card.mjs.map +1 -1
  509. package/dist/jsx/Card.native.js +11 -1
  510. package/dist/jsx/Card.native.js.map +1 -1
  511. package/dist/jsx/CardFooter.mjs +1 -0
  512. package/dist/jsx/CardFooter.mjs.map +1 -1
  513. package/dist/jsx/CardFooter.native.js +1 -0
  514. package/dist/jsx/CardFooter.native.js.map +1 -1
  515. package/dist/jsx/Collapsible.mjs +23 -0
  516. package/dist/jsx/Collapsible.mjs.map +1 -0
  517. package/dist/jsx/Collapsible.native.js +56 -0
  518. package/dist/jsx/Collapsible.native.js.map +1 -0
  519. package/dist/jsx/CopyField/index.mjs +7 -2
  520. package/dist/jsx/CopyField/index.mjs.map +1 -1
  521. package/dist/jsx/CopyField/index.native.js +6 -1
  522. package/dist/jsx/CopyField/index.native.js.map +1 -1
  523. package/dist/jsx/DropdownMenu/index.mjs +32 -2
  524. package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
  525. package/dist/jsx/DropdownMenu/index.native.js +31 -1
  526. package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
  527. package/dist/jsx/Meter/index.mjs +12 -5
  528. package/dist/jsx/Meter/index.mjs.map +1 -1
  529. package/dist/jsx/Meter/index.native.js +12 -5
  530. package/dist/jsx/Meter/index.native.js.map +1 -1
  531. package/dist/jsx/Pagination.mjs +28 -9
  532. package/dist/jsx/Pagination.mjs.map +1 -1
  533. package/dist/jsx/Pagination.native.js +28 -9
  534. package/dist/jsx/Pagination.native.js.map +1 -1
  535. package/dist/jsx/Tabs/index.mjs +145 -91
  536. package/dist/jsx/Tabs/index.mjs.map +1 -1
  537. package/dist/jsx/Tabs/index.native.js +187 -123
  538. package/dist/jsx/Tabs/index.native.js.map +1 -1
  539. package/dist/jsx/Toast/index.mjs +52 -3
  540. package/dist/jsx/Toast/index.mjs.map +1 -1
  541. package/dist/jsx/Toast/index.native.js +55 -2
  542. package/dist/jsx/Toast/index.native.js.map +1 -1
  543. package/dist/jsx/actions/DestructiveAction.mjs +8 -14
  544. package/dist/jsx/actions/DestructiveAction.mjs.map +1 -1
  545. package/dist/jsx/actions/DestructiveAction.native.js +7 -15
  546. package/dist/jsx/actions/DestructiveAction.native.js.map +1 -1
  547. package/dist/jsx/charts/Axis.mjs +6 -1
  548. package/dist/jsx/charts/Axis.mjs.map +1 -1
  549. package/dist/jsx/charts/Axis.native.js +5 -0
  550. package/dist/jsx/charts/Axis.native.js.map +1 -1
  551. package/dist/jsx/charts/BarChart.mjs +72 -58
  552. package/dist/jsx/charts/BarChart.mjs.map +1 -1
  553. package/dist/jsx/charts/BarChart.native.js +81 -67
  554. package/dist/jsx/charts/BarChart.native.js.map +1 -1
  555. package/dist/jsx/charts/ChartDataView.mjs +185 -0
  556. package/dist/jsx/charts/ChartDataView.mjs.map +1 -0
  557. package/dist/jsx/charts/ChartDataView.native.js +224 -0
  558. package/dist/jsx/charts/ChartDataView.native.js.map +1 -0
  559. package/dist/jsx/charts/ChartSurface.mjs +5 -1
  560. package/dist/jsx/charts/ChartSurface.mjs.map +1 -1
  561. package/dist/jsx/charts/ChartSurface.native.js +5 -1
  562. package/dist/jsx/charts/ChartSurface.native.js.map +1 -1
  563. package/dist/jsx/charts/LineChart.mjs +82 -68
  564. package/dist/jsx/charts/LineChart.mjs.map +1 -1
  565. package/dist/jsx/charts/LineChart.native.js +94 -80
  566. package/dist/jsx/charts/LineChart.native.js.map +1 -1
  567. package/dist/jsx/charts/PieChart.mjs +100 -75
  568. package/dist/jsx/charts/PieChart.mjs.map +1 -1
  569. package/dist/jsx/charts/PieChart.native.js +109 -84
  570. package/dist/jsx/charts/PieChart.native.js.map +1 -1
  571. package/dist/jsx/charts/Sparkline.mjs +11 -2
  572. package/dist/jsx/charts/Sparkline.mjs.map +1 -1
  573. package/dist/jsx/charts/Sparkline.native.js +10 -1
  574. package/dist/jsx/charts/Sparkline.native.js.map +1 -1
  575. package/dist/jsx/charts/accessibility.mjs +4 -1
  576. package/dist/jsx/charts/accessibility.mjs.map +1 -1
  577. package/dist/jsx/charts/accessibility.native.js +7 -0
  578. package/dist/jsx/charts/accessibility.native.js.map +1 -1
  579. package/dist/jsx/charts/index.mjs +2 -1
  580. package/dist/jsx/charts/index.mjs.map +1 -1
  581. package/dist/jsx/charts/index.native.js +2 -0
  582. package/dist/jsx/charts/index.native.js.map +1 -1
  583. package/dist/jsx/charts/math.mjs +16 -1
  584. package/dist/jsx/charts/math.mjs.map +1 -1
  585. package/dist/jsx/charts/math.native.js +18 -0
  586. package/dist/jsx/charts/math.native.js.map +1 -1
  587. package/dist/jsx/charts/series.mjs +51 -9
  588. package/dist/jsx/charts/series.mjs.map +1 -1
  589. package/dist/jsx/charts/series.native.js +53 -11
  590. package/dist/jsx/charts/series.native.js.map +1 -1
  591. package/dist/jsx/charts/svg.mjs +40 -4
  592. package/dist/jsx/charts/svg.mjs.map +1 -1
  593. package/dist/jsx/charts/svg.native.js +46 -3
  594. package/dist/jsx/charts/svg.native.js.map +1 -1
  595. package/dist/jsx/code/CodeBlock/index.mjs +7 -2
  596. package/dist/jsx/code/CodeBlock/index.mjs.map +1 -1
  597. package/dist/jsx/code/CodeBlock/index.native.js +6 -1
  598. package/dist/jsx/code/CodeBlock/index.native.js.map +1 -1
  599. package/dist/jsx/feedback/ConfirmDialog.mjs +8 -22
  600. package/dist/jsx/feedback/ConfirmDialog.mjs.map +1 -1
  601. package/dist/jsx/feedback/ConfirmDialog.native.js +7 -22
  602. package/dist/jsx/feedback/ConfirmDialog.native.js.map +1 -1
  603. package/dist/jsx/feedback/NotifyHost.mjs +2 -1
  604. package/dist/jsx/feedback/NotifyHost.mjs.map +1 -1
  605. package/dist/jsx/feedback/NotifyHost.native.js +3 -2
  606. package/dist/jsx/feedback/NotifyHost.native.js.map +1 -1
  607. package/dist/jsx/feedback/copy.mjs +35 -4
  608. package/dist/jsx/feedback/copy.mjs.map +1 -1
  609. package/dist/jsx/feedback/copy.native.js +38 -4
  610. package/dist/jsx/feedback/copy.native.js.map +1 -1
  611. package/dist/jsx/feedback/index.mjs +2 -2
  612. package/dist/jsx/feedback/index.mjs.map +1 -1
  613. package/dist/jsx/feedback/index.native.js +1 -0
  614. package/dist/jsx/feedback/index.native.js.map +1 -1
  615. package/dist/jsx/feedback/notify.mjs +1 -0
  616. package/dist/jsx/feedback/notify.mjs.map +1 -1
  617. package/dist/jsx/feedback/notify.native.js +1 -0
  618. package/dist/jsx/feedback/notify.native.js.map +1 -1
  619. package/dist/jsx/feedback/route.mjs +3 -0
  620. package/dist/jsx/feedback/route.mjs.map +1 -1
  621. package/dist/jsx/feedback/route.native.js +3 -0
  622. package/dist/jsx/feedback/route.native.js.map +1 -1
  623. package/dist/jsx/feedback/store.mjs +6 -1
  624. package/dist/jsx/feedback/store.mjs.map +1 -1
  625. package/dist/jsx/feedback/store.native.js +8 -0
  626. package/dist/jsx/feedback/store.native.js.map +1 -1
  627. package/dist/jsx/icons/lucide.mjs +2 -2
  628. package/dist/jsx/icons/lucide.mjs.map +1 -1
  629. package/dist/jsx/icons/lucide.native.js +2 -1
  630. package/dist/jsx/knobImmuneExports.mjs +0 -1
  631. package/dist/jsx/knobImmuneExports.mjs.map +1 -1
  632. package/dist/jsx/knobImmuneExports.native.js +0 -1
  633. package/dist/jsx/knobImmuneExports.native.js.map +1 -1
  634. package/dist/jsx/layouts/PaneScaffold.mjs +97 -42
  635. package/dist/jsx/layouts/PaneScaffold.mjs.map +1 -1
  636. package/dist/jsx/layouts/PaneScaffold.native.js +97 -41
  637. package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
  638. package/dist/jsx/layouts/index.mjs +2 -1
  639. package/dist/jsx/layouts/index.mjs.map +1 -1
  640. package/dist/jsx/layouts/index.native.js +2 -0
  641. package/dist/jsx/layouts/index.native.js.map +1 -1
  642. package/dist/jsx/layouts/page.mjs +49 -8
  643. package/dist/jsx/layouts/page.mjs.map +1 -1
  644. package/dist/jsx/layouts/page.native.js +50 -7
  645. package/dist/jsx/layouts/page.native.js.map +1 -1
  646. package/dist/jsx/shared/useKeyboardInset.mjs +1 -19
  647. package/dist/jsx/shared/useKeyboardInset.mjs.map +1 -1
  648. package/dist/jsx/shared/useKeyboardInset.native.js +3 -3
  649. package/dist/jsx/shared/useKeyboardInset.native.js.map +1 -1
  650. package/dist/jsx/tamagui.mjs +2 -1
  651. package/dist/jsx/tamagui.mjs.map +1 -1
  652. package/dist/jsx/tamagui.native.js +2 -1
  653. package/dist/jsx/tamagui.native.js.map +1 -1
  654. package/dist/jsx/views/Dashboard.mjs +112 -19
  655. package/dist/jsx/views/Dashboard.mjs.map +1 -1
  656. package/dist/jsx/views/Dashboard.native.js +151 -45
  657. package/dist/jsx/views/Dashboard.native.js.map +1 -1
  658. package/dist/jsx/views/Gantt.mjs +376 -93
  659. package/dist/jsx/views/Gantt.mjs.map +1 -1
  660. package/dist/jsx/views/Gantt.native.js +443 -94
  661. package/dist/jsx/views/Gantt.native.js.map +1 -1
  662. package/dist/jsx/views/ganttMath.mjs +84 -3
  663. package/dist/jsx/views/ganttMath.mjs.map +1 -1
  664. package/dist/jsx/views/ganttMath.native.js +113 -3
  665. package/dist/jsx/views/ganttMath.native.js.map +1 -1
  666. package/dist/jsx/views/index.mjs +2 -2
  667. package/dist/jsx/views/index.mjs.map +1 -1
  668. package/dist/jsx/views/index.native.js +20 -1
  669. package/dist/jsx/views/index.native.js.map +1 -1
  670. package/package.json +11 -9
  671. package/src/Accordion/index.tsx +7 -1
  672. package/src/AnimateHeight/AnimateHeight.native.spec.tsx +51 -0
  673. package/src/AnimateHeight/index.tsx +30 -5
  674. package/src/Button.tsx +10 -2
  675. package/src/Card.spec.tsx +76 -3
  676. package/src/Card.stories.tsx +1 -1
  677. package/src/Card.tsx +13 -1
  678. package/src/CardFooter.stories.tsx +3 -7
  679. package/src/CardFooter.tsx +3 -1
  680. package/src/CardHeader.stories.tsx +1 -3
  681. package/src/Collapsible.stories.tsx +2 -2
  682. package/src/Collapsible.tsx +23 -0
  683. package/src/CopyField/CopyField.spec.tsx +66 -1
  684. package/src/CopyField/index.tsx +4 -3
  685. package/src/DropdownMenu/DropdownMenu.spec.tsx +112 -1
  686. package/src/DropdownMenu/DropdownMenu.stories.tsx +1 -3
  687. package/src/DropdownMenu/index.tsx +67 -6
  688. package/src/LinearGradient.stories.tsx +2 -2
  689. package/src/Meter/Meter.spec.tsx +59 -2
  690. package/src/Meter/Meter.stories.tsx +38 -0
  691. package/src/Meter/index.tsx +9 -4
  692. package/src/Pagination.simple.spec.tsx +23 -0
  693. package/src/Pagination.stories.tsx +8 -0
  694. package/src/Pagination.tsx +27 -10
  695. package/src/Panel.stories.tsx +1 -1
  696. package/src/SortableList/SortableList.spec.tsx +3 -3
  697. package/src/Tabs/Tabs.bandColor.spec.tsx +23 -0
  698. package/src/Tabs/Tabs.native.spec.tsx +35 -0
  699. package/src/Tabs/Tabs.spec.tsx +91 -1
  700. package/src/Tabs/Tabs.stories.tsx +36 -1
  701. package/src/Tabs/index.tsx +272 -187
  702. package/src/Toast/Toast.spec.tsx +56 -1
  703. package/src/Toast/index.tsx +68 -3
  704. package/src/Unspaced.stories.tsx +2 -2
  705. package/src/VisuallyHidden.stories.tsx +2 -2
  706. package/src/actions/DestructiveAction.spec.tsx +19 -3
  707. package/src/actions/DestructiveAction.tsx +9 -14
  708. package/src/charts/Axis.tsx +6 -1
  709. package/src/charts/BarChart.tsx +82 -67
  710. package/src/charts/ChartDataView.spec.tsx +104 -0
  711. package/src/charts/ChartDataView.tsx +158 -0
  712. package/src/charts/ChartSurface.tsx +7 -2
  713. package/src/charts/Charts.stories.tsx +213 -9
  714. package/src/charts/LineChart.tsx +90 -75
  715. package/src/charts/PieChart.knobs.spec.tsx +25 -0
  716. package/src/charts/PieChart.tsx +51 -9
  717. package/src/charts/Sparkline.tsx +25 -3
  718. package/src/charts/accessibility.ts +8 -0
  719. package/src/charts/charts.spec.tsx +77 -3
  720. package/src/charts/index.ts +2 -0
  721. package/src/charts/math.spec.ts +19 -0
  722. package/src/charts/math.ts +36 -0
  723. package/src/charts/series.tsx +101 -21
  724. package/src/charts/svg.spec.ts +28 -0
  725. package/src/charts/svg.ts +56 -2
  726. package/src/code/CodeBlock/CodeBlock.copy.spec.tsx +23 -0
  727. package/src/code/CodeBlock/index.tsx +4 -3
  728. package/src/disclosureForm.spec.tsx +57 -0
  729. package/src/disclosureNativeProps.spec.tsx +35 -0
  730. package/src/feedback/ConfirmDialog.nativeFocus.spec.tsx +52 -0
  731. package/src/feedback/ConfirmDialog.spec.tsx +20 -0
  732. package/src/feedback/ConfirmDialog.tsx +9 -15
  733. package/src/feedback/NotifyHost.tsx +11 -2
  734. package/src/feedback/copy.ts +36 -4
  735. package/src/feedback/index.ts +1 -0
  736. package/src/feedback/notify.spec.ts +15 -1
  737. package/src/feedback/notify.ts +1 -0
  738. package/src/feedback/route.ts +4 -0
  739. package/src/feedback/store.ts +7 -0
  740. package/src/icons/lucide.ts +1 -1
  741. package/src/images/SvgUri/index.native.ts +11 -3
  742. package/src/knobImmuneExports.ts +0 -2
  743. package/src/layouts/EmptyState.stories.tsx +2 -2
  744. package/src/layouts/Page.weight.spec.tsx +75 -0
  745. package/src/layouts/PageHeader.stories.tsx +4 -4
  746. package/src/layouts/PageTemplates.stories.tsx +2 -2
  747. package/src/layouts/PaneScaffold.spec.tsx +144 -4
  748. package/src/layouts/PaneScaffold.stories.tsx +58 -2
  749. package/src/layouts/PaneScaffold.tsx +156 -58
  750. package/src/layouts/ScreenToolbar.stories.tsx +6 -23
  751. package/src/layouts/index.tsx +11 -0
  752. package/src/layouts/layouts.spec.tsx +51 -0
  753. package/src/layouts/page.designLaw.spec.tsx +25 -0
  754. package/src/layouts/page.tsx +46 -9
  755. package/src/primitives.spec.tsx +19 -4
  756. package/src/shared/useKeyboardInset.native.ts +43 -0
  757. package/src/shared/useKeyboardInset.ts +2 -41
  758. package/src/tamagui.spec.ts +63 -0
  759. package/src/tamagui.ts +3 -1
  760. package/src/views/Dashboard.stories.tsx +38 -1
  761. package/src/views/Dashboard.tsx +119 -21
  762. package/src/views/Gantt.scroll.spec.tsx +120 -0
  763. package/src/views/Gantt.spec.tsx +376 -0
  764. package/src/views/Gantt.stories.tsx +75 -2
  765. package/src/views/Gantt.tsx +564 -96
  766. package/src/views/Kanban.spec.tsx +11 -0
  767. package/src/views/ganttMath.ts +142 -4
  768. package/src/views/index.ts +44 -1
  769. package/src/views/views.spec.tsx +39 -0
  770. package/types/Accordion/index.d.ts +2 -0
  771. package/types/Accordion/index.d.ts.map +1 -1
  772. package/types/AnimateHeight/index.d.ts +3 -4
  773. package/types/AnimateHeight/index.d.ts.map +1 -1
  774. package/types/Button.d.ts +12 -2
  775. package/types/Button.d.ts.map +1 -1
  776. package/types/Card.d.ts.map +1 -1
  777. package/types/CardFooter.d.ts +2 -1
  778. package/types/CardFooter.d.ts.map +1 -1
  779. package/types/Collapsible.d.ts +19 -0
  780. package/types/Collapsible.d.ts.map +1 -0
  781. package/types/CopyField/index.d.ts.map +1 -1
  782. package/types/DropdownMenu/index.d.ts +22 -0
  783. package/types/DropdownMenu/index.d.ts.map +1 -1
  784. package/types/Meter/index.d.ts.map +1 -1
  785. package/types/Pagination.d.ts +1 -1
  786. package/types/Pagination.d.ts.map +1 -1
  787. package/types/Tabs/index.d.ts +7 -3
  788. package/types/Tabs/index.d.ts.map +1 -1
  789. package/types/Toast/index.d.ts +16 -0
  790. package/types/Toast/index.d.ts.map +1 -1
  791. package/types/actions/DestructiveAction.d.ts.map +1 -1
  792. package/types/charts/Axis.d.ts.map +1 -1
  793. package/types/charts/BarChart.d.ts.map +1 -1
  794. package/types/charts/ChartDataView.d.ts +22 -0
  795. package/types/charts/ChartDataView.d.ts.map +1 -0
  796. package/types/charts/ChartSurface.d.ts +4 -1
  797. package/types/charts/ChartSurface.d.ts.map +1 -1
  798. package/types/charts/LineChart.d.ts.map +1 -1
  799. package/types/charts/PieChart.d.ts +1 -1
  800. package/types/charts/PieChart.d.ts.map +1 -1
  801. package/types/charts/Sparkline.d.ts +3 -1
  802. package/types/charts/Sparkline.d.ts.map +1 -1
  803. package/types/charts/accessibility.d.ts +3 -0
  804. package/types/charts/accessibility.d.ts.map +1 -1
  805. package/types/charts/index.d.ts +1 -0
  806. package/types/charts/index.d.ts.map +1 -1
  807. package/types/charts/math.d.ts +12 -0
  808. package/types/charts/math.d.ts.map +1 -1
  809. package/types/charts/series.d.ts +1 -1
  810. package/types/charts/series.d.ts.map +1 -1
  811. package/types/charts/svg.d.ts +18 -2
  812. package/types/charts/svg.d.ts.map +1 -1
  813. package/types/code/CodeBlock/index.d.ts.map +1 -1
  814. package/types/feedback/ConfirmDialog.d.ts.map +1 -1
  815. package/types/feedback/NotifyHost.d.ts +3 -1
  816. package/types/feedback/NotifyHost.d.ts.map +1 -1
  817. package/types/feedback/copy.d.ts +12 -2
  818. package/types/feedback/copy.d.ts.map +1 -1
  819. package/types/feedback/index.d.ts +1 -1
  820. package/types/feedback/index.d.ts.map +1 -1
  821. package/types/feedback/notify.d.ts.map +1 -1
  822. package/types/feedback/route.d.ts +3 -0
  823. package/types/feedback/route.d.ts.map +1 -1
  824. package/types/feedback/store.d.ts +2 -0
  825. package/types/feedback/store.d.ts.map +1 -1
  826. package/types/icons/lucide.d.ts +1 -1
  827. package/types/icons/lucide.d.ts.map +1 -1
  828. package/types/images/SvgUri/index.native.d.ts +4 -3
  829. package/types/images/SvgUri/index.native.d.ts.map +1 -1
  830. package/types/knobImmuneExports.d.ts.map +1 -1
  831. package/types/layouts/PaneScaffold.d.ts +27 -5
  832. package/types/layouts/PaneScaffold.d.ts.map +1 -1
  833. package/types/layouts/index.d.ts +1 -0
  834. package/types/layouts/index.d.ts.map +1 -1
  835. package/types/layouts/page.d.ts +10 -5
  836. package/types/layouts/page.d.ts.map +1 -1
  837. package/types/shared/useKeyboardInset.d.ts +1 -14
  838. package/types/shared/useKeyboardInset.d.ts.map +1 -1
  839. package/types/shared/useKeyboardInset.native.d.ts +16 -0
  840. package/types/shared/useKeyboardInset.native.d.ts.map +1 -0
  841. package/types/tamagui.d.ts +2 -1
  842. package/types/tamagui.d.ts.map +1 -1
  843. package/types/views/Dashboard.d.ts.map +1 -1
  844. package/types/views/Gantt.d.ts +132 -13
  845. package/types/views/Gantt.d.ts.map +1 -1
  846. package/types/views/ganttMath.d.ts +73 -0
  847. package/types/views/ganttMath.d.ts.map +1 -1
  848. package/types/views/index.d.ts +2 -2
  849. package/types/views/index.d.ts.map +1 -1
@@ -1,6 +1,11 @@
1
1
  /**
2
2
  * PaneScaffold + canonical layouts (DG-LAY-02) — W11.
3
3
  *
4
+ * PaneScaffold is a TWO-pane scaffold: `primary` and `secondary`, no more.
5
+ * Three regions come from NESTING one scaffold inside a pane of another. The
6
+ * resolved size class rides a context down, so an inner scaffold reflows with
7
+ * the outer one instead of splitting inside a stacked column.
8
+ *
4
9
  * Devs declare pane roles; the scaffold picks 1 vs 2 columns from the
5
10
  * canonical layout size class (`expanded` @ 860 = two-pane budget).
6
11
  *
@@ -13,7 +18,10 @@
13
18
  * - **Supporting-pane**: secondary is meaningful only relative to primary.
14
19
  * - **Feed**: equal-weight cards in a responsive grid.
15
20
  *
16
- * Compact/medium show one pane; pass `activePane` to choose which.
21
+ * Below the two-pane budget the panes STACK (primary above secondary) and the
22
+ * sash goes away — a drag handle is a pointer affordance and there is nothing
23
+ * to drag with a thumb. Hiding a pane is the list-detail navigation idiom, not
24
+ * the responsive default: pass `activePane` (or `narrowLayout="swap"`) for it.
17
25
  */
18
26
 
19
27
  import {
@@ -31,7 +39,17 @@ import {
31
39
  type LayoutSizeClass,
32
40
  READING_WIDTH_CH,
33
41
  } from "@multiplatform.one/theme";
34
- import { Children, useCallback, useEffect, useId, useRef, useState, type ReactNode } from "react";
42
+ import {
43
+ Children,
44
+ createContext,
45
+ useCallback,
46
+ useContext,
47
+ useEffect,
48
+ useId,
49
+ useRef,
50
+ useState,
51
+ type ReactNode,
52
+ } from "react";
35
53
  import type { XStackProps, YStackProps } from "tamagui";
36
54
  import { isWeb, XStack, YStack } from "tamagui";
37
55
  import { useDirection } from "../hooks/useDirection";
@@ -51,10 +69,17 @@ export interface PaneScaffoldProps extends Omit<XStackProps, "children"> {
51
69
  primary: ReactNode;
52
70
  secondary?: ReactNode;
53
71
  /**
54
- * Which pane to show when only one column fits. Default: `primary`.
55
- * List-detail on compact typically flips to `secondary` once an item is selected.
72
+ * Which pane to show when `narrowLayout` is `swap`. Default: `primary`.
73
+ * List-detail on compact typically flips to `secondary` once an item is
74
+ * selected. Passing this prop opts the scaffold into `swap`.
56
75
  */
57
76
  activePane?: PaneRole;
77
+ /**
78
+ * What happens below the two-pane budget. `stack` (the default) puts
79
+ * secondary under primary so no content is unreachable; `swap` renders
80
+ * `activePane` alone, which is the list-detail navigation idiom.
81
+ */
82
+ narrowLayout?: "stack" | "swap";
58
83
  /** Override the default pane budget (compact/medium → 1, expanded+ → 2). */
59
84
  maxPanes?: 1 | 2;
60
85
  /**
@@ -82,6 +107,14 @@ export interface PaneScaffoldProps extends Omit<XStackProps, "children"> {
82
107
  sizeClass?: LayoutSizeClass;
83
108
  }
84
109
 
110
+ /**
111
+ * Resolved size class handed down to nested scaffolds. Without it an inner
112
+ * scaffold reads the WINDOW while the outer one was overridden (Storybook
113
+ * viewport, template test), so a stacked outer could still hold a split
114
+ * inner and the narrow reflow would only go one level deep.
115
+ */
116
+ const PaneSizeClassContext = createContext<LayoutSizeClass | null>(null);
117
+
85
118
  /**
86
119
  * Adaptive one-/two-pane shell. Geometry only — surface colors stay stable
87
120
  * across breakpoints (Material M-L5).
@@ -89,7 +122,8 @@ export interface PaneScaffoldProps extends Omit<XStackProps, "children"> {
89
122
  export function PaneScaffold({
90
123
  primary,
91
124
  secondary,
92
- activePane = "primary",
125
+ activePane: activePaneProp,
126
+ narrowLayout: narrowLayoutProp,
93
127
  maxPanes: maxPanesProp,
94
128
  paneFlex = [1, 1],
95
129
  paneGap,
@@ -102,23 +136,73 @@ export function PaneScaffold({
102
136
  ...rest
103
137
  }: PaneScaffoldProps) {
104
138
  const liveClass = useLayoutSizeClass();
105
- const sizeClass = sizeClassProp ?? liveClass;
139
+ const inheritedClass = useContext(PaneSizeClassContext);
140
+ const sizeClass = sizeClassProp ?? inheritedClass ?? liveClass;
106
141
  // Explicit `maxPanes` is the eject hatch (force 1 or 2 regardless of class).
107
142
  const budget = maxPanesProp ?? defaultMaxPanes(sizeClass);
108
143
  const hasSecondary = secondary !== null && secondary !== undefined;
109
- const multi = budget >= 2 && hasSecondary;
144
+ const split = budget >= 2 && hasSecondary;
110
145
  const gapped = paneGap !== undefined;
111
146
  const gap = gapped ? paneGap : undefined;
112
- const resizable = (resizableProp ?? !gapped) && multi && !gapped;
147
+ const resizable = (resizableProp ?? !gapped) && split && !gapped;
148
+ // `activePane` only decides anything when a pane is dropped, so passing it
149
+ // IS the swap opt-in. Everything else stacks: a scaffold that hides its
150
+ // secondary by default leaves that content unreachable on a phone.
151
+ const narrowLayout = narrowLayoutProp ?? (activePaneProp === undefined ? "stack" : "swap");
152
+ const stacked = !split && hasSecondary && narrowLayout === "stack";
153
+ const [primaryFlex, secondaryFlex] = paneFlex;
113
154
 
114
155
  // flexBasis auto, not the flex:1 shorthand's 0%: react-native-web resets
115
156
  // min-height to 0, so a 0% basis contributes zero intrinsic height inside
116
157
  // auto-height scroll flows (Screen scroll pages) and the scaffold collapses,
117
158
  // painting pane content over whatever follows. Bounded parents still fill
118
159
  // (grow 1) exactly as before.
119
- if (!multi) {
160
+ let content: ReactNode;
161
+ if (stacked) {
162
+ content = (
163
+ <YStack
164
+ flexGrow={1}
165
+ flexShrink={1}
166
+ flexBasis="auto"
167
+ minWidth={0}
168
+ width="100%"
169
+ gap={gap ?? 0}
170
+ data-testid="pane-scaffold"
171
+ data-panes="2"
172
+ data-pane-layout="stack"
173
+ data-size-class={sizeClass}
174
+ data-sash="false"
175
+ {...rest}
176
+ >
177
+ <YStack
178
+ flexGrow={1}
179
+ flexShrink={1}
180
+ flexBasis="auto"
181
+ minWidth={0}
182
+ minHeight={0}
183
+ width="100%"
184
+ {...(gapped ? undefined : paneHairlineBottom)}
185
+ data-testid="pane-primary"
186
+ >
187
+ {primary}
188
+ </YStack>
189
+ <YStack
190
+ flexGrow={1}
191
+ flexShrink={1}
192
+ flexBasis="auto"
193
+ minWidth={0}
194
+ minHeight={0}
195
+ width="100%"
196
+ data-testid="pane-secondary"
197
+ >
198
+ {secondary}
199
+ </YStack>
200
+ </YStack>
201
+ );
202
+ } else if (!split) {
203
+ const activePane = activePaneProp ?? "primary";
120
204
  const shown = activePane === "secondary" && hasSecondary ? secondary : primary;
121
- return (
205
+ content = (
122
206
  <YStack
123
207
  flexGrow={1}
124
208
  flexShrink={1}
@@ -127,62 +211,64 @@ export function PaneScaffold({
127
211
  width="100%"
128
212
  data-testid="pane-scaffold"
129
213
  data-panes="1"
214
+ data-pane-layout="single"
130
215
  data-size-class={sizeClass}
131
216
  {...rest}
132
217
  >
133
218
  {shown}
134
219
  </YStack>
135
220
  );
221
+ } else {
222
+ content = (
223
+ <XStack
224
+ flexGrow={1}
225
+ flexShrink={1}
226
+ flexBasis="auto"
227
+ minWidth={0}
228
+ minHeight={0}
229
+ width="100%"
230
+ alignItems="stretch"
231
+ gap={gap ?? 0}
232
+ position="relative"
233
+ data-testid="pane-scaffold"
234
+ data-panes="2"
235
+ data-pane-layout="split"
236
+ data-size-class={sizeClass}
237
+ data-sash={resizable ? "true" : "false"}
238
+ {...rest}
239
+ >
240
+ {resizable ? (
241
+ <ResizablePanes
242
+ primary={primary}
243
+ secondary={secondary}
244
+ primaryFlex={primaryFlex}
245
+ secondaryFlex={secondaryFlex}
246
+ minFraction={minPaneFraction}
247
+ maxFraction={maxPaneFraction}
248
+ fraction={primaryFractionProp}
249
+ onFractionChange={onPrimaryFractionChange}
250
+ />
251
+ ) : (
252
+ <>
253
+ <YStack
254
+ flex={primaryFlex}
255
+ minWidth={0}
256
+ minHeight={0}
257
+ {...(gapped ? undefined : paneHairlineEnd)}
258
+ data-testid="pane-primary"
259
+ >
260
+ {primary}
261
+ </YStack>
262
+ <YStack flex={secondaryFlex} minWidth={0} minHeight={0} data-testid="pane-secondary">
263
+ {secondary}
264
+ </YStack>
265
+ </>
266
+ )}
267
+ </XStack>
268
+ );
136
269
  }
137
270
 
138
- const [primaryFlex, secondaryFlex] = paneFlex;
139
-
140
- return (
141
- <XStack
142
- flexGrow={1}
143
- flexShrink={1}
144
- flexBasis="auto"
145
- minWidth={0}
146
- minHeight={0}
147
- width="100%"
148
- alignItems="stretch"
149
- gap={gap ?? 0}
150
- position="relative"
151
- data-testid="pane-scaffold"
152
- data-panes="2"
153
- data-size-class={sizeClass}
154
- data-sash={resizable ? "true" : "false"}
155
- {...rest}
156
- >
157
- {resizable ? (
158
- <ResizablePanes
159
- primary={primary}
160
- secondary={secondary}
161
- primaryFlex={primaryFlex}
162
- secondaryFlex={secondaryFlex}
163
- minFraction={minPaneFraction}
164
- maxFraction={maxPaneFraction}
165
- fraction={primaryFractionProp}
166
- onFractionChange={onPrimaryFractionChange}
167
- />
168
- ) : (
169
- <>
170
- <YStack
171
- flex={primaryFlex}
172
- minWidth={0}
173
- minHeight={0}
174
- {...(gapped ? undefined : paneHairlineEnd)}
175
- data-testid="pane-primary"
176
- >
177
- {primary}
178
- </YStack>
179
- <YStack flex={secondaryFlex} minWidth={0} minHeight={0} data-testid="pane-secondary">
180
- {secondary}
181
- </YStack>
182
- </>
183
- )}
184
- </XStack>
185
- );
271
+ return <PaneSizeClassContext.Provider value={sizeClass}>{content}</PaneSizeClassContext.Provider>;
186
272
  }
187
273
 
188
274
  const paneHairlineEnd = isWeb
@@ -194,6 +280,9 @@ const paneHairlineEnd = isWeb
194
280
  }
195
281
  : { borderEndWidth: hairlineWidth, borderColor: "$borderColor" };
196
282
 
283
+ /** Stacked seam: the horizontal twin of `paneHairlineEnd`. */
284
+ const paneHairlineBottom = { ...hairline.bottom, borderColor: "$borderColor" };
285
+
197
286
  function clampFraction(value: number, min: number, max: number): number {
198
287
  return Math.min(max, Math.max(min, value));
199
288
  }
@@ -458,12 +547,17 @@ export interface ListDetailLayoutProps extends Omit<
458
547
  * Canonical list-detail: explorative list + item detail. Detail remains
459
548
  * meaningful without the list (Material M-L4). List is the narrower pane
460
549
  * (Linear issue view / VS Code explorer), not a 50/50 split.
550
+ *
551
+ * Below the two-pane budget this SWAPS rather than stacks — list and detail
552
+ * are two steps of one navigation, so `selected` decides which is on screen.
553
+ * Pass `narrowLayout="stack"` to show both instead.
461
554
  */
462
555
  export function ListDetailLayout({
463
556
  list,
464
557
  detail,
465
558
  selected = false,
466
559
  activePane,
560
+ narrowLayout,
467
561
  ...rest
468
562
  }: ListDetailLayoutProps) {
469
563
  return (
@@ -472,6 +566,7 @@ export function ListDetailLayout({
472
566
  secondary={detail}
473
567
  paneFlex={[1, 2]}
474
568
  activePane={activePane ?? (selected ? "secondary" : "primary")}
569
+ narrowLayout={narrowLayout ?? "swap"}
475
570
  data-canonical="list-detail"
476
571
  {...rest}
477
572
  />
@@ -493,6 +588,9 @@ export interface SupportingPaneLayoutProps extends Omit<
493
588
  * Canonical supporting-pane: primary content + contextual support (~⅔ / ⅓).
494
589
  * Supporting content is only meaningful relative to primary (Material M-L4).
495
590
  * Seam is a hairline (Polaris Frame navigation / Linear properties column).
591
+ *
592
+ * Below the two-pane budget the supporting content stacks under the primary.
593
+ * It is never dropped: it has no screen of its own to be reached from.
496
594
  */
497
595
  export function SupportingPaneLayout({ children, supporting, ...rest }: SupportingPaneLayoutProps) {
498
596
  return (
@@ -26,16 +26,10 @@ export const Default: Story = {
26
26
  name: "Main",
27
27
  render: () => (
28
28
  <ScreenToolbar
29
- leading={
30
- <Button compact variant="outlined">
31
- Back
32
- </Button>
33
- }
29
+ leading={<Button compact>Back</Button>}
34
30
  trailing={
35
31
  <>
36
- <Button compact variant="outlined">
37
- Cancel
38
- </Button>
32
+ <Button compact>Cancel</Button>
39
33
  <Button compact>Save</Button>
40
34
  </>
41
35
  }
@@ -59,7 +53,6 @@ export const DisabledAndLoading: Story = {
59
53
  // the toolbar row's shared control height.
60
54
  <Button
61
55
  compact
62
- variant="outlined"
63
56
  disabled
64
57
  disabledReason="No screen to go back to"
65
58
  disabledReasonPlacement="inline"
@@ -82,22 +75,12 @@ export const ManyActionsNarrow: Story = {
82
75
  render: () => (
83
76
  <YStack maxWidth={320} borderWidth={1} borderColor="$color6" borderStyle="dashed">
84
77
  <ScreenToolbar
85
- leading={
86
- <Button compact variant="outlined">
87
- Back to the previous screen
88
- </Button>
89
- }
78
+ leading={<Button compact>Back to the previous screen</Button>}
90
79
  trailing={
91
80
  <>
92
- <Button compact variant="outlined">
93
- Duplicate
94
- </Button>
95
- <Button compact variant="outlined">
96
- Archive
97
- </Button>
98
- <Button compact variant="outlined">
99
- Delete permanently
100
- </Button>
81
+ <Button compact>Duplicate</Button>
82
+ <Button compact>Archive</Button>
83
+ <Button compact>Delete permanently</Button>
101
84
  <Button compact>Save changes</Button>
102
85
  </>
103
86
  }
@@ -12,6 +12,17 @@ export * from "./page";
12
12
  export * from "./pageHeadingScope";
13
13
  export * from "./PageTemplates";
14
14
  export * from "./PaneScaffold";
15
+ // EmptyState is NAMED here rather than left to reach the barrel through
16
+ // `export * from "./page"` (page.tsx re-exports it, so it has always been
17
+ // importable from @multiplatform.one/components — MPO-223's "not exported"
18
+ // premise was wrong, measured against published 7.7.1). Naming it is still
19
+ // worth doing: reachability that rides a transitive star through an unrelated
20
+ // module is the fragility that dropped ProgressCard twice (MPO-53, 5c7af7134),
21
+ // and it reads as absent to anyone grepping this file, which is how a consumer
22
+ // talked itself into a deep `src/layouts/EmptyState` import. `layouts.spec.tsx`
23
+ // asserts every module in this directory is reachable from here, so the next
24
+ // omission fails a test.
25
+ export { EmptyState, type EmptyStateProps } from "./EmptyState";
15
26
  export {
16
27
  AsyncBoundary,
17
28
  AsyncSkeleton,
@@ -13,6 +13,7 @@ import * as React from "react";
13
13
  import { TamaguiProvider, createTamagui } from "tamagui";
14
14
  import { afterEach, describe, expect, it, vi } from "vitest";
15
15
  import * as Debug from "./Debug";
16
+ import * as EmptyStateModule from "./EmptyState";
16
17
  import * as Layouts from "./index";
17
18
  import { Sidebar, type SidebarSection } from "./sidebar";
18
19
  import { Toolbar, type ToolbarAction } from "./toolbar";
@@ -72,6 +73,56 @@ describe("Layouts Index", () => {
72
73
  it("should export Timeline", () => {
73
74
  expect(Layouts).toHaveProperty("Timeline");
74
75
  });
76
+
77
+ // MPO-223. The per-component `it`s above are a hand-kept list, and a hand-kept
78
+ // list is how ProgressCard fell off the catalog twice (MPO-53, then 5c7af7134):
79
+ // nobody adds a line for the module they forgot. This walks the directory
80
+ // instead, so a new module in src/layouts that nothing re-exports fails here
81
+ // rather than in a consumer's app.
82
+ //
83
+ // Scope is this directory's own modules: the top-level files, plus each
84
+ // subdirectory's index. A subdirectory's internals stay internal on purpose
85
+ // (SafeAreaWrapper/insets, KeyboardAvoidingWrapper/behavior), and `.native`
86
+ // variants are the same module on a platform this runner is not.
87
+ //
88
+ // Runtime names only — `import * as` cannot see type-only exports, so the
89
+ // interfaces ride the typecheck. That is enough for the failure this guards:
90
+ // a missing VALUE is what breaks a build.
91
+ it("reaches every module under src/layouts from the barrel", () => {
92
+ // Negations live in the GLOB, not in a filter below it: `eager: true`
93
+ // imports every match up front, so a `.stories.tsx` skipped afterwards has
94
+ // already been loaded — and loading one drags the storybook runtime into a
95
+ // vitest environment that has no preview API (measured: "does not provide
96
+ // an export named 'definePreview'", whole suite fails to collect).
97
+ const modules = import.meta.glob<Record<string, unknown>>(
98
+ [
99
+ "./*.tsx",
100
+ "./*/index.tsx",
101
+ "!./index.tsx",
102
+ "!./*.spec.tsx",
103
+ "!./*.stories.tsx",
104
+ "!./**/*.spec.tsx",
105
+ "!./**/*.stories.tsx",
106
+ ],
107
+ { eager: true },
108
+ );
109
+ const unreachable: string[] = [];
110
+ for (const [file, mod] of Object.entries(modules)) {
111
+ for (const name of Object.keys(mod)) {
112
+ if (name === "default") continue;
113
+ if (!(name in Layouts)) unreachable.push(`${file} -> ${name}`);
114
+ }
115
+ }
116
+ expect(unreachable).toEqual([]);
117
+ });
118
+
119
+ // The import a consumer actually writes. It passed before EmptyState was
120
+ // named in index.tsx too — page.tsx re-exported it — and this locks the
121
+ // identity, not just the presence, so a future shadow cannot quietly swap it.
122
+ it("exports the same EmptyState from the barrel and from its module", () => {
123
+ expect(Layouts).toHaveProperty("EmptyState");
124
+ expect(Layouts.EmptyState).toBe(EmptyStateModule.EmptyState);
125
+ });
75
126
  });
76
127
 
77
128
  // ---------------------------------------------------------------------------
@@ -135,4 +135,29 @@ describe("density unpinned (LC-76)", () => {
135
135
  const frame = container.querySelector('[data-testid="page-section"]') as HTMLElement;
136
136
  expect(frame.getAttribute("data-density")).toBe("compact");
137
137
  });
138
+
139
+ it("Screen's explicit density override reaches nested page primitives", () => {
140
+ renderWithProviders(
141
+ <Preset overrides={{ density: "comfortable" }}>
142
+ <Screen compact scroll={false}>
143
+ <PageHeader title="Compact screen" />
144
+ <PageSection title="Inherited section" />
145
+ </Screen>
146
+ </Preset>,
147
+ );
148
+ expect(screen.getByTestId("page-header").getAttribute("data-density")).toBe("compact");
149
+ expect(screen.getByTestId("page-section").getAttribute("data-density")).toBe("compact");
150
+ });
151
+
152
+ it("a painted section steps its interior density without shrinking its heading", () => {
153
+ renderWithProviders(
154
+ <Preset overrides={{ density: "comfortable" }}>
155
+ <PageSection surface title="Outer" data-testid="outer-section">
156
+ <PageSection title="Inner" data-testid="inner-section" />
157
+ </PageSection>
158
+ </Preset>,
159
+ );
160
+ expect(screen.getByTestId("outer-section").getAttribute("data-density")).toBe("comfortable");
161
+ expect(screen.getByTestId("inner-section").getAttribute("data-density")).toBe("compact");
162
+ });
138
163
  });
@@ -17,6 +17,8 @@
17
17
 
18
18
  import {
19
19
  MIN_PRESS_TARGET,
20
+ Preset,
21
+ Surface,
20
22
  hairline,
21
23
  layoutBreakpoints,
22
24
  resolvePageTitleScale,
@@ -55,6 +57,17 @@ function negateSpaceToken(token: string): `$-${string}` {
55
57
  return `$-${token.startsWith("$") ? token.slice(1) : token}`;
56
58
  }
57
59
 
60
+ function knobsFor(component: string, compact: boolean | undefined) {
61
+ // LC-76: an omitted override must leave density under the preset's control.
62
+ return compact === undefined ? { component } : { component, compact };
63
+ }
64
+
65
+ /** Nested surfaces step density only; hue remains inherited (LC-73 / R12). */
66
+ function NestedScale({ density, children }: { density: string; children: ReactNode }) {
67
+ if (density === "compact") return children;
68
+ return <Preset overrides={{ density: "compact" }}>{children}</Preset>;
69
+ }
70
+
58
71
  // ---------------------------------------------------------------------------
59
72
  // Screen — page outer shell (scroll, max-width, padding, theme background)
60
73
  // ---------------------------------------------------------------------------
@@ -76,6 +89,8 @@ export interface ScreenProps extends YStackProps {
76
89
  noPadding?: boolean;
77
90
  /** Props forwarded to the inner ScrollView when scroll=true. */
78
91
  scrollViewProps?: TamaguiScrollViewProps;
92
+ /** Density override inherited by the subtree. Omitted follows the preset. */
93
+ compact?: boolean;
79
94
  }
80
95
 
81
96
  /**
@@ -83,8 +98,7 @@ export interface ScreenProps extends YStackProps {
83
98
  * compose-only screens.
84
99
  *
85
100
  * SF-TRANSPARENT + SP-PAD/SP-GAP: panelPadding and gapLg restyle with the
86
- * density/space knobs (LC-76). Do not wrap in `<Surface density="comfortable">`
87
- * — that ceiling pinned page inset and made the density knob a no-op.
101
+ * density/space knobs (LC-76). Only an explicit compact prop overrides density.
88
102
  *
89
103
  * @example
90
104
  * <Screen>
@@ -92,16 +106,26 @@ export interface ScreenProps extends YStackProps {
92
106
  * <FrappeImageView doctype="Pokemon" />
93
107
  * </Screen>
94
108
  */
95
- export function Screen({
109
+ export function Screen({ compact, ...props }: ScreenProps) {
110
+ const density = compact === undefined ? undefined : compact ? "compact" : "comfortable";
111
+ return (
112
+ <Surface density={density}>
113
+ <ScreenInner compact={compact} {...props} />
114
+ </Surface>
115
+ );
116
+ }
117
+
118
+ function ScreenInner({
96
119
  children,
97
120
  scroll = true,
98
121
  maxWidth = CONTENT_MAX_WIDTH,
99
122
  bleed = false,
100
123
  noPadding = false,
101
124
  scrollViewProps,
125
+ compact,
102
126
  ...rest
103
127
  }: ScreenProps) {
104
- const { knobProps } = useResolvedKnobs({ component: "Screen" });
128
+ const { knobProps } = useResolvedKnobs(knobsFor("Screen", compact));
105
129
 
106
130
  const inner = (
107
131
  <YStack
@@ -180,6 +204,8 @@ export interface PageHeaderProps extends YStackProps {
180
204
  * surface. Semantics (headingLevel) are unchanged either way.
181
205
  */
182
206
  titleScale?: PageTitleScale;
207
+ /** Density override. Omitted follows the preset or parent Surface. */
208
+ compact?: boolean;
183
209
  }
184
210
 
185
211
  /**
@@ -200,10 +226,11 @@ export function PageHeader({
200
226
  divider = true,
201
227
  headingLevel = 1,
202
228
  titleScale,
229
+ compact,
203
230
  children,
204
231
  ...rest
205
232
  }: PageHeaderProps) {
206
- const { knobProps } = useResolvedKnobs();
233
+ const { knobProps } = useResolvedKnobs(knobsFor("PageHeader", compact));
207
234
  const insetToken = usePageChromeInset();
208
235
  // DG-A11Y-02: count the built-in title toward the Screen's h1 budget.
209
236
  // Custom `heading` nodes have an unknown level and are not registered.
@@ -230,9 +257,10 @@ export function PageHeader({
230
257
  (title ? (
231
258
  <TitleTag
232
259
  margin={0}
233
- fontWeight={knobProps.heading.fontWeight}
234
260
  {...titleSize}
261
+ fontWeight={knobProps.heading.fontWeight}
235
262
  {...headingFamily}
263
+ data-font-weight-knob={knobProps.heading.fontWeight === "700" ? "bold" : "regular"}
236
264
  >
237
265
  {title}
238
266
  </TitleTag>
@@ -247,6 +275,7 @@ export function PageHeader({
247
275
  return (
248
276
  <YStack
249
277
  data-testid="page-header"
278
+ data-density={knobProps.density}
250
279
  overflow="visible"
251
280
  {...bleed}
252
281
  {...(showHairline ? { ...hairline.bottom, borderColor: componentColors.divider } : null)}
@@ -327,6 +356,8 @@ export interface PageSectionProps extends YStackProps {
327
356
  * without skips. Visuals are pinned by the shared sectionHeading scale.
328
357
  */
329
358
  headingLevel?: Exclude<PageHeadingLevel, 1>;
359
+ /** Density override. Omitted follows the preset or parent Surface. */
360
+ compact?: boolean;
330
361
  }
331
362
 
332
363
  /**
@@ -340,10 +371,11 @@ export function PageSection({
340
371
  divider = true,
341
372
  surface = false,
342
373
  headingLevel = 2,
374
+ compact,
343
375
  children,
344
376
  ...rest
345
377
  }: PageSectionProps) {
346
- const { knobProps } = useResolvedKnobs();
378
+ const { knobProps } = useResolvedKnobs(knobsFor("PageSection", compact));
347
379
  // See PageHeader: native-only heading family from the headingFont knob.
348
380
  const headingFamily = isWeb ? null : { fontFamily: knobProps.heading.fontFamily };
349
381
  // The sectionHeading spread pins the visual scale, so stepped levels only
@@ -387,11 +419,16 @@ export function PageSection({
387
419
  // a sibling flips `surface` — only the section CONTENT earns the card's
388
420
  // panelPadding inset (the painted surface owns it, per LC-39's converse).
389
421
  return (
390
- <YStack {...knobProps.gap} {...rest}>
422
+ <YStack
423
+ data-testid="page-section"
424
+ data-density={knobProps.density}
425
+ {...knobProps.gap}
426
+ {...rest}
427
+ >
391
428
  {headerBlock}
392
429
  {surface ? (
393
430
  <YStack {...knobProps.gap} {...surfaceProps}>
394
- {children}
431
+ <NestedScale density={knobProps.density}>{children}</NestedScale>
395
432
  </YStack>
396
433
  ) : (
397
434
  children