@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
@@ -861,7 +861,7 @@ function KanbanColumnView<T>({
861
861
  <XStack alignItems="center" {...knobProps.gap}>
862
862
  {itemCount !== undefined && (
863
863
  <Text
864
- color={componentColors.text.muted}
864
+ color={knobProps.textAccentColor}
865
865
  {...knobProps.label}
866
866
  {...knobProps.textWeight}
867
867
  data-async-count
@@ -1004,7 +1004,7 @@ function KanbanColumnView<T>({
1004
1004
  justifyContent="center"
1005
1005
  >
1006
1006
  {column.items.length === 0 && (
1007
- <Text color={componentColors.text.muted} {...knobProps.label}>
1007
+ <Text color={knobProps.textAccentColor} {...knobProps.label}>
1008
1008
  {t("Drop here")}
1009
1009
  </Text>
1010
1010
  )}
@@ -72,6 +72,17 @@ describe("Kanban design law (SB-M-302 / LC-60)", () => {
72
72
  expect(container.querySelectorAll("[data-kanban-column-stripe]")).toHaveLength(0);
73
73
  });
74
74
 
75
+ it("does not leak Card dataSet onto the web card host", () => {
76
+ const { container } = renderWithProviders(
77
+ <Kanban columns={columns} renderCard={(item) => <span>{item.title}</span>} />,
78
+ );
79
+ const cards = container.querySelectorAll("[data-kanban-card]");
80
+ expect(cards.length).toBeGreaterThan(0);
81
+ for (const card of cards) {
82
+ expect(card.hasAttribute("dataset")).toBe(false);
83
+ }
84
+ });
85
+
75
86
  it("lets the radius knob reshape cards and column frames", () => {
76
87
  const { rerender } = renderWithProviders(
77
88
  <Preset overrides={{ borderRadius: "full" }}>
@@ -1361,7 +1361,7 @@ function KanbanColumnView<T>({
1361
1361
  <XStack alignItems="center" {...knobProps.gap}>
1362
1362
  {itemCount !== undefined && (
1363
1363
  <Text
1364
- color={componentColors.text.muted}
1364
+ color={knobProps.textAccentColor}
1365
1365
  {...knobProps.label}
1366
1366
  {...knobProps.textWeight}
1367
1367
  data-async-count
@@ -1551,7 +1551,7 @@ function KanbanColumnView<T>({
1551
1551
  justifyContent="center"
1552
1552
  >
1553
1553
  {isEmpty && (
1554
- <Text color={componentColors.text.muted} {...knobProps.label}>
1554
+ <Text color={knobProps.textAccentColor} {...knobProps.label}>
1555
1555
  {t("Drop here")}
1556
1556
  </Text>
1557
1557
  )}
@@ -513,7 +513,7 @@ export function ReportBuilder({
513
513
  <SortIcon
514
514
  size={iconPx}
515
515
  weight="bold"
516
- color={active ? componentColors.text.primary : componentColors.text.muted}
516
+ color={active ? componentColors.text.primary : knobProps.textAccentColor}
517
517
  opacity={active ? 1 : 0.35}
518
518
  />
519
519
  </XStack>
@@ -634,7 +634,7 @@ export function ReportBuilder({
634
634
  <Text {...knobProps.label} color="$accentColor" numberOfLines={1}>
635
635
  {groupByCol?.label ?? groupBy.field}: {groupKey}
636
636
  </Text>
637
- <Text {...knobProps.label} color={componentColors.text.muted}>
637
+ <Text {...knobProps.label} color={knobProps.textAccentColor}>
638
638
  ({group.rows.length} {group.rows.length === 1 ? t("record") : t("records")})
639
639
  </Text>
640
640
  <XStack flex={1} />
@@ -902,7 +902,7 @@ export function ReportBuilder({
902
902
  {...knobProps.gapLg}
903
903
  flexWrap="wrap"
904
904
  >
905
- <Text {...knobProps.label} color={componentColors.text.muted}>
905
+ <Text {...knobProps.label} color={knobProps.textAccentColor}>
906
906
  {t("Totals")}
907
907
  </Text>
908
908
  {totals.map(({ col, value }) => (
@@ -912,7 +912,7 @@ export function ReportBuilder({
912
912
  </Text>
913
913
  ))}
914
914
  <XStack flex={1} />
915
- <Text {...knobProps.label} color={componentColors.text.muted}>
915
+ <Text {...knobProps.label} color={knobProps.textAccentColor}>
916
916
  {t("{{count}} row(s)", { count: data.length })}
917
917
  </Text>
918
918
  </XStack>
@@ -0,0 +1,167 @@
1
+ import type { TreeViewProps as PublicTreeViewProps } from "@multiplatform.one/components";
2
+ import { act, cleanup, fireEvent, screen, waitFor } from "@testing-library/react";
3
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
4
+ import { afterEach, describe, expect, expectTypeOf, it, vi } from "vitest";
5
+ import { TreeView, type TreeNode, type TreeViewProps } from "./TreeView";
6
+
7
+ const nodes: TreeNode[] = [
8
+ {
9
+ id: "folders",
10
+ label: "Folders",
11
+ children: [
12
+ {
13
+ id: "archive",
14
+ label: "Archive",
15
+ children: [{ id: "item", label: "Item" }],
16
+ },
17
+ ],
18
+ },
19
+ { id: "other", label: "Other", children: [{ id: "other-item", label: "Other item" }] },
20
+ ];
21
+
22
+ afterEach(cleanup);
23
+
24
+ describe("TreeView public expansion contract", () => {
25
+ it("exposes the agreed reveal request through TreeViewProps", () => {
26
+ expectTypeOf<PublicTreeViewProps>().toEqualTypeOf<TreeViewProps>();
27
+ expectTypeOf<TreeViewProps["revealRequest"]>().toEqualTypeOf<
28
+ { id: string; requestId: number } | undefined
29
+ >();
30
+ expectTypeOf<TreeViewProps["expandedIds"]>().toEqualTypeOf<string[] | undefined>();
31
+ expectTypeOf<TreeViewProps["onExpandedIdsChange"]>().toEqualTypeOf<
32
+ ((ids: string[]) => void) | undefined
33
+ >();
34
+ });
35
+
36
+ it("waits for controlled expansion to be accepted, overriding initial defaults", () => {
37
+ const change = vi.fn();
38
+ const toggle = vi.fn();
39
+ const props = {
40
+ nodes,
41
+ expandedIds: [],
42
+ defaultExpandedIds: ["folders"],
43
+ expandByDefault: true,
44
+ onExpandedIdsChange: change,
45
+ onNodeToggle: toggle,
46
+ };
47
+ const { rerender } = renderWithProviders(<TreeView {...props} />);
48
+ expect(screen.queryByText("Archive")).toBeNull();
49
+ fireEvent.click(screen.getByText("Folders"));
50
+ expect(change).toHaveBeenCalledExactlyOnceWith(["folders"]);
51
+ expect(toggle).toHaveBeenCalledExactlyOnceWith(nodes[0]);
52
+ expect(screen.queryByText("Archive")).toBeNull();
53
+ rerender(<TreeView {...props} expandedIds={["folders"]} />);
54
+ expect(screen.getByText("Archive")).toBeInTheDocument();
55
+ expect(change).toHaveBeenCalledTimes(1);
56
+ rerender(<TreeView {...props} expandedIds={[]} />);
57
+ expect(screen.queryByText("Archive")).toBeNull();
58
+ expect(change).toHaveBeenCalledTimes(1);
59
+ });
60
+
61
+ it("keeps uncontrolled toggles and their new notification working", () => {
62
+ const change = vi.fn();
63
+ renderWithProviders(<TreeView nodes={nodes} onExpandedIdsChange={change} />);
64
+ fireEvent.click(screen.getByText("Folders"));
65
+ expect(screen.getByText("Archive")).toBeInTheDocument();
66
+ expect(change).toHaveBeenNthCalledWith(1, ["folders"]);
67
+ fireEvent.click(screen.getByText("Folders"));
68
+ expect(screen.queryByText("Archive")).toBeNull();
69
+ expect(change).toHaveBeenNthCalledWith(2, []);
70
+ });
71
+
72
+ it("does not expand or select when only selectedId changes", async () => {
73
+ const change = vi.fn();
74
+ const select = vi.fn();
75
+ const { rerender } = renderWithProviders(
76
+ <TreeView nodes={nodes} onExpandedIdsChange={change} onNodeSelect={select} />,
77
+ );
78
+ rerender(
79
+ <TreeView
80
+ nodes={nodes}
81
+ selectedId="item"
82
+ onExpandedIdsChange={change}
83
+ onNodeSelect={select}
84
+ />,
85
+ );
86
+ await act(async () => {});
87
+ expect(screen.queryByText("Item")).toBeNull();
88
+ expect(change).not.toHaveBeenCalled();
89
+ expect(select).not.toHaveBeenCalled();
90
+ });
91
+ });
92
+
93
+ describe("TreeView reveal expansion", () => {
94
+ it("merges only ancestors, waits for acceptance, and leaves selection and focus alone", async () => {
95
+ const change = vi.fn();
96
+ const select = vi.fn();
97
+ const toggle = vi.fn();
98
+ const props = {
99
+ nodes,
100
+ expandedIds: ["other"],
101
+ selectedId: "item",
102
+ revealRequest: { id: "item", requestId: 1 },
103
+ onExpandedIdsChange: change,
104
+ onNodeSelect: select,
105
+ onNodeToggle: toggle,
106
+ };
107
+ const { rerender } = renderWithProviders(<TreeView {...props} />);
108
+ await waitFor(() =>
109
+ expect(change).toHaveBeenCalledExactlyOnceWith(["other", "folders", "archive"]),
110
+ );
111
+ expect(screen.queryByText("Item")).toBeNull();
112
+ rerender(<TreeView {...props} expandedIds={["other"]} />);
113
+ await act(async () => {});
114
+ expect(change).toHaveBeenCalledTimes(1);
115
+ rerender(<TreeView {...props} expandedIds={["other", "folders", "archive"]} />);
116
+ expect(screen.getByText("Item").closest('[role="treeitem"]')).toHaveAttribute(
117
+ "aria-selected",
118
+ "true",
119
+ );
120
+ expect(screen.getByText("Other item")).toBeInTheDocument();
121
+ expect(select).not.toHaveBeenCalled();
122
+ expect(toggle).not.toHaveBeenCalled();
123
+ expect(screen.getByRole("tree")).not.toHaveFocus();
124
+ });
125
+
126
+ it("retains a request through missing data and expands after data arrives", async () => {
127
+ const change = vi.fn();
128
+ const props = {
129
+ revealRequest: { id: "item", requestId: 2 },
130
+ onExpandedIdsChange: change,
131
+ };
132
+ const { rerender } = renderWithProviders(<TreeView {...props} nodes={[]} />);
133
+ await act(async () => {});
134
+ expect(change).not.toHaveBeenCalled();
135
+ rerender(<TreeView {...props} nodes={nodes} />);
136
+ await waitFor(() => expect(screen.getByText("Item")).toBeInTheDocument());
137
+ expect(change).toHaveBeenCalledExactlyOnceWith(["folders", "archive"]);
138
+ });
139
+
140
+ it("replaces a missing request before its old data arrives", async () => {
141
+ const change = vi.fn();
142
+ const { rerender } = renderWithProviders(
143
+ <TreeView
144
+ nodes={[]}
145
+ revealRequest={{ id: "item", requestId: 1 }}
146
+ onExpandedIdsChange={change}
147
+ />,
148
+ );
149
+ rerender(
150
+ <TreeView
151
+ nodes={[]}
152
+ revealRequest={{ id: "other-item", requestId: 2 }}
153
+ onExpandedIdsChange={change}
154
+ />,
155
+ );
156
+ rerender(
157
+ <TreeView
158
+ nodes={nodes}
159
+ revealRequest={{ id: "other-item", requestId: 2 }}
160
+ onExpandedIdsChange={change}
161
+ />,
162
+ );
163
+ await waitFor(() => expect(screen.getByText("Other item")).toBeInTheDocument());
164
+ expect(screen.queryByText("Archive")).toBeNull();
165
+ expect(change).toHaveBeenCalledExactlyOnceWith(["other"]);
166
+ });
167
+ });
@@ -0,0 +1,115 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
2
+ import { Button } from "@multiplatform.one/forms";
3
+ import { useRef, useState } from "react";
4
+ import { Text, XStack, YStack } from "tamagui";
5
+ import { TreeView, type TreeNode, type TreeViewProps } from "./TreeView";
6
+
7
+ const folders: TreeNode[] = [
8
+ {
9
+ id: "folders",
10
+ label: "Folders",
11
+ children: [
12
+ {
13
+ id: "archive",
14
+ label: "Archive",
15
+ children: Array.from({ length: 500 }, (_, index) => ({
16
+ id: `item-${index}`,
17
+ label: `Item ${String(index).padStart(3, "0")}`,
18
+ })),
19
+ },
20
+ ],
21
+ },
22
+ { id: "other", label: "Other", children: [{ id: "other-item", label: "Other item" }] },
23
+ ];
24
+
25
+ const meta: Meta<typeof TreeView> = {
26
+ title: "Components/TreeView",
27
+ component: TreeView,
28
+ args: { height: 240, ariaLabel: "Reveal fixture" },
29
+ parameters: { status: { type: "stable" } },
30
+ };
31
+ export default meta;
32
+ type Story = StoryObj<typeof TreeView>;
33
+
34
+ function RevealFixture(args: TreeViewProps) {
35
+ const [nodes, setNodes] = useState(folders);
36
+ const [expandedIds, setExpandedIds] = useState<string[]>(["other"]);
37
+ const [selectedId, setSelectedId] = useState<string>();
38
+ const [revealRequest, setRevealRequest] = useState<TreeViewProps["revealRequest"]>();
39
+ const [deferExpansion, setDeferExpansion] = useState(false);
40
+ const [pendingExpansion, setPendingExpansion] = useState<string[]>();
41
+ const [hidden, setHidden] = useState(false);
42
+ const sequence = useRef(0);
43
+ const reveal = (id: string) => {
44
+ setSelectedId(id);
45
+ setRevealRequest({ id, requestId: ++sequence.current });
46
+ };
47
+ return (
48
+ <YStack gap="$3" width="100%" maxWidth={700}>
49
+ <XStack gap="$2" flexWrap="wrap">
50
+ <Button onPress={() => reveal("item-499")}>Reveal last item</Button>
51
+ <Button onPress={() => reveal("item-0")}>Reveal first item</Button>
52
+ <Button onPress={() => reveal("other-item")}>Reveal other item</Button>
53
+ <Button onPress={() => setSelectedId("item-499")}>Select only</Button>
54
+ <Button onPress={() => setExpandedIds(["other"])}>Collapse archive</Button>
55
+ </XStack>
56
+ <XStack gap="$2" flexWrap="wrap">
57
+ <Button onPress={() => setNodes([])}>Remove data</Button>
58
+ <Button onPress={() => setNodes(folders)}>Deliver data</Button>
59
+ <Button onPress={() => setHidden((value) => !value)}>
60
+ {hidden ? "Show tree" : "Hide tree"}
61
+ </Button>
62
+ <Button onPress={() => setDeferExpansion((value) => !value)}>
63
+ {deferExpansion ? "Accept expansion immediately" : "Defer expansion"}
64
+ </Button>
65
+ {pendingExpansion && (
66
+ <Button
67
+ onPress={() => {
68
+ setExpandedIds(pendingExpansion);
69
+ setPendingExpansion(undefined);
70
+ }}
71
+ >
72
+ Accept pending expansion
73
+ </Button>
74
+ )}
75
+ </XStack>
76
+ <Text>500 variable-height items. Request: {revealRequest?.requestId ?? "none"}</Text>
77
+ <Text>
78
+ Target: {revealRequest?.id ?? "none"}. Expanded: {expandedIds.join(", ")}
79
+ </Text>
80
+ <YStack display={hidden ? "none" : "flex"}>
81
+ <TreeView
82
+ {...args}
83
+ nodes={nodes}
84
+ expandedIds={expandedIds}
85
+ onExpandedIdsChange={(ids) => {
86
+ if (deferExpansion) setPendingExpansion(ids);
87
+ else setExpandedIds(ids);
88
+ }}
89
+ selectedId={selectedId}
90
+ revealRequest={revealRequest}
91
+ onNodeSelect={(node) => setSelectedId(node.id)}
92
+ renderNode={(node) => {
93
+ const index = Number(node.id.replace("item-", ""));
94
+ return (
95
+ <YStack
96
+ minHeight={Number.isFinite(index) && index % 2 ? 80 : 32}
97
+ justifyContent="center"
98
+ >
99
+ <Text>{node.label}</Text>
100
+ {Number.isFinite(index) && index % 2 === 1 && (
101
+ <Text fontSize="$2">Additional detail</Text>
102
+ )}
103
+ </YStack>
104
+ );
105
+ }}
106
+ />
107
+ </YStack>
108
+ </YStack>
109
+ );
110
+ }
111
+
112
+ export const ControlledReveal: Story = {
113
+ name: "Controlled reveal with 500 variable-height items",
114
+ render: (args) => <RevealFixture {...args} />,
115
+ };
@@ -0,0 +1,196 @@
1
+ import type { FlashListProps, FlashListRef } from "@shopify/flash-list";
2
+ import { act, cleanup, screen, waitFor } from "@testing-library/react";
3
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { TreeView, type TreeNode, type TreeViewProps } from "./TreeView";
6
+
7
+ const observed = vi.hoisted(() => ({
8
+ list: null as FlashListRef<unknown> | null,
9
+ props: null as FlashListProps<unknown> | null,
10
+ }));
11
+
12
+ // Keep the real list and rows. Happy DOM cannot measure them; only the public
13
+ // geometry/scroll boundary is modeled here. The Storybook fixture needs browser proof.
14
+ vi.mock("@shopify/flash-list", async (importOriginal) => {
15
+ const actual = await importOriginal<typeof import("@shopify/flash-list")>();
16
+ const React = await import("react");
17
+ return {
18
+ ...actual,
19
+ FlashList: React.forwardRef<FlashListRef<unknown>, FlashListProps<unknown>>((props, ref) => {
20
+ observed.props = props;
21
+ const captureRef = React.useCallback(
22
+ (list: FlashListRef<unknown> | null) => {
23
+ observed.list = list;
24
+ if (typeof ref === "function") ref(list);
25
+ else if (ref) ref.current = list;
26
+ },
27
+ [ref],
28
+ );
29
+ return React.createElement(actual.FlashList, { ...props, ref: captureRef });
30
+ }),
31
+ };
32
+ });
33
+
34
+ const nodes: TreeNode[] = [
35
+ {
36
+ id: "folders",
37
+ label: "Folders",
38
+ children: [{ id: "archive", label: "Archive", children: [{ id: "item", label: "Item" }] }],
39
+ },
40
+ { id: "other", label: "Other", children: [{ id: "other-item", label: "Other item" }] },
41
+ ];
42
+
43
+ beforeEach(() => {
44
+ observed.list = null;
45
+ observed.props = null;
46
+ });
47
+ afterEach(() => {
48
+ cleanup();
49
+ vi.restoreAllMocks();
50
+ });
51
+
52
+ async function settle() {
53
+ await act(async () => {
54
+ await new Promise((resolve) => setTimeout(resolve, 20));
55
+ });
56
+ }
57
+
58
+ function measuredTree(initial: Partial<TreeViewProps> = {}) {
59
+ const props = { nodes, expandByDefault: true, height: 240, ...initial };
60
+ const rendered = renderWithProviders(<TreeView {...props} />);
61
+ expect(observed.list).not.toBeNull();
62
+ const list = observed.list!;
63
+ const geometry = { offset: 0, height: 240, width: 320, measured: true, hostVisible: true };
64
+ vi.spyOn(screen.getByRole("tree"), "getBoundingClientRect").mockImplementation(() => ({
65
+ width: geometry.hostVisible ? geometry.width : 0,
66
+ height: geometry.hostVisible ? geometry.height : 0,
67
+ x: 0,
68
+ y: 0,
69
+ top: 0,
70
+ left: 0,
71
+ bottom: geometry.height,
72
+ right: geometry.width,
73
+ toJSON: () => ({}),
74
+ }));
75
+ vi.spyOn(list, "getWindowSize").mockImplementation(() => geometry);
76
+ vi.spyOn(list, "getFirstItemOffset").mockReturnValue(0);
77
+ vi.spyOn(list, "getAbsoluteLastScrollOffset").mockImplementation(() => geometry.offset);
78
+ vi.spyOn(list, "getLayout").mockImplementation((index) => ({
79
+ x: 0,
80
+ y: index * 400,
81
+ width: geometry.width,
82
+ height: index % 2 ? 32 : 80,
83
+ isHeightMeasured: geometry.measured,
84
+ isWidthMeasured: true,
85
+ }));
86
+ vi.spyOn(list, "computeVisibleIndices").mockImplementation(() => ({
87
+ startIndex: Math.floor(geometry.offset / 400),
88
+ endIndex: Math.floor((geometry.offset + geometry.height) / 400),
89
+ }));
90
+ const scroll = vi.spyOn(list, "scrollToOffset").mockImplementation(({ offset }) => {
91
+ geometry.offset = offset;
92
+ observed.props?.onScroll?.({ nativeEvent: { contentOffset: { y: offset } } } as never);
93
+ });
94
+ const oldScroll = vi.spyOn(list, "scrollToIndex");
95
+ const commitLayout = () => act(() => observed.props?.onCommitLayoutEffect?.());
96
+ const rerender = (next: Partial<TreeViewProps>) =>
97
+ rendered.rerender(<TreeView {...props} {...next} />);
98
+ return { ...rendered, rerender, geometry, scroll, oldScroll, commitLayout };
99
+ }
100
+
101
+ describe("TreeView measured reveal scheduling (modeled geometry)", () => {
102
+ it("scrolls the real mounted target and consumes the request only after measurement", async () => {
103
+ const tree = measuredTree();
104
+ tree.geometry.measured = false;
105
+ tree.rerender({ revealRequest: { id: "item", requestId: 1 }, selectedId: "item" });
106
+ await waitFor(() => expect(tree.scroll).toHaveBeenCalledWith({ offset: 640, animated: false }));
107
+ expect(screen.getByText("Item").closest('[role="treeitem"]')).toHaveAttribute(
108
+ "aria-selected",
109
+ "true",
110
+ );
111
+ tree.geometry.offset = 0;
112
+ tree.geometry.measured = true;
113
+ tree.commitLayout();
114
+ await waitFor(() => expect(tree.scroll).toHaveBeenCalledTimes(2));
115
+ await settle();
116
+ tree.geometry.offset = 0;
117
+ tree.commitLayout();
118
+ await settle();
119
+ expect(tree.scroll).toHaveBeenCalledTimes(2);
120
+ expect(tree.oldScroll).not.toHaveBeenCalled();
121
+ });
122
+
123
+ it("repeats the same target only when requestId changes, without stealing focus", async () => {
124
+ const tree = measuredTree();
125
+ tree.rerender({ revealRequest: { id: "item", requestId: 1 } });
126
+ await waitFor(() => expect(tree.scroll).toHaveBeenCalledTimes(1));
127
+ await settle();
128
+ tree.geometry.offset = 0;
129
+ tree.rerender({ revealRequest: { id: "item", requestId: 1 } });
130
+ tree.commitLayout();
131
+ await settle();
132
+ expect(tree.scroll).toHaveBeenCalledTimes(1);
133
+ tree.rerender({ revealRequest: { id: "item", requestId: 2 } });
134
+ await waitFor(() => expect(tree.scroll).toHaveBeenCalledTimes(2));
135
+ expect(screen.getByRole("tree")).not.toHaveFocus();
136
+ });
137
+
138
+ it("waits for both usable list dimensions and a visible host", async () => {
139
+ const tree = measuredTree();
140
+ tree.geometry.height = 0;
141
+ tree.rerender({ revealRequest: { id: "item", requestId: 1 } });
142
+ await settle();
143
+ expect(tree.scroll).not.toHaveBeenCalled();
144
+ tree.geometry.height = 240;
145
+ tree.geometry.hostVisible = false;
146
+ tree.commitLayout();
147
+ await settle();
148
+ expect(tree.scroll).not.toHaveBeenCalled();
149
+ tree.geometry.hostVisible = true;
150
+ tree.commitLayout();
151
+ await waitFor(() => expect(tree.scroll).toHaveBeenCalledTimes(1));
152
+ });
153
+
154
+ it("cancels queued A when B supersedes it and never starts an uncancellable index scroll", async () => {
155
+ const tree = measuredTree();
156
+ act(() => {
157
+ tree.rerender({ revealRequest: { id: "item", requestId: 10 } });
158
+ tree.commitLayout();
159
+ tree.rerender({ revealRequest: { id: "other-item", requestId: 11 } });
160
+ });
161
+ await waitFor(() =>
162
+ expect(tree.scroll).toHaveBeenCalledExactlyOnceWith({ offset: 1440, animated: false }),
163
+ );
164
+ await settle();
165
+ tree.commitLayout();
166
+ await settle();
167
+ expect(tree.scroll).toHaveBeenCalledTimes(1);
168
+ expect(tree.oldScroll).not.toHaveBeenCalled();
169
+ });
170
+
171
+ it("removing a request cancels its pending scroll", async () => {
172
+ const tree = measuredTree();
173
+ tree.geometry.height = 0;
174
+ tree.rerender({ revealRequest: { id: "item", requestId: 1 } });
175
+ await settle();
176
+ tree.rerender({ revealRequest: undefined });
177
+ tree.geometry.height = 240;
178
+ tree.commitLayout();
179
+ await settle();
180
+ expect(tree.scroll).not.toHaveBeenCalled();
181
+ tree.rerender({ revealRequest: { id: "item", requestId: 2 } });
182
+ await waitFor(() => expect(tree.scroll).toHaveBeenCalledTimes(1));
183
+ });
184
+
185
+ it("does not schedule more reveal work while its row refs detach on unmount", async () => {
186
+ const tree = measuredTree();
187
+ tree.geometry.height = 0;
188
+ tree.rerender({ revealRequest: { id: "item", requestId: 1 } });
189
+ await settle();
190
+ const frame = vi.spyOn(globalThis, "requestAnimationFrame");
191
+ tree.unmount();
192
+ expect(frame).not.toHaveBeenCalled();
193
+ await settle();
194
+ expect(tree.scroll).not.toHaveBeenCalled();
195
+ });
196
+ });
@@ -92,7 +92,7 @@ describe("TreeView knob wiring", () => {
92
92
  expect(tree.getAttribute("data-fill")).toBe("transparent");
93
93
  });
94
94
 
95
- it("row labels are T-VALUE primary ink, never componentColors.text.secondary", () => {
95
+ it("row labels are T-VALUE primary ink, never a secondary ramp step", () => {
96
96
  expect(treeViewSource).not.toMatch(/componentColors\.text\.(secondary|muted)/);
97
97
  expect(treeViewSource).toMatch(
98
98
  /color=\{isSelected && onAccentLabel \? onAccentLabel : "\$color"\}/,