@multiplatform.one/components 7.7.6 → 7.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (565) hide show
  1. package/dist/cjs/Button.native.js.map +1 -1
  2. package/dist/cjs/Card.cjs +7 -1
  3. package/dist/cjs/Card.native.js +11 -1
  4. package/dist/cjs/Card.native.js.map +1 -1
  5. package/dist/cjs/CardFooter.cjs +1 -0
  6. package/dist/cjs/CardFooter.native.js +1 -0
  7. package/dist/cjs/CardFooter.native.js.map +1 -1
  8. package/dist/cjs/CopyField/index.cjs +6 -1
  9. package/dist/cjs/CopyField/index.native.js +6 -1
  10. package/dist/cjs/CopyField/index.native.js.map +1 -1
  11. package/dist/cjs/DropdownMenu/index.cjs +31 -1
  12. package/dist/cjs/DropdownMenu/index.native.js +31 -1
  13. package/dist/cjs/DropdownMenu/index.native.js.map +1 -1
  14. package/dist/cjs/Meter/index.cjs +12 -5
  15. package/dist/cjs/Meter/index.native.js +12 -5
  16. package/dist/cjs/Meter/index.native.js.map +1 -1
  17. package/dist/cjs/Tabs/index.cjs +7 -6
  18. package/dist/cjs/Tabs/index.native.js +8 -7
  19. package/dist/cjs/Tabs/index.native.js.map +1 -1
  20. package/dist/cjs/Toast/index.cjs +53 -2
  21. package/dist/cjs/Toast/index.native.js +55 -2
  22. package/dist/cjs/Toast/index.native.js.map +1 -1
  23. package/dist/cjs/actions/DestructiveAction.cjs +7 -13
  24. package/dist/cjs/actions/DestructiveAction.native.js +7 -15
  25. package/dist/cjs/actions/DestructiveAction.native.js.map +1 -1
  26. package/dist/cjs/charts/Axis.cjs +5 -0
  27. package/dist/cjs/charts/Axis.native.js +5 -0
  28. package/dist/cjs/charts/Axis.native.js.map +1 -1
  29. package/dist/cjs/charts/BarChart.cjs +71 -57
  30. package/dist/cjs/charts/BarChart.native.js +81 -67
  31. package/dist/cjs/charts/BarChart.native.js.map +1 -1
  32. package/dist/cjs/charts/ChartDataView.cjs +212 -0
  33. package/dist/cjs/charts/ChartDataView.native.js +224 -0
  34. package/dist/cjs/charts/ChartDataView.native.js.map +1 -0
  35. package/dist/cjs/charts/ChartSurface.cjs +5 -1
  36. package/dist/cjs/charts/ChartSurface.native.js +5 -1
  37. package/dist/cjs/charts/ChartSurface.native.js.map +1 -1
  38. package/dist/cjs/charts/LineChart.cjs +81 -67
  39. package/dist/cjs/charts/LineChart.native.js +94 -80
  40. package/dist/cjs/charts/LineChart.native.js.map +1 -1
  41. package/dist/cjs/charts/PieChart.cjs +98 -73
  42. package/dist/cjs/charts/PieChart.native.js +109 -84
  43. package/dist/cjs/charts/PieChart.native.js.map +1 -1
  44. package/dist/cjs/charts/Sparkline.cjs +10 -1
  45. package/dist/cjs/charts/Sparkline.native.js +10 -1
  46. package/dist/cjs/charts/Sparkline.native.js.map +1 -1
  47. package/dist/cjs/charts/accessibility.cjs +4 -0
  48. package/dist/cjs/charts/accessibility.native.js +7 -0
  49. package/dist/cjs/charts/accessibility.native.js.map +1 -1
  50. package/dist/cjs/charts/index.cjs +3 -1
  51. package/dist/cjs/charts/index.native.js +2 -0
  52. package/dist/cjs/charts/index.native.js.map +1 -1
  53. package/dist/cjs/charts/math.cjs +16 -0
  54. package/dist/cjs/charts/math.native.js +18 -0
  55. package/dist/cjs/charts/math.native.js.map +1 -1
  56. package/dist/cjs/charts/series.cjs +49 -7
  57. package/dist/cjs/charts/series.native.js +53 -11
  58. package/dist/cjs/charts/series.native.js.map +1 -1
  59. package/dist/cjs/charts/svg.cjs +46 -3
  60. package/dist/cjs/charts/svg.native.js +46 -3
  61. package/dist/cjs/charts/svg.native.js.map +1 -1
  62. package/dist/cjs/code/CodeBlock/index.cjs +6 -1
  63. package/dist/cjs/code/CodeBlock/index.native.js +6 -1
  64. package/dist/cjs/code/CodeBlock/index.native.js.map +1 -1
  65. package/dist/cjs/feedback/ConfirmDialog.cjs +7 -21
  66. package/dist/cjs/feedback/ConfirmDialog.native.js +7 -22
  67. package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
  68. package/dist/cjs/feedback/NotifyHost.cjs +2 -1
  69. package/dist/cjs/feedback/NotifyHost.native.js +3 -2
  70. package/dist/cjs/feedback/NotifyHost.native.js.map +1 -1
  71. package/dist/cjs/feedback/copy.cjs +36 -4
  72. package/dist/cjs/feedback/copy.native.js +38 -4
  73. package/dist/cjs/feedback/copy.native.js.map +1 -1
  74. package/dist/cjs/feedback/index.cjs +1 -0
  75. package/dist/cjs/feedback/index.native.js +1 -0
  76. package/dist/cjs/feedback/index.native.js.map +1 -1
  77. package/dist/cjs/feedback/notify.cjs +1 -0
  78. package/dist/cjs/feedback/notify.native.js +1 -0
  79. package/dist/cjs/feedback/notify.native.js.map +1 -1
  80. package/dist/cjs/feedback/route.cjs +3 -0
  81. package/dist/cjs/feedback/route.native.js +3 -0
  82. package/dist/cjs/feedback/route.native.js.map +1 -1
  83. package/dist/cjs/feedback/store.cjs +6 -0
  84. package/dist/cjs/feedback/store.native.js +8 -0
  85. package/dist/cjs/feedback/store.native.js.map +1 -1
  86. package/dist/cjs/icons/lucide.cjs +2 -1
  87. package/dist/cjs/icons/lucide.native.js +2 -1
  88. package/dist/cjs/icons/lucide.native.js.map +1 -1
  89. package/dist/cjs/layouts/PaneScaffold.cjs +96 -41
  90. package/dist/cjs/layouts/PaneScaffold.native.js +97 -41
  91. package/dist/cjs/layouts/PaneScaffold.native.js.map +1 -1
  92. package/dist/cjs/layouts/index.cjs +2 -0
  93. package/dist/cjs/layouts/index.native.js +2 -0
  94. package/dist/cjs/layouts/index.native.js.map +1 -1
  95. package/dist/cjs/layouts/page.cjs +48 -7
  96. package/dist/cjs/layouts/page.native.js +50 -7
  97. package/dist/cjs/layouts/page.native.js.map +1 -1
  98. package/dist/cjs/shared/useKeyboardInset.cjs +1 -19
  99. package/dist/cjs/shared/useKeyboardInset.native.js +3 -3
  100. package/dist/cjs/shared/useKeyboardInset.native.js.map +1 -1
  101. package/dist/cjs/views/Dashboard.cjs +110 -17
  102. package/dist/cjs/views/Dashboard.native.js +151 -45
  103. package/dist/cjs/views/Dashboard.native.js.map +1 -1
  104. package/dist/cjs/views/Gantt.cjs +374 -91
  105. package/dist/cjs/views/Gantt.native.js +443 -94
  106. package/dist/cjs/views/Gantt.native.js.map +1 -1
  107. package/dist/cjs/views/ganttMath.cjs +91 -2
  108. package/dist/cjs/views/ganttMath.native.js +113 -3
  109. package/dist/cjs/views/ganttMath.native.js.map +1 -1
  110. package/dist/cjs/views/index.cjs +20 -1
  111. package/dist/cjs/views/index.native.js +20 -1
  112. package/dist/cjs/views/index.native.js.map +1 -1
  113. package/dist/esm/Button.mjs.map +1 -1
  114. package/dist/esm/Button.native.js.map +1 -1
  115. package/dist/esm/Card.mjs +8 -2
  116. package/dist/esm/Card.mjs.map +1 -1
  117. package/dist/esm/Card.native.js +12 -2
  118. package/dist/esm/Card.native.js.map +1 -1
  119. package/dist/esm/CardFooter.mjs +1 -0
  120. package/dist/esm/CardFooter.mjs.map +1 -1
  121. package/dist/esm/CardFooter.native.js +1 -0
  122. package/dist/esm/CardFooter.native.js.map +1 -1
  123. package/dist/esm/CopyField/index.mjs +7 -2
  124. package/dist/esm/CopyField/index.mjs.map +1 -1
  125. package/dist/esm/CopyField/index.native.js +7 -2
  126. package/dist/esm/CopyField/index.native.js.map +1 -1
  127. package/dist/esm/DropdownMenu/index.mjs +32 -2
  128. package/dist/esm/DropdownMenu/index.mjs.map +1 -1
  129. package/dist/esm/DropdownMenu/index.native.js +32 -2
  130. package/dist/esm/DropdownMenu/index.native.js.map +1 -1
  131. package/dist/esm/Meter/index.mjs +12 -5
  132. package/dist/esm/Meter/index.mjs.map +1 -1
  133. package/dist/esm/Meter/index.native.js +12 -5
  134. package/dist/esm/Meter/index.native.js.map +1 -1
  135. package/dist/esm/Tabs/index.mjs +7 -6
  136. package/dist/esm/Tabs/index.mjs.map +1 -1
  137. package/dist/esm/Tabs/index.native.js +8 -7
  138. package/dist/esm/Tabs/index.native.js.map +1 -1
  139. package/dist/esm/Toast/index.mjs +52 -3
  140. package/dist/esm/Toast/index.mjs.map +1 -1
  141. package/dist/esm/Toast/index.native.js +54 -3
  142. package/dist/esm/Toast/index.native.js.map +1 -1
  143. package/dist/esm/actions/DestructiveAction.mjs +8 -14
  144. package/dist/esm/actions/DestructiveAction.mjs.map +1 -1
  145. package/dist/esm/actions/DestructiveAction.native.js +8 -16
  146. package/dist/esm/actions/DestructiveAction.native.js.map +1 -1
  147. package/dist/esm/charts/Axis.mjs +6 -1
  148. package/dist/esm/charts/Axis.mjs.map +1 -1
  149. package/dist/esm/charts/Axis.native.js +6 -1
  150. package/dist/esm/charts/Axis.native.js.map +1 -1
  151. package/dist/esm/charts/BarChart.mjs +72 -58
  152. package/dist/esm/charts/BarChart.mjs.map +1 -1
  153. package/dist/esm/charts/BarChart.native.js +82 -68
  154. package/dist/esm/charts/BarChart.native.js.map +1 -1
  155. package/dist/esm/charts/ChartDataView.mjs +185 -0
  156. package/dist/esm/charts/ChartDataView.mjs.map +1 -0
  157. package/dist/esm/charts/ChartDataView.native.js +194 -0
  158. package/dist/esm/charts/ChartDataView.native.js.map +1 -0
  159. package/dist/esm/charts/ChartSurface.mjs +5 -1
  160. package/dist/esm/charts/ChartSurface.mjs.map +1 -1
  161. package/dist/esm/charts/ChartSurface.native.js +5 -1
  162. package/dist/esm/charts/ChartSurface.native.js.map +1 -1
  163. package/dist/esm/charts/LineChart.mjs +82 -68
  164. package/dist/esm/charts/LineChart.mjs.map +1 -1
  165. package/dist/esm/charts/LineChart.native.js +95 -81
  166. package/dist/esm/charts/LineChart.native.js.map +1 -1
  167. package/dist/esm/charts/PieChart.mjs +100 -75
  168. package/dist/esm/charts/PieChart.mjs.map +1 -1
  169. package/dist/esm/charts/PieChart.native.js +111 -86
  170. package/dist/esm/charts/PieChart.native.js.map +1 -1
  171. package/dist/esm/charts/Sparkline.mjs +11 -2
  172. package/dist/esm/charts/Sparkline.mjs.map +1 -1
  173. package/dist/esm/charts/Sparkline.native.js +11 -2
  174. package/dist/esm/charts/Sparkline.native.js.map +1 -1
  175. package/dist/esm/charts/accessibility.mjs +4 -1
  176. package/dist/esm/charts/accessibility.mjs.map +1 -1
  177. package/dist/esm/charts/accessibility.native.js +7 -1
  178. package/dist/esm/charts/accessibility.native.js.map +1 -1
  179. package/dist/esm/charts/index.mjs +2 -1
  180. package/dist/esm/charts/index.mjs.map +1 -1
  181. package/dist/esm/charts/index.native.js +2 -1
  182. package/dist/esm/charts/index.native.js.map +1 -1
  183. package/dist/esm/charts/math.mjs +16 -1
  184. package/dist/esm/charts/math.mjs.map +1 -1
  185. package/dist/esm/charts/math.native.js +18 -1
  186. package/dist/esm/charts/math.native.js.map +1 -1
  187. package/dist/esm/charts/series.mjs +51 -9
  188. package/dist/esm/charts/series.mjs.map +1 -1
  189. package/dist/esm/charts/series.native.js +55 -13
  190. package/dist/esm/charts/series.native.js.map +1 -1
  191. package/dist/esm/charts/svg.mjs +40 -4
  192. package/dist/esm/charts/svg.mjs.map +1 -1
  193. package/dist/esm/charts/svg.native.js +40 -4
  194. package/dist/esm/charts/svg.native.js.map +1 -1
  195. package/dist/esm/code/CodeBlock/index.mjs +7 -2
  196. package/dist/esm/code/CodeBlock/index.mjs.map +1 -1
  197. package/dist/esm/code/CodeBlock/index.native.js +7 -2
  198. package/dist/esm/code/CodeBlock/index.native.js.map +1 -1
  199. package/dist/esm/feedback/ConfirmDialog.mjs +8 -22
  200. package/dist/esm/feedback/ConfirmDialog.mjs.map +1 -1
  201. package/dist/esm/feedback/ConfirmDialog.native.js +8 -23
  202. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  203. package/dist/esm/feedback/NotifyHost.mjs +2 -1
  204. package/dist/esm/feedback/NotifyHost.mjs.map +1 -1
  205. package/dist/esm/feedback/NotifyHost.native.js +3 -2
  206. package/dist/esm/feedback/NotifyHost.native.js.map +1 -1
  207. package/dist/esm/feedback/copy.mjs +35 -4
  208. package/dist/esm/feedback/copy.mjs.map +1 -1
  209. package/dist/esm/feedback/copy.native.js +37 -4
  210. package/dist/esm/feedback/copy.native.js.map +1 -1
  211. package/dist/esm/feedback/index.mjs +2 -2
  212. package/dist/esm/feedback/index.mjs.map +1 -1
  213. package/dist/esm/feedback/index.native.js +2 -2
  214. package/dist/esm/feedback/index.native.js.map +1 -1
  215. package/dist/esm/feedback/notify.mjs +1 -0
  216. package/dist/esm/feedback/notify.mjs.map +1 -1
  217. package/dist/esm/feedback/notify.native.js +1 -0
  218. package/dist/esm/feedback/notify.native.js.map +1 -1
  219. package/dist/esm/feedback/route.mjs +3 -0
  220. package/dist/esm/feedback/route.mjs.map +1 -1
  221. package/dist/esm/feedback/route.native.js +3 -0
  222. package/dist/esm/feedback/route.native.js.map +1 -1
  223. package/dist/esm/feedback/store.mjs +6 -1
  224. package/dist/esm/feedback/store.mjs.map +1 -1
  225. package/dist/esm/feedback/store.native.js +8 -1
  226. package/dist/esm/feedback/store.native.js.map +1 -1
  227. package/dist/esm/icons/lucide.mjs +2 -2
  228. package/dist/esm/icons/lucide.mjs.map +1 -1
  229. package/dist/esm/icons/lucide.native.js +2 -2
  230. package/dist/esm/icons/lucide.native.js.map +1 -1
  231. package/dist/esm/layouts/PaneScaffold.mjs +97 -42
  232. package/dist/esm/layouts/PaneScaffold.mjs.map +1 -1
  233. package/dist/esm/layouts/PaneScaffold.native.js +98 -42
  234. package/dist/esm/layouts/PaneScaffold.native.js.map +1 -1
  235. package/dist/esm/layouts/index.mjs +2 -1
  236. package/dist/esm/layouts/index.mjs.map +1 -1
  237. package/dist/esm/layouts/index.native.js +2 -1
  238. package/dist/esm/layouts/index.native.js.map +1 -1
  239. package/dist/esm/layouts/page.mjs +49 -8
  240. package/dist/esm/layouts/page.mjs.map +1 -1
  241. package/dist/esm/layouts/page.native.js +51 -8
  242. package/dist/esm/layouts/page.native.js.map +1 -1
  243. package/dist/esm/shared/useKeyboardInset.mjs +1 -19
  244. package/dist/esm/shared/useKeyboardInset.mjs.map +1 -1
  245. package/dist/esm/shared/useKeyboardInset.native.js.map +1 -1
  246. package/dist/esm/views/Dashboard.mjs +112 -19
  247. package/dist/esm/views/Dashboard.mjs.map +1 -1
  248. package/dist/esm/views/Dashboard.native.js +153 -47
  249. package/dist/esm/views/Dashboard.native.js.map +1 -1
  250. package/dist/esm/views/Gantt.mjs +376 -93
  251. package/dist/esm/views/Gantt.mjs.map +1 -1
  252. package/dist/esm/views/Gantt.native.js +445 -96
  253. package/dist/esm/views/Gantt.native.js.map +1 -1
  254. package/dist/esm/views/ganttMath.mjs +84 -3
  255. package/dist/esm/views/ganttMath.mjs.map +1 -1
  256. package/dist/esm/views/ganttMath.native.js +106 -4
  257. package/dist/esm/views/ganttMath.native.js.map +1 -1
  258. package/dist/esm/views/index.mjs +2 -2
  259. package/dist/esm/views/index.mjs.map +1 -1
  260. package/dist/esm/views/index.native.js +2 -2
  261. package/dist/esm/views/index.native.js.map +1 -1
  262. package/dist/jsx/Button.mjs.map +1 -1
  263. package/dist/jsx/Button.native.js.map +1 -1
  264. package/dist/jsx/Card.mjs +8 -2
  265. package/dist/jsx/Card.mjs.map +1 -1
  266. package/dist/jsx/Card.native.js +11 -1
  267. package/dist/jsx/Card.native.js.map +1 -1
  268. package/dist/jsx/CardFooter.mjs +1 -0
  269. package/dist/jsx/CardFooter.mjs.map +1 -1
  270. package/dist/jsx/CardFooter.native.js +1 -0
  271. package/dist/jsx/CardFooter.native.js.map +1 -1
  272. package/dist/jsx/CopyField/index.mjs +7 -2
  273. package/dist/jsx/CopyField/index.mjs.map +1 -1
  274. package/dist/jsx/CopyField/index.native.js +6 -1
  275. package/dist/jsx/CopyField/index.native.js.map +1 -1
  276. package/dist/jsx/DropdownMenu/index.mjs +32 -2
  277. package/dist/jsx/DropdownMenu/index.mjs.map +1 -1
  278. package/dist/jsx/DropdownMenu/index.native.js +31 -1
  279. package/dist/jsx/DropdownMenu/index.native.js.map +1 -1
  280. package/dist/jsx/Meter/index.mjs +12 -5
  281. package/dist/jsx/Meter/index.mjs.map +1 -1
  282. package/dist/jsx/Meter/index.native.js +12 -5
  283. package/dist/jsx/Meter/index.native.js.map +1 -1
  284. package/dist/jsx/Tabs/index.mjs +7 -6
  285. package/dist/jsx/Tabs/index.mjs.map +1 -1
  286. package/dist/jsx/Tabs/index.native.js +8 -7
  287. package/dist/jsx/Tabs/index.native.js.map +1 -1
  288. package/dist/jsx/Toast/index.mjs +52 -3
  289. package/dist/jsx/Toast/index.mjs.map +1 -1
  290. package/dist/jsx/Toast/index.native.js +55 -2
  291. package/dist/jsx/Toast/index.native.js.map +1 -1
  292. package/dist/jsx/actions/DestructiveAction.mjs +8 -14
  293. package/dist/jsx/actions/DestructiveAction.mjs.map +1 -1
  294. package/dist/jsx/actions/DestructiveAction.native.js +7 -15
  295. package/dist/jsx/actions/DestructiveAction.native.js.map +1 -1
  296. package/dist/jsx/charts/Axis.mjs +6 -1
  297. package/dist/jsx/charts/Axis.mjs.map +1 -1
  298. package/dist/jsx/charts/Axis.native.js +5 -0
  299. package/dist/jsx/charts/Axis.native.js.map +1 -1
  300. package/dist/jsx/charts/BarChart.mjs +72 -58
  301. package/dist/jsx/charts/BarChart.mjs.map +1 -1
  302. package/dist/jsx/charts/BarChart.native.js +81 -67
  303. package/dist/jsx/charts/BarChart.native.js.map +1 -1
  304. package/dist/jsx/charts/ChartDataView.mjs +185 -0
  305. package/dist/jsx/charts/ChartDataView.mjs.map +1 -0
  306. package/dist/jsx/charts/ChartDataView.native.js +224 -0
  307. package/dist/jsx/charts/ChartDataView.native.js.map +1 -0
  308. package/dist/jsx/charts/ChartSurface.mjs +5 -1
  309. package/dist/jsx/charts/ChartSurface.mjs.map +1 -1
  310. package/dist/jsx/charts/ChartSurface.native.js +5 -1
  311. package/dist/jsx/charts/ChartSurface.native.js.map +1 -1
  312. package/dist/jsx/charts/LineChart.mjs +82 -68
  313. package/dist/jsx/charts/LineChart.mjs.map +1 -1
  314. package/dist/jsx/charts/LineChart.native.js +94 -80
  315. package/dist/jsx/charts/LineChart.native.js.map +1 -1
  316. package/dist/jsx/charts/PieChart.mjs +100 -75
  317. package/dist/jsx/charts/PieChart.mjs.map +1 -1
  318. package/dist/jsx/charts/PieChart.native.js +109 -84
  319. package/dist/jsx/charts/PieChart.native.js.map +1 -1
  320. package/dist/jsx/charts/Sparkline.mjs +11 -2
  321. package/dist/jsx/charts/Sparkline.mjs.map +1 -1
  322. package/dist/jsx/charts/Sparkline.native.js +10 -1
  323. package/dist/jsx/charts/Sparkline.native.js.map +1 -1
  324. package/dist/jsx/charts/accessibility.mjs +4 -1
  325. package/dist/jsx/charts/accessibility.mjs.map +1 -1
  326. package/dist/jsx/charts/accessibility.native.js +7 -0
  327. package/dist/jsx/charts/accessibility.native.js.map +1 -1
  328. package/dist/jsx/charts/index.mjs +2 -1
  329. package/dist/jsx/charts/index.mjs.map +1 -1
  330. package/dist/jsx/charts/index.native.js +2 -0
  331. package/dist/jsx/charts/index.native.js.map +1 -1
  332. package/dist/jsx/charts/math.mjs +16 -1
  333. package/dist/jsx/charts/math.mjs.map +1 -1
  334. package/dist/jsx/charts/math.native.js +18 -0
  335. package/dist/jsx/charts/math.native.js.map +1 -1
  336. package/dist/jsx/charts/series.mjs +51 -9
  337. package/dist/jsx/charts/series.mjs.map +1 -1
  338. package/dist/jsx/charts/series.native.js +53 -11
  339. package/dist/jsx/charts/series.native.js.map +1 -1
  340. package/dist/jsx/charts/svg.mjs +40 -4
  341. package/dist/jsx/charts/svg.mjs.map +1 -1
  342. package/dist/jsx/charts/svg.native.js +46 -3
  343. package/dist/jsx/charts/svg.native.js.map +1 -1
  344. package/dist/jsx/code/CodeBlock/index.mjs +7 -2
  345. package/dist/jsx/code/CodeBlock/index.mjs.map +1 -1
  346. package/dist/jsx/code/CodeBlock/index.native.js +6 -1
  347. package/dist/jsx/code/CodeBlock/index.native.js.map +1 -1
  348. package/dist/jsx/feedback/ConfirmDialog.mjs +8 -22
  349. package/dist/jsx/feedback/ConfirmDialog.mjs.map +1 -1
  350. package/dist/jsx/feedback/ConfirmDialog.native.js +7 -22
  351. package/dist/jsx/feedback/ConfirmDialog.native.js.map +1 -1
  352. package/dist/jsx/feedback/NotifyHost.mjs +2 -1
  353. package/dist/jsx/feedback/NotifyHost.mjs.map +1 -1
  354. package/dist/jsx/feedback/NotifyHost.native.js +3 -2
  355. package/dist/jsx/feedback/NotifyHost.native.js.map +1 -1
  356. package/dist/jsx/feedback/copy.mjs +35 -4
  357. package/dist/jsx/feedback/copy.mjs.map +1 -1
  358. package/dist/jsx/feedback/copy.native.js +38 -4
  359. package/dist/jsx/feedback/copy.native.js.map +1 -1
  360. package/dist/jsx/feedback/index.mjs +2 -2
  361. package/dist/jsx/feedback/index.mjs.map +1 -1
  362. package/dist/jsx/feedback/index.native.js +1 -0
  363. package/dist/jsx/feedback/index.native.js.map +1 -1
  364. package/dist/jsx/feedback/notify.mjs +1 -0
  365. package/dist/jsx/feedback/notify.mjs.map +1 -1
  366. package/dist/jsx/feedback/notify.native.js +1 -0
  367. package/dist/jsx/feedback/notify.native.js.map +1 -1
  368. package/dist/jsx/feedback/route.mjs +3 -0
  369. package/dist/jsx/feedback/route.mjs.map +1 -1
  370. package/dist/jsx/feedback/route.native.js +3 -0
  371. package/dist/jsx/feedback/route.native.js.map +1 -1
  372. package/dist/jsx/feedback/store.mjs +6 -1
  373. package/dist/jsx/feedback/store.mjs.map +1 -1
  374. package/dist/jsx/feedback/store.native.js +8 -0
  375. package/dist/jsx/feedback/store.native.js.map +1 -1
  376. package/dist/jsx/icons/lucide.mjs +2 -2
  377. package/dist/jsx/icons/lucide.mjs.map +1 -1
  378. package/dist/jsx/icons/lucide.native.js +2 -1
  379. package/dist/jsx/layouts/PaneScaffold.mjs +97 -42
  380. package/dist/jsx/layouts/PaneScaffold.mjs.map +1 -1
  381. package/dist/jsx/layouts/PaneScaffold.native.js +97 -41
  382. package/dist/jsx/layouts/PaneScaffold.native.js.map +1 -1
  383. package/dist/jsx/layouts/index.mjs +2 -1
  384. package/dist/jsx/layouts/index.mjs.map +1 -1
  385. package/dist/jsx/layouts/index.native.js +2 -0
  386. package/dist/jsx/layouts/index.native.js.map +1 -1
  387. package/dist/jsx/layouts/page.mjs +49 -8
  388. package/dist/jsx/layouts/page.mjs.map +1 -1
  389. package/dist/jsx/layouts/page.native.js +50 -7
  390. package/dist/jsx/layouts/page.native.js.map +1 -1
  391. package/dist/jsx/shared/useKeyboardInset.mjs +1 -19
  392. package/dist/jsx/shared/useKeyboardInset.mjs.map +1 -1
  393. package/dist/jsx/shared/useKeyboardInset.native.js +3 -3
  394. package/dist/jsx/shared/useKeyboardInset.native.js.map +1 -1
  395. package/dist/jsx/views/Dashboard.mjs +112 -19
  396. package/dist/jsx/views/Dashboard.mjs.map +1 -1
  397. package/dist/jsx/views/Dashboard.native.js +151 -45
  398. package/dist/jsx/views/Dashboard.native.js.map +1 -1
  399. package/dist/jsx/views/Gantt.mjs +376 -93
  400. package/dist/jsx/views/Gantt.mjs.map +1 -1
  401. package/dist/jsx/views/Gantt.native.js +443 -94
  402. package/dist/jsx/views/Gantt.native.js.map +1 -1
  403. package/dist/jsx/views/ganttMath.mjs +84 -3
  404. package/dist/jsx/views/ganttMath.mjs.map +1 -1
  405. package/dist/jsx/views/ganttMath.native.js +113 -3
  406. package/dist/jsx/views/ganttMath.native.js.map +1 -1
  407. package/dist/jsx/views/index.mjs +2 -2
  408. package/dist/jsx/views/index.mjs.map +1 -1
  409. package/dist/jsx/views/index.native.js +20 -1
  410. package/dist/jsx/views/index.native.js.map +1 -1
  411. package/package.json +11 -9
  412. package/src/Button.tsx +10 -2
  413. package/src/Card.spec.tsx +76 -3
  414. package/src/Card.stories.tsx +1 -1
  415. package/src/Card.tsx +13 -1
  416. package/src/CardFooter.stories.tsx +3 -7
  417. package/src/CardFooter.tsx +3 -1
  418. package/src/CardHeader.stories.tsx +1 -3
  419. package/src/Collapsible.stories.tsx +2 -2
  420. package/src/CopyField/CopyField.spec.tsx +66 -1
  421. package/src/CopyField/index.tsx +4 -3
  422. package/src/DropdownMenu/DropdownMenu.spec.tsx +112 -1
  423. package/src/DropdownMenu/DropdownMenu.stories.tsx +1 -3
  424. package/src/DropdownMenu/index.tsx +67 -6
  425. package/src/LinearGradient.stories.tsx +2 -2
  426. package/src/Meter/Meter.spec.tsx +59 -2
  427. package/src/Meter/Meter.stories.tsx +38 -0
  428. package/src/Meter/index.tsx +9 -4
  429. package/src/Panel.stories.tsx +1 -1
  430. package/src/SortableList/SortableList.spec.tsx +3 -3
  431. package/src/Tabs/Tabs.spec.tsx +43 -3
  432. package/src/Tabs/Tabs.stories.tsx +10 -1
  433. package/src/Tabs/index.tsx +19 -13
  434. package/src/Toast/Toast.spec.tsx +56 -1
  435. package/src/Toast/index.tsx +68 -3
  436. package/src/Unspaced.stories.tsx +2 -2
  437. package/src/VisuallyHidden.stories.tsx +2 -2
  438. package/src/actions/DestructiveAction.spec.tsx +19 -3
  439. package/src/actions/DestructiveAction.tsx +9 -14
  440. package/src/charts/Axis.tsx +6 -1
  441. package/src/charts/BarChart.tsx +82 -67
  442. package/src/charts/ChartDataView.spec.tsx +104 -0
  443. package/src/charts/ChartDataView.tsx +158 -0
  444. package/src/charts/ChartSurface.tsx +7 -2
  445. package/src/charts/Charts.stories.tsx +213 -9
  446. package/src/charts/LineChart.tsx +90 -75
  447. package/src/charts/PieChart.knobs.spec.tsx +25 -0
  448. package/src/charts/PieChart.tsx +51 -9
  449. package/src/charts/Sparkline.tsx +25 -3
  450. package/src/charts/accessibility.ts +8 -0
  451. package/src/charts/charts.spec.tsx +77 -3
  452. package/src/charts/index.ts +2 -0
  453. package/src/charts/math.spec.ts +19 -0
  454. package/src/charts/math.ts +36 -0
  455. package/src/charts/series.tsx +101 -21
  456. package/src/charts/svg.spec.ts +28 -0
  457. package/src/charts/svg.ts +56 -2
  458. package/src/code/CodeBlock/CodeBlock.copy.spec.tsx +23 -0
  459. package/src/code/CodeBlock/index.tsx +4 -3
  460. package/src/feedback/ConfirmDialog.nativeFocus.spec.tsx +52 -0
  461. package/src/feedback/ConfirmDialog.spec.tsx +20 -0
  462. package/src/feedback/ConfirmDialog.tsx +9 -15
  463. package/src/feedback/NotifyHost.tsx +11 -2
  464. package/src/feedback/copy.ts +36 -4
  465. package/src/feedback/index.ts +1 -0
  466. package/src/feedback/notify.spec.ts +15 -1
  467. package/src/feedback/notify.ts +1 -0
  468. package/src/feedback/route.ts +4 -0
  469. package/src/feedback/store.ts +7 -0
  470. package/src/icons/lucide.ts +1 -1
  471. package/src/images/SvgUri/index.native.ts +11 -3
  472. package/src/layouts/EmptyState.stories.tsx +2 -2
  473. package/src/layouts/Page.weight.spec.tsx +75 -0
  474. package/src/layouts/PageHeader.stories.tsx +4 -4
  475. package/src/layouts/PageTemplates.stories.tsx +2 -2
  476. package/src/layouts/PaneScaffold.spec.tsx +144 -4
  477. package/src/layouts/PaneScaffold.stories.tsx +58 -2
  478. package/src/layouts/PaneScaffold.tsx +156 -58
  479. package/src/layouts/ScreenToolbar.stories.tsx +6 -23
  480. package/src/layouts/index.tsx +11 -0
  481. package/src/layouts/layouts.spec.tsx +51 -0
  482. package/src/layouts/page.designLaw.spec.tsx +25 -0
  483. package/src/layouts/page.tsx +46 -9
  484. package/src/shared/useKeyboardInset.native.ts +43 -0
  485. package/src/shared/useKeyboardInset.ts +2 -41
  486. package/src/tamagui.spec.ts +63 -0
  487. package/src/views/Dashboard.stories.tsx +38 -1
  488. package/src/views/Dashboard.tsx +119 -21
  489. package/src/views/Gantt.scroll.spec.tsx +120 -0
  490. package/src/views/Gantt.spec.tsx +376 -0
  491. package/src/views/Gantt.stories.tsx +75 -2
  492. package/src/views/Gantt.tsx +564 -96
  493. package/src/views/Kanban.spec.tsx +11 -0
  494. package/src/views/ganttMath.ts +142 -4
  495. package/src/views/index.ts +44 -1
  496. package/src/views/views.spec.tsx +39 -0
  497. package/types/Button.d.ts +12 -2
  498. package/types/Button.d.ts.map +1 -1
  499. package/types/Card.d.ts.map +1 -1
  500. package/types/CardFooter.d.ts +2 -1
  501. package/types/CardFooter.d.ts.map +1 -1
  502. package/types/CopyField/index.d.ts.map +1 -1
  503. package/types/DropdownMenu/index.d.ts +22 -0
  504. package/types/DropdownMenu/index.d.ts.map +1 -1
  505. package/types/Meter/index.d.ts.map +1 -1
  506. package/types/Tabs/index.d.ts +1 -1
  507. package/types/Tabs/index.d.ts.map +1 -1
  508. package/types/Toast/index.d.ts +16 -0
  509. package/types/Toast/index.d.ts.map +1 -1
  510. package/types/actions/DestructiveAction.d.ts.map +1 -1
  511. package/types/charts/Axis.d.ts.map +1 -1
  512. package/types/charts/BarChart.d.ts.map +1 -1
  513. package/types/charts/ChartDataView.d.ts +22 -0
  514. package/types/charts/ChartDataView.d.ts.map +1 -0
  515. package/types/charts/ChartSurface.d.ts +4 -1
  516. package/types/charts/ChartSurface.d.ts.map +1 -1
  517. package/types/charts/LineChart.d.ts.map +1 -1
  518. package/types/charts/PieChart.d.ts +1 -1
  519. package/types/charts/PieChart.d.ts.map +1 -1
  520. package/types/charts/Sparkline.d.ts +3 -1
  521. package/types/charts/Sparkline.d.ts.map +1 -1
  522. package/types/charts/accessibility.d.ts +3 -0
  523. package/types/charts/accessibility.d.ts.map +1 -1
  524. package/types/charts/index.d.ts +1 -0
  525. package/types/charts/index.d.ts.map +1 -1
  526. package/types/charts/math.d.ts +12 -0
  527. package/types/charts/math.d.ts.map +1 -1
  528. package/types/charts/series.d.ts +1 -1
  529. package/types/charts/series.d.ts.map +1 -1
  530. package/types/charts/svg.d.ts +18 -2
  531. package/types/charts/svg.d.ts.map +1 -1
  532. package/types/code/CodeBlock/index.d.ts.map +1 -1
  533. package/types/feedback/ConfirmDialog.d.ts.map +1 -1
  534. package/types/feedback/NotifyHost.d.ts +3 -1
  535. package/types/feedback/NotifyHost.d.ts.map +1 -1
  536. package/types/feedback/copy.d.ts +12 -2
  537. package/types/feedback/copy.d.ts.map +1 -1
  538. package/types/feedback/index.d.ts +1 -1
  539. package/types/feedback/index.d.ts.map +1 -1
  540. package/types/feedback/notify.d.ts.map +1 -1
  541. package/types/feedback/route.d.ts +3 -0
  542. package/types/feedback/route.d.ts.map +1 -1
  543. package/types/feedback/store.d.ts +2 -0
  544. package/types/feedback/store.d.ts.map +1 -1
  545. package/types/icons/lucide.d.ts +1 -1
  546. package/types/icons/lucide.d.ts.map +1 -1
  547. package/types/images/SvgUri/index.native.d.ts +4 -3
  548. package/types/images/SvgUri/index.native.d.ts.map +1 -1
  549. package/types/layouts/PaneScaffold.d.ts +27 -5
  550. package/types/layouts/PaneScaffold.d.ts.map +1 -1
  551. package/types/layouts/index.d.ts +1 -0
  552. package/types/layouts/index.d.ts.map +1 -1
  553. package/types/layouts/page.d.ts +10 -5
  554. package/types/layouts/page.d.ts.map +1 -1
  555. package/types/shared/useKeyboardInset.d.ts +1 -14
  556. package/types/shared/useKeyboardInset.d.ts.map +1 -1
  557. package/types/shared/useKeyboardInset.native.d.ts +16 -0
  558. package/types/shared/useKeyboardInset.native.d.ts.map +1 -0
  559. package/types/views/Dashboard.d.ts.map +1 -1
  560. package/types/views/Gantt.d.ts +132 -13
  561. package/types/views/Gantt.d.ts.map +1 -1
  562. package/types/views/ganttMath.d.ts +73 -0
  563. package/types/views/ganttMath.d.ts.map +1 -1
  564. package/types/views/index.d.ts +2 -2
  565. package/types/views/index.d.ts.map +1 -1
