@multiplatform.one/components 7.7.6 → 7.10.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 (885) hide show
  1. package/dist/cjs/Accordion/index.cjs +3 -3
  2. package/dist/cjs/Accordion/index.native.js +4 -4
  3. package/dist/cjs/Accordion/index.native.js.map +1 -1
  4. package/dist/cjs/Button.native.js.map +1 -1
  5. package/dist/cjs/Card.cjs +7 -1
  6. package/dist/cjs/Card.native.js +11 -1
  7. package/dist/cjs/Card.native.js.map +1 -1
  8. package/dist/cjs/CardFooter.cjs +1 -0
  9. package/dist/cjs/CardFooter.native.js +1 -0
  10. package/dist/cjs/CardFooter.native.js.map +1 -1
  11. package/dist/cjs/Chip/index.cjs +1 -1
  12. package/dist/cjs/Chip/index.native.js +1 -1
  13. package/dist/cjs/Chip/index.native.js.map +1 -1
  14. package/dist/cjs/ContextMenu/index.cjs +3 -3
  15. package/dist/cjs/ContextMenu/index.native.js +3 -3
  16. package/dist/cjs/ContextMenu/index.native.js.map +1 -1
  17. package/dist/cjs/CopyField/index.cjs +6 -1
  18. package/dist/cjs/CopyField/index.native.js +6 -1
  19. package/dist/cjs/CopyField/index.native.js.map +1 -1
  20. package/dist/cjs/DropdownMenu/index.cjs +34 -4
  21. package/dist/cjs/DropdownMenu/index.native.js +34 -4
  22. package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
  23. package/dist/cjs/Meter/index.cjs +15 -7
  24. package/dist/cjs/Meter/index.native.js +15 -7
  25. package/dist/cjs/Meter/index.native.js.map +1 -1
  26. package/dist/cjs/Meter/meter.cjs +1 -2
  27. package/dist/cjs/Meter/meter.native.js +1 -2
  28. package/dist/cjs/Meter/meter.native.js.map +1 -1
  29. package/dist/cjs/Pagination.cjs +2 -2
  30. package/dist/cjs/Pagination.native.js +2 -2
  31. package/dist/cjs/Pagination.native.js.map +1 -1
  32. package/dist/cjs/ProgressSteps/index.cjs +3 -3
  33. package/dist/cjs/ProgressSteps/index.native.js +3 -3
  34. package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
  35. package/dist/cjs/Quote/index.cjs +1 -2
  36. package/dist/cjs/Quote/index.native.js +1 -2
  37. package/dist/cjs/Quote/index.native.js.map +1 -1
  38. package/dist/cjs/Tabs/index.cjs +8 -7
  39. package/dist/cjs/Tabs/index.native.js +9 -8
  40. package/dist/cjs/Tabs/index.native.js.map +1 -1
  41. package/dist/cjs/Toast/index.cjs +57 -7
  42. package/dist/cjs/Toast/index.native.js +59 -7
  43. package/dist/cjs/Toast/index.native.js.map +1 -1
  44. package/dist/cjs/TreeSelect/index.cjs +46 -7
  45. package/dist/cjs/TreeSelect/index.native.js +58 -7
  46. package/dist/cjs/TreeSelect/index.native.js.map +1 -1
  47. package/dist/cjs/actions/DestructiveAction.cjs +7 -13
  48. package/dist/cjs/actions/DestructiveAction.native.js +7 -15
  49. package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
  50. package/dist/cjs/charts/Axis.cjs +5 -0
  51. package/dist/cjs/charts/Axis.native.js +5 -0
  52. package/dist/cjs/charts/Axis.native.js.map +1 -1
  53. package/dist/cjs/charts/BarChart.cjs +71 -57
  54. package/dist/cjs/charts/BarChart.native.js +81 -67
  55. package/dist/cjs/charts/BarChart.native.js.map +1 -1
  56. package/dist/cjs/charts/ChartDataView.cjs +212 -0
  57. package/dist/cjs/charts/ChartDataView.native.js +224 -0
  58. package/dist/cjs/charts/ChartDataView.native.js.map +1 -0
  59. package/dist/cjs/charts/ChartSurface.cjs +5 -1
  60. package/dist/cjs/charts/ChartSurface.native.js +5 -1
  61. package/dist/cjs/charts/ChartSurface.native.js.map +1 -1
  62. package/dist/cjs/charts/LineChart.cjs +81 -67
  63. package/dist/cjs/charts/LineChart.native.js +94 -80
  64. package/dist/cjs/charts/LineChart.native.js.map +1 -1
  65. package/dist/cjs/charts/PieChart.cjs +98 -74
  66. package/dist/cjs/charts/PieChart.native.js +109 -85
  67. package/dist/cjs/charts/PieChart.native.js.map +1 -1
  68. package/dist/cjs/charts/Sparkline.cjs +10 -1
  69. package/dist/cjs/charts/Sparkline.native.js +10 -1
  70. package/dist/cjs/charts/Sparkline.native.js.map +1 -1
  71. package/dist/cjs/charts/accessibility.cjs +4 -0
  72. package/dist/cjs/charts/accessibility.native.js +7 -0
  73. package/dist/cjs/charts/accessibility.native.js.map +1 -1
  74. package/dist/cjs/charts/index.cjs +3 -1
  75. package/dist/cjs/charts/index.native.js +2 -0
  76. package/dist/cjs/charts/index.native.js.map +1 -1
  77. package/dist/cjs/charts/math.cjs +16 -0
  78. package/dist/cjs/charts/math.native.js +18 -0
  79. package/dist/cjs/charts/math.native.js.map +1 -1
  80. package/dist/cjs/charts/series.cjs +49 -7
  81. package/dist/cjs/charts/series.native.js +53 -11
  82. package/dist/cjs/charts/series.native.js.map +1 -1
  83. package/dist/cjs/charts/svg.cjs +46 -3
  84. package/dist/cjs/charts/svg.native.js +46 -3
  85. package/dist/cjs/charts/svg.native.js.map +1 -1
  86. package/dist/cjs/code/CodeBlock/index.cjs +6 -1
  87. package/dist/cjs/code/CodeBlock/index.native.js +6 -1
  88. package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
  89. package/dist/cjs/code/HighlightedCode/index.cjs +1 -1
  90. package/dist/cjs/code/HighlightedCode/index.native.js +1 -1
  91. package/dist/cjs/code/HighlightedCode/index.native.js.map +1 -1
  92. package/dist/cjs/componentColors.cjs +6 -4
  93. package/dist/cjs/componentColors.native.js +6 -4
  94. package/dist/cjs/componentColors.native.js.map +1 -1
  95. package/dist/cjs/feedback/ConfirmDialog.cjs +7 -21
  96. package/dist/cjs/feedback/ConfirmDialog.native.js +7 -22
  97. package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
  98. package/dist/cjs/feedback/NotifyHost.cjs +2 -1
  99. package/dist/cjs/feedback/NotifyHost.native.js +3 -2
  100. package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
  101. package/dist/cjs/feedback/copy.cjs +36 -4
  102. package/dist/cjs/feedback/copy.native.js +38 -4
  103. package/dist/cjs/feedback/copy.native.js.map +1 -1
  104. package/dist/cjs/feedback/index.cjs +1 -0
  105. package/dist/cjs/feedback/index.native.js +1 -0
  106. package/dist/cjs/feedback/index.native.js.map +1 -1
  107. package/dist/cjs/feedback/notify.cjs +1 -0
  108. package/dist/cjs/feedback/notify.native.js +1 -0
  109. package/dist/cjs/feedback/notify.native.js.map +1 -1
  110. package/dist/cjs/feedback/route.cjs +3 -0
  111. package/dist/cjs/feedback/route.native.js +3 -0
  112. package/dist/cjs/feedback/route.native.js.map +1 -1
  113. package/dist/cjs/feedback/store.cjs +6 -0
  114. package/dist/cjs/feedback/store.native.js +8 -0
  115. package/dist/cjs/feedback/store.native.js.map +1 -1
  116. package/dist/cjs/icons/lucide.cjs +2 -1
  117. package/dist/cjs/icons/lucide.native.js +2 -1
  118. package/dist/cjs/icons/lucide.native.js.map +1 -1
  119. package/dist/cjs/images/Image/ImageFrame.cjs +4 -2
  120. package/dist/cjs/images/Image/ImageFrame.native.js +4 -2
  121. package/dist/cjs/images/Image/ImageFrame.native.js.map +1 -1
  122. package/dist/cjs/layouts/AsyncBoundary.cjs +1 -2
  123. package/dist/cjs/layouts/AsyncBoundary.native.js +1 -2
  124. package/dist/cjs/layouts/AsyncBoundary.native.js.map +1 -1
  125. package/dist/cjs/layouts/EmptyState.cjs +6 -2
  126. package/dist/cjs/layouts/EmptyState.native.js +10 -6
  127. package/dist/cjs/layouts/EmptyState.native.js.map +1 -1
  128. package/dist/cjs/layouts/PaneScaffold.cjs +96 -41
  129. package/dist/cjs/layouts/PaneScaffold.native.js +97 -41
  130. package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
  131. package/dist/cjs/layouts/attachments.cjs +4 -4
  132. package/dist/cjs/layouts/attachments.native.js +4 -4
  133. package/dist/cjs/layouts/attachments.native.js.map +1 -1
  134. package/dist/cjs/layouts/breadcrumbs.cjs +1 -2
  135. package/dist/cjs/layouts/breadcrumbs.native.js +1 -2
  136. package/dist/cjs/layouts/breadcrumbs.native.js.map +1 -1
  137. package/dist/cjs/layouts/index.cjs +2 -0
  138. package/dist/cjs/layouts/index.native.js +2 -0
  139. package/dist/cjs/layouts/index.native.js.map +1 -1
  140. package/dist/cjs/layouts/page.cjs +50 -9
  141. package/dist/cjs/layouts/page.native.js +52 -9
  142. package/dist/cjs/layouts/page.native.js.map +1 -1
  143. package/dist/cjs/layouts/sidebar.cjs +2 -2
  144. package/dist/cjs/layouts/sidebar.native.js +2 -2
  145. package/dist/cjs/layouts/sidebar.native.js.map +1 -1
  146. package/dist/cjs/layouts/tags.cjs +6 -7
  147. package/dist/cjs/layouts/tags.native.js +6 -9
  148. package/dist/cjs/layouts/tags.native.js.map +1 -1
  149. package/dist/cjs/layouts/timeline.cjs +5 -5
  150. package/dist/cjs/layouts/timeline.native.js +5 -5
  151. package/dist/cjs/layouts/timeline.native.js.map +1 -1
  152. package/dist/cjs/shared/useKeyboardInset.cjs +1 -19
  153. package/dist/cjs/shared/useKeyboardInset.native.js +3 -3
  154. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  155. package/dist/cjs/surfaces.cjs +1 -0
  156. package/dist/cjs/surfaces.native.js +1 -0
  157. package/dist/cjs/surfaces.native.js.map +1 -1
  158. package/dist/cjs/views/Calendar.cjs +11 -8
  159. package/dist/cjs/views/Calendar.native.js +11 -8
  160. package/dist/cjs/views/Calendar.native.js.map +1 -1
  161. package/dist/cjs/views/Dashboard.cjs +116 -23
  162. package/dist/cjs/views/Dashboard.native.js +158 -52
  163. package/dist/cjs/views/Dashboard.native.js.map +1 -1
  164. package/dist/cjs/views/Gantt.cjs +377 -94
  165. package/dist/cjs/views/Gantt.native.js +446 -97
  166. package/dist/cjs/views/Gantt.native.js.map +1 -1
  167. package/dist/cjs/views/Kanban.cjs +2 -2
  168. package/dist/cjs/views/Kanban.native.js +2 -2
  169. package/dist/cjs/views/Kanban.native.js.map +1 -1
  170. package/dist/cjs/views/ReportBuilder.cjs +4 -4
  171. package/dist/cjs/views/ReportBuilder.native.js +4 -4
  172. package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
  173. package/dist/cjs/views/TreeView.cjs +103 -6
  174. package/dist/cjs/views/TreeView.native.js +115 -6
  175. package/dist/cjs/views/TreeView.native.js.map +1 -1
  176. package/dist/cjs/views/ganttMath.cjs +91 -2
  177. package/dist/cjs/views/ganttMath.native.js +113 -3
  178. package/dist/cjs/views/ganttMath.native.js.map +1 -1
  179. package/dist/cjs/views/index.cjs +20 -1
  180. package/dist/cjs/views/index.native.js +20 -1
  181. package/dist/cjs/views/index.native.js.map +1 -1
  182. package/dist/cjs/views/treeViewReveal.cjs +55 -0
  183. package/dist/cjs/views/treeViewReveal.native.js +80 -0
  184. package/dist/cjs/views/treeViewReveal.native.js.map +1 -0
  185. package/dist/esm/Accordion/index.mjs +3 -3
  186. package/dist/esm/Accordion/index.mjs.map +1 -1
  187. package/dist/esm/Accordion/index.native.js +4 -4
  188. package/dist/esm/Accordion/index.native.js.map +1 -1
  189. package/dist/esm/Button.mjs.map +1 -1
  190. package/dist/esm/Button.native.js.map +1 -1
  191. package/dist/esm/Card.mjs +8 -2
  192. package/dist/esm/Card.mjs.map +1 -1
  193. package/dist/esm/Card.native.js +12 -2
  194. package/dist/esm/Card.native.js.map +1 -1
  195. package/dist/esm/CardFooter.mjs +1 -0
  196. package/dist/esm/CardFooter.mjs.map +1 -1
  197. package/dist/esm/CardFooter.native.js +1 -0
  198. package/dist/esm/CardFooter.native.js.map +1 -1
  199. package/dist/esm/Chip/index.mjs +1 -1
  200. package/dist/esm/Chip/index.mjs.map +1 -1
  201. package/dist/esm/Chip/index.native.js +1 -1
  202. package/dist/esm/Chip/index.native.js.map +1 -1
  203. package/dist/esm/ContextMenu/index.mjs +3 -3
  204. package/dist/esm/ContextMenu/index.mjs.map +1 -1
  205. package/dist/esm/ContextMenu/index.native.js +3 -3
  206. package/dist/esm/ContextMenu/index.native.js.map +1 -1
  207. package/dist/esm/CopyField/index.mjs +7 -2
  208. package/dist/esm/CopyField/index.mjs.map +1 -1
  209. package/dist/esm/CopyField/index.native.js +7 -2
  210. package/dist/esm/CopyField/index.native.js.map +1 -1
  211. package/dist/esm/DropdownMenu/index.mjs +35 -5
  212. package/dist/esm/DropdownMenu/index.mjs.map +1 -1
  213. package/dist/esm/DropdownMenu/index.native.js +35 -5
  214. package/dist/esm/DropdownMenu/index.native.js.map +1 -1
  215. package/dist/esm/Meter/index.mjs +15 -7
  216. package/dist/esm/Meter/index.mjs.map +1 -1
  217. package/dist/esm/Meter/index.native.js +15 -7
  218. package/dist/esm/Meter/index.native.js.map +1 -1
  219. package/dist/esm/Meter/meter.mjs +1 -2
  220. package/dist/esm/Meter/meter.mjs.map +1 -1
  221. package/dist/esm/Meter/meter.native.js +1 -2
  222. package/dist/esm/Meter/meter.native.js.map +1 -1
  223. package/dist/esm/Pagination.mjs +2 -2
  224. package/dist/esm/Pagination.mjs.map +1 -1
  225. package/dist/esm/Pagination.native.js +2 -2
  226. package/dist/esm/Pagination.native.js.map +1 -1
  227. package/dist/esm/ProgressSteps/index.mjs +3 -3
  228. package/dist/esm/ProgressSteps/index.mjs.map +1 -1
  229. package/dist/esm/ProgressSteps/index.native.js +3 -3
  230. package/dist/esm/ProgressSteps/index.native.js.map +1 -1
  231. package/dist/esm/Quote/index.mjs +1 -2
  232. package/dist/esm/Quote/index.mjs.map +1 -1
  233. package/dist/esm/Quote/index.native.js +1 -2
  234. package/dist/esm/Quote/index.native.js.map +1 -1
  235. package/dist/esm/Tabs/index.mjs +8 -7
  236. package/dist/esm/Tabs/index.mjs.map +1 -1
  237. package/dist/esm/Tabs/index.native.js +9 -8
  238. package/dist/esm/Tabs/index.native.js.map +1 -1
  239. package/dist/esm/Toast/index.mjs +56 -8
  240. package/dist/esm/Toast/index.mjs.map +1 -1
  241. package/dist/esm/Toast/index.native.js +58 -8
  242. package/dist/esm/Toast/index.native.js.map +1 -1
  243. package/dist/esm/TreeSelect/index.mjs +46 -7
  244. package/dist/esm/TreeSelect/index.mjs.map +1 -1
  245. package/dist/esm/TreeSelect/index.native.js +58 -7
  246. package/dist/esm/TreeSelect/index.native.js.map +1 -1
  247. package/dist/esm/actions/DestructiveAction.mjs +8 -14
  248. package/dist/esm/actions/DestructiveAction.mjs.map +1 -1
  249. package/dist/esm/actions/DestructiveAction.native.js +8 -16
  250. package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
  251. package/dist/esm/charts/Axis.mjs +6 -1
  252. package/dist/esm/charts/Axis.mjs.map +1 -1
  253. package/dist/esm/charts/Axis.native.js +6 -1
  254. package/dist/esm/charts/Axis.native.js.map +1 -1
  255. package/dist/esm/charts/BarChart.mjs +72 -58
  256. package/dist/esm/charts/BarChart.mjs.map +1 -1
  257. package/dist/esm/charts/BarChart.native.js +82 -68
  258. package/dist/esm/charts/BarChart.native.js.map +1 -1
  259. package/dist/esm/charts/ChartDataView.mjs +185 -0
  260. package/dist/esm/charts/ChartDataView.mjs.map +1 -0
  261. package/dist/esm/charts/ChartDataView.native.js +194 -0
  262. package/dist/esm/charts/ChartDataView.native.js.map +1 -0
  263. package/dist/esm/charts/ChartSurface.mjs +5 -1
  264. package/dist/esm/charts/ChartSurface.mjs.map +1 -1
  265. package/dist/esm/charts/ChartSurface.native.js +5 -1
  266. package/dist/esm/charts/ChartSurface.native.js.map +1 -1
  267. package/dist/esm/charts/LineChart.mjs +82 -68
  268. package/dist/esm/charts/LineChart.mjs.map +1 -1
  269. package/dist/esm/charts/LineChart.native.js +95 -81
  270. package/dist/esm/charts/LineChart.native.js.map +1 -1
  271. package/dist/esm/charts/PieChart.mjs +100 -76
  272. package/dist/esm/charts/PieChart.mjs.map +1 -1
  273. package/dist/esm/charts/PieChart.native.js +111 -87
  274. package/dist/esm/charts/PieChart.native.js.map +1 -1
  275. package/dist/esm/charts/Sparkline.mjs +11 -2
  276. package/dist/esm/charts/Sparkline.mjs.map +1 -1
  277. package/dist/esm/charts/Sparkline.native.js +11 -2
  278. package/dist/esm/charts/Sparkline.native.js.map +1 -1
  279. package/dist/esm/charts/accessibility.mjs +4 -1
  280. package/dist/esm/charts/accessibility.mjs.map +1 -1
  281. package/dist/esm/charts/accessibility.native.js +7 -1
  282. package/dist/esm/charts/accessibility.native.js.map +1 -1
  283. package/dist/esm/charts/index.mjs +2 -1
  284. package/dist/esm/charts/index.mjs.map +1 -1
  285. package/dist/esm/charts/index.native.js +2 -1
  286. package/dist/esm/charts/index.native.js.map +1 -1
  287. package/dist/esm/charts/math.mjs +16 -1
  288. package/dist/esm/charts/math.mjs.map +1 -1
  289. package/dist/esm/charts/math.native.js +18 -1
  290. package/dist/esm/charts/math.native.js.map +1 -1
  291. package/dist/esm/charts/series.mjs +51 -9
  292. package/dist/esm/charts/series.mjs.map +1 -1
  293. package/dist/esm/charts/series.native.js +55 -13
  294. package/dist/esm/charts/series.native.js.map +1 -1
  295. package/dist/esm/charts/svg.mjs +40 -4
  296. package/dist/esm/charts/svg.mjs.map +1 -1
  297. package/dist/esm/charts/svg.native.js +40 -4
  298. package/dist/esm/charts/svg.native.js.map +1 -1
  299. package/dist/esm/code/CodeBlock/index.mjs +7 -2
  300. package/dist/esm/code/CodeBlock/index.mjs.map +1 -1
  301. package/dist/esm/code/CodeBlock/index.native.js +7 -2
  302. package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
  303. package/dist/esm/code/HighlightedCode/index.mjs +1 -1
  304. package/dist/esm/code/HighlightedCode/index.mjs.map +1 -1
  305. package/dist/esm/code/HighlightedCode/index.native.js +1 -1
  306. package/dist/esm/code/HighlightedCode/index.native.js.map +1 -1
  307. package/dist/esm/componentColors.mjs +6 -4
  308. package/dist/esm/componentColors.mjs.map +1 -1
  309. package/dist/esm/componentColors.native.js +6 -4
  310. package/dist/esm/componentColors.native.js.map +1 -1
  311. package/dist/esm/feedback/ConfirmDialog.mjs +8 -22
  312. package/dist/esm/feedback/ConfirmDialog.mjs.map +1 -1
  313. package/dist/esm/feedback/ConfirmDialog.native.js +8 -23
  314. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  315. package/dist/esm/feedback/NotifyHost.mjs +2 -1
  316. package/dist/esm/feedback/NotifyHost.mjs.map +1 -1
  317. package/dist/esm/feedback/NotifyHost.native.js +3 -2
  318. package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
  319. package/dist/esm/feedback/copy.mjs +35 -4
  320. package/dist/esm/feedback/copy.mjs.map +1 -1
  321. package/dist/esm/feedback/copy.native.js +37 -4
  322. package/dist/esm/feedback/copy.native.js.map +1 -1
  323. package/dist/esm/feedback/index.mjs +2 -2
  324. package/dist/esm/feedback/index.mjs.map +1 -1
  325. package/dist/esm/feedback/index.native.js +2 -2
  326. package/dist/esm/feedback/index.native.js.map +1 -1
  327. package/dist/esm/feedback/notify.mjs +1 -0
  328. package/dist/esm/feedback/notify.mjs.map +1 -1
  329. package/dist/esm/feedback/notify.native.js +1 -0
  330. package/dist/esm/feedback/notify.native.js.map +1 -1
  331. package/dist/esm/feedback/route.mjs +3 -0
  332. package/dist/esm/feedback/route.mjs.map +1 -1
  333. package/dist/esm/feedback/route.native.js +3 -0
  334. package/dist/esm/feedback/route.native.js.map +1 -1
  335. package/dist/esm/feedback/store.mjs +6 -1
  336. package/dist/esm/feedback/store.mjs.map +1 -1
  337. package/dist/esm/feedback/store.native.js +8 -1
  338. package/dist/esm/feedback/store.native.js.map +1 -1
  339. package/dist/esm/icons/lucide.mjs +2 -2
  340. package/dist/esm/icons/lucide.mjs.map +1 -1
  341. package/dist/esm/icons/lucide.native.js +2 -2
  342. package/dist/esm/icons/lucide.native.js.map +1 -1
  343. package/dist/esm/images/Image/ImageFrame.mjs +4 -2
  344. package/dist/esm/images/Image/ImageFrame.mjs.map +1 -1
  345. package/dist/esm/images/Image/ImageFrame.native.js +4 -2
  346. package/dist/esm/images/Image/ImageFrame.native.js.map +1 -1
  347. package/dist/esm/layouts/AsyncBoundary.mjs +1 -2
  348. package/dist/esm/layouts/AsyncBoundary.mjs.map +1 -1
  349. package/dist/esm/layouts/AsyncBoundary.native.js +1 -2
  350. package/dist/esm/layouts/AsyncBoundary.native.js.map +1 -1
  351. package/dist/esm/layouts/EmptyState.mjs +7 -3
  352. package/dist/esm/layouts/EmptyState.mjs.map +1 -1
  353. package/dist/esm/layouts/EmptyState.native.js +11 -7
  354. package/dist/esm/layouts/EmptyState.native.js.map +1 -1
  355. package/dist/esm/layouts/PaneScaffold.mjs +97 -42
  356. package/dist/esm/layouts/PaneScaffold.mjs.map +1 -1
  357. package/dist/esm/layouts/PaneScaffold.native.js +98 -42
  358. package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
  359. package/dist/esm/layouts/attachments.mjs +4 -4
  360. package/dist/esm/layouts/attachments.mjs.map +1 -1
  361. package/dist/esm/layouts/attachments.native.js +4 -4
  362. package/dist/esm/layouts/attachments.native.js.map +1 -1
  363. package/dist/esm/layouts/breadcrumbs.mjs +1 -2
  364. package/dist/esm/layouts/breadcrumbs.mjs.map +1 -1
  365. package/dist/esm/layouts/breadcrumbs.native.js +1 -2
  366. package/dist/esm/layouts/breadcrumbs.native.js.map +1 -1
  367. package/dist/esm/layouts/index.mjs +2 -1
  368. package/dist/esm/layouts/index.mjs.map +1 -1
  369. package/dist/esm/layouts/index.native.js +2 -1
  370. package/dist/esm/layouts/index.native.js.map +1 -1
  371. package/dist/esm/layouts/page.mjs +51 -10
  372. package/dist/esm/layouts/page.mjs.map +1 -1
  373. package/dist/esm/layouts/page.native.js +53 -10
  374. package/dist/esm/layouts/page.native.js.map +1 -1
  375. package/dist/esm/layouts/sidebar.mjs +2 -2
  376. package/dist/esm/layouts/sidebar.mjs.map +1 -1
  377. package/dist/esm/layouts/sidebar.native.js +2 -2
  378. package/dist/esm/layouts/sidebar.native.js.map +1 -1
  379. package/dist/esm/layouts/tags.mjs +6 -7
  380. package/dist/esm/layouts/tags.mjs.map +1 -1
  381. package/dist/esm/layouts/tags.native.js +6 -9
  382. package/dist/esm/layouts/tags.native.js.map +1 -1
  383. package/dist/esm/layouts/timeline.mjs +5 -5
  384. package/dist/esm/layouts/timeline.mjs.map +1 -1
  385. package/dist/esm/layouts/timeline.native.js +5 -5
  386. package/dist/esm/layouts/timeline.native.js.map +1 -1
  387. package/dist/esm/shared/useKeyboardInset.mjs +1 -19
  388. package/dist/esm/shared/useKeyboardInset.mjs.map +1 -1
  389. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  390. package/dist/esm/surfaces.mjs +1 -0
  391. package/dist/esm/surfaces.mjs.map +1 -1
  392. package/dist/esm/surfaces.native.js +1 -0
  393. package/dist/esm/surfaces.native.js.map +1 -1
  394. package/dist/esm/views/Calendar.mjs +11 -8
  395. package/dist/esm/views/Calendar.mjs.map +1 -1
  396. package/dist/esm/views/Calendar.native.js +11 -8
  397. package/dist/esm/views/Calendar.native.js.map +1 -1
  398. package/dist/esm/views/Dashboard.mjs +118 -25
  399. package/dist/esm/views/Dashboard.mjs.map +1 -1
  400. package/dist/esm/views/Dashboard.native.js +160 -54
  401. package/dist/esm/views/Dashboard.native.js.map +1 -1
  402. package/dist/esm/views/Gantt.mjs +379 -96
  403. package/dist/esm/views/Gantt.mjs.map +1 -1
  404. package/dist/esm/views/Gantt.native.js +448 -99
  405. package/dist/esm/views/Gantt.native.js.map +1 -1
  406. package/dist/esm/views/Kanban.mjs +2 -2
  407. package/dist/esm/views/Kanban.mjs.map +1 -1
  408. package/dist/esm/views/Kanban.native.js +2 -2
  409. package/dist/esm/views/Kanban.native.js.map +1 -1
  410. package/dist/esm/views/ReportBuilder.mjs +4 -4
  411. package/dist/esm/views/ReportBuilder.mjs.map +1 -1
  412. package/dist/esm/views/ReportBuilder.native.js +4 -4
  413. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  414. package/dist/esm/views/TreeView.mjs +104 -7
  415. package/dist/esm/views/TreeView.mjs.map +1 -1
  416. package/dist/esm/views/TreeView.native.js +116 -7
  417. package/dist/esm/views/TreeView.native.js.map +1 -1
  418. package/dist/esm/views/ganttMath.mjs +84 -3
  419. package/dist/esm/views/ganttMath.mjs.map +1 -1
  420. package/dist/esm/views/ganttMath.native.js +106 -4
  421. package/dist/esm/views/ganttMath.native.js.map +1 -1
  422. package/dist/esm/views/index.mjs +2 -2
  423. package/dist/esm/views/index.mjs.map +1 -1
  424. package/dist/esm/views/index.native.js +2 -2
  425. package/dist/esm/views/index.native.js.map +1 -1
  426. package/dist/esm/views/treeViewReveal.mjs +29 -0
  427. package/dist/esm/views/treeViewReveal.mjs.map +1 -0
  428. package/dist/esm/views/treeViewReveal.native.js +51 -0
  429. package/dist/esm/views/treeViewReveal.native.js.map +1 -0
  430. package/dist/jsx/Accordion/index.mjs +3 -3
  431. package/dist/jsx/Accordion/index.mjs.map +1 -1
  432. package/dist/jsx/Accordion/index.native.js +4 -4
  433. package/dist/jsx/Accordion/index.native.js.map +1 -1
  434. package/dist/jsx/Button.mjs.map +1 -1
  435. package/dist/jsx/Button.native.js.map +1 -1
  436. package/dist/jsx/Card.mjs +8 -2
  437. package/dist/jsx/Card.mjs.map +1 -1
  438. package/dist/jsx/Card.native.js +11 -1
  439. package/dist/jsx/Card.native.js.map +1 -1
  440. package/dist/jsx/CardFooter.mjs +1 -0
  441. package/dist/jsx/CardFooter.mjs.map +1 -1
  442. package/dist/jsx/CardFooter.native.js +1 -0
  443. package/dist/jsx/CardFooter.native.js.map +1 -1
  444. package/dist/jsx/Chip/index.mjs +1 -1
  445. package/dist/jsx/Chip/index.mjs.map +1 -1
  446. package/dist/jsx/Chip/index.native.js +1 -1
  447. package/dist/jsx/Chip/index.native.js.map +1 -1
  448. package/dist/jsx/ContextMenu/index.mjs +3 -3
  449. package/dist/jsx/ContextMenu/index.mjs.map +1 -1
  450. package/dist/jsx/ContextMenu/index.native.js +3 -3
  451. package/dist/jsx/ContextMenu/index.native.js.map +1 -1
  452. package/dist/jsx/CopyField/index.mjs +7 -2
  453. package/dist/jsx/CopyField/index.mjs.map +1 -1
  454. package/dist/jsx/CopyField/index.native.js +6 -1
  455. package/dist/jsx/CopyField/index.native.js.map +1 -1
  456. package/dist/jsx/DropdownMenu/index.mjs +35 -5
  457. package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
  458. package/dist/jsx/DropdownMenu/index.native.js +34 -4
  459. package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
  460. package/dist/jsx/Meter/index.mjs +15 -7
  461. package/dist/jsx/Meter/index.mjs.map +1 -1
  462. package/dist/jsx/Meter/index.native.js +15 -7
  463. package/dist/jsx/Meter/index.native.js.map +1 -1
  464. package/dist/jsx/Meter/meter.mjs +1 -2
  465. package/dist/jsx/Meter/meter.mjs.map +1 -1
  466. package/dist/jsx/Meter/meter.native.js +1 -2
  467. package/dist/jsx/Meter/meter.native.js.map +1 -1
  468. package/dist/jsx/Pagination.mjs +2 -2
  469. package/dist/jsx/Pagination.mjs.map +1 -1
  470. package/dist/jsx/Pagination.native.js +2 -2
  471. package/dist/jsx/Pagination.native.js.map +1 -1
  472. package/dist/jsx/ProgressSteps/index.mjs +3 -3
  473. package/dist/jsx/ProgressSteps/index.mjs.map +1 -1
  474. package/dist/jsx/ProgressSteps/index.native.js +3 -3
  475. package/dist/jsx/ProgressSteps/index.native.js.map +1 -1
  476. package/dist/jsx/Quote/index.mjs +1 -2
  477. package/dist/jsx/Quote/index.mjs.map +1 -1
  478. package/dist/jsx/Quote/index.native.js +1 -2
  479. package/dist/jsx/Quote/index.native.js.map +1 -1
  480. package/dist/jsx/Tabs/index.mjs +8 -7
  481. package/dist/jsx/Tabs/index.mjs.map +1 -1
  482. package/dist/jsx/Tabs/index.native.js +9 -8
  483. package/dist/jsx/Tabs/index.native.js.map +1 -1
  484. package/dist/jsx/Toast/index.mjs +56 -8
  485. package/dist/jsx/Toast/index.mjs.map +1 -1
  486. package/dist/jsx/Toast/index.native.js +59 -7
  487. package/dist/jsx/Toast/index.native.js.map +1 -1
  488. package/dist/jsx/TreeSelect/index.mjs +46 -7
  489. package/dist/jsx/TreeSelect/index.mjs.map +1 -1
  490. package/dist/jsx/TreeSelect/index.native.js +58 -7
  491. package/dist/jsx/TreeSelect/index.native.js.map +1 -1
  492. package/dist/jsx/actions/DestructiveAction.mjs +8 -14
  493. package/dist/jsx/actions/DestructiveAction.mjs.map +1 -1
  494. package/dist/jsx/actions/DestructiveAction.native.js +7 -15
  495. package/dist/jsx/actions/DestructiveAction.native.js.map +1 -1
  496. package/dist/jsx/charts/Axis.mjs +6 -1
  497. package/dist/jsx/charts/Axis.mjs.map +1 -1
  498. package/dist/jsx/charts/Axis.native.js +5 -0
  499. package/dist/jsx/charts/Axis.native.js.map +1 -1
  500. package/dist/jsx/charts/BarChart.mjs +72 -58
  501. package/dist/jsx/charts/BarChart.mjs.map +1 -1
  502. package/dist/jsx/charts/BarChart.native.js +81 -67
  503. package/dist/jsx/charts/BarChart.native.js.map +1 -1
  504. package/dist/jsx/charts/ChartDataView.mjs +185 -0
  505. package/dist/jsx/charts/ChartDataView.mjs.map +1 -0
  506. package/dist/jsx/charts/ChartDataView.native.js +224 -0
  507. package/dist/jsx/charts/ChartDataView.native.js.map +1 -0
  508. package/dist/jsx/charts/ChartSurface.mjs +5 -1
  509. package/dist/jsx/charts/ChartSurface.mjs.map +1 -1
  510. package/dist/jsx/charts/ChartSurface.native.js +5 -1
  511. package/dist/jsx/charts/ChartSurface.native.js.map +1 -1
  512. package/dist/jsx/charts/LineChart.mjs +82 -68
  513. package/dist/jsx/charts/LineChart.mjs.map +1 -1
  514. package/dist/jsx/charts/LineChart.native.js +94 -80
  515. package/dist/jsx/charts/LineChart.native.js.map +1 -1
  516. package/dist/jsx/charts/PieChart.mjs +100 -76
  517. package/dist/jsx/charts/PieChart.mjs.map +1 -1
  518. package/dist/jsx/charts/PieChart.native.js +109 -85
  519. package/dist/jsx/charts/PieChart.native.js.map +1 -1
  520. package/dist/jsx/charts/Sparkline.mjs +11 -2
  521. package/dist/jsx/charts/Sparkline.mjs.map +1 -1
  522. package/dist/jsx/charts/Sparkline.native.js +10 -1
  523. package/dist/jsx/charts/Sparkline.native.js.map +1 -1
  524. package/dist/jsx/charts/accessibility.mjs +4 -1
  525. package/dist/jsx/charts/accessibility.mjs.map +1 -1
  526. package/dist/jsx/charts/accessibility.native.js +7 -0
  527. package/dist/jsx/charts/accessibility.native.js.map +1 -1
  528. package/dist/jsx/charts/index.mjs +2 -1
  529. package/dist/jsx/charts/index.mjs.map +1 -1
  530. package/dist/jsx/charts/index.native.js +2 -0
  531. package/dist/jsx/charts/index.native.js.map +1 -1
  532. package/dist/jsx/charts/math.mjs +16 -1
  533. package/dist/jsx/charts/math.mjs.map +1 -1
  534. package/dist/jsx/charts/math.native.js +18 -0
  535. package/dist/jsx/charts/math.native.js.map +1 -1
  536. package/dist/jsx/charts/series.mjs +51 -9
  537. package/dist/jsx/charts/series.mjs.map +1 -1
  538. package/dist/jsx/charts/series.native.js +53 -11
  539. package/dist/jsx/charts/series.native.js.map +1 -1
  540. package/dist/jsx/charts/svg.mjs +40 -4
  541. package/dist/jsx/charts/svg.mjs.map +1 -1
  542. package/dist/jsx/charts/svg.native.js +46 -3
  543. package/dist/jsx/charts/svg.native.js.map +1 -1
  544. package/dist/jsx/code/CodeBlock/index.mjs +7 -2
  545. package/dist/jsx/code/CodeBlock/index.mjs.map +1 -1
  546. package/dist/jsx/code/CodeBlock/index.native.js +6 -1
  547. package/dist/jsx/code/CodeBlock/index.native.js.map +1 -1
  548. package/dist/jsx/code/HighlightedCode/index.mjs +1 -1
  549. package/dist/jsx/code/HighlightedCode/index.mjs.map +1 -1
  550. package/dist/jsx/code/HighlightedCode/index.native.js +1 -1
  551. package/dist/jsx/code/HighlightedCode/index.native.js.map +1 -1
  552. package/dist/jsx/componentColors.mjs +6 -4
  553. package/dist/jsx/componentColors.mjs.map +1 -1
  554. package/dist/jsx/componentColors.native.js +6 -4
  555. package/dist/jsx/componentColors.native.js.map +1 -1
  556. package/dist/jsx/feedback/ConfirmDialog.mjs +8 -22
  557. package/dist/jsx/feedback/ConfirmDialog.mjs.map +1 -1
  558. package/dist/jsx/feedback/ConfirmDialog.native.js +7 -22
  559. package/dist/jsx/feedback/ConfirmDialog.native.js.map +1 -1
  560. package/dist/jsx/feedback/NotifyHost.mjs +2 -1
  561. package/dist/jsx/feedback/NotifyHost.mjs.map +1 -1
  562. package/dist/jsx/feedback/NotifyHost.native.js +3 -2
  563. package/dist/jsx/feedback/NotifyHost.native.js.map +1 -1
  564. package/dist/jsx/feedback/copy.mjs +35 -4
  565. package/dist/jsx/feedback/copy.mjs.map +1 -1
  566. package/dist/jsx/feedback/copy.native.js +38 -4
  567. package/dist/jsx/feedback/copy.native.js.map +1 -1
  568. package/dist/jsx/feedback/index.mjs +2 -2
  569. package/dist/jsx/feedback/index.mjs.map +1 -1
  570. package/dist/jsx/feedback/index.native.js +1 -0
  571. package/dist/jsx/feedback/index.native.js.map +1 -1
  572. package/dist/jsx/feedback/notify.mjs +1 -0
  573. package/dist/jsx/feedback/notify.mjs.map +1 -1
  574. package/dist/jsx/feedback/notify.native.js +1 -0
  575. package/dist/jsx/feedback/notify.native.js.map +1 -1
  576. package/dist/jsx/feedback/route.mjs +3 -0
  577. package/dist/jsx/feedback/route.mjs.map +1 -1
  578. package/dist/jsx/feedback/route.native.js +3 -0
  579. package/dist/jsx/feedback/route.native.js.map +1 -1
  580. package/dist/jsx/feedback/store.mjs +6 -1
  581. package/dist/jsx/feedback/store.mjs.map +1 -1
  582. package/dist/jsx/feedback/store.native.js +8 -0
  583. package/dist/jsx/feedback/store.native.js.map +1 -1
  584. package/dist/jsx/icons/lucide.mjs +2 -2
  585. package/dist/jsx/icons/lucide.mjs.map +1 -1
  586. package/dist/jsx/icons/lucide.native.js +2 -1
  587. package/dist/jsx/images/Image/ImageFrame.mjs +4 -2
  588. package/dist/jsx/images/Image/ImageFrame.mjs.map +1 -1
  589. package/dist/jsx/images/Image/ImageFrame.native.js +4 -2
  590. package/dist/jsx/images/Image/ImageFrame.native.js.map +1 -1
  591. package/dist/jsx/layouts/AsyncBoundary.mjs +1 -2
  592. package/dist/jsx/layouts/AsyncBoundary.mjs.map +1 -1
  593. package/dist/jsx/layouts/AsyncBoundary.native.js +1 -2
  594. package/dist/jsx/layouts/AsyncBoundary.native.js.map +1 -1
  595. package/dist/jsx/layouts/EmptyState.mjs +7 -3
  596. package/dist/jsx/layouts/EmptyState.mjs.map +1 -1
  597. package/dist/jsx/layouts/EmptyState.native.js +10 -6
  598. package/dist/jsx/layouts/EmptyState.native.js.map +1 -1
  599. package/dist/jsx/layouts/PaneScaffold.mjs +97 -42
  600. package/dist/jsx/layouts/PaneScaffold.mjs.map +1 -1
  601. package/dist/jsx/layouts/PaneScaffold.native.js +97 -41
  602. package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
  603. package/dist/jsx/layouts/attachments.mjs +4 -4
  604. package/dist/jsx/layouts/attachments.mjs.map +1 -1
  605. package/dist/jsx/layouts/attachments.native.js +4 -4
  606. package/dist/jsx/layouts/attachments.native.js.map +1 -1
  607. package/dist/jsx/layouts/breadcrumbs.mjs +1 -2
  608. package/dist/jsx/layouts/breadcrumbs.mjs.map +1 -1
  609. package/dist/jsx/layouts/breadcrumbs.native.js +1 -2
  610. package/dist/jsx/layouts/breadcrumbs.native.js.map +1 -1
  611. package/dist/jsx/layouts/index.mjs +2 -1
  612. package/dist/jsx/layouts/index.mjs.map +1 -1
  613. package/dist/jsx/layouts/index.native.js +2 -0
  614. package/dist/jsx/layouts/index.native.js.map +1 -1
  615. package/dist/jsx/layouts/page.mjs +51 -10
  616. package/dist/jsx/layouts/page.mjs.map +1 -1
  617. package/dist/jsx/layouts/page.native.js +52 -9
  618. package/dist/jsx/layouts/page.native.js.map +1 -1
  619. package/dist/jsx/layouts/sidebar.mjs +2 -2
  620. package/dist/jsx/layouts/sidebar.mjs.map +1 -1
  621. package/dist/jsx/layouts/sidebar.native.js +2 -2
  622. package/dist/jsx/layouts/sidebar.native.js.map +1 -1
  623. package/dist/jsx/layouts/tags.mjs +6 -7
  624. package/dist/jsx/layouts/tags.mjs.map +1 -1
  625. package/dist/jsx/layouts/tags.native.js +6 -9
  626. package/dist/jsx/layouts/tags.native.js.map +1 -1
  627. package/dist/jsx/layouts/timeline.mjs +5 -5
  628. package/dist/jsx/layouts/timeline.mjs.map +1 -1
  629. package/dist/jsx/layouts/timeline.native.js +5 -5
  630. package/dist/jsx/layouts/timeline.native.js.map +1 -1
  631. package/dist/jsx/shared/useKeyboardInset.mjs +1 -19
  632. package/dist/jsx/shared/useKeyboardInset.mjs.map +1 -1
  633. package/dist/jsx/shared/useKeyboardInset.native.js +3 -3
  634. package/dist/jsx/shared/useKeyboardInset.native.js.map +1 -1
  635. package/dist/jsx/surfaces.mjs +1 -0
  636. package/dist/jsx/surfaces.mjs.map +1 -1
  637. package/dist/jsx/surfaces.native.js +1 -0
  638. package/dist/jsx/surfaces.native.js.map +1 -1
  639. package/dist/jsx/views/Calendar.mjs +11 -8
  640. package/dist/jsx/views/Calendar.mjs.map +1 -1
  641. package/dist/jsx/views/Calendar.native.js +11 -8
  642. package/dist/jsx/views/Calendar.native.js.map +1 -1
  643. package/dist/jsx/views/Dashboard.mjs +118 -25
  644. package/dist/jsx/views/Dashboard.mjs.map +1 -1
  645. package/dist/jsx/views/Dashboard.native.js +158 -52
  646. package/dist/jsx/views/Dashboard.native.js.map +1 -1
  647. package/dist/jsx/views/Gantt.mjs +379 -96
  648. package/dist/jsx/views/Gantt.mjs.map +1 -1
  649. package/dist/jsx/views/Gantt.native.js +446 -97
  650. package/dist/jsx/views/Gantt.native.js.map +1 -1
  651. package/dist/jsx/views/Kanban.mjs +2 -2
  652. package/dist/jsx/views/Kanban.mjs.map +1 -1
  653. package/dist/jsx/views/Kanban.native.js +2 -2
  654. package/dist/jsx/views/Kanban.native.js.map +1 -1
  655. package/dist/jsx/views/ReportBuilder.mjs +4 -4
  656. package/dist/jsx/views/ReportBuilder.mjs.map +1 -1
  657. package/dist/jsx/views/ReportBuilder.native.js +4 -4
  658. package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
  659. package/dist/jsx/views/TreeView.mjs +104 -7
  660. package/dist/jsx/views/TreeView.mjs.map +1 -1
  661. package/dist/jsx/views/TreeView.native.js +115 -6
  662. package/dist/jsx/views/TreeView.native.js.map +1 -1
  663. package/dist/jsx/views/ganttMath.mjs +84 -3
  664. package/dist/jsx/views/ganttMath.mjs.map +1 -1
  665. package/dist/jsx/views/ganttMath.native.js +113 -3
  666. package/dist/jsx/views/ganttMath.native.js.map +1 -1
  667. package/dist/jsx/views/index.mjs +2 -2
  668. package/dist/jsx/views/index.mjs.map +1 -1
  669. package/dist/jsx/views/index.native.js +20 -1
  670. package/dist/jsx/views/index.native.js.map +1 -1
  671. package/dist/jsx/views/treeViewReveal.mjs +29 -0
  672. package/dist/jsx/views/treeViewReveal.mjs.map +1 -0
  673. package/dist/jsx/views/treeViewReveal.native.js +80 -0
  674. package/dist/jsx/views/treeViewReveal.native.js.map +1 -0
  675. package/package.json +11 -9
  676. package/src/Accordion/index.tsx +4 -6
  677. package/src/Button.tsx +10 -2
  678. package/src/Card.spec.tsx +76 -3
  679. package/src/Card.stories.tsx +1 -1
  680. package/src/Card.tsx +13 -1
  681. package/src/CardFooter.stories.tsx +3 -7
  682. package/src/CardFooter.tsx +3 -1
  683. package/src/CardHeader.stories.tsx +1 -3
  684. package/src/Chip/index.tsx +1 -1
  685. package/src/Collapsible.stories.tsx +2 -2
  686. package/src/ContextMenu/index.tsx +3 -3
  687. package/src/CopyField/CopyField.spec.tsx +66 -1
  688. package/src/CopyField/index.tsx +4 -3
  689. package/src/DropdownMenu/DropdownMenu.spec.tsx +112 -1
  690. package/src/DropdownMenu/DropdownMenu.stories.tsx +1 -3
  691. package/src/DropdownMenu/index.tsx +70 -9
  692. package/src/LinearGradient.stories.tsx +2 -2
  693. package/src/Meter/Meter.spec.tsx +71 -6
  694. package/src/Meter/Meter.stories.tsx +38 -0
  695. package/src/Meter/index.tsx +12 -6
  696. package/src/Meter/meter.ts +6 -1
  697. package/src/Pagination.tsx +2 -2
  698. package/src/Panel.stories.tsx +1 -1
  699. package/src/ProgressSteps/index.tsx +3 -3
  700. package/src/Quote/index.tsx +1 -3
  701. package/src/SortableList/SortableList.spec.tsx +3 -3
  702. package/src/Tabs/Tabs.spec.tsx +43 -3
  703. package/src/Tabs/Tabs.stories.tsx +10 -1
  704. package/src/Tabs/index.tsx +21 -15
  705. package/src/Toast/Toast.spec.tsx +176 -49
  706. package/src/Toast/index.tsx +73 -6
  707. package/src/TreeSelect/index.tsx +61 -1
  708. package/src/Unspaced.stories.tsx +2 -2
  709. package/src/VisuallyHidden.stories.tsx +2 -2
  710. package/src/actions/DestructiveAction.spec.tsx +19 -3
  711. package/src/actions/DestructiveAction.tsx +9 -14
  712. package/src/charts/Axis.tsx +6 -1
  713. package/src/charts/BarChart.tsx +82 -67
  714. package/src/charts/ChartDataView.spec.tsx +104 -0
  715. package/src/charts/ChartDataView.tsx +158 -0
  716. package/src/charts/ChartSurface.tsx +7 -2
  717. package/src/charts/Charts.stories.tsx +213 -9
  718. package/src/charts/LineChart.tsx +90 -75
  719. package/src/charts/PieChart.knobs.spec.tsx +25 -0
  720. package/src/charts/PieChart.tsx +51 -10
  721. package/src/charts/Sparkline.tsx +25 -3
  722. package/src/charts/accessibility.ts +8 -0
  723. package/src/charts/charts.spec.tsx +77 -3
  724. package/src/charts/index.ts +2 -0
  725. package/src/charts/math.spec.ts +19 -0
  726. package/src/charts/math.ts +36 -0
  727. package/src/charts/series.tsx +101 -21
  728. package/src/charts/svg.spec.ts +28 -0
  729. package/src/charts/svg.ts +56 -2
  730. package/src/code/CodeBlock/CodeBlock.copy.spec.tsx +23 -0
  731. package/src/code/CodeBlock/index.tsx +4 -3
  732. package/src/code/HighlightedCode/index.tsx +1 -1
  733. package/src/componentColors.ts +6 -4
  734. package/src/feedback/ConfirmDialog.nativeFocus.spec.tsx +52 -0
  735. package/src/feedback/ConfirmDialog.spec.tsx +20 -0
  736. package/src/feedback/ConfirmDialog.tsx +9 -15
  737. package/src/feedback/NotifyHost.tsx +11 -2
  738. package/src/feedback/copy.ts +36 -4
  739. package/src/feedback/index.ts +1 -0
  740. package/src/feedback/notify.spec.ts +15 -1
  741. package/src/feedback/notify.ts +1 -0
  742. package/src/feedback/route.ts +4 -0
  743. package/src/feedback/store.ts +7 -0
  744. package/src/icons/lucide.ts +1 -1
  745. package/src/images/Image/ImageFrame.tsx +2 -2
  746. package/src/images/SvgUri/index.native.ts +11 -3
  747. package/src/layouts/AsyncBoundary.tsx +1 -2
  748. package/src/layouts/EmptyState.spec.tsx +58 -1
  749. package/src/layouts/EmptyState.stories.tsx +2 -2
  750. package/src/layouts/EmptyState.tsx +11 -7
  751. package/src/layouts/KeyboardAvoidingWrapper/KeyboardAvoidingWrapper.stories.tsx +3 -3
  752. package/src/layouts/Page.weight.spec.tsx +75 -0
  753. package/src/layouts/PageHeader.stories.tsx +4 -4
  754. package/src/layouts/PageTemplates.stories.tsx +2 -2
  755. package/src/layouts/PaneScaffold.spec.tsx +144 -4
  756. package/src/layouts/PaneScaffold.stories.tsx +61 -10
  757. package/src/layouts/PaneScaffold.tsx +156 -58
  758. package/src/layouts/SafeAreaWrapper/SafeAreaWrapper.stories.tsx +3 -3
  759. package/src/layouts/ScreenToolbar.stories.tsx +6 -23
  760. package/src/layouts/attachments.tsx +4 -4
  761. package/src/layouts/breadcrumbs.tsx +1 -2
  762. package/src/layouts/index.tsx +11 -0
  763. package/src/layouts/layouts.spec.tsx +51 -0
  764. package/src/layouts/page.designLaw.spec.tsx +25 -0
  765. package/src/layouts/page.tsx +48 -11
  766. package/src/layouts/sidebar.tsx +2 -2
  767. package/src/layouts/tags-trigger.spec.tsx +32 -0
  768. package/src/layouts/tags.tsx +6 -9
  769. package/src/layouts/timeline.tsx +5 -5
  770. package/src/shared/useKeyboardInset.native.ts +43 -0
  771. package/src/shared/useKeyboardInset.ts +2 -41
  772. package/src/surfaces.spec.tsx +97 -3
  773. package/src/surfaces.tsx +4 -2
  774. package/src/tamagui.spec.ts +63 -0
  775. package/src/textAccentSecondary.spec.tsx +187 -0
  776. package/src/views/Calendar.tsx +9 -8
  777. package/src/views/Dashboard.stories.tsx +38 -1
  778. package/src/views/Dashboard.tsx +132 -29
  779. package/src/views/Gantt.scroll.spec.tsx +120 -0
  780. package/src/views/Gantt.spec.tsx +376 -0
  781. package/src/views/Gantt.stories.tsx +75 -2
  782. package/src/views/Gantt.tsx +567 -99
  783. package/src/views/Kanban.native.tsx +2 -2
  784. package/src/views/Kanban.spec.tsx +11 -0
  785. package/src/views/Kanban.tsx +2 -2
  786. package/src/views/ReportBuilder.tsx +4 -4
  787. package/src/views/TreeView.reveal.spec.tsx +167 -0
  788. package/src/views/TreeView.reveal.stories.tsx +115 -0
  789. package/src/views/TreeView.scroll.spec.tsx +196 -0
  790. package/src/views/TreeView.spec.tsx +1 -1
  791. package/src/views/TreeView.tsx +159 -16
  792. package/src/views/ganttMath.ts +142 -4
  793. package/src/views/index.ts +44 -1
  794. package/src/views/treeViewReveal.spec.ts +83 -0
  795. package/src/views/treeViewReveal.ts +45 -0
  796. package/src/views/views.spec.tsx +52 -12
  797. package/types/Accordion/index.d.ts.map +1 -1
  798. package/types/Button.d.ts +12 -2
  799. package/types/Button.d.ts.map +1 -1
  800. package/types/Card.d.ts.map +1 -1
  801. package/types/CardFooter.d.ts +2 -1
  802. package/types/CardFooter.d.ts.map +1 -1
  803. package/types/CopyField/index.d.ts.map +1 -1
  804. package/types/DropdownMenu/index.d.ts +22 -0
  805. package/types/DropdownMenu/index.d.ts.map +1 -1
  806. package/types/Meter/index.d.ts.map +1 -1
  807. package/types/Meter/meter.d.ts +5 -1
  808. package/types/Meter/meter.d.ts.map +1 -1
  809. package/types/Quote/index.d.ts.map +1 -1
  810. package/types/Tabs/index.d.ts +1 -1
  811. package/types/Tabs/index.d.ts.map +1 -1
  812. package/types/Toast/index.d.ts +16 -0
  813. package/types/Toast/index.d.ts.map +1 -1
  814. package/types/TreeSelect/index.d.ts +9 -1
  815. package/types/TreeSelect/index.d.ts.map +1 -1
  816. package/types/actions/DestructiveAction.d.ts.map +1 -1
  817. package/types/charts/Axis.d.ts.map +1 -1
  818. package/types/charts/BarChart.d.ts.map +1 -1
  819. package/types/charts/ChartDataView.d.ts +22 -0
  820. package/types/charts/ChartDataView.d.ts.map +1 -0
  821. package/types/charts/ChartSurface.d.ts +4 -1
  822. package/types/charts/ChartSurface.d.ts.map +1 -1
  823. package/types/charts/LineChart.d.ts.map +1 -1
  824. package/types/charts/PieChart.d.ts +1 -1
  825. package/types/charts/PieChart.d.ts.map +1 -1
  826. package/types/charts/Sparkline.d.ts +3 -1
  827. package/types/charts/Sparkline.d.ts.map +1 -1
  828. package/types/charts/accessibility.d.ts +3 -0
  829. package/types/charts/accessibility.d.ts.map +1 -1
  830. package/types/charts/index.d.ts +1 -0
  831. package/types/charts/index.d.ts.map +1 -1
  832. package/types/charts/math.d.ts +12 -0
  833. package/types/charts/math.d.ts.map +1 -1
  834. package/types/charts/series.d.ts +1 -1
  835. package/types/charts/series.d.ts.map +1 -1
  836. package/types/charts/svg.d.ts +18 -2
  837. package/types/charts/svg.d.ts.map +1 -1
  838. package/types/code/CodeBlock/index.d.ts.map +1 -1
  839. package/types/componentColors.d.ts +1 -4
  840. package/types/componentColors.d.ts.map +1 -1
  841. package/types/feedback/ConfirmDialog.d.ts.map +1 -1
  842. package/types/feedback/NotifyHost.d.ts +3 -1
  843. package/types/feedback/NotifyHost.d.ts.map +1 -1
  844. package/types/feedback/copy.d.ts +12 -2
  845. package/types/feedback/copy.d.ts.map +1 -1
  846. package/types/feedback/index.d.ts +1 -1
  847. package/types/feedback/index.d.ts.map +1 -1
  848. package/types/feedback/notify.d.ts.map +1 -1
  849. package/types/feedback/route.d.ts +3 -0
  850. package/types/feedback/route.d.ts.map +1 -1
  851. package/types/feedback/store.d.ts +2 -0
  852. package/types/feedback/store.d.ts.map +1 -1
  853. package/types/icons/lucide.d.ts +1 -1
  854. package/types/icons/lucide.d.ts.map +1 -1
  855. package/types/images/Image/ImageFrame.d.ts.map +1 -1
  856. package/types/images/SvgUri/index.native.d.ts +4 -3
  857. package/types/images/SvgUri/index.native.d.ts.map +1 -1
  858. package/types/layouts/AsyncBoundary.d.ts.map +1 -1
  859. package/types/layouts/EmptyState.d.ts.map +1 -1
  860. package/types/layouts/PaneScaffold.d.ts +27 -5
  861. package/types/layouts/PaneScaffold.d.ts.map +1 -1
  862. package/types/layouts/breadcrumbs.d.ts.map +1 -1
  863. package/types/layouts/index.d.ts +1 -0
  864. package/types/layouts/index.d.ts.map +1 -1
  865. package/types/layouts/page.d.ts +10 -5
  866. package/types/layouts/page.d.ts.map +1 -1
  867. package/types/layouts/tags.d.ts.map +1 -1
  868. package/types/shared/useKeyboardInset.d.ts +1 -14
  869. package/types/shared/useKeyboardInset.d.ts.map +1 -1
  870. package/types/shared/useKeyboardInset.native.d.ts +16 -0
  871. package/types/shared/useKeyboardInset.native.d.ts.map +1 -0
  872. package/types/surfaces.d.ts.map +1 -1
  873. package/types/views/Calendar.d.ts.map +1 -1
  874. package/types/views/Dashboard.d.ts +7 -3
  875. package/types/views/Dashboard.d.ts.map +1 -1
  876. package/types/views/Gantt.d.ts +132 -13
  877. package/types/views/Gantt.d.ts.map +1 -1
  878. package/types/views/TreeView.d.ts +10 -1
  879. package/types/views/TreeView.d.ts.map +1 -1
  880. package/types/views/ganttMath.d.ts +73 -0
  881. package/types/views/ganttMath.d.ts.map +1 -1
  882. package/types/views/index.d.ts +2 -2
  883. package/types/views/index.d.ts.map +1 -1
  884. package/types/views/treeViewReveal.d.ts +11 -0
  885. package/types/views/treeViewReveal.d.ts.map +1 -0
