@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
@@ -35,7 +35,7 @@ import React, {
35
35
  type ReactNode,
36
36
  } from "react";
37
37
  import { useTranslation } from "../shared/i18n";
38
- import { Text, View, XStack, YStack, type YStackProps } from "tamagui";
38
+ import { Text, View, XStack, YStack, isWeb, type YStackProps } from "tamagui";
39
39
  import { autoScrollVelocity } from "./kanbanDnd";
40
40
  import {
41
41
  applyTreeMove,
@@ -54,6 +54,7 @@ import {
54
54
  type TreeDropTarget,
55
55
  } from "./treeViewDnd";
56
56
  import { diffVisibleRows, flattenVisibleIds, isEmptyDiff } from "./treeViewMotion";
57
+ import { treeRevealExpansion, treeRevealOffset } from "./treeViewReveal";
57
58
  import {
58
59
  TREE_LIFT_SHADOW,
59
60
  treeDefaultHeight,
@@ -135,6 +136,12 @@ export interface TreeViewProps<T = unknown> extends Omit<YStackProps, "children"
135
136
  height?: number;
136
137
  /** Message shown when there are no nodes */
137
138
  emptyMessage?: string;
139
+ /** Controlled expansion; takes precedence over initial expansion props. */
140
+ expandedIds?: string[];
141
+ /** Next complete expansion set from a user toggle or explicit reveal. */
142
+ onExpandedIdsChange?: (ids: string[]) => void;
143
+ /** Expand ancestors and reveal this row. Change requestId to reveal the same ID again. */
144
+ revealRequest?: { id: string; requestId: number };
138
145
  /** Initially expanded node IDs (wins over expandByDefault when provided) */
139
146
  defaultExpandedIds?: string[];
140
147
  /** Expand every branch on initial load */
@@ -293,6 +300,9 @@ export function TreeView<T = unknown>({
293
300
  height: heightProp,
294
301
  emptyMessage: emptyMessageProp,
295
302
  defaultExpandedIds,
303
+ expandedIds: controlledExpandedIds,
304
+ onExpandedIdsChange,
305
+ revealRequest,
296
306
  expandByDefault = false,
297
307
  display = "default",
298
308
  showExpansionArrows = true,
@@ -357,12 +367,25 @@ export function TreeView<T = unknown>({
357
367
  const handleContainerBlur = useCallback(() => {
358
368
  setKeyboardRing(false);
359
369
  }, []);
360
- const [expandedIds, setExpandedIds] = useState<Set<string>>(() => {
370
+ const [internalExpandedIds, setInternalExpandedIds] = useState<Set<string>>(() => {
361
371
  if (defaultExpandedIds) return new Set(defaultExpandedIds);
362
372
  if (expandByDefault) return collectBranchIds(nodes);
363
373
  return new Set();
364
374
  });
365
375
 
376
+ const expandedIds = useMemo(
377
+ () =>
378
+ controlledExpandedIds === undefined ? internalExpandedIds : new Set(controlledExpandedIds),
379
+ [controlledExpandedIds, internalExpandedIds],
380
+ );
381
+ const setExpandedIds = useCallback(
382
+ (next: ReadonlySet<string>) => {
383
+ if (controlledExpandedIds === undefined) setInternalExpandedIds(new Set(next));
384
+ onExpandedIdsChange?.([...next]);
385
+ },
386
+ [controlledExpandedIds, onExpandedIdsChange],
387
+ );
388
+
366
389
  // ── Expand/collapse motion (FLIP + enter fade; Axiom 4) ────────────────
367
390
  const [motion, setMotion] = useState<TreeMotion | null>(null);
368
391
  const rowHeights = useRef(new Map<string, number>());
@@ -379,24 +402,30 @@ export function TreeView<T = unknown>({
379
402
  } else {
380
403
  next.add(node.id);
381
404
  }
382
- // Mount never animates and `animation: none` / reduced motion skips
383
- // the machine entirely — the toggle then renders in one jump.
384
- if (transition) {
385
- const diff = diffVisibleRows(
386
- flattenVisibleIds(nodes, expandedIds),
387
- flattenVisibleIds(nodes, next),
388
- getRowHeight,
389
- );
390
- setMotion(isEmptyDiff(diff) ? null : { phase: "armed", ...diff });
391
- } else {
392
- setMotion(null);
393
- }
394
405
  setExpandedIds(next);
395
406
  onNodeToggle?.(node);
396
407
  },
397
- [expandedIds, nodes, transition, getRowHeight, onNodeToggle],
408
+ [expandedIds, setExpandedIds, onNodeToggle],
398
409
  );
399
410
 
411
+ const previousExpandedIds = useRef(expandedIds);
412
+ useLayoutEffect(() => {
413
+ const previous = previousExpandedIds.current;
414
+ previousExpandedIds.current = expandedIds;
415
+ if (previous.size === expandedIds.size && [...previous].every((id) => expandedIds.has(id)))
416
+ return;
417
+ if (transition) {
418
+ const diff = diffVisibleRows(
419
+ flattenVisibleIds(nodes, previous),
420
+ flattenVisibleIds(nodes, expandedIds),
421
+ getRowHeight,
422
+ );
423
+ setMotion(isEmptyDiff(diff) ? null : { phase: "armed", ...diff });
424
+ } else {
425
+ setMotion(null);
426
+ }
427
+ }, [expandedIds, nodes, transition, getRowHeight]);
428
+
400
429
  // Release the FLIP one frame after the armed styles paint so the tween
401
430
  // runs from the previous layout to the new one.
402
431
  useLayoutEffect(() => {
@@ -432,6 +461,108 @@ export function TreeView<T = unknown>({
432
461
  return result;
433
462
  }, [nodes, expandedIds]);
434
463
 
464
+ const revealIntent = useRef<
465
+ | {
466
+ id: string;
467
+ requestId: number;
468
+ complete: boolean;
469
+ notifiedExpansion?: ReadonlySet<string>;
470
+ }
471
+ | undefined
472
+ >(undefined);
473
+ const revealFrame = useRef<number | undefined>(undefined);
474
+ const revealStep = useRef<() => void>(() => {});
475
+ const renderedRows = useRef(new Set<string>());
476
+ const scheduleReveal = useCallback(() => {
477
+ if (!revealIntent.current || revealIntent.current.complete || revealFrame.current !== undefined)
478
+ return;
479
+ revealFrame.current = requestAnimationFrame(() => {
480
+ revealFrame.current = undefined;
481
+ revealStep.current();
482
+ });
483
+ }, []);
484
+
485
+ useLayoutEffect(() => {
486
+ if (!revealRequest) {
487
+ revealIntent.current = undefined;
488
+ } else if (
489
+ revealIntent.current?.id !== revealRequest.id ||
490
+ revealIntent.current?.requestId !== revealRequest.requestId
491
+ ) {
492
+ revealIntent.current = { ...revealRequest, complete: false };
493
+ }
494
+ revealStep.current = () => {
495
+ const intent = revealIntent.current;
496
+ if (!intent || intent.complete) return;
497
+ const next = treeRevealExpansion(nodes, expandedIds, intent.id);
498
+ if (!next) return;
499
+ if (next !== expandedIds) {
500
+ const notified = intent.notifiedExpansion;
501
+ if (!notified || notified.size !== next.size || [...next].some((id) => !notified.has(id))) {
502
+ intent.notifiedExpansion = next;
503
+ setExpandedIds(next);
504
+ }
505
+ return;
506
+ }
507
+ if (motion) {
508
+ setMotion(null);
509
+ return;
510
+ }
511
+ const list = flashListRef.current;
512
+ const index = flatNodes.findIndex((item) => item.node.id === intent.id);
513
+ if (!list || index < 0) return;
514
+ if (isWeb) {
515
+ const rect = containerRef.current?.getBoundingClientRect();
516
+ if (!rect || rect.width <= 0 || rect.height <= 0) return;
517
+ }
518
+ const viewport = list.getWindowSize();
519
+ if (viewport.width <= 0) return;
520
+ const layout = list.getLayout(index);
521
+ if (!layout) return;
522
+ const offset = list.getAbsoluteLastScrollOffset();
523
+ const nextOffset = treeRevealOffset(
524
+ { y: layout.y + list.getFirstItemOffset(), height: layout.height },
525
+ offset,
526
+ viewport.height,
527
+ );
528
+ if (nextOffset === undefined) return;
529
+ if (Math.abs(nextOffset - offset) < 1) {
530
+ const visible = list.computeVisibleIndices();
531
+ if (
532
+ layout.isHeightMeasured &&
533
+ renderedRows.current.has(intent.id) &&
534
+ index >= visible.startIndex &&
535
+ index <= visible.endIndex
536
+ )
537
+ intent.complete = true;
538
+ return;
539
+ }
540
+ // FlashList's scrollToIndex has uncancellable delayed steps. Immediate offsets
541
+ // let the next layout/scroll event correct estimates using only the latest intent.
542
+ list.scrollToOffset({ offset: nextOffset, animated: false });
543
+ };
544
+ scheduleReveal();
545
+ }, [
546
+ nodes,
547
+ expandedIds,
548
+ setExpandedIds,
549
+ flatNodes,
550
+ revealRequest?.id,
551
+ revealRequest?.requestId,
552
+ height,
553
+ motion,
554
+ scheduleReveal,
555
+ ]);
556
+
557
+ useLayoutEffect(
558
+ () => () => {
559
+ revealIntent.current = undefined;
560
+ if (revealFrame.current !== undefined) cancelAnimationFrame(revealFrame.current);
561
+ revealFrame.current = undefined;
562
+ },
563
+ [],
564
+ );
565
+
435
566
  const scrollToIndex = useCallback(
436
567
  (index: number) => {
437
568
  if (index >= 0 && index < flatNodes.length) {
@@ -1153,6 +1284,7 @@ export function TreeView<T = unknown>({
1153
1284
  onFocus={handleContainerFocus}
1154
1285
  onBlur={handleContainerBlur}
1155
1286
  onKeyDown={handleTreeKeyDown}
1287
+ onLayout={revealRequest ? scheduleReveal : undefined}
1156
1288
  position="relative"
1157
1289
  style={{
1158
1290
  height,
@@ -1163,6 +1295,10 @@ export function TreeView<T = unknown>({
1163
1295
  data={flatNodes}
1164
1296
  drawDistance={overscan * estimateSize}
1165
1297
  keyExtractor={(item) => item.node.id}
1298
+ {...(revealRequest && {
1299
+ onLoad: scheduleReveal,
1300
+ onCommitLayoutEffect: scheduleReveal,
1301
+ })}
1166
1302
  extraData={{
1167
1303
  focused: effectiveFocused,
1168
1304
  selectedId,
@@ -1173,13 +1309,14 @@ export function TreeView<T = unknown>({
1173
1309
  keyboardRing,
1174
1310
  collapsedSelectedAncestors,
1175
1311
  }}
1176
- {...(canReorder && {
1312
+ {...((canReorder || revealRequest) && {
1177
1313
  onScroll: (e: any) => {
1178
1314
  const y = e?.nativeEvent?.contentOffset?.y;
1179
1315
  if (typeof y === "number") {
1180
1316
  scrollOffsetRef.current = y;
1181
1317
  if (dragUiRef.current) setDragScrollY(y);
1182
1318
  }
1319
+ scheduleReveal();
1183
1320
  },
1184
1321
  scrollEventThrottle: 16,
1185
1322
  })}
@@ -1239,6 +1376,11 @@ export function TreeView<T = unknown>({
1239
1376
  // Remount when a recycled cell switches nodes so state fills
1240
1377
  // and the caret never tween across two different rows.
1241
1378
  key={node.id}
1379
+ ref={(row) => {
1380
+ if (row) renderedRows.current.add(node.id);
1381
+ else renderedRows.current.delete(node.id);
1382
+ scheduleReveal();
1383
+ }}
1242
1384
  id={`${treeId}-node-${index}`}
1243
1385
  {...{ "data-treeview-row": node.id }}
1244
1386
  {...(isDropParent && { "data-treeview-drop-parent": "true" })}
@@ -1265,6 +1407,7 @@ export function TreeView<T = unknown>({
1265
1407
  onLayout={(e: any) => {
1266
1408
  const h = e?.nativeEvent?.layout?.height;
1267
1409
  if (typeof h === "number" && h > 0) rowHeights.current.set(node.id, h);
1410
+ scheduleReveal();
1268
1411
  }}
1269
1412
  backgroundColor={
1270
1413
  // Nest-into parent highlight wins while a drag is active
@@ -190,6 +190,25 @@ export function dateToX(date: Date, rangeStart: Date, pxPerDay: number): number
190
190
  return (dayPart + minutePart) * pxPerDay;
191
191
  }
192
192
 
193
+ /**
194
+ * Anchor near the viewport's logical start. Wide canvases keep the existing
195
+ * label-width inset; narrow canvases reserve room for the date and its marker.
196
+ * A null viewport is provisional and must be re-anchored after layout.
197
+ */
198
+ export function scrollAnchorX(
199
+ date: Date,
200
+ rangeStart: Date,
201
+ pxPerDay: number,
202
+ options: { labelWidth: number; chartWidth: number; viewportWidth: number | null; rtl: boolean },
203
+ ): number {
204
+ const { labelWidth, chartWidth, viewportWidth, rtl } = options;
205
+ const inset =
206
+ viewportWidth === null ? labelWidth : Math.min(labelWidth, Math.floor(viewportWidth / 3));
207
+ const maxScroll = Math.max(0, chartWidth - (viewportWidth ?? 0));
208
+ const ltrX = Math.min(maxScroll, Math.max(0, dateToX(date, rangeStart, pxPerDay) - inset));
209
+ return rtl ? Math.min(maxScroll, Math.max(0, maxScroll - ltrX)) : ltrX;
210
+ }
211
+
193
212
  /** Start-of-day date at a horizontal px offset (fractional days floor). */
194
213
  export function xToDate(x: number, rangeStart: Date, pxPerDay: number): Date {
195
214
  return addDays(startOfDay(rangeStart), Math.floor(x / pxPerDay));
@@ -221,16 +240,116 @@ export function barGeometry(
221
240
  return { x, width };
222
241
  }
223
242
 
243
+ // ── Open-ended spans ──────────────────────────────────────────
244
+
245
+ /**
246
+ * A span whose bounds are BOTH optional: an absent bound means the span is
247
+ * open at that end, not that the caller forgot it.
248
+ *
249
+ * The distinction is the whole point. A thing live from a date with no end,
250
+ * or live forever with no dates at all, cannot be spelled as a `GanttSpan`
251
+ * without inventing the missing edge — and an invented edge reads to the
252
+ * viewer as a date somebody chose. So absence stays absent all the way to
253
+ * the paint, where `openBarGeometry` reports it as `openStart` / `openEnd`
254
+ * and the renderer draws a shape that says "this end is not an end".
255
+ */
256
+ export interface GanttOpenSpan {
257
+ start?: Date;
258
+ end?: Date;
259
+ }
260
+
261
+ /** Neither bound set: the span names no date at all and is live throughout. */
262
+ export function isEternalSpan(span: GanttOpenSpan): boolean {
263
+ return span.start === undefined && span.end === undefined;
264
+ }
265
+
266
+ /** Both bounds set — the only shape drag, resize and keyboard moves accept. */
267
+ export function isBoundedSpan(span: GanttOpenSpan): span is GanttSpan {
268
+ return span.start !== undefined && span.end !== undefined;
269
+ }
270
+
271
+ /**
272
+ * What an open span contributes to the chart RANGE.
273
+ *
274
+ * An eternal span contributes nothing — it names no date, so it must not
275
+ * stretch the axis. A half-open span contributes the one date it does name,
276
+ * as a degenerate span, so the range always reaches far enough to show where
277
+ * that end opens.
278
+ */
279
+ export function openSpanExtent(span: GanttOpenSpan): GanttSpan | undefined {
280
+ const start = span.start ?? span.end;
281
+ const end = span.end ?? span.start;
282
+ if (start === undefined || end === undefined) return undefined;
283
+ return { start, end };
284
+ }
285
+
286
+ /** Every range-contributing extent in a list of open spans, eternals dropped. */
287
+ export function openSpanExtents(spans: readonly GanttOpenSpan[]): GanttSpan[] {
288
+ const extents: GanttSpan[] = [];
289
+ for (const span of spans) {
290
+ const extent = openSpanExtent(span);
291
+ if (extent) extents.push(extent);
292
+ }
293
+ return extents;
294
+ }
295
+
296
+ export interface GanttOpenBarGeometry extends GanttBarGeometry {
297
+ /** No start bound: the bar runs off the range's start edge, uncapped. */
298
+ openStart: boolean;
299
+ /** No end bound: the bar runs off the range's end edge, uncapped. */
300
+ openEnd: boolean;
301
+ /** Neither bound: the whole range, drawn as a rail rather than a bar. */
302
+ eternal: boolean;
303
+ }
304
+
305
+ /**
306
+ * Bar geometry for a possibly-open span, clipped to the chart.
307
+ *
308
+ * A bounded span measures exactly as `barGeometry` measures it (same
309
+ * normalized inclusive edges) — the range always covers it, so the clip is a
310
+ * no-op there. An open end runs to the matching edge of the chart, and an
311
+ * eternal span covers the whole of it.
312
+ */
313
+ export function openBarGeometry(
314
+ span: GanttOpenSpan,
315
+ range: GanttRange,
316
+ pxPerDay: number,
317
+ minWidthPx = 6,
318
+ ): GanttOpenBarGeometry {
319
+ const chartWidth = rangeDays(range) * pxPerDay;
320
+ const openStart = span.start === undefined;
321
+ const openEnd = span.end === undefined;
322
+ const extent = openSpanExtent(span);
323
+ if (!extent) {
324
+ return { x: 0, width: chartWidth, openStart: true, openEnd: true, eternal: true };
325
+ }
326
+ const { startEdge, endEdge } = normalizeSpanEdges(extent);
327
+ const rawStart = openStart ? 0 : dateToX(startEdge, range.start, pxPerDay);
328
+ const rawEnd = openEnd ? chartWidth : dateToX(endEdge, range.start, pxPerDay);
329
+ const x = Math.max(0, Math.min(chartWidth, rawStart));
330
+ const right = Math.max(0, Math.min(chartWidth, rawEnd));
331
+ return { x, width: Math.max(minWidthPx, right - x), openStart, openEnd, eternal: false };
332
+ }
333
+
334
+ /**
335
+ * X offset of a date's column CENTRE within the range, or null when the date
336
+ * falls outside it. The today line and the controlled marker are the same
337
+ * measurement taken at different dates.
338
+ */
339
+ export function dateLineX(range: GanttRange, pxPerDay: number, date: Date): number | null {
340
+ const day = startOfDay(date);
341
+ if (day.getTime() < range.start.getTime() || day.getTime() >= range.end.getTime()) return null;
342
+ // Line sits at the middle of that date's column.
343
+ return dateToX(day, range.start, pxPerDay) + pxPerDay / 2;
344
+ }
345
+
224
346
  /** X offset of the today line, or null when today is outside the range. */
225
347
  export function todayLineX(
226
348
  range: GanttRange,
227
349
  pxPerDay: number,
228
350
  today: Date = new Date(),
229
351
  ): number | null {
230
- const day = startOfDay(today);
231
- if (day.getTime() < range.start.getTime() || day.getTime() >= range.end.getTime()) return null;
232
- // Line sits at the middle of today's column.
233
- return dateToX(day, range.start, pxPerDay) + pxPerDay / 2;
352
+ return dateLineX(range, pxPerDay, today);
234
353
  }
235
354
 
236
355
  // ── Axis ticks ────────────────────────────────────────────────
@@ -335,3 +454,22 @@ export function formatSpanLabel(span: GanttSpan): string {
335
454
  const endLabel = monthDayLabel(lastDay.getTime() >= startEdge.getTime() ? lastDay : startEdge);
336
455
  return startLabel === endLabel ? startLabel : `${startLabel} – ${endLabel}`;
337
456
  }
457
+
458
+ /**
459
+ * The date halves of an open span's label, each absent exactly when its bound
460
+ * is. The WORDS around them belong to the view, which has `t()` — this stays
461
+ * pure and says only what the dates are.
462
+ */
463
+ export function openSpanLabelParts(span: GanttOpenSpan): { start?: string; end?: string } {
464
+ const extent = openSpanExtent(span);
465
+ if (!extent) return {};
466
+ const { startEdge, endEdge } = normalizeSpanEdges(extent);
467
+ const lastDay = addDays(endEdge, -1);
468
+ return {
469
+ start: span.start === undefined ? undefined : monthDayLabel(startEdge),
470
+ end:
471
+ span.end === undefined
472
+ ? undefined
473
+ : monthDayLabel(lastDay.getTime() >= startEdge.getTime() ? lastDay : startEdge),
474
+ };
475
+ }
@@ -81,19 +81,62 @@ export {
81
81
  type ReportColumn,
82
82
  type GroupByConfig,
83
83
  } from "./ReportBuilder";
84
- export { GanttView, type GanttViewProps, type GanttTask, type GanttItemMoveRange } from "./Gantt";
85
84
  export {
85
+ GanttView,
86
+ type GanttViewProps,
87
+ type GanttTask,
88
+ type GanttTaskSpan,
89
+ type GanttSpanRef,
90
+ type GanttItemMoveRange,
91
+ } from "./Gantt";
92
+ // ganttMath is surfaced WHOLE, deliberately, against this barrel's otherwise
93
+ // curated style (MPO-249). It is pure, side-effect-free, DOM-free day math —
94
+ // there is nothing in it that is an implementation detail worth hiding, and
95
+ // the curated subset had already drifted into an asymmetry that cost a
96
+ // consumer real code: `dateToX` shipped and its inverse `xToDate` did not, so
97
+ // anything positioning by date could read the axis but not read a pointer back
98
+ // off it, which is the direction every drag, scrub and hit-test needs. The
99
+ // day-math helpers (`startOfDay`, `addDays`, `dayDiff`, `rangeDays`) go with
100
+ // them, because a consumer laying out its own timeline on `computeGanttRange`
101
+ // needs the same DST-safe local wall-clock arithmetic the module uses
102
+ // internally; re-deriving it is how two subtly different implementations of
103
+ // "add a day" end up in one app. `views.spec.tsx` asserts this barrel
104
+ // re-exports every `ganttMath` export, so the next omission fails a test
105
+ // instead of shipping.
106
+ export {
107
+ addDays,
86
108
  barGeometry,
109
+ clampResizeDayDelta,
87
110
  computeGanttRange,
111
+ dateLineX,
88
112
  dateToX,
113
+ dayDiff,
89
114
  dxToDayDelta,
115
+ formatRangeLabel,
116
+ formatSpanLabel,
90
117
  ganttTaskAccessibleLabel,
91
118
  generateTicks,
119
+ isBoundedSpan,
120
+ isEternalSpan,
121
+ MS_PER_DAY,
92
122
  normalizeSpanEdges,
123
+ openBarGeometry,
124
+ openSpanExtent,
125
+ openSpanExtents,
126
+ openSpanLabelParts,
127
+ rangeDays,
128
+ resizeSpanByDays,
129
+ scrollAnchorX,
93
130
  shiftSpanByDays,
131
+ spanInclusiveDays,
132
+ startOfDay,
94
133
  todayLineX,
134
+ xToDate,
95
135
  type GanttBarGeometry,
136
+ type GanttOpenBarGeometry,
137
+ type GanttOpenSpan,
96
138
  type GanttRange,
139
+ type GanttResizeEdge,
97
140
  type GanttSpan,
98
141
  type GanttTick,
99
142
  type GanttZoom,
@@ -0,0 +1,83 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { treeRevealExpansion, treeRevealOffset } from "./treeViewReveal";
3
+
4
+ const nodes = [
5
+ {
6
+ id: "folders",
7
+ children: [
8
+ {
9
+ id: "archive",
10
+ children: Array.from({ length: 500 }, (_, index) => ({ id: `item-${index}` })),
11
+ },
12
+ ],
13
+ },
14
+ { id: "other", children: [{ id: "other-item" }] },
15
+ ];
16
+
17
+ describe("tree reveal ancestors", () => {
18
+ it("finds the exact last leaf of a 500-item branch and preserves unrelated expansion", () => {
19
+ const expanded = new Set(["other"]);
20
+ expect(treeRevealExpansion(nodes, expanded, "item-499")).toEqual(
21
+ new Set(["other", "folders", "archive"]),
22
+ );
23
+ expect(expanded).toEqual(new Set(["other"]));
24
+ });
25
+
26
+ it("does not expand the target branch itself", () => {
27
+ expect(treeRevealExpansion(nodes, new Set(), "archive")).toEqual(new Set(["folders"]));
28
+ });
29
+
30
+ it("preserves the set when the target is already exposed", () => {
31
+ const expanded = new Set(["folders", "archive"]);
32
+ expect(treeRevealExpansion(nodes, expanded, "item-499")).toBe(expanded);
33
+ });
34
+
35
+ it("does not substitute a prefix, ancestor or similarly named leaf for a missing ID", () => {
36
+ expect(treeRevealExpansion(nodes, new Set(), "item-500")).toBeUndefined();
37
+ expect(treeRevealExpansion(nodes, new Set(), "item")).toBeUndefined();
38
+ expect(treeRevealExpansion([], new Set(), "folders")).toBeUndefined();
39
+ });
40
+
41
+ it("reveals a root without expanding its children", () => {
42
+ const expanded = new Set<string>();
43
+ expect(treeRevealExpansion(nodes, expanded, "folders")).toBe(expanded);
44
+ });
45
+ });
46
+
47
+ describe("tree reveal measured offsets", () => {
48
+ it("uses the actual layout of a distant variable-height row, not index times an estimate", () => {
49
+ const heights = Array.from({ length: 500 }, (_, index) => (index % 2 === 0 ? 32 : 80));
50
+ const y = heights.slice(0, 499).reduce((sum, height) => sum + height, 0);
51
+ expect(y).toBe(27920);
52
+ expect(treeRevealOffset({ y, height: heights[499] }, 0, 240)).toBe(27760);
53
+ expect(treeRevealOffset({ y, height: heights[499] }, 27760, 240)).toBe(27760);
54
+ });
55
+
56
+ it("corrects again when virtualization replaces an estimate with a taller measurement", () => {
57
+ expect(treeRevealOffset({ y: 27920, height: 32 }, 0, 240)).toBe(27712);
58
+ expect(treeRevealOffset({ y: 27920, height: 80 }, 27712, 240)).toBe(27760);
59
+ });
60
+
61
+ it("leaves a fully visible row in place", () => {
62
+ expect(treeRevealOffset({ y: 300, height: 80 }, 250, 240)).toBe(250);
63
+ });
64
+
65
+ it("reveals a row above the viewport at its top", () => {
66
+ expect(treeRevealOffset({ y: 120, height: 80 }, 250, 240)).toBe(120);
67
+ });
68
+
69
+ it("aligns the top of a row taller than the viewport without oscillating", () => {
70
+ expect(treeRevealOffset({ y: 120, height: 300 }, 250, 240)).toBe(120);
71
+ expect(treeRevealOffset({ y: 120, height: 300 }, 120, 240)).toBe(120);
72
+ });
73
+
74
+ it.each([
75
+ [{ y: 20, height: 32 }, 0, 0],
76
+ [{ y: 20, height: 0 }, 0, 240],
77
+ [{ y: Number.NaN, height: 32 }, 0, 240],
78
+ [{ y: 20, height: 32 }, Number.NaN, 240],
79
+ [{ y: 20, height: 32 }, 0, Number.POSITIVE_INFINITY],
80
+ ])("waits for usable geometry: %o, %s, %s", (layout, offset, height) => {
81
+ expect(treeRevealOffset(layout, offset, height)).toBeUndefined();
82
+ });
83
+ });
@@ -0,0 +1,45 @@
1
+ interface RevealTreeNode {
2
+ id: string;
3
+ children?: readonly RevealTreeNode[];
4
+ }
5
+
6
+ export function treeRevealExpansion(
7
+ nodes: readonly RevealTreeNode[],
8
+ expandedIds: ReadonlySet<string>,
9
+ targetId: string,
10
+ ): ReadonlySet<string> | undefined {
11
+ const ancestors: string[] = [];
12
+ const find = (items: readonly RevealTreeNode[]): boolean => {
13
+ for (const node of items) {
14
+ if (node.id === targetId) return true;
15
+ if (node.children?.length) {
16
+ ancestors.push(node.id);
17
+ if (find(node.children)) return true;
18
+ ancestors.pop();
19
+ }
20
+ }
21
+ return false;
22
+ };
23
+ if (!find(nodes)) return undefined;
24
+ if (ancestors.every((id) => expandedIds.has(id))) return expandedIds;
25
+ return new Set([...expandedIds, ...ancestors]);
26
+ }
27
+
28
+ export function treeRevealOffset(
29
+ layout: { y: number; height: number },
30
+ offset: number,
31
+ viewportHeight: number,
32
+ ): number | undefined {
33
+ if (
34
+ ![layout.y, layout.height, offset, viewportHeight].every(Number.isFinite) ||
35
+ viewportHeight <= 0 ||
36
+ layout.height <= 0
37
+ ) {
38
+ return undefined;
39
+ }
40
+ if (layout.height > viewportHeight || layout.y < offset) return Math.max(0, layout.y);
41
+ if (layout.y + layout.height > offset + viewportHeight) {
42
+ return Math.max(0, layout.y + layout.height - viewportHeight);
43
+ }
44
+ return offset;
45
+ }