@@ -40,6 +40,26 @@ var import_tamagui = require("tamagui");
40
40
  var import_ganttMath = require("./ganttMath.cjs");
41
41
  var import_jsx_runtime = require("react/jsx-runtime");
42
42
  const CanvasScroller = import_tamagui.isWeb ? import_tamagui.ScrollView : import_react_native.ScrollView;
43
+ function boundedSpan(ref) {
44
+ const span = ref.span;
45
+ return (0, import_ganttMath.isBoundedSpan)(span) ? {
46
+ start: span.start,
47
+ end: span.end
48
+ } : null;
49
+ }
50
+ function resolveSpans(task) {
51
+ const list = task.spans;
52
+ if (!list || list.length === 0) return [{
53
+ span: task,
54
+ index: 0,
55
+ key: task.id
56
+ }];
57
+ return list.map((span, index) => ({
58
+ span,
59
+ index,
60
+ key: span.id ?? `${task.id}#${index}`
61
+ }));
62
+ }
43
63
  const DRAG_THRESHOLD_PX = 4;
44
64
  const TOUCH_LONG_PRESS_MS = 300;
45
65
  const TOUCH_SLOP_PX = 8;
@@ -226,6 +246,10 @@ function GanttView({
226
246
  showZoomSwitcher = true,
227
247
  firstDayOfWeek = 0,
228
248
  initialDate,
249
+ markerDate,
250
+ onMarkerDateChange,
251
+ enableMarkerDrag,
252
+ markerLabel,
229
253
  ...stackProps
230
254
  }) {
231
255
  const {
@@ -257,12 +281,18 @@ function GanttView({
257
281
  const space = knobProps.space;
258
282
  const barInset = space === "small" ? 4 : space === "large" ? 9 : 6;
259
283
  const barHeight = Math.max(10, rowHeight - barInset * 2);
284
+ const railHeight = Math.max(4, Math.round(barHeight / 2));
260
285
  const transition = knobProps.transition;
261
286
  const webLayoutTransition = import_tamagui.isWeb ? transition : void 0;
262
- const spans = (0, import_react.useMemo)(() => tasks.map(task => ({
263
- start: task.start,
264
- end: task.end
265
- })), [tasks]);
287
+ const spans = (0, import_react.useMemo)(() => {
288
+ const flat = [];
289
+ for (const task of tasks) for (const ref of resolveSpans(task)) flat.push(ref.span);
290
+ if (markerDate !== void 0) flat.push({
291
+ start: markerDate,
292
+ end: markerDate
293
+ });
294
+ return (0, import_ganttMath.openSpanExtents)(flat);
295
+ }, [tasks, markerDate]);
266
296
  const range = (0, import_react.useMemo)(() => (0, import_ganttMath.computeGanttRange)(spans, zoom, /* @__PURE__ */new Date(), firstDayOfWeek), [spans, zoom, firstDayOfWeek]);
267
297
  const chartWidth = (0, import_ganttMath.rangeDays)(range) * pxPerDay;
268
298
  const ticks = (0, import_react.useMemo)(() => (0, import_ganttMath.generateTicks)(range, zoom, pxPerDay, firstDayOfWeek), [range, zoom, pxPerDay, firstDayOfWeek]);
@@ -278,16 +308,16 @@ function GanttView({
278
308
  const hScrollRef = (0, import_react.useRef)(null);
279
309
  const axisScrollRef = (0, import_react.useRef)(null);
280
310
  const canvasViewportRef = (0, import_react.useRef)(null);
281
- const pendingRtlAnchorRef = (0, import_react.useRef)(null);
311
+ const pendingAnchorRef = (0, import_react.useRef)(null);
282
312
  const scrollToDate = (0, import_react.useCallback)((date, animated) => {
283
- const ltrX = Math.max(0, (0, import_ganttMath.dateToX)(date, range.start, pxPerDay) - labelWidth);
284
- let x = ltrX;
285
- if (rtl) {
286
- const viewport = canvasViewportRef.current;
287
- if (viewport === null) pendingRtlAnchorRef.current = date;
288
- const max = Math.max(0, chartWidth - (viewport ?? 0));
289
- x = Math.min(max, Math.max(0, max - ltrX));
290
- }
313
+ const viewportWidth = canvasViewportRef.current;
314
+ if (viewportWidth === null) pendingAnchorRef.current = date;
315
+ const x = (0, import_ganttMath.scrollAnchorX)(date, range.start, pxPerDay, {
316
+ labelWidth,
317
+ chartWidth,
318
+ viewportWidth,
319
+ rtl
320
+ });
291
321
  hScrollRef.current?.scrollTo?.({
292
322
  x,
293
323
  animated
@@ -311,11 +341,11 @@ function GanttView({
311
341
  }, []);
312
342
  const handleCanvasLayout = (0, import_react.useCallback)(event => {
313
343
  const width = event?.nativeEvent?.layout?.width;
314
- if (typeof width !== "number") return;
344
+ if (typeof width !== "number" || !Number.isFinite(width) || width <= 0) return;
315
345
  canvasViewportRef.current = width;
316
- const pending = pendingRtlAnchorRef.current;
346
+ const pending = pendingAnchorRef.current;
317
347
  if (pending) {
318
- pendingRtlAnchorRef.current = null;
348
+ pendingAnchorRef.current = null;
319
349
  scrollToDateRef.current(pending, false);
320
350
  }
321
351
  }, []);
@@ -335,16 +365,13 @@ function GanttView({
335
365
  suppressClickRef.current = false;
336
366
  }, 0);
337
367
  }, []);
338
- const commitDrag = (0, import_react.useCallback)((task, dayDelta) => {
339
- if (dayDelta !== 0) {
340
- onItemMove?.(task, (0, import_ganttMath.shiftSpanByDays)({
341
- start: task.start,
342
- end: task.end
343
- }, dayDelta));
344
- }
368
+ const commitDrag = (0, import_react.useCallback)((task, ref, span, dayDelta) => {
369
+ if (dayDelta !== 0) onItemMove?.(task, (0, import_ganttMath.shiftSpanByDays)(span, dayDelta), ref);
345
370
  }, [onItemMove]);
346
- const handleBarPointerDown = (0, import_react.useCallback)((task, e) => {
371
+ const handleBarPointerDown = (0, import_react.useCallback)((task, ref, e) => {
347
372
  if (!webDragEnabled) return;
373
+ const span = boundedSpan(ref);
374
+ if (!span) return;
348
375
  if (e.button !== void 0 && e.button !== 0) return;
349
376
  e.stopPropagation?.();
350
377
  dragCleanupRef.current?.();
@@ -363,7 +390,7 @@ function GanttView({
363
390
  prevUserSelect = document.body.style.userSelect;
364
391
  document.body.style.userSelect = "none";
365
392
  setDrag({
366
- id: task.id,
393
+ key: ref.key,
367
394
  dx,
368
395
  dayDelta: toDayDelta(dx)
369
396
  });
@@ -392,7 +419,7 @@ function GanttView({
392
419
  return;
393
420
  }
394
421
  setDrag({
395
- id: task.id,
422
+ key: ref.key,
396
423
  dx,
397
424
  dayDelta: toDayDelta(dx)
398
425
  });
@@ -403,7 +430,7 @@ function GanttView({
403
430
  teardown();
404
431
  if (!wasActive) return;
405
432
  suppressNextClick();
406
- commitDrag(task, dayDelta);
433
+ commitDrag(task, ref, span, dayDelta);
407
434
  };
408
435
  const onKey = ke => {
409
436
  if (ke.key !== "Escape" || !active) return;
@@ -427,10 +454,14 @@ function GanttView({
427
454
  window.addEventListener("keydown", onKey, true);
428
455
  dragCleanupRef.current = teardown;
429
456
  }, [webDragEnabled, pxPerDay, commitDrag, suppressNextClick]);
430
- const handleNativeGrant = (0, import_react.useCallback)((task, e) => {
457
+ const handleNativeGrant = (0, import_react.useCallback)((task, ref, e) => {
431
458
  if (!nativeDragEnabled) return;
459
+ const span = boundedSpan(ref);
460
+ if (!span) return;
432
461
  const session = {
433
462
  task,
463
+ ref,
464
+ span,
434
465
  startX: e.nativeEvent?.pageX ?? 0,
435
466
  dragging: false,
436
467
  liftTimer: null
@@ -440,7 +471,7 @@ function GanttView({
440
471
  if (nativeSessionRef.current !== session) return;
441
472
  session.dragging = true;
442
473
  setDrag({
443
- id: task.id,
474
+ key: ref.key,
444
475
  dx: 0,
445
476
  dayDelta: 0
446
477
  });
@@ -459,7 +490,7 @@ function GanttView({
459
490
  return;
460
491
  }
461
492
  setDrag({
462
- id: session.task.id,
493
+ key: session.ref.key,
463
494
  dx,
464
495
  dayDelta: dirSignRef.current * (0, import_ganttMath.dxToDayDelta)(dx, pxPerDay)
465
496
  });
@@ -475,7 +506,7 @@ function GanttView({
475
506
  }
476
507
  const dayDelta = dirSignRef.current * (0, import_ganttMath.dxToDayDelta)((e.nativeEvent?.pageX ?? 0) - session.startX, pxPerDay);
477
508
  setDrag(null);
478
- commitDrag(session.task, dayDelta);
509
+ commitDrag(session.task, session.ref, session.span, dayDelta);
479
510
  }, [onItemPress, pxPerDay, commitDrag]);
480
511
  const handleNativeTerminate = (0, import_react.useCallback)(() => {
481
512
  const session = nativeSessionRef.current;
@@ -483,15 +514,13 @@ function GanttView({
483
514
  nativeSessionRef.current = null;
484
515
  setDrag(null);
485
516
  }, []);
486
- const handleResizePointerDown = (0, import_react.useCallback)((task, edge, e) => {
517
+ const handleResizePointerDown = (0, import_react.useCallback)((task, ref, edge, e) => {
487
518
  if (!webDragEnabled) return;
519
+ const span = boundedSpan(ref);
520
+ if (!span) return;
488
521
  if (e.button !== void 0 && e.button !== 0) return;
489
522
  e.stopPropagation?.();
490
523
  dragCleanupRef.current?.();
491
- const span = {
492
- start: task.start,
493
- end: task.end
494
- };
495
524
  const maxShrinkPx = ((0, import_ganttMath.spanInclusiveDays)(span) - 1) * pxPerDay;
496
525
  const startX = e.clientX;
497
526
  const sign = dirSignRef.current;
@@ -522,7 +551,7 @@ function GanttView({
522
551
  document.body.style.userSelect = "none";
523
552
  }
524
553
  setResize({
525
- id: task.id,
554
+ key: ref.key,
526
555
  edge,
527
556
  logicalDx: clampLogicalDx(dx),
528
557
  dayDelta: toDayDelta(dx)
@@ -534,9 +563,7 @@ function GanttView({
534
563
  teardown();
535
564
  if (!wasActive) return;
536
565
  suppressNextClick();
537
- if (dayDelta !== 0) {
538
- onItemMove?.(task, (0, import_ganttMath.resizeSpanByDays)(span, edge, dayDelta));
539
- }
566
+ if (dayDelta !== 0) onItemMove?.(task, (0, import_ganttMath.resizeSpanByDays)(span, edge, dayDelta), ref);
540
567
  };
541
568
  const onKey = ke => {
542
569
  if (ke.key !== "Escape" || !active) return;
@@ -554,10 +581,11 @@ function GanttView({
554
581
  window.addEventListener("keydown", onKey, true);
555
582
  dragCleanupRef.current = teardown;
556
583
  }, [webDragEnabled, pxPerDay, onItemMove, suppressNextClick]);
557
- const getBarDragProps = (0, import_react.useCallback)(task => {
584
+ const getBarDragProps = (0, import_react.useCallback)((task, ref) => {
585
+ if (!boundedSpan(ref)) return {};
558
586
  if (webDragEnabled) {
559
587
  return {
560
- onPointerDown: e => handleBarPointerDown(task, e)
588
+ onPointerDown: e => handleBarPointerDown(task, ref, e)
561
589
  };
562
590
  }
563
591
  if (nativeDragEnabled) {
@@ -566,7 +594,7 @@ function GanttView({
566
594
  onStartShouldSetResponder: () => true,
567
595
  onMoveShouldSetResponder: () => true,
568
596
  onResponderTerminationRequest: () => !nativeSessionRef.current?.dragging,
569
- onResponderGrant: e => handleNativeGrant(task, e),
597
+ onResponderGrant: e => handleNativeGrant(task, ref, e),
570
598
  onResponderMove: handleNativeMove,
571
599
  onResponderRelease: handleNativeRelease,
572
600
  onResponderTerminate: handleNativeTerminate
@@ -574,45 +602,205 @@ function GanttView({
574
602
  }
575
603
  return {};
576
604
  }, [webDragEnabled, nativeDragEnabled, handleBarPointerDown, handleNativeGrant, handleNativeMove, handleNativeRelease, handleNativeTerminate]);
577
- const handleBarKeyboardMove = (0, import_react.useCallback)((task, key, shiftKey) => {
605
+ const handleBarKeyboardMove = (0, import_react.useCallback)((task, ref, key, shiftKey) => {
606
+ const span = boundedSpan(ref);
607
+ if (!span) return;
578
608
  const physical = key === "ArrowRight" ? 1 : -1;
579
609
  const dayDelta = physical * dirSignRef.current * (shiftKey ? 7 : 1);
580
- const next = (0, import_ganttMath.shiftSpanByDays)({
581
- start: task.start,
582
- end: task.end
583
- }, dayDelta);
584
- onItemMove?.(task, next);
610
+ const next = (0, import_ganttMath.shiftSpanByDays)(span, dayDelta);
611
+ onItemMove?.(task, next, ref);
585
612
  setAnnouncement((0, import_t.withInterp)(t("{{title}} moved to {{range}}"), {
586
- title: task.title,
613
+ title: ref.span.title ?? task.title,
587
614
  range: (0, import_ganttMath.formatSpanLabel)(next)
588
615
  }));
589
616
  }, [onItemMove, t]);
590
- const renderBar = task => {
591
- const geom = (0, import_ganttMath.barGeometry)(task, range.start, pxPerDay);
592
- const activeDrag = drag && drag.id === task.id ? drag : null;
617
+ const markerDragEnabled = (enableMarkerDrag ?? onMarkerDateChange !== void 0) && onMarkerDateChange !== void 0;
618
+ const [markerDragging, setMarkerDragging] = (0, import_react.useState)(false);
619
+ const markerGrantRef = (0, import_react.useRef)(null);
620
+ const markerEmittedRef = (0, import_react.useRef)(null);
621
+ const markerSessionRef = (0, import_react.useRef)(null);
622
+ const emitMarker = (0, import_react.useCallback)(dayDelta => {
623
+ const base = markerGrantRef.current;
624
+ if (!base) return;
625
+ const next = (0, import_ganttMath.addDays)(base, dayDelta);
626
+ if (markerEmittedRef.current === next.getTime()) return;
627
+ markerEmittedRef.current = next.getTime();
628
+ onMarkerDateChange?.(next);
629
+ }, [onMarkerDateChange]);
630
+ const openMarkerSession = (0, import_react.useCallback)(() => {
631
+ if (markerDate === void 0) return false;
632
+ const base = (0, import_ganttMath.startOfDay)(markerDate);
633
+ markerGrantRef.current = base;
634
+ markerEmittedRef.current = base.getTime();
635
+ return true;
636
+ }, [markerDate]);
637
+ const handleMarkerPointerDown = (0, import_react.useCallback)(e => {
638
+ if (!markerDragEnabled || !hasDom) return;
639
+ if (e.button !== void 0 && e.button !== 0) return;
640
+ if (!openMarkerSession()) return;
641
+ e.stopPropagation?.();
642
+ dragCleanupRef.current?.();
643
+ const startX = e.clientX;
644
+ let active = false;
645
+ let ended = false;
646
+ let prevUserSelect = "";
647
+ const toDayDelta = dx => dirSignRef.current * (0, import_ganttMath.dxToDayDelta)(dx, pxPerDay);
648
+ const teardown = () => {
649
+ if (ended) return;
650
+ ended = true;
651
+ window.removeEventListener("pointermove", onMove);
652
+ window.removeEventListener("pointerup", onUp);
653
+ window.removeEventListener("keydown", onKey, true);
654
+ if (active) document.body.style.userSelect = prevUserSelect;
655
+ setMarkerDragging(false);
656
+ markerGrantRef.current = null;
657
+ dragCleanupRef.current = null;
658
+ };
659
+ const onMove = me => {
660
+ const dx = me.clientX - startX;
661
+ if (!active) {
662
+ if (Math.abs(dx) < DRAG_THRESHOLD_PX) return;
663
+ active = true;
664
+ prevUserSelect = document.body.style.userSelect;
665
+ document.body.style.userSelect = "none";
666
+ setMarkerDragging(true);
667
+ }
668
+ emitMarker(toDayDelta(dx));
669
+ };
670
+ const onUp = () => teardown();
671
+ const onKey = ke => {
672
+ if (ke.key !== "Escape" || !active) return;
673
+ ke.stopPropagation();
674
+ emitMarker(0);
675
+ teardown();
676
+ };
677
+ window.addEventListener("pointermove", onMove);
678
+ window.addEventListener("pointerup", onUp);
679
+ window.addEventListener("keydown", onKey, true);
680
+ dragCleanupRef.current = teardown;
681
+ }, [markerDragEnabled, hasDom, openMarkerSession, emitMarker, pxPerDay]);
682
+ const markerNativeProps = (0, import_react.useMemo)(() => {
683
+ if (!markerDragEnabled || import_tamagui.isWeb) return {};
684
+ return {
685
+ onStartShouldSetResponder: () => true,
686
+ onMoveShouldSetResponder: () => true,
687
+ onResponderTerminationRequest: () => false,
688
+ onResponderGrant: e => {
689
+ if (!openMarkerSession()) return;
690
+ markerSessionRef.current = {
691
+ startX: e?.nativeEvent?.pageX ?? 0
692
+ };
693
+ setMarkerDragging(true);
694
+ },
695
+ onResponderMove: e => {
696
+ const session = markerSessionRef.current;
697
+ if (!session) return;
698
+ const dx = (e?.nativeEvent?.pageX ?? 0) - session.startX;
699
+ emitMarker(dirSignRef.current * (0, import_ganttMath.dxToDayDelta)(dx, pxPerDay));
700
+ },
701
+ onResponderRelease: () => {
702
+ markerSessionRef.current = null;
703
+ markerGrantRef.current = null;
704
+ setMarkerDragging(false);
705
+ },
706
+ onResponderTerminate: () => {
707
+ markerSessionRef.current = null;
708
+ markerGrantRef.current = null;
709
+ setMarkerDragging(false);
710
+ }
711
+ };
712
+ }, [markerDragEnabled, openMarkerSession, emitMarker, pxPerDay]);
713
+ const handleMarkerKeyboardMove = (0, import_react.useCallback)((key, shiftKey) => {
714
+ if (!markerDragEnabled || markerDate === void 0) return;
715
+ const physical = key === "ArrowRight" ? 1 : -1;
716
+ const dayDelta = physical * dirSignRef.current * (shiftKey ? 7 : 1);
717
+ const next = (0, import_ganttMath.addDays)((0, import_ganttMath.startOfDay)(markerDate), dayDelta);
718
+ markerEmittedRef.current = next.getTime();
719
+ onMarkerDateChange?.(next);
720
+ setAnnouncement((0, import_t.withInterp)(t("Marker moved to {{date}}"), {
721
+ date: (0, import_theme.formatAbsoluteDate)(next)
722
+ }));
723
+ }, [markerDragEnabled, markerDate, onMarkerDateChange, t]);
724
+ const markerX = markerDate === void 0 ? null : (0, import_ganttMath.dateLineX)(range, pxPerDay, markerDate);
725
+ const markerName = markerLabel ?? t("Marker");
726
+ const spanAccessibleName = (title, span) => {
727
+ if ((0, import_ganttMath.isBoundedSpan)(span)) {
728
+ return (0, import_ganttMath.ganttTaskAccessibleLabel)({
729
+ title,
730
+ start: span.start,
731
+ end: span.end
732
+ });
733
+ }
734
+ const parts = (0, import_ganttMath.openSpanLabelParts)(span);
735
+ if (parts.start !== void 0) {
736
+ return (0, import_t.withInterp)(t("{{title}}, from {{start}}, no end"), {
737
+ title,
738
+ start: parts.start
739
+ });
740
+ }
741
+ if (parts.end !== void 0) {
742
+ return (0, import_t.withInterp)(t("{{title}}, until {{end}}, no start"), {
743
+ title,
744
+ end: parts.end
745
+ });
746
+ }
747
+ return (0, import_t.withInterp)(t("{{title}}, always, no dates"), {
748
+ title
749
+ });
750
+ };
751
+ const renderBar = (task, ref) => {
752
+ const span = ref.span;
753
+ const barKey = ref.key;
754
+ const bounded = boundedSpan(ref);
755
+ const geom = (0, import_ganttMath.openBarGeometry)(span, range, pxPerDay);
756
+ const activeDrag = drag && drag.key === barKey ? drag : null;
593
757
  const dragging = activeDrag !== null;
594
- const activeResize = resize && resize.id === task.id ? resize : null;
758
+ const activeResize = resize && resize.key === barKey ? resize : null;
595
759
  const resizing = activeResize !== null;
596
760
  const sessionLive = dragging || resizing;
597
761
  const dayDelta = activeDrag?.dayDelta ?? activeResize?.dayDelta ?? 0;
598
- const span = {
599
- start: task.start,
600
- end: task.end
601
- };
602
- const previewSpan = activeDrag ? (0, import_ganttMath.shiftSpanByDays)(span, dayDelta) : activeResize ? (0, import_ganttMath.resizeSpanByDays)(span, activeResize.edge, activeResize.dayDelta) : null;
762
+ const previewSpan = bounded && activeDrag ? (0, import_ganttMath.shiftSpanByDays)(bounded, dayDelta) : bounded && activeResize ? (0, import_ganttMath.resizeSpanByDays)(bounded, activeResize.edge, activeResize.dayDelta) : null;
603
763
  const previewGeom = previewSpan ? (0, import_ganttMath.barGeometry)(previewSpan, range.start, pxPerDay) : null;
604
764
  const liveWidth = activeResize ? Math.max(6, activeResize.edge === "end" ? geom.width + activeResize.logicalDx : geom.width - activeResize.logicalDx) : geom.width;
605
765
  const liveTransformX = activeDrag ? activeDrag.dx : activeResize && activeResize.edge === "start" ? activeResize.logicalDx * dirSign : 0;
606
- const fill = task.color ?? (task.intent && task.intent !== "accent" ? "$color9" : "$accentBackground");
607
- const progress = clampProgress(task.progress);
608
- const showLabel = liveWidth >= 44;
609
- const isBarFocused = focusedBarId === task.id;
766
+ const barColor = span.color ?? task.color;
767
+ const barIntent = span.intent ?? task.intent;
768
+ const barTitle = span.title ?? task.title;
769
+ const fill = barColor ?? (barIntent && barIntent !== "accent" ? "$color9" : "$accentBackground");
770
+ const progress = bounded ? clampProgress(span.progress ?? task.progress) : null;
771
+ const showLabel = !geom.eternal && liveWidth >= 44;
772
+ const isBarFocused = focusedBarId === barKey;
610
773
  const showHandles = hoveredId === task.id || sessionLive;
611
- const handleWidth = geom.width >= 24 ? 8 : geom.width >= 12 ? 4 : 0;
774
+ const handleWidth = bounded ? geom.width >= 24 ? 8 : geom.width >= 12 ? 4 : 0 : 0;
612
775
  const physicalLeftEdge = rtl ? "end" : "start";
613
776
  const physicalRightEdge = rtl ? "start" : "end";
777
+ const openStartSide = rtl ? {
778
+ right: 2
779
+ } : {
780
+ left: 2
781
+ };
782
+ const openEndSide = rtl ? {
783
+ left: 2
784
+ } : {
785
+ right: 2
786
+ };
787
+ const squareStart = rtl ? {
788
+ borderTopRightRadius: 0,
789
+ borderBottomRightRadius: 0
790
+ } : {
791
+ borderTopLeftRadius: 0,
792
+ borderBottomLeftRadius: 0
793
+ };
794
+ const squareEnd = rtl ? {
795
+ borderTopLeftRadius: 0,
796
+ borderBottomLeftRadius: 0
797
+ } : {
798
+ borderTopRightRadius: 0,
799
+ borderBottomRightRadius: 0
800
+ };
801
+ const height2 = geom.eternal ? railHeight : barHeight;
614
802
  return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(BarIntentWrap, {
615
- intent: task.color ? void 0 : task.intent,
803
+ intent: barColor ? void 0 : barIntent,
616
804
  children: [sessionLive && dayDelta !== 0 && previewGeom && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
617
805
  position: "absolute",
618
806
  ...canvasPos(previewGeom.x),
@@ -626,40 +814,42 @@ function GanttView({
626
814
  opacity: 0.25,
627
815
  pointerEvents: "none",
628
816
  ...{
629
- "data-gantt-drop-preview": task.id
817
+ "data-gantt-drop-preview": barKey
630
818
  }
631
819
  }), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
632
820
  position: "absolute",
633
821
  ...canvasPos(geom.x),
634
822
  width: liveWidth,
635
- top: barInset,
636
- height: barHeight,
823
+ top: barInset + (barHeight - height2) / 2,
824
+ height: height2,
637
825
  x: liveTransformX,
638
826
  zIndex: sessionLive ? 3 : 1,
639
827
  ...knobProps.borderRadius,
828
+ ...(geom.openStart ? squareStart : null),
829
+ ...(geom.openEnd ? squareEnd : null),
640
830
  backgroundColor: fill,
641
- opacity: sessionLive ? 0.85 : 1,
831
+ opacity: sessionLive ? 0.85 : geom.eternal ? 0.55 : 1,
642
832
  hoverStyle: {
643
- opacity: sessionLive ? 0.85 : 0.9
833
+ opacity: sessionLive ? 0.85 : geom.eternal ? 0.7 : 0.9
644
834
  },
645
835
  pressStyle: {
646
836
  opacity: 0.8
647
837
  },
648
- cursor: webDragEnabled ? "grab" : onItemPress ? "pointer" : void 0,
838
+ cursor: bounded && webDragEnabled ? "grab" : onItemPress ? "pointer" : void 0,
649
839
  justifyContent: "center",
650
840
  transition: sessionLive ? void 0 : webLayoutTransition,
651
841
  role: "button",
652
842
  tabIndex: 0,
653
- "aria-label": (0, import_ganttMath.ganttTaskAccessibleLabel)(task),
843
+ "aria-label": spanAccessibleName(barTitle, span),
654
844
  ...(isBarFocused && barKeyboardRing ? import_theme.keyboardFocusRingProps : {
655
845
  outlineWidth: 0
656
846
  }),
657
847
  onFocus: () => {
658
- setFocusedBarId(task.id);
848
+ setFocusedBarId(barKey);
659
849
  setBarKeyboardRing((0, import_theme.wasKeyboardFocus)());
660
850
  },
661
851
  onBlur: () => {
662
- setFocusedBarId(id => id === task.id ? null : id);
852
+ setFocusedBarId(id => id === barKey ? null : id);
663
853
  setBarKeyboardRing(false);
664
854
  },
665
855
  ...{
@@ -673,17 +863,23 @@ function GanttView({
673
863
  onItemPress?.(task);
674
864
  return;
675
865
  }
676
- if ((ke.key === "ArrowLeft" || ke.key === "ArrowRight") && dragEnabled) {
866
+ if ((ke.key === "ArrowLeft" || ke.key === "ArrowRight") && dragEnabled && bounded) {
677
867
  ke.preventDefault?.();
678
868
  ke.stopPropagation?.();
679
- handleBarKeyboardMove(task, ke.key, ke.shiftKey === true);
869
+ handleBarKeyboardMove(task, ref, ke.key, ke.shiftKey === true);
680
870
  }
681
871
  },
682
872
  ...{
683
- "data-gantt-bar": task.id
873
+ "data-gantt-bar": barKey
684
874
  },
685
- ...(nativeDragEnabled ? null : getBarDragProps(task)),
686
- onPress: nativeDragEnabled ? void 0 : e => {
875
+ ...(geom.eternal ? {
876
+ "data-gantt-rail": "true"
877
+ } : null),
878
+ ...(geom.openStart || geom.openEnd ? {
879
+ "data-gantt-span-open": geom.eternal ? "both" : geom.openStart ? "start" : "end"
880
+ } : null),
881
+ ...(nativeDragEnabled ? null : getBarDragProps(task, ref)),
882
+ onPress: nativeDragEnabled && bounded ? void 0 : e => {
687
883
  e?.stopPropagation?.();
688
884
  if (suppressClickRef.current) return;
689
885
  onItemPress?.(task);
@@ -705,8 +901,32 @@ function GanttView({
705
901
  "data-gantt-progress": String(progress)
706
902
  }
707
903
  }), showLabel && /* @__PURE__ */(0, import_jsx_runtime.jsx)(GanttBarLabel, {
708
- title: task.title,
904
+ title: barTitle,
709
905
  fill
906
+ }), geom.openStart && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
907
+ position: "absolute",
908
+ ...openStartSide,
909
+ ...knobProps.label,
910
+ color: "$color12",
911
+ opacity: 0.75,
912
+ pointerEvents: "none",
913
+ "aria-hidden": true,
914
+ ...{
915
+ "data-gantt-open-start": "true"
916
+ },
917
+ children: rtl ? "\xBB" : "\xAB"
918
+ }), geom.openEnd && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
919
+ position: "absolute",
920
+ ...openEndSide,
921
+ ...knobProps.label,
922
+ color: "$color12",
923
+ opacity: 0.75,
924
+ pointerEvents: "none",
925
+ "aria-hidden": true,
926
+ ...{
927
+ "data-gantt-open-end": "true"
928
+ },
929
+ children: rtl ? "\xAB" : "\xBB"
710
930
  }), previewSpan && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
711
931
  position: "absolute",
712
932
  top: -(axisHeight - 6),
@@ -741,7 +961,7 @@ function GanttView({
741
961
  cursor: "ew-resize",
742
962
  backgroundColor: showHandles ? "$color12" : "transparent",
743
963
  opacity: showHandles ? 0.28 : 0,
744
- onPointerDown: e => handleResizePointerDown(task, physicalLeftEdge, e),
964
+ onPointerDown: e => handleResizePointerDown(task, ref, physicalLeftEdge, e),
745
965
  ...{
746
966
  "data-gantt-resize-handle": physicalLeftEdge
747
967
  }
@@ -754,24 +974,24 @@ function GanttView({
754
974
  cursor: "ew-resize",
755
975
  backgroundColor: showHandles ? "$color12" : "transparent",
756
976
  opacity: showHandles ? 0.28 : 0,
757
- onPointerDown: e => handleResizePointerDown(task, physicalRightEdge, e),
977
+ onPointerDown: e => handleResizePointerDown(task, ref, physicalRightEdge, e),
758
978
  ...{
759
979
  "data-gantt-resize-handle": physicalRightEdge
760
980
  }
761
981
  })]
762
- }), nativeDragEnabled && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
982
+ }), nativeDragEnabled && bounded && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
763
983
  position: "absolute",
764
984
  top: 0,
765
985
  left: 0,
766
986
  right: 0,
767
987
  bottom: 0,
768
988
  zIndex: 5,
769
- ...getBarDragProps(task)
989
+ ...getBarDragProps(task, ref)
770
990
  })]
771
991
  })]
772
- }, task.id);
992
+ }, barKey);
773
993
  };
774
- const scrollLocked = drag !== null || resize !== null;
994
+ const scrollLocked = drag !== null || resize !== null || markerDragging;
775
995
  const majorGridColor = "$borderColor";
776
996
  const minorGridColor = import_componentColors.componentColors.divider;
777
997
  const scrollerDirection = {
@@ -920,6 +1140,53 @@ function GanttView({
920
1140
  height: import_theme.hairlineWidth,
921
1141
  backgroundColor: import_componentColors.componentColors.divider,
922
1142
  pointerEvents: "none"
1143
+ }), markerX !== null && /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
1144
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1145
+ position: "absolute",
1146
+ ...canvasPos(markerX - 1),
1147
+ top: 0,
1148
+ bottom: 0,
1149
+ width: 2,
1150
+ backgroundColor: "$color12",
1151
+ opacity: 0.9,
1152
+ pointerEvents: "none"
1153
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1154
+ position: "absolute",
1155
+ ...canvasPos(markerX - 12),
1156
+ top: 0,
1157
+ bottom: 0,
1158
+ width: 24,
1159
+ alignItems: "center",
1160
+ justifyContent: "flex-end",
1161
+ zIndex: 4,
1162
+ cursor: markerDragEnabled ? "ew-resize" : void 0,
1163
+ role: "slider",
1164
+ tabIndex: markerDragEnabled ? 0 : -1,
1165
+ "aria-label": markerName,
1166
+ "aria-valuetext": markerDate ? (0, import_theme.formatAbsoluteDate)(markerDate) : void 0,
1167
+ ...(markerDragEnabled && hasDom ? {
1168
+ onPointerDown: e => handleMarkerPointerDown(e)
1169
+ } : null),
1170
+ ...markerNativeProps,
1171
+ onKeyDown: ke => {
1172
+ if (ke.key !== "ArrowLeft" && ke.key !== "ArrowRight") return;
1173
+ ke.preventDefault?.();
1174
+ ke.stopPropagation?.();
1175
+ handleMarkerKeyboardMove(ke.key, ke.shiftKey === true);
1176
+ },
1177
+ ...{
1178
+ "data-gantt-marker-handle": "true"
1179
+ },
1180
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1181
+ width: 11,
1182
+ height: 9,
1183
+ marginBottom: 2,
1184
+ borderRadius: 2,
1185
+ backgroundColor: "$color12",
1186
+ opacity: markerDragging ? 1 : 0.9,
1187
+ pointerEvents: "none"
1188
+ })
1189
+ })]
923
1190
  })]
924
1191
  })
925
1192
  })]
@@ -936,9 +1203,11 @@ function GanttView({
936
1203
  ...hairlineEnd,
937
1204
  borderColor: "$borderColor",
938
1205
  children: tasks.map((task, index) => {
939
- const selected = focusedBarId === task.id;
1206
+ const refs = resolveSpans(task);
1207
+ const selected = refs.some(ref => ref.key === focusedBarId);
940
1208
  const hovered = hoveredId === task.id;
941
1209
  const last = index === tasks.length - 1;
1210
+ const firstKey = refs[0]?.key ?? task.id;
942
1211
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
943
1212
  height: rowHeight,
944
1213
  alignItems: "center",
@@ -953,11 +1222,11 @@ function GanttView({
953
1222
  },
954
1223
  onPress: onItemPress ? () => {
955
1224
  if (suppressClickRef.current) return;
956
- setFocusedBarId(task.id);
1225
+ setFocusedBarId(firstKey);
957
1226
  setBarKeyboardRing(false);
958
1227
  onItemPress(task);
959
1228
  } : () => {
960
- setFocusedBarId(task.id);
1229
+ setFocusedBarId(firstKey);
961
1230
  setBarKeyboardRing(false);
962
1231
  },
963
1232
  ...{
@@ -1028,7 +1297,8 @@ function GanttView({
1028
1297
  backgroundColor: tick.major ? majorGridColor : minorGridColor,
1029
1298
  pointerEvents: "none"
1030
1299
  }, tick.date.toISOString())), tasks.map((task, index) => {
1031
- const selected = focusedBarId === task.id;
1300
+ const refs = resolveSpans(task);
1301
+ const selected = refs.some(ref => ref.key === focusedBarId);
1032
1302
  const hovered = hoveredId === task.id;
1033
1303
  const last = index === tasks.length - 1;
1034
1304
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
@@ -1044,8 +1314,21 @@ function GanttView({
1044
1314
  ...{
1045
1315
  "data-gantt-row": task.id
1046
1316
  },
1047
- children: renderBar(task)
1317
+ children: refs.map(ref => renderBar(task, ref))
1048
1318
  }, task.id);
1319
+ }), markerX !== null && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1320
+ position: "absolute",
1321
+ ...canvasPos(markerX - 1),
1322
+ top: 0,
1323
+ bottom: 0,
1324
+ width: 2,
1325
+ backgroundColor: "$color12",
1326
+ opacity: markerDragging ? 0.95 : 0.75,
1327
+ pointerEvents: "none",
1328
+ zIndex: 2,
1329
+ ...{
1330
+ "data-gantt-marker": "true"
1331
+ }
1049
1332
  }), todayX !== null && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1050
1333
  position: "absolute",
1051
1334
  ...canvasPos(todayX - 1),