@@ -3,6 +3,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
3
  import { renderWithProviders } from "@multiplatform.one/test-utils";
4
4
  import { getToasts, resetToasts } from "../Toast/store";
5
5
  import { getFeedback, resetFeedback } from "../feedback/store";
6
+ import { NotifyHost } from "../feedback";
6
7
  import { CopyField } from "./index";
7
8
 
8
9
  function copyOf(container: HTMLElement) {
@@ -35,13 +36,16 @@ describe("CopyField", () => {
35
36
  const copy = copyOf(result.container);
36
37
  if (!copy) throw new Error("copy not found");
37
38
  expect(copy.getAttribute("tabindex")).toBe("0");
39
+ expect(copy.getAttribute("aria-label")).toBe("Copy to clipboard");
38
40
  expect(copy.className).toMatch(/mp-chip-dismiss/);
39
41
  expect(copy.querySelector(".mp-chip-dismiss-ring")).not.toBeNull();
40
42
  });
41
43
 
42
44
  it("success routes through notify() as a one-line past-tense toast", async () => {
43
45
  const result = renderWithProviders(
44
- <CopyField label="API token" value="mpo_live_4f2a9c81e0b3" />,
46
+ <NotifyHost>
47
+ <CopyField label="API token" value="mpo_live_4f2a9c81e0b3" />
48
+ </NotifyHost>,
45
49
  );
46
50
  const copy = copyOf(result.container);
47
51
  if (!copy) throw new Error("copy not found");
@@ -54,6 +58,11 @@ describe("CopyField", () => {
54
58
  expect(toast?.title).not.toMatch(/success/i);
55
59
  expect(getFeedback()).toHaveLength(0);
56
60
  expect(copyOf(result.container)?.querySelector(".mp-chip-dismiss-ring")).not.toBeNull();
61
+ expect(await result.findByText("Copied to clipboard.")).toBeInTheDocument();
62
+ await vi.waitFor(() => {
63
+ const live = document.querySelector("[aria-live]:not([aria-live='off'])");
64
+ expect(live?.textContent ?? "").toMatch(/Copied to clipboard/);
65
+ });
57
66
  });
58
67
 
59
68
  it("failure is a field-scoped inline alert and never a toast", async () => {
@@ -72,5 +81,61 @@ describe("CopyField", () => {
72
81
  expect(alert?.scope).toBe("field");
73
82
  expect(alert?.body).toBe("Copy failed.");
74
83
  expect(alert?.body).not.toMatch(/success/i);
84
+ expect(await result.findByText("Copy failed.")).toBeInTheDocument();
85
+ });
86
+
87
+ it("shows a failed copy only beside its own field and clears it after success", async () => {
88
+ const result = renderWithProviders(
89
+ <>
90
+ <div data-testid="first-copy">
91
+ <CopyField label="First token" value="first" />
92
+ </div>
93
+ <div data-testid="second-copy">
94
+ <CopyField label="Second token" value="second" />
95
+ </div>
96
+ </>,
97
+ );
98
+ const first = result.getByTestId("first-copy");
99
+ const second = result.getByTestId("second-copy");
100
+ writeText.mockRejectedValueOnce(new Error("Denied"));
101
+ fireEvent.click(copyOf(first)!);
102
+ await vi.waitFor(() => expect(first.textContent).toContain("Copy failed."));
103
+ expect(second.textContent).not.toContain("Copy failed.");
104
+ writeText.mockRejectedValueOnce(new Error("Denied"));
105
+ fireEvent.click(copyOf(second)!);
106
+ await vi.waitFor(() => expect(second.textContent).toContain("Copy failed."));
107
+ fireEvent.click(copyOf(first)!);
108
+ await vi.waitFor(() => expect(first.textContent).not.toContain("Copy failed."));
109
+ expect(second.textContent).toContain("Copy failed.");
110
+ expect(getToasts()).toHaveLength(1);
111
+ });
112
+
113
+ it("replaces repeated failures and removes its feedback on unmount", async () => {
114
+ writeText.mockRejectedValue(new Error("Denied"));
115
+ const result = renderWithProviders(<CopyField label="Token" value="first" />);
116
+ fireEvent.click(copyOf(result.container)!);
117
+ await vi.waitFor(() => expect(getFeedback()).toHaveLength(1));
118
+ fireEvent.click(copyOf(result.container)!);
119
+ await vi.waitFor(() => expect(writeText).toHaveBeenCalledTimes(2));
120
+ expect(result.getAllByText("Copy failed.")).toHaveLength(1);
121
+ expect(getFeedback()).toHaveLength(1);
122
+ result.unmount();
123
+ expect(getFeedback()).toHaveLength(0);
124
+ });
125
+
126
+ it("ignores a clipboard result after its field unmounts", async () => {
127
+ let rejectCopy!: (reason: Error) => void;
128
+ writeText.mockReturnValue(
129
+ new Promise((_, reject) => {
130
+ rejectCopy = reject;
131
+ }),
132
+ );
133
+ const result = renderWithProviders(<CopyField label="Token" value="first" />);
134
+ fireEvent.click(copyOf(result.container)!);
135
+ result.unmount();
136
+ rejectCopy(new Error("Denied"));
137
+ await new Promise((resolve) => setTimeout(resolve, 0));
138
+ expect(getFeedback()).toHaveLength(0);
139
+ expect(getToasts()).toHaveLength(0);
75
140
  });
76
141
  });
@@ -12,15 +12,16 @@
12
12
  import { Input, type InputProps } from "@multiplatform.one/forms";
13
13
  import { YStack } from "tamagui";
14
14
  import { NotifyRegion } from "../feedback/NotifyHost";
15
- import { reportCopy } from "../feedback/copy";
15
+ import { useCopyFeedback } from "../feedback/copy";
16
16
 
17
17
  export type CopyFieldProps = Omit<InputProps, "copy" | "onCopyResult" | "secureTextEntry">;
18
18
 
19
19
  export function CopyField(props: CopyFieldProps) {
20
+ const { region, report } = useCopyFeedback();
20
21
  return (
21
22
  <YStack width="100%">
22
- <Input {...props} readOnly copy onCopyResult={reportCopy} />
23
- <NotifyRegion scope="field" compact />
23
+ <Input {...props} readOnly copy onCopyResult={report} />
24
+ <NotifyRegion scope="field" region={region} compact />
24
25
  </YStack>
25
26
  );
26
27
  }
@@ -1,4 +1,5 @@
1
- import { fireEvent, waitFor } from "@testing-library/react";
1
+ import { useState } from "react";
2
+ import { act, fireEvent, waitFor } from "@testing-library/react";
2
3
  import { __resetDevWarnSeen } from "@multiplatform.one/theme";
3
4
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
5
  import { renderWithProviders } from "@multiplatform.one/test-utils";
@@ -509,3 +510,113 @@ describe("DropdownMenu FloatingPanel cover contract", () => {
509
510
  expect(edit.getAttribute("data-mp-ring-offset")).toBe("0");
510
511
  });
511
512
  });
513
+
514
+ describe("DropdownMenu.Content onCloseAutoFocus (MPO-29)", () => {
515
+ for (const preventRestore of [false, true]) {
516
+ it(`${preventRestore ? "suppresses" : "performs"} actual delayed trigger restoration on Escape`, async () => {
517
+ const onCloseAutoFocus = vi.fn((event) => {
518
+ if (preventRestore) event.preventDefault();
519
+ });
520
+ const result = renderWithProviders(
521
+ <DropdownMenu>
522
+ <DropdownMenu.Trigger asChild>
523
+ <Button>Heading</Button>
524
+ </DropdownMenu.Trigger>
525
+ <DropdownMenu.Content onCloseAutoFocus={onCloseAutoFocus}>
526
+ <DropdownMenu.Item>H1</DropdownMenu.Item>
527
+ </DropdownMenu.Content>
528
+ </DropdownMenu>,
529
+ );
530
+ const trigger = result.getByText("Heading").closest("button")!;
531
+ trigger.focus();
532
+ fireEvent.click(trigger);
533
+ await waitFor(() => expect(document.querySelector('[role="menuitem"]')).toBeTruthy());
534
+ const item = document.querySelector('[role="menuitem"]') as HTMLElement;
535
+ item.focus();
536
+ fireEvent.keyDown(item, { key: "Escape" });
537
+ await waitFor(() => expect(document.querySelector('[role="menu"]')).toBeFalsy());
538
+ await act(() => new Promise((resolve) => setTimeout(resolve, 400)));
539
+ expect(onCloseAutoFocus).toHaveBeenCalledTimes(1);
540
+ if (preventRestore) expect(document.activeElement).not.toBe(trigger);
541
+ else expect(document.activeElement).toBe(trigger);
542
+ });
543
+ }
544
+
545
+ it("fires once when an item select closes the menu", async () => {
546
+ const onCloseAutoFocus = vi.fn();
547
+ renderWithProviders(
548
+ <DropdownMenu defaultOpen>
549
+ <DropdownMenu.Trigger asChild>
550
+ <Button>Actions</Button>
551
+ </DropdownMenu.Trigger>
552
+ <DropdownMenu.Content onCloseAutoFocus={onCloseAutoFocus}>
553
+ <DropdownMenu.Item>Edit</DropdownMenu.Item>
554
+ </DropdownMenu.Content>
555
+ </DropdownMenu>,
556
+ );
557
+ await waitFor(() => {
558
+ expect(document.querySelector('[role="menu"]')).toBeTruthy();
559
+ });
560
+ fireEvent.click(document.querySelector('[role="menuitem"]') as HTMLElement);
561
+ await waitFor(() => {
562
+ expect(document.querySelector('[role="menu"]')).toBeFalsy();
563
+ });
564
+ expect(onCloseAutoFocus).toHaveBeenCalledTimes(1);
565
+ const event = onCloseAutoFocus.mock.calls[0][0] as {
566
+ preventDefault: () => void;
567
+ defaultPrevented: boolean;
568
+ };
569
+ expect(event.defaultPrevented).toBe(false);
570
+ event.preventDefault();
571
+ expect(event.defaultPrevented).toBe(true);
572
+ });
573
+
574
+ it("fires once when a closeOnSelect=false item closes via the parent open state", async () => {
575
+ // HeadingPicker / ListPicker / MoreDropdown: they keep closeOnSelect
576
+ // false so the item does not ctx.close(), then they setOpen(false)
577
+ // themselves after executeCommand. That is a controlled close, not
578
+ // ctx.close() and not FloatingPanel dismissing on its own.
579
+ const onCloseAutoFocus = vi.fn();
580
+ function Harness() {
581
+ const [open, setOpen] = useState(true);
582
+ return (
583
+ <DropdownMenu open={open} onOpenChange={setOpen}>
584
+ <DropdownMenu.Trigger asChild>
585
+ <Button>Heading</Button>
586
+ </DropdownMenu.Trigger>
587
+ <DropdownMenu.Content onCloseAutoFocus={onCloseAutoFocus}>
588
+ <DropdownMenu.Item closeOnSelect={false} onSelect={() => setOpen(false)}>
589
+ H1
590
+ </DropdownMenu.Item>
591
+ </DropdownMenu.Content>
592
+ </DropdownMenu>
593
+ );
594
+ }
595
+ renderWithProviders(<Harness />);
596
+ await waitFor(() => {
597
+ expect(document.querySelector('[role="menu"]')).toBeTruthy();
598
+ });
599
+ fireEvent.click(document.querySelector('[role="menuitem"]') as HTMLElement);
600
+ await waitFor(() => {
601
+ expect(document.querySelector('[role="menu"]')).toBeFalsy();
602
+ });
603
+ expect(onCloseAutoFocus).toHaveBeenCalledTimes(1);
604
+ });
605
+
606
+ it("puts Content aria-label on the role=menu node", async () => {
607
+ renderWithProviders(
608
+ <DropdownMenu defaultOpen>
609
+ <DropdownMenu.Trigger asChild>
610
+ <Button>Status</Button>
611
+ </DropdownMenu.Trigger>
612
+ <DropdownMenu.Content aria-label="Status">
613
+ <DropdownMenu.Item>Open</DropdownMenu.Item>
614
+ </DropdownMenu.Content>
615
+ </DropdownMenu>,
616
+ );
617
+ await waitFor(() => {
618
+ expect(document.querySelector('[role="menu"]')).toBeTruthy();
619
+ });
620
+ expect(document.querySelector('[role="menu"]')?.getAttribute("aria-label")).toBe("Status");
621
+ });
622
+ });
@@ -220,9 +220,7 @@ export const Controlled: Story = {
220
220
  >
221
221
  <Button>Controlled menu</Button>
222
222
  </DropdownMenu>
223
- <Button variant="outlined" onPress={() => setOpen(!open)}>
224
- Toggle from outside
225
- </Button>
223
+ <Button onPress={() => setOpen(!open)}>Toggle from outside</Button>
226
224
  </XStack>
227
225
  <Text color="$color11" fontSize="$2">
228
226
  {last ? `Last action: ${last}` : "No action selected yet"}
@@ -23,6 +23,7 @@ import {
23
23
  useCallback,
24
24
  useContext,
25
25
  useEffect,
26
+ useLayoutEffect,
26
27
  useMemo,
27
28
  useRef,
28
29
  useState,
@@ -290,10 +291,38 @@ function DropdownMenuRoot({
290
291
  });
291
292
  const pendingFocusRef = useRef<"first" | "last">("first");
292
293
 
294
+ // Content's onCloseAutoFocus, read off the Content child below during the
295
+ // same render. A ref because the child scan happens after these callbacks
296
+ // are defined, and both close paths have to reach the same handler.
297
+ const closeAutoFocusRef = useRef<DropdownMenuContentProps["onCloseAutoFocus"]>(undefined);
298
+ // Notify on the actual state transition, including parent-controlled closes.
299
+ // A rejected controlled close request must not move focus out of an open menu.
300
+ const wasOpenRef = useRef(false);
301
+ const skipReturnFocusRef = useRef(false);
302
+
303
+ const fireCloseAutoFocus = useCallback(() => {
304
+ const handler = closeAutoFocusRef.current;
305
+ if (!handler) return;
306
+ handler({
307
+ preventDefault: () => {
308
+ skipReturnFocusRef.current = true;
309
+ },
310
+ get defaultPrevented() {
311
+ return skipReturnFocusRef.current;
312
+ },
313
+ });
314
+ }, []);
315
+
293
316
  const close = useCallback(() => {
294
317
  setOpen(false);
295
318
  }, [setOpen]);
296
319
 
320
+ useLayoutEffect(() => {
321
+ if (wasOpenRef.current && !open) fireCloseAutoFocus();
322
+ wasOpenRef.current = !!open;
323
+ if (open) skipReturnFocusRef.current = false;
324
+ }, [open, fireCloseAutoFocus]);
325
+
297
326
  const ctx = useMemo<DropdownMenuContextValue>(
298
327
  () => ({ open, setOpen, close, closeOnSelect, pendingFocusRef }),
299
328
  [open, setOpen, close, closeOnSelect],
@@ -311,6 +340,8 @@ function DropdownMenuRoot({
311
340
  let body: ReactNode = null;
312
341
  let contentMaxHeight = maxHeight;
313
342
  let contentMaxWidth: number | undefined;
343
+ let contentAriaLabel: string | undefined;
344
+ closeAutoFocusRef.current = undefined;
314
345
  if (items) {
315
346
  body = renderEntries(items);
316
347
  } else if (Array.isArray(children) || isValidElement(children)) {
@@ -326,14 +357,13 @@ function DropdownMenuRoot({
326
357
  if (type === DropdownMenuTrigger) {
327
358
  triggerParts.push((child.props as { children?: ReactNode }).children);
328
359
  } else if (type === DropdownMenuContent) {
329
- const contentProps = child.props as {
330
- children?: ReactNode;
331
- maxHeight?: number;
332
- maxWidth?: number;
333
- };
360
+ const contentProps = child.props as DropdownMenuContentProps;
334
361
  contentParts.push(contentProps.children);
335
362
  if (contentProps.maxHeight != null) contentMaxHeight = contentProps.maxHeight;
336
363
  if (contentProps.maxWidth != null) contentMaxWidth = contentProps.maxWidth;
364
+ if (contentProps.onCloseAutoFocus)
365
+ closeAutoFocusRef.current = contentProps.onCloseAutoFocus;
366
+ if (contentProps["aria-label"] != null) contentAriaLabel = contentProps["aria-label"];
337
367
  } else {
338
368
  triggerParts.push(child);
339
369
  }
@@ -347,12 +377,17 @@ function DropdownMenuRoot({
347
377
  <FloatingPanel
348
378
  open={open}
349
379
  onOpenChange={setOpen}
380
+ skipReturnFocusRef={skipReturnFocusRef}
350
381
  trigger={decorateTrigger(trigger, open, onArrow)}
351
382
  contentPadding="none"
352
383
  {...coverContract}
353
384
  {...(placement ? { placement } : {})}
354
385
  >
355
- <DropdownMenuList maxHeight={contentMaxHeight} maxWidth={contentMaxWidth}>
386
+ <DropdownMenuList
387
+ maxHeight={contentMaxHeight}
388
+ maxWidth={contentMaxWidth}
389
+ aria-label={contentAriaLabel}
390
+ >
356
391
  {body}
357
392
  </DropdownMenuList>
358
393
  </FloatingPanel>
@@ -387,6 +422,29 @@ export interface DropdownMenuContentProps {
387
422
  * owns this now — kept so existing callers type-check.
388
423
  */
389
424
  minWidth?: number;
425
+ /**
426
+ * Fired as the menu closes, before focus would return to the trigger.
427
+ * Call `preventDefault()` to keep the trigger from taking focus back —
428
+ * the rich-text toolbars do exactly that and hand focus to the editor
429
+ * instead, so the user can keep typing after picking a heading or a list.
430
+ */
431
+ onCloseAutoFocus?: (event: DropdownMenuCloseAutoFocusEvent) => void;
432
+ /**
433
+ * Accessible name for the menu. Lands on the `role="menu"` element, which
434
+ * is the node a screen reader announces — a facet menu whose trigger is an
435
+ * icon has no other name. DataTableFacetMenu passes its column label.
436
+ */
437
+ "aria-label"?: string;
438
+ }
439
+
440
+ /**
441
+ * The minimal preventable event `onCloseAutoFocus` receives. Deliberately not
442
+ * a DOM event: the close can originate from a native sheet or a keyboard
443
+ * dismissal where there is no DOM event to forward.
444
+ */
445
+ export interface DropdownMenuCloseAutoFocusEvent {
446
+ preventDefault: () => void;
447
+ readonly defaultPrevented: boolean;
390
448
  }
391
449
 
392
450
  function DropdownMenuContent({ children }: DropdownMenuContentProps) {
@@ -397,10 +455,12 @@ function DropdownMenuList({
397
455
  children,
398
456
  maxHeight,
399
457
  maxWidth,
458
+ "aria-label": ariaLabel,
400
459
  }: {
401
460
  children?: ReactNode;
402
461
  maxHeight?: number;
403
462
  maxWidth?: number;
463
+ "aria-label"?: string;
404
464
  }) {
405
465
  const ctx = useDropdownMenuContext("Content");
406
466
  const innerRef = useRef<TamaguiElement | null>(null);
@@ -494,6 +554,7 @@ function DropdownMenuList({
494
554
  <YStack
495
555
  ref={innerRef}
496
556
  role="menu"
557
+ {...(ariaLabel ? { "aria-label": ariaLabel } : {})}
497
558
  data-dismiss-class="commit"
498
559
  data-mp-width-mode="at-least-trigger"
499
560
  width="100%"
@@ -678,7 +739,7 @@ const DropdownMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(
678
739
  </Text>
679
740
  <Text
680
741
  {...knobProps.body}
681
- color={componentColors.text.muted}
742
+ color={knobProps.textAccentColor}
682
743
  fontSize="$1"
683
744
  data-mp-disabled-reason="true"
684
745
  >
@@ -701,7 +762,7 @@ const DropdownMenuItemBody = forwardRef<TamaguiElement, ItemBodyProps>(
701
762
  {shortcut ? (
702
763
  <Text
703
764
  {...knobProps.body}
704
- color={componentColors.text.muted}
765
+ color={knobProps.textAccentColor}
705
766
  fontSize="$1"
706
767
  flexShrink={0}
707
768
  marginInlineStart="$4"
@@ -783,7 +844,7 @@ function DropdownMenuLabel({ children, ...props }: DropdownMenuLabelProps) {
783
844
  {...knobProps.body}
784
845
  fontWeight="600"
785
846
  fontSize="$1"
786
- color={componentColors.text.muted}
847
+ color={knobProps.textAccentColor}
787
848
  paddingHorizontal="$3"
788
849
  paddingVertical="$1.5"
789
850
  userSelect="none"
@@ -1,6 +1,6 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
2
- import { Text, YStack } from "tamagui";
3
- import { LinearGradient } from "./tamagui";
2
+ import { Text } from "./Text";
3
+ import { LinearGradient, YStack } from "./tamagui";
4
4
 
5
5
  const meta: Meta<typeof LinearGradient> = {
6
6
  title: "Components/LinearGradient",
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import { cleanup, screen } from "@testing-library/react";
10
10
  import { renderWithProviders } from "@multiplatform.one/test-utils";
11
- import { Preset, resolveRadiusClass } from "@multiplatform.one/theme";
11
+ import { Preset, resolveRadiusClass, type Knobs } from "@multiplatform.one/theme";
12
12
  import type { ReactElement } from "react";
13
13
  import { Theme } from "tamagui";
14
14
  import { afterEach, describe, expect, it } from "vitest";
@@ -36,7 +36,7 @@ const BATTERY = { min: 0, max: 100, low: 10, high: 20, optimum: 100 } as const;
36
36
  function renderMeter(
37
37
  ui: ReactElement,
38
38
  scheme: "light" | "dark" = "light",
39
- knobs?: { borderRadius?: "none" | "small" | "medium" | "large" | "full" },
39
+ knobs?: Partial<Pick<Knobs, "borderRadius" | "fillStyle" | "borderWidth">>,
40
40
  ) {
41
41
  return renderWithProviders(
42
42
  <Theme name={scheme}>
@@ -77,12 +77,16 @@ describe("threshold intents map to theme intents, never raw brand", () => {
77
77
  for (const zone of Object.keys(METER_ZONE_PAINT) as MeterZone[]) {
78
78
  const paint = METER_ZONE_PAINT[zone];
79
79
  expect(paint.fill, `${zone} fill`).toMatch(token);
80
- expect(paint.value, `${zone} value`).toMatch(token);
81
80
  expect(paint.fill).not.toMatch(/^#/);
82
- expect(paint.value).not.toMatch(/^#/);
83
81
  expect(paint.fill).not.toContain("accent");
84
- expect(paint.value).not.toContain("accent");
82
+ if ("value" in paint) {
83
+ expect(paint.value, `${zone} value`).toMatch(token);
84
+ expect(paint.value).not.toMatch(/^#/);
85
+ expect(paint.value).not.toContain("accent");
86
+ }
85
87
  }
88
+ // MPO-154: ok declares no value ink — the resolver owns it.
89
+ expect("value" in METER_ZONE_PAINT.ok).toBe(false);
86
90
  expect(METER_ZONE_PAINT.ok.fill).toBe("$color11");
87
91
  expect(METER_ZONE_PAINT.warn.fill).toBe("$orange9");
88
92
  expect(METER_ZONE_PAINT.warn.value).toBe("$orange11");
@@ -154,7 +158,11 @@ describe("render spec at each intent in both schemes", () => {
154
158
  expect(node.getAttribute("data-meter-zone")).toBe(zone);
155
159
  expect(node.getAttribute("data-meter-fill")).toBe(paint.fill);
156
160
  const valueNode = container.querySelector("[data-meter-value]");
157
- expect(valueNode?.getAttribute("data-meter-value-color")).toBe(paint.value);
161
+ // ok declares no value ink, so the readout rides textAccent — "high"
162
+ // in the default preset these cases render under.
163
+ expect(valueNode?.getAttribute("data-meter-value-color")).toBe(
164
+ "value" in paint ? paint.value : "$color",
165
+ );
158
166
  expect(node.getAttribute("data-meter-fill")).not.toMatch(/^#/);
159
167
  });
160
168
  }
@@ -192,6 +200,63 @@ describe("Meter a11y and the Progress semantic line", () => {
192
200
  expect(formatMeterValue({ value: 78, min: 0, max: 100, format: "percent" })).toMatch(/%$/);
193
201
  expect(formatMeterValue({ value: undefined, min: 0, max: 8, format: "number" })).toBe("\u2014");
194
202
  });
203
+
204
+ it("outlined chrome spreads inputSurface — borderWidth is the knob, not a hardcoded 1", () => {
205
+ const { container: filled } = renderMeter(
206
+ <Meter label="Disk" value={5} min={0} max={8} />,
207
+ "light",
208
+ { fillStyle: "filled", borderWidth: "large" },
209
+ );
210
+ expect(rail(filled).getAttribute("data-meter-border-width")).toBe("0");
211
+
212
+ cleanup();
213
+ const { container: hairline } = renderMeter(
214
+ <Meter label="Disk" value={5} min={0} max={8} />,
215
+ "light",
216
+ { fillStyle: "outlined", borderWidth: "none" },
217
+ );
218
+ // LC-86: outlined + none still draws the small hairline, not 0.
219
+ expect(rail(hairline).getAttribute("data-meter-border-width")).toBe("0.5");
220
+
221
+ cleanup();
222
+ const { container: large } = renderMeter(
223
+ <Meter label="Disk" value={5} min={0} max={8} />,
224
+ "light",
225
+ { fillStyle: "outlined", borderWidth: "large" },
226
+ );
227
+ expect(rail(large).getAttribute("data-meter-border-width")).toBe("2");
228
+ });
229
+
230
+ it("loading is a skeleton, not an indeterminate meter", () => {
231
+ const { container } = renderMeter(<Meter label="Disk usage" min={0} max={8} loading />);
232
+ expect(container.querySelector("[role='meter']")).toBeNull();
233
+ expect(container.querySelector("[role='progressbar']")).toBeNull();
234
+ });
235
+
236
+ for (const discrete of [0, 5]) {
237
+ for (const [borderWidth, expected] of [
238
+ ["none", "0.5px"],
239
+ ["small", "0.5px"],
240
+ ["large", "2px"],
241
+ ] as const) {
242
+ it(`paints ${borderWidth} outline on ${discrete ? "every segment" : "the continuous rail"}`, () => {
243
+ const { container } = renderMeter(
244
+ <Meter label="Disk" value={5} min={0} max={8} segments={discrete} />,
245
+ "light",
246
+ { fillStyle: "outlined", borderWidth },
247
+ );
248
+ const parts = discrete
249
+ ? Array.from(container.querySelector("[data-meter-segments]")!.children)
250
+ : [rail(container)];
251
+ expect(parts).toHaveLength(discrete || 1);
252
+ for (const part of parts) expect(getComputedStyle(part).borderTopWidth).toBe(expected);
253
+ if (discrete) {
254
+ expect(getComputedStyle(parts[0]).backgroundColor).not.toBe("transparent");
255
+ expect(getComputedStyle(parts.at(-1)!).backgroundColor).toBe("transparent");
256
+ }
257
+ });
258
+ }
259
+ }
195
260
  });
196
261
 
197
262
  describe("barrel exports (the ProgressCard export gap)", () => {
@@ -117,3 +117,41 @@ export const Unknown: Story = {
117
117
  unit: "GB",
118
118
  },
119
119
  };
120
+
121
+ export const Loading: Story = {
122
+ args: {
123
+ label: "Disk usage",
124
+ min: 0,
125
+ max: 8,
126
+ unit: "GB",
127
+ loading: true,
128
+ },
129
+ };
130
+
131
+ export const Disabled: Story = {
132
+ args: {
133
+ label: "Disk usage",
134
+ value: 6.2,
135
+ min: 0,
136
+ max: 8,
137
+ low: 6.4,
138
+ high: 7.6,
139
+ optimum: 0,
140
+ unit: "GB",
141
+ disabled: true,
142
+ },
143
+ };
144
+
145
+ export const Inline: Story = {
146
+ args: {
147
+ label: "Disk usage",
148
+ value: 6.2,
149
+ min: 0,
150
+ max: 8,
151
+ low: 6.4,
152
+ high: 7.6,
153
+ optimum: 0,
154
+ format: "percent",
155
+ layout: "inline",
156
+ },
157
+ };
@@ -149,11 +149,17 @@ export function Meter({
149
149
  const outlined = knobProps.outlined;
150
150
  const trackH = meterTrackHeightPx(size);
151
151
  const railRadius = resolveMeterRailRadius(stop);
152
+ // Spread the fragment (AGENTS.md). Hardcoded 1px ignored the borderWidth knob.
153
+ const outlineChrome = outlined
154
+ ? { ...knobProps.inputSurface, borderColor: "$color6" as const }
155
+ : { borderWidth: 0 };
156
+ const paintedBorder = outlined ? knobProps.inputSurface.borderWidth : 0;
152
157
  const known = value != null && Number.isFinite(value);
153
158
  const zone = known
154
159
  ? resolveMeterZone({ value: value as number, min, max, low, high, optimum })
155
160
  : "ok";
156
161
  const paint = METER_ZONE_PAINT[zone];
162
+ const valueInk = "value" in paint ? paint.value : knobProps.textAccentColor;
157
163
  const ratio = meterFillRatio(value, min, max);
158
164
  const visible = formatMeterValue({ value, min, max, unit, format, valueLabel });
159
165
  const valuetext = valueText ?? defaultValueText({ value, visible, unit, format });
@@ -172,10 +178,10 @@ export function Meter({
172
178
  <Text
173
179
  {...knobProps.label}
174
180
  fontFamily="$mono"
175
- color={paint.value}
181
+ color={valueInk}
176
182
  whiteSpace="nowrap"
177
183
  data-meter-value=""
178
- data-meter-value-color={paint.value}
184
+ data-meter-value-color={valueInk}
179
185
  {...(isWeb ? { style: { fontVariantNumeric: "tabular-nums" } } : null)}
180
186
  >
181
187
  {visible}
@@ -209,9 +215,8 @@ export function Meter({
209
215
  width={19}
210
216
  height={trackH}
211
217
  borderRadius={railRadius}
218
+ {...outlineChrome}
212
219
  backgroundColor={i < filledCount ? paint.fill : outlined ? "transparent" : METER_TRACK}
213
- borderWidth={outlined ? 1 : 0}
214
- borderColor={outlined ? "$color6" : undefined}
215
220
  />
216
221
  ))}
217
222
  </XStack>
@@ -220,9 +225,8 @@ export function Meter({
220
225
  height={trackH}
221
226
  minHeight={trackH}
222
227
  borderRadius={railRadius}
228
+ {...outlineChrome}
223
229
  backgroundColor={outlined ? "transparent" : METER_TRACK}
224
- borderWidth={outlined ? 1 : 0}
225
- borderColor={outlined ? "$color6" : undefined}
226
230
  opacity={disabled ? 0.5 : 1}
227
231
  role="meter"
228
232
  aria-label={label}
@@ -232,6 +236,7 @@ export function Meter({
232
236
  aria-valuetext={valuetext}
233
237
  data-meter-radius-class={METER_RADIUS_CLASS}
234
238
  data-meter-rail-radius={railRadius}
239
+ data-meter-border-width={paintedBorder}
235
240
  data-meter-zone={zone}
236
241
  data-meter-fill={known && ratio != null ? paint.fill : undefined}
237
242
  data-meter-track-height={trackH}
@@ -261,6 +266,7 @@ export function Meter({
261
266
  aria-valuetext={valuetext}
262
267
  data-meter-radius-class={METER_RADIUS_CLASS}
263
268
  data-meter-rail-radius={railRadius}
269
+ data-meter-border-width={paintedBorder}
264
270
  data-meter-zone={zone}
265
271
  data-meter-fill={known ? paint.fill : undefined}
266
272
  data-meter-track-height={trackH}
@@ -26,9 +26,14 @@ export const METER_RADIUS_CLASS = "DEFAULT" as const;
26
26
  * Zone paint — theme intent tokens, never raw brand or `$accentBackground`.
27
27
  * ok is the LAW pairing (no verdict under threshold, DG-FB-06). warn/critical
28
28
  * are the same step-9 solid / step-11 ink channel Progress uses (DG-FB-05).
29
+ *
30
+ * MPO-154: ok carries no `value`. Under no verdict the readout is ordinary
31
+ * secondary text, so its ink is `knobProps.textAccentColor` — a static
32
+ * `$color11` here was a second answer to what the resolver already decides,
33
+ * and it pinned the readout dim at `textAccent: high`.
29
34
  */
30
35
  export const METER_ZONE_PAINT = {
31
- ok: { fill: "$color11", value: "$color11" },
36
+ ok: { fill: "$color11" },
32
37
  warn: { fill: "$orange9", value: "$orange11" },
33
38
  critical: { fill: "$red9", value: "$red11" },
34
39
  } as const;