@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
@@ -53,6 +53,29 @@ var import_react_native = require("react-native");
53
53
  var import_tamagui = require("tamagui");
54
54
  var import_ganttMath = require("./ganttMath.native.js");
55
55
  var CanvasScroller = import_tamagui.isWeb ? import_tamagui.ScrollView : import_react_native.ScrollView;
56
+ function boundedSpan(ref) {
57
+ var span = ref.span;
58
+ return (0, import_ganttMath.isBoundedSpan)(span) ? {
59
+ start: span.start,
60
+ end: span.end
61
+ } : null;
62
+ }
63
+ function resolveSpans(task) {
64
+ var list = task.spans;
65
+ if (!list || list.length === 0) return [{
66
+ span: task,
67
+ index: 0,
68
+ key: task.id
69
+ }];
70
+ return list.map(function (span, index) {
71
+ var _span_id;
72
+ return {
73
+ span,
74
+ index,
75
+ key: (_span_id = span.id) !== null && _span_id !== void 0 ? _span_id : `${task.id}#${index}`
76
+ };
77
+ });
78
+ }
56
79
  var DRAG_THRESHOLD_PX = 4;
57
80
  var TOUCH_LONG_PRESS_MS = 300;
58
81
  var TOUCH_SLOP_PX = 8;
@@ -244,6 +267,10 @@ function GanttView(param) {
244
267
  showZoomSwitcher = true,
245
268
  firstDayOfWeek = 0,
246
269
  initialDate,
270
+ markerDate,
271
+ onMarkerDateChange,
272
+ enableMarkerDrag,
273
+ markerLabel,
247
274
  ...stackProps
248
275
  } = param;
249
276
  var {
@@ -277,16 +304,60 @@ function GanttView(param) {
277
304
  var space = knobProps.space;
278
305
  var barInset = space === "small" ? 4 : space === "large" ? 9 : 6;
279
306
  var barHeight = Math.max(10, rowHeight - barInset * 2);
307
+ var railHeight = Math.max(4, Math.round(barHeight / 2));
280
308
  var transition = knobProps.transition;
281
309
  var webLayoutTransition = import_tamagui.isWeb ? transition : void 0;
282
310
  var spans = (0, import_react.useMemo)(function () {
283
- return tasks.map(function (task) {
284
- return {
285
- start: task.start,
286
- end: task.end
287
- };
311
+ var flat = [];
312
+ var _iteratorNormalCompletion = true,
313
+ _didIteratorError = false,
314
+ _iteratorError = void 0,
315
+ _iteratorNormalCompletion1 = true,
316
+ _didIteratorError1 = false,
317
+ _iteratorError1 = void 0;
318
+ try {
319
+ for (var _iterator = tasks[Symbol.iterator](), _step; !(_iteratorNormalCompletion1 = (_step = _iterator.next()).done); _iteratorNormalCompletion1 = true) {
320
+ var task = _step.value;
321
+ try {
322
+ for (var _iterator1 = resolveSpans(task)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion = true) {
323
+ var ref = _step1.value;
324
+ flat.push(ref.span);
325
+ }
326
+ } catch (err) {
327
+ _didIteratorError = true;
328
+ _iteratorError = err;
329
+ } finally {
330
+ try {
331
+ if (!_iteratorNormalCompletion && _iterator1.return != null) {
332
+ _iterator1.return();
333
+ }
334
+ } finally {
335
+ if (_didIteratorError) {
336
+ throw _iteratorError;
337
+ }
338
+ }
339
+ }
340
+ }
341
+ } catch (err) {
342
+ _didIteratorError1 = true;
343
+ _iteratorError1 = err;
344
+ } finally {
345
+ try {
346
+ if (!_iteratorNormalCompletion1 && _iterator.return != null) {
347
+ _iterator.return();
348
+ }
349
+ } finally {
350
+ if (_didIteratorError1) {
351
+ throw _iteratorError1;
352
+ }
353
+ }
354
+ }
355
+ if (markerDate !== void 0) flat.push({
356
+ start: markerDate,
357
+ end: markerDate
288
358
  });
289
- }, [tasks]);
359
+ return (0, import_ganttMath.openSpanExtents)(flat);
360
+ }, [tasks, markerDate]);
290
361
  var range = (0, import_react.useMemo)(function () {
291
362
  return (0, import_ganttMath.computeGanttRange)(spans, zoom, /* @__PURE__ */new Date(), firstDayOfWeek);
292
363
  }, [spans, zoom, firstDayOfWeek]);
@@ -312,17 +383,17 @@ function GanttView(param) {
312
383
  var hScrollRef = (0, import_react.useRef)(null);
313
384
  var axisScrollRef = (0, import_react.useRef)(null);
314
385
  var canvasViewportRef = (0, import_react.useRef)(null);
315
- var pendingRtlAnchorRef = (0, import_react.useRef)(null);
386
+ var pendingAnchorRef = (0, import_react.useRef)(null);
316
387
  var scrollToDate = (0, import_react.useCallback)(function (date, animated) {
317
388
  var _hScrollRef_current_scrollTo, _hScrollRef_current, _axisScrollRef_current_scrollTo, _axisScrollRef_current;
318
- var ltrX = Math.max(0, (0, import_ganttMath.dateToX)(date, range.start, pxPerDay) - labelWidth);
319
- var x = ltrX;
320
- if (rtl) {
321
- var viewport = canvasViewportRef.current;
322
- if (viewport === null) pendingRtlAnchorRef.current = date;
323
- var max = Math.max(0, chartWidth - (viewport !== null && viewport !== void 0 ? viewport : 0));
324
- x = Math.min(max, Math.max(0, max - ltrX));
325
- }
389
+ var viewportWidth = canvasViewportRef.current;
390
+ if (viewportWidth === null) pendingAnchorRef.current = date;
391
+ var x = (0, import_ganttMath.scrollAnchorX)(date, range.start, pxPerDay, {
392
+ labelWidth,
393
+ chartWidth,
394
+ viewportWidth,
395
+ rtl
396
+ });
326
397
  (_hScrollRef_current = hScrollRef.current) === null || _hScrollRef_current === void 0 ? void 0 : (_hScrollRef_current_scrollTo = _hScrollRef_current.scrollTo) === null || _hScrollRef_current_scrollTo === void 0 ? void 0 : _hScrollRef_current_scrollTo.call(_hScrollRef_current, {
327
398
  x,
328
399
  animated
@@ -352,11 +423,11 @@ function GanttView(param) {
352
423
  var handleCanvasLayout = (0, import_react.useCallback)(function (event) {
353
424
  var _event_nativeEvent_layout, _event_nativeEvent;
354
425
  var width = event === null || event === void 0 ? void 0 : (_event_nativeEvent = event.nativeEvent) === null || _event_nativeEvent === void 0 ? void 0 : (_event_nativeEvent_layout = _event_nativeEvent.layout) === null || _event_nativeEvent_layout === void 0 ? void 0 : _event_nativeEvent_layout.width;
355
- if (typeof width !== "number") return;
426
+ if (typeof width !== "number" || !Number.isFinite(width) || width <= 0) return;
356
427
  canvasViewportRef.current = width;
357
- var pending = pendingRtlAnchorRef.current;
428
+ var pending = pendingAnchorRef.current;
358
429
  if (pending) {
359
- pendingRtlAnchorRef.current = null;
430
+ pendingAnchorRef.current = null;
360
431
  scrollToDateRef.current(pending, false);
361
432
  }
362
433
  }, []);
@@ -381,17 +452,14 @@ function GanttView(param) {
381
452
  suppressClickRef.current = false;
382
453
  }, 0);
383
454
  }, []);
384
- var commitDrag = (0, import_react.useCallback)(function (task, dayDelta) {
385
- if (dayDelta !== 0) {
386
- onItemMove === null || onItemMove === void 0 ? void 0 : onItemMove(task, (0, import_ganttMath.shiftSpanByDays)({
387
- start: task.start,
388
- end: task.end
389
- }, dayDelta));
390
- }
455
+ var commitDrag = (0, import_react.useCallback)(function (task, ref, span, dayDelta) {
456
+ if (dayDelta !== 0) onItemMove === null || onItemMove === void 0 ? void 0 : onItemMove(task, (0, import_ganttMath.shiftSpanByDays)(span, dayDelta), ref);
391
457
  }, [onItemMove]);
392
- var handleBarPointerDown = (0, import_react.useCallback)(function (task, e) {
458
+ var handleBarPointerDown = (0, import_react.useCallback)(function (task, ref, e) {
393
459
  var _e_stopPropagation, _dragCleanupRef_current;
394
460
  if (!webDragEnabled) return;
461
+ var span = boundedSpan(ref);
462
+ if (!span) return;
395
463
  if (e.button !== void 0 && e.button !== 0) return;
396
464
  (_e_stopPropagation = e.stopPropagation) === null || _e_stopPropagation === void 0 ? void 0 : _e_stopPropagation.call(e);
397
465
  (_dragCleanupRef_current = dragCleanupRef.current) === null || _dragCleanupRef_current === void 0 ? void 0 : _dragCleanupRef_current.call(dragCleanupRef);
@@ -412,7 +480,7 @@ function GanttView(param) {
412
480
  prevUserSelect = document.body.style.userSelect;
413
481
  document.body.style.userSelect = "none";
414
482
  setDrag({
415
- id: task.id,
483
+ key: ref.key,
416
484
  dx,
417
485
  dayDelta: toDayDelta(dx)
418
486
  });
@@ -441,7 +509,7 @@ function GanttView(param) {
441
509
  return;
442
510
  }
443
511
  setDrag({
444
- id: task.id,
512
+ key: ref.key,
445
513
  dx,
446
514
  dayDelta: toDayDelta(dx)
447
515
  });
@@ -452,7 +520,7 @@ function GanttView(param) {
452
520
  teardown();
453
521
  if (!wasActive) return;
454
522
  suppressNextClick();
455
- commitDrag(task, dayDelta);
523
+ commitDrag(task, ref, span, dayDelta);
456
524
  };
457
525
  var onKey = function onKey2(ke) {
458
526
  if (ke.key !== "Escape" || !active) return;
@@ -478,12 +546,16 @@ function GanttView(param) {
478
546
  window.addEventListener("keydown", onKey, true);
479
547
  dragCleanupRef.current = teardown;
480
548
  }, [webDragEnabled, pxPerDay, commitDrag, suppressNextClick]);
481
- var handleNativeGrant = (0, import_react.useCallback)(function (task, e) {
549
+ var handleNativeGrant = (0, import_react.useCallback)(function (task, ref, e) {
482
550
  var _ref;
483
551
  var _e_nativeEvent;
484
552
  if (!nativeDragEnabled) return;
553
+ var span = boundedSpan(ref);
554
+ if (!span) return;
485
555
  var session = {
486
556
  task,
557
+ ref,
558
+ span,
487
559
  startX: (_ref = (_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.pageX) !== null && _ref !== void 0 ? _ref : 0,
488
560
  dragging: false,
489
561
  liftTimer: null
@@ -493,7 +565,7 @@ function GanttView(param) {
493
565
  if (nativeSessionRef.current !== session) return;
494
566
  session.dragging = true;
495
567
  setDrag({
496
- id: task.id,
568
+ key: ref.key,
497
569
  dx: 0,
498
570
  dayDelta: 0
499
571
  });
@@ -514,7 +586,7 @@ function GanttView(param) {
514
586
  return;
515
587
  }
516
588
  setDrag({
517
- id: session.task.id,
589
+ key: session.ref.key,
518
590
  dx,
519
591
  dayDelta: dirSignRef.current * (0, import_ganttMath.dxToDayDelta)(dx, pxPerDay)
520
592
  });
@@ -532,7 +604,7 @@ function GanttView(param) {
532
604
  }
533
605
  var dayDelta = dirSignRef.current * (0, import_ganttMath.dxToDayDelta)(((_ref = (_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.pageX) !== null && _ref !== void 0 ? _ref : 0) - session.startX, pxPerDay);
534
606
  setDrag(null);
535
- commitDrag(session.task, dayDelta);
607
+ commitDrag(session.task, session.ref, session.span, dayDelta);
536
608
  }, [onItemPress, pxPerDay, commitDrag]);
537
609
  var handleNativeTerminate = (0, import_react.useCallback)(function () {
538
610
  var session = nativeSessionRef.current;
@@ -540,16 +612,14 @@ function GanttView(param) {
540
612
  nativeSessionRef.current = null;
541
613
  setDrag(null);
542
614
  }, []);
543
- var handleResizePointerDown = (0, import_react.useCallback)(function (task, edge, e) {
615
+ var handleResizePointerDown = (0, import_react.useCallback)(function (task, ref, edge, e) {
544
616
  var _e_stopPropagation, _dragCleanupRef_current;
545
617
  if (!webDragEnabled) return;
618
+ var span = boundedSpan(ref);
619
+ if (!span) return;
546
620
  if (e.button !== void 0 && e.button !== 0) return;
547
621
  (_e_stopPropagation = e.stopPropagation) === null || _e_stopPropagation === void 0 ? void 0 : _e_stopPropagation.call(e);
548
622
  (_dragCleanupRef_current = dragCleanupRef.current) === null || _dragCleanupRef_current === void 0 ? void 0 : _dragCleanupRef_current.call(dragCleanupRef);
549
- var span = {
550
- start: task.start,
551
- end: task.end
552
- };
553
623
  var maxShrinkPx = ((0, import_ganttMath.spanInclusiveDays)(span) - 1) * pxPerDay;
554
624
  var startX = e.clientX;
555
625
  var sign = dirSignRef.current;
@@ -582,7 +652,7 @@ function GanttView(param) {
582
652
  document.body.style.userSelect = "none";
583
653
  }
584
654
  setResize({
585
- id: task.id,
655
+ key: ref.key,
586
656
  edge,
587
657
  logicalDx: clampLogicalDx(dx),
588
658
  dayDelta: toDayDelta(dx)
@@ -594,9 +664,7 @@ function GanttView(param) {
594
664
  teardown();
595
665
  if (!wasActive) return;
596
666
  suppressNextClick();
597
- if (dayDelta !== 0) {
598
- onItemMove === null || onItemMove === void 0 ? void 0 : onItemMove(task, (0, import_ganttMath.resizeSpanByDays)(span, edge, dayDelta));
599
- }
667
+ if (dayDelta !== 0) onItemMove === null || onItemMove === void 0 ? void 0 : onItemMove(task, (0, import_ganttMath.resizeSpanByDays)(span, edge, dayDelta), ref);
600
668
  };
601
669
  var onKey = function onKey2(ke) {
602
670
  if (ke.key !== "Escape" || !active) return;
@@ -616,11 +684,12 @@ function GanttView(param) {
616
684
  window.addEventListener("keydown", onKey, true);
617
685
  dragCleanupRef.current = teardown;
618
686
  }, [webDragEnabled, pxPerDay, onItemMove, suppressNextClick]);
619
- var getBarDragProps = (0, import_react.useCallback)(function (task) {
687
+ var getBarDragProps = (0, import_react.useCallback)(function (task, ref) {
688
+ if (!boundedSpan(ref)) return {};
620
689
  if (webDragEnabled) {
621
690
  return {
622
691
  onPointerDown: function onPointerDown(e) {
623
- return handleBarPointerDown(task, e);
692
+ return handleBarPointerDown(task, ref, e);
624
693
  }
625
694
  };
626
695
  }
@@ -638,7 +707,7 @@ function GanttView(param) {
638
707
  return !((_nativeSessionRef_current = nativeSessionRef.current) === null || _nativeSessionRef_current === void 0 ? void 0 : _nativeSessionRef_current.dragging);
639
708
  },
640
709
  onResponderGrant: function onResponderGrant(e) {
641
- return handleNativeGrant(task, e);
710
+ return handleNativeGrant(task, ref, e);
642
711
  },
643
712
  onResponderMove: handleNativeMove,
644
713
  onResponderRelease: handleNativeRelease,
@@ -647,46 +716,222 @@ function GanttView(param) {
647
716
  }
648
717
  return {};
649
718
  }, [webDragEnabled, nativeDragEnabled, handleBarPointerDown, handleNativeGrant, handleNativeMove, handleNativeRelease, handleNativeTerminate]);
650
- var handleBarKeyboardMove = (0, import_react.useCallback)(function (task, key, shiftKey) {
719
+ var handleBarKeyboardMove = (0, import_react.useCallback)(function (task, ref, key, shiftKey) {
720
+ var _ref_span_title;
721
+ var span = boundedSpan(ref);
722
+ if (!span) return;
651
723
  var physical = key === "ArrowRight" ? 1 : -1;
652
724
  var dayDelta = physical * dirSignRef.current * (shiftKey ? 7 : 1);
653
- var next = (0, import_ganttMath.shiftSpanByDays)({
654
- start: task.start,
655
- end: task.end
656
- }, dayDelta);
657
- onItemMove === null || onItemMove === void 0 ? void 0 : onItemMove(task, next);
725
+ var next = (0, import_ganttMath.shiftSpanByDays)(span, dayDelta);
726
+ onItemMove === null || onItemMove === void 0 ? void 0 : onItemMove(task, next, ref);
658
727
  setAnnouncement((0, import_t.withInterp)(t("{{title}} moved to {{range}}"), {
659
- title: task.title,
728
+ title: (_ref_span_title = ref.span.title) !== null && _ref_span_title !== void 0 ? _ref_span_title : task.title,
660
729
  range: (0, import_ganttMath.formatSpanLabel)(next)
661
730
  }));
662
731
  }, [onItemMove, t]);
663
- var renderBar = function renderBar2(task) {
664
- var _ref, _ref1, _task_color;
665
- var geom = (0, import_ganttMath.barGeometry)(task, range.start, pxPerDay);
666
- var activeDrag = drag && drag.id === task.id ? drag : null;
732
+ var markerDragEnabled = (enableMarkerDrag !== null && enableMarkerDrag !== void 0 ? enableMarkerDrag : onMarkerDateChange !== void 0) && onMarkerDateChange !== void 0;
733
+ var [markerDragging, setMarkerDragging] = (0, import_react.useState)(false);
734
+ var markerGrantRef = (0, import_react.useRef)(null);
735
+ var markerEmittedRef = (0, import_react.useRef)(null);
736
+ var markerSessionRef = (0, import_react.useRef)(null);
737
+ var emitMarker = (0, import_react.useCallback)(function (dayDelta) {
738
+ var base = markerGrantRef.current;
739
+ if (!base) return;
740
+ var next = (0, import_ganttMath.addDays)(base, dayDelta);
741
+ if (markerEmittedRef.current === next.getTime()) return;
742
+ markerEmittedRef.current = next.getTime();
743
+ onMarkerDateChange === null || onMarkerDateChange === void 0 ? void 0 : onMarkerDateChange(next);
744
+ }, [onMarkerDateChange]);
745
+ var openMarkerSession = (0, import_react.useCallback)(function () {
746
+ if (markerDate === void 0) return false;
747
+ var base = (0, import_ganttMath.startOfDay)(markerDate);
748
+ markerGrantRef.current = base;
749
+ markerEmittedRef.current = base.getTime();
750
+ return true;
751
+ }, [markerDate]);
752
+ var handleMarkerPointerDown = (0, import_react.useCallback)(function (e) {
753
+ var _e_stopPropagation, _dragCleanupRef_current;
754
+ if (!markerDragEnabled || !hasDom) return;
755
+ if (e.button !== void 0 && e.button !== 0) return;
756
+ if (!openMarkerSession()) return;
757
+ (_e_stopPropagation = e.stopPropagation) === null || _e_stopPropagation === void 0 ? void 0 : _e_stopPropagation.call(e);
758
+ (_dragCleanupRef_current = dragCleanupRef.current) === null || _dragCleanupRef_current === void 0 ? void 0 : _dragCleanupRef_current.call(dragCleanupRef);
759
+ var startX = e.clientX;
760
+ var active = false;
761
+ var ended = false;
762
+ var prevUserSelect = "";
763
+ var toDayDelta = function toDayDelta2(dx) {
764
+ return dirSignRef.current * (0, import_ganttMath.dxToDayDelta)(dx, pxPerDay);
765
+ };
766
+ var teardown = function teardown2() {
767
+ if (ended) return;
768
+ ended = true;
769
+ window.removeEventListener("pointermove", onMove);
770
+ window.removeEventListener("pointerup", onUp);
771
+ window.removeEventListener("keydown", onKey, true);
772
+ if (active) document.body.style.userSelect = prevUserSelect;
773
+ setMarkerDragging(false);
774
+ markerGrantRef.current = null;
775
+ dragCleanupRef.current = null;
776
+ };
777
+ var onMove = function onMove2(me) {
778
+ var dx = me.clientX - startX;
779
+ if (!active) {
780
+ if (Math.abs(dx) < DRAG_THRESHOLD_PX) return;
781
+ active = true;
782
+ prevUserSelect = document.body.style.userSelect;
783
+ document.body.style.userSelect = "none";
784
+ setMarkerDragging(true);
785
+ }
786
+ emitMarker(toDayDelta(dx));
787
+ };
788
+ var onUp = function onUp2() {
789
+ return teardown();
790
+ };
791
+ var onKey = function onKey2(ke) {
792
+ if (ke.key !== "Escape" || !active) return;
793
+ ke.stopPropagation();
794
+ emitMarker(0);
795
+ teardown();
796
+ };
797
+ window.addEventListener("pointermove", onMove);
798
+ window.addEventListener("pointerup", onUp);
799
+ window.addEventListener("keydown", onKey, true);
800
+ dragCleanupRef.current = teardown;
801
+ }, [markerDragEnabled, hasDom, openMarkerSession, emitMarker, pxPerDay]);
802
+ var markerNativeProps = (0, import_react.useMemo)(function () {
803
+ if (!markerDragEnabled || import_tamagui.isWeb) return {};
804
+ return {
805
+ onStartShouldSetResponder: function onStartShouldSetResponder() {
806
+ return true;
807
+ },
808
+ onMoveShouldSetResponder: function onMoveShouldSetResponder() {
809
+ return true;
810
+ },
811
+ onResponderTerminationRequest: function onResponderTerminationRequest() {
812
+ return false;
813
+ },
814
+ onResponderGrant: function onResponderGrant(e) {
815
+ var _ref;
816
+ var _e_nativeEvent;
817
+ if (!openMarkerSession()) return;
818
+ markerSessionRef.current = {
819
+ startX: (_ref = e === null || e === void 0 ? void 0 : (_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.pageX) !== null && _ref !== void 0 ? _ref : 0
820
+ };
821
+ setMarkerDragging(true);
822
+ },
823
+ onResponderMove: function onResponderMove(e) {
824
+ var _ref;
825
+ var _e_nativeEvent;
826
+ var session = markerSessionRef.current;
827
+ if (!session) return;
828
+ var dx = ((_ref = e === null || e === void 0 ? void 0 : (_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.pageX) !== null && _ref !== void 0 ? _ref : 0) - session.startX;
829
+ emitMarker(dirSignRef.current * (0, import_ganttMath.dxToDayDelta)(dx, pxPerDay));
830
+ },
831
+ onResponderRelease: function onResponderRelease() {
832
+ markerSessionRef.current = null;
833
+ markerGrantRef.current = null;
834
+ setMarkerDragging(false);
835
+ },
836
+ onResponderTerminate: function onResponderTerminate() {
837
+ markerSessionRef.current = null;
838
+ markerGrantRef.current = null;
839
+ setMarkerDragging(false);
840
+ }
841
+ };
842
+ }, [markerDragEnabled, openMarkerSession, emitMarker, pxPerDay]);
843
+ var handleMarkerKeyboardMove = (0, import_react.useCallback)(function (key, shiftKey) {
844
+ if (!markerDragEnabled || markerDate === void 0) return;
845
+ var physical = key === "ArrowRight" ? 1 : -1;
846
+ var dayDelta = physical * dirSignRef.current * (shiftKey ? 7 : 1);
847
+ var next = (0, import_ganttMath.addDays)((0, import_ganttMath.startOfDay)(markerDate), dayDelta);
848
+ markerEmittedRef.current = next.getTime();
849
+ onMarkerDateChange === null || onMarkerDateChange === void 0 ? void 0 : onMarkerDateChange(next);
850
+ setAnnouncement((0, import_t.withInterp)(t("Marker moved to {{date}}"), {
851
+ date: (0, import_theme.formatAbsoluteDate)(next)
852
+ }));
853
+ }, [markerDragEnabled, markerDate, onMarkerDateChange, t]);
854
+ var markerX = markerDate === void 0 ? null : (0, import_ganttMath.dateLineX)(range, pxPerDay, markerDate);
855
+ var markerName = markerLabel !== null && markerLabel !== void 0 ? markerLabel : t("Marker");
856
+ var spanAccessibleName = function spanAccessibleName2(title, span) {
857
+ if ((0, import_ganttMath.isBoundedSpan)(span)) {
858
+ return (0, import_ganttMath.ganttTaskAccessibleLabel)({
859
+ title,
860
+ start: span.start,
861
+ end: span.end
862
+ });
863
+ }
864
+ var parts = (0, import_ganttMath.openSpanLabelParts)(span);
865
+ if (parts.start !== void 0) {
866
+ return (0, import_t.withInterp)(t("{{title}}, from {{start}}, no end"), {
867
+ title,
868
+ start: parts.start
869
+ });
870
+ }
871
+ if (parts.end !== void 0) {
872
+ return (0, import_t.withInterp)(t("{{title}}, until {{end}}, no start"), {
873
+ title,
874
+ end: parts.end
875
+ });
876
+ }
877
+ return (0, import_t.withInterp)(t("{{title}}, always, no dates"), {
878
+ title
879
+ });
880
+ };
881
+ var renderBar = function renderBar2(task, ref) {
882
+ var _ref, _ref1, _span_color, _span_intent, _span_title, _span_progress;
883
+ var span = ref.span;
884
+ var barKey = ref.key;
885
+ var bounded = boundedSpan(ref);
886
+ var geom = (0, import_ganttMath.openBarGeometry)(span, range, pxPerDay);
887
+ var activeDrag = drag && drag.key === barKey ? drag : null;
667
888
  var dragging = activeDrag !== null;
668
- var activeResize = resize && resize.id === task.id ? resize : null;
889
+ var activeResize = resize && resize.key === barKey ? resize : null;
669
890
  var resizing = activeResize !== null;
670
891
  var sessionLive = dragging || resizing;
671
892
  var dayDelta = (_ref = (_ref1 = activeDrag === null || activeDrag === void 0 ? void 0 : activeDrag.dayDelta) !== null && _ref1 !== void 0 ? _ref1 : activeResize === null || activeResize === void 0 ? void 0 : activeResize.dayDelta) !== null && _ref !== void 0 ? _ref : 0;
672
- var span = {
673
- start: task.start,
674
- end: task.end
675
- };
676
- var previewSpan = activeDrag ? (0, import_ganttMath.shiftSpanByDays)(span, dayDelta) : activeResize ? (0, import_ganttMath.resizeSpanByDays)(span, activeResize.edge, activeResize.dayDelta) : null;
893
+ var previewSpan = bounded && activeDrag ? (0, import_ganttMath.shiftSpanByDays)(bounded, dayDelta) : bounded && activeResize ? (0, import_ganttMath.resizeSpanByDays)(bounded, activeResize.edge, activeResize.dayDelta) : null;
677
894
  var previewGeom = previewSpan ? (0, import_ganttMath.barGeometry)(previewSpan, range.start, pxPerDay) : null;
678
895
  var liveWidth = activeResize ? Math.max(6, activeResize.edge === "end" ? geom.width + activeResize.logicalDx : geom.width - activeResize.logicalDx) : geom.width;
679
896
  var liveTransformX = activeDrag ? activeDrag.dx : activeResize && activeResize.edge === "start" ? activeResize.logicalDx * dirSign : 0;
680
- var fill = (_task_color = task.color) !== null && _task_color !== void 0 ? _task_color : task.intent && task.intent !== "accent" ? "$color9" : "$accentBackground";
681
- var progress = clampProgress(task.progress);
682
- var showLabel = liveWidth >= 44;
683
- var isBarFocused = focusedBarId === task.id;
897
+ var barColor = (_span_color = span.color) !== null && _span_color !== void 0 ? _span_color : task.color;
898
+ var barIntent = (_span_intent = span.intent) !== null && _span_intent !== void 0 ? _span_intent : task.intent;
899
+ var barTitle = (_span_title = span.title) !== null && _span_title !== void 0 ? _span_title : task.title;
900
+ var fill = barColor !== null && barColor !== void 0 ? barColor : barIntent && barIntent !== "accent" ? "$color9" : "$accentBackground";
901
+ var progress = bounded ? clampProgress((_span_progress = span.progress) !== null && _span_progress !== void 0 ? _span_progress : task.progress) : null;
902
+ var showLabel = !geom.eternal && liveWidth >= 44;
903
+ var isBarFocused = focusedBarId === barKey;
684
904
  var showHandles = hoveredId === task.id || sessionLive;
685
- var handleWidth = geom.width >= 24 ? 8 : geom.width >= 12 ? 4 : 0;
905
+ var handleWidth = bounded ? geom.width >= 24 ? 8 : geom.width >= 12 ? 4 : 0 : 0;
686
906
  var physicalLeftEdge = rtl ? "end" : "start";
687
907
  var physicalRightEdge = rtl ? "start" : "end";
908
+ var openStartSide = rtl ? {
909
+ right: 2
910
+ } : {
911
+ left: 2
912
+ };
913
+ var openEndSide = rtl ? {
914
+ left: 2
915
+ } : {
916
+ right: 2
917
+ };
918
+ var squareStart = rtl ? {
919
+ borderTopRightRadius: 0,
920
+ borderBottomRightRadius: 0
921
+ } : {
922
+ borderTopLeftRadius: 0,
923
+ borderBottomLeftRadius: 0
924
+ };
925
+ var squareEnd = rtl ? {
926
+ borderTopLeftRadius: 0,
927
+ borderBottomLeftRadius: 0
928
+ } : {
929
+ borderTopRightRadius: 0,
930
+ borderBottomRightRadius: 0
931
+ };
932
+ var height2 = geom.eternal ? railHeight : barHeight;
688
933
  return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(BarIntentWrap, {
689
- intent: task.color ? void 0 : task.intent,
934
+ intent: barColor ? void 0 : barIntent,
690
935
  children: [/* Snapped drop preview (the raw bar tracks the pointer 1:1). */
691
936
  sessionLive && dayDelta !== 0 && previewGeom && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
692
937
  position: "absolute",
@@ -700,25 +945,28 @@ function GanttView(param) {
700
945
  backgroundColor: "$accentBackground",
701
946
  opacity: 0.25,
702
947
  pointerEvents: "none",
703
- "data-gantt-drop-preview": task.id
948
+ "data-gantt-drop-preview": barKey
704
949
  }), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
705
950
  position: "absolute",
706
951
  ...canvasPos(geom.x),
707
952
  width: liveWidth,
708
- top: barInset,
709
- height: barHeight,
953
+ top: barInset + (barHeight - height2) / 2,
954
+ height: height2,
710
955
  x: liveTransformX,
711
956
  zIndex: sessionLive ? 3 : 1,
712
957
  ...knobProps.borderRadius,
958
+ ...(geom.openStart ? squareStart : null),
959
+ ...(geom.openEnd ? squareEnd : null),
713
960
  backgroundColor: fill,
714
- opacity: sessionLive ? 0.85 : 1,
961
+ // A rail reads as chrome, not as a duration somebody set.
962
+ opacity: sessionLive ? 0.85 : geom.eternal ? 0.55 : 1,
715
963
  hoverStyle: {
716
- opacity: sessionLive ? 0.85 : 0.9
964
+ opacity: sessionLive ? 0.85 : geom.eternal ? 0.7 : 0.9
717
965
  },
718
966
  pressStyle: {
719
967
  opacity: 0.8
720
968
  },
721
- cursor: webDragEnabled ? "grab" : onItemPress ? "pointer" : void 0,
969
+ cursor: bounded && webDragEnabled ? "grab" : onItemPress ? "pointer" : void 0,
722
970
  justifyContent: "center",
723
971
  // LC-25: committed/reverted geometry jumps tween on web; the live
724
972
  // drag/resize tracking stays 1:1 (no transition while the session
@@ -726,18 +974,18 @@ function GanttView(param) {
726
974
  transition: sessionLive ? void 0 : webLayoutTransition,
727
975
  role: "button",
728
976
  tabIndex: 0,
729
- "aria-label": (0, import_ganttMath.ganttTaskAccessibleLabel)(task),
977
+ "aria-label": spanAccessibleName(barTitle, span),
730
978
  // LC-71: one ring on the bar (the perceived control), keyboard-only.
731
979
  ...(isBarFocused && barKeyboardRing ? import_theme.keyboardFocusRingProps : {
732
980
  outlineWidth: 0
733
981
  }),
734
982
  onFocus: function onFocus() {
735
- setFocusedBarId(task.id);
983
+ setFocusedBarId(barKey);
736
984
  setBarKeyboardRing((0, import_theme.wasKeyboardFocus)());
737
985
  },
738
986
  onBlur: function onBlur() {
739
987
  setFocusedBarId(function (id) {
740
- return id === task.id ? null : id;
988
+ return id === barKey ? null : id;
741
989
  });
742
990
  setBarKeyboardRing(false);
743
991
  },
@@ -761,17 +1009,23 @@ function GanttView(param) {
761
1009
  onItemPress === null || onItemPress === void 0 ? void 0 : onItemPress(task);
762
1010
  return;
763
1011
  }
764
- if ((ke.key === "ArrowLeft" || ke.key === "ArrowRight") && dragEnabled) {
1012
+ if ((ke.key === "ArrowLeft" || ke.key === "ArrowRight") && dragEnabled && bounded) {
765
1013
  var _ke_preventDefault1, _ke_stopPropagation1;
766
1014
  (_ke_preventDefault1 = ke.preventDefault) === null || _ke_preventDefault1 === void 0 ? void 0 : _ke_preventDefault1.call(ke);
767
1015
  (_ke_stopPropagation1 = ke.stopPropagation) === null || _ke_stopPropagation1 === void 0 ? void 0 : _ke_stopPropagation1.call(ke);
768
- handleBarKeyboardMove(task, ke.key, ke.shiftKey === true);
1016
+ handleBarKeyboardMove(task, ref, ke.key, ke.shiftKey === true);
769
1017
  }
770
1018
  },
771
- "data-gantt-bar": task.id,
772
- ...(nativeDragEnabled ? null : getBarDragProps(task)),
1019
+ "data-gantt-bar": barKey,
1020
+ ...(geom.eternal ? {
1021
+ "data-gantt-rail": "true"
1022
+ } : null),
1023
+ ...(geom.openStart || geom.openEnd ? {
1024
+ "data-gantt-span-open": geom.eternal ? "both" : geom.openStart ? "start" : "end"
1025
+ } : null),
1026
+ ...(nativeDragEnabled ? null : getBarDragProps(task, ref)),
773
1027
  // Native drag responders own the tap → press is handled on release.
774
- onPress: nativeDragEnabled ? void 0 : function (e) {
1028
+ onPress: nativeDragEnabled && bounded ? void 0 : function (e) {
775
1029
  var _e_stopPropagation;
776
1030
  e === null || e === void 0 ? void 0 : (_e_stopPropagation = e.stopPropagation) === null || _e_stopPropagation === void 0 ? void 0 : _e_stopPropagation.call(e);
777
1031
  if (suppressClickRef.current) return;
@@ -792,8 +1046,29 @@ function GanttView(param) {
792
1046
  pointerEvents: "none",
793
1047
  "data-gantt-progress": String(progress)
794
1048
  }), showLabel && /* @__PURE__ */(0, import_jsx_runtime.jsx)(GanttBarLabel, {
795
- title: task.title,
1049
+ title: barTitle,
796
1050
  fill
1051
+ }), /* "This end is not an end" — a mark, never a cap. */
1052
+ geom.openStart && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
1053
+ position: "absolute",
1054
+ ...openStartSide,
1055
+ ...knobProps.label,
1056
+ color: "$color12",
1057
+ opacity: 0.75,
1058
+ pointerEvents: "none",
1059
+ "aria-hidden": true,
1060
+ "data-gantt-open-start": "true",
1061
+ children: rtl ? "\xBB" : "\xAB"
1062
+ }), geom.openEnd && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
1063
+ position: "absolute",
1064
+ ...openEndSide,
1065
+ ...knobProps.label,
1066
+ color: "$color12",
1067
+ opacity: 0.75,
1068
+ pointerEvents: "none",
1069
+ "aria-hidden": true,
1070
+ "data-gantt-open-end": "true",
1071
+ children: rtl ? "\xAB" : "\xBB"
797
1072
  }), /* Live date label while dragging (honest preview of the commit). */
798
1073
  previewSpan && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
799
1074
  position: "absolute",
@@ -829,7 +1104,7 @@ function GanttView(param) {
829
1104
  backgroundColor: showHandles ? "$color12" : "transparent",
830
1105
  opacity: showHandles ? 0.28 : 0,
831
1106
  onPointerDown: function onPointerDown(e) {
832
- return handleResizePointerDown(task, physicalLeftEdge, e);
1107
+ return handleResizePointerDown(task, ref, physicalLeftEdge, e);
833
1108
  },
834
1109
  "data-gantt-resize-handle": physicalLeftEdge
835
1110
  }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
@@ -842,7 +1117,7 @@ function GanttView(param) {
842
1117
  backgroundColor: showHandles ? "$color12" : "transparent",
843
1118
  opacity: showHandles ? 0.28 : 0,
844
1119
  onPointerDown: function onPointerDown(e) {
845
- return handleResizePointerDown(task, physicalRightEdge, e);
1120
+ return handleResizePointerDown(task, ref, physicalRightEdge, e);
846
1121
  },
847
1122
  "data-gantt-resize-handle": physicalRightEdge
848
1123
  })]
@@ -850,19 +1125,19 @@ function GanttView(param) {
850
1125
  /* Native drag surface: responders live on a plain fill view because
851
1126
  the bar's Tamagui pressability would clobber them (Kanban keeps
852
1127
  its drag responders off the pressable Card the same way). */
853
- nativeDragEnabled && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1128
+ nativeDragEnabled && bounded && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
854
1129
  position: "absolute",
855
1130
  top: 0,
856
1131
  left: 0,
857
1132
  right: 0,
858
1133
  bottom: 0,
859
1134
  zIndex: 5,
860
- ...getBarDragProps(task)
1135
+ ...getBarDragProps(task, ref)
861
1136
  })]
862
1137
  })]
863
- }, task.id);
1138
+ }, barKey);
864
1139
  };
865
- var scrollLocked = drag !== null || resize !== null;
1140
+ var scrollLocked = drag !== null || resize !== null || markerDragging;
866
1141
  var majorGridColor = "$borderColor";
867
1142
  var minorGridColor = import_componentColors.componentColors.divider;
868
1143
  var scrollerDirection = {
@@ -1024,6 +1299,57 @@ function GanttView(param) {
1024
1299
  height: import_theme.hairlineWidth,
1025
1300
  backgroundColor: import_componentColors.componentColors.divider,
1026
1301
  pointerEvents: "none"
1302
+ }),
1303
+ /* The marker is scrubbed on the AXIS, never on the rows — a
1304
+ press inside a row stays a press on that bar. */
1305
+ markerX !== null && /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
1306
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1307
+ position: "absolute",
1308
+ ...canvasPos(markerX - 1),
1309
+ top: 0,
1310
+ bottom: 0,
1311
+ width: 2,
1312
+ backgroundColor: "$color12",
1313
+ opacity: 0.9,
1314
+ pointerEvents: "none"
1315
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1316
+ position: "absolute",
1317
+ ...canvasPos(markerX - 12),
1318
+ top: 0,
1319
+ bottom: 0,
1320
+ width: 24,
1321
+ alignItems: "center",
1322
+ justifyContent: "flex-end",
1323
+ zIndex: 4,
1324
+ cursor: markerDragEnabled ? "ew-resize" : void 0,
1325
+ role: "slider",
1326
+ tabIndex: markerDragEnabled ? 0 : -1,
1327
+ "aria-label": markerName,
1328
+ "aria-valuetext": markerDate ? (0, import_theme.formatAbsoluteDate)(markerDate) : void 0,
1329
+ ...(markerDragEnabled && hasDom ? {
1330
+ onPointerDown: function onPointerDown(e) {
1331
+ return handleMarkerPointerDown(e);
1332
+ }
1333
+ } : null),
1334
+ ...markerNativeProps,
1335
+ onKeyDown: function onKeyDown(ke) {
1336
+ var _ke_preventDefault, _ke_stopPropagation;
1337
+ if (ke.key !== "ArrowLeft" && ke.key !== "ArrowRight") return;
1338
+ (_ke_preventDefault = ke.preventDefault) === null || _ke_preventDefault === void 0 ? void 0 : _ke_preventDefault.call(ke);
1339
+ (_ke_stopPropagation = ke.stopPropagation) === null || _ke_stopPropagation === void 0 ? void 0 : _ke_stopPropagation.call(ke);
1340
+ handleMarkerKeyboardMove(ke.key, ke.shiftKey === true);
1341
+ },
1342
+ "data-gantt-marker-handle": "true",
1343
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1344
+ width: 11,
1345
+ height: 9,
1346
+ marginBottom: 2,
1347
+ borderRadius: 2,
1348
+ backgroundColor: "$color12",
1349
+ opacity: markerDragging ? 1 : 0.9,
1350
+ pointerEvents: "none"
1351
+ })
1352
+ })]
1027
1353
  })]
1028
1354
  })
1029
1355
  })]
@@ -1044,9 +1370,15 @@ function GanttView(param) {
1044
1370
  ...hairlineEnd,
1045
1371
  borderColor: "$borderColor",
1046
1372
  children: tasks.map(function (task, index) {
1047
- var selected = focusedBarId === task.id;
1373
+ var _ref;
1374
+ var _refs_;
1375
+ var refs = resolveSpans(task);
1376
+ var selected = refs.some(function (ref) {
1377
+ return ref.key === focusedBarId;
1378
+ });
1048
1379
  var hovered = hoveredId === task.id;
1049
1380
  var last = index === tasks.length - 1;
1381
+ var firstKey = (_ref = (_refs_ = refs[0]) === null || _refs_ === void 0 ? void 0 : _refs_.key) !== null && _ref !== void 0 ? _ref : task.id;
1050
1382
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
1051
1383
  height: rowHeight,
1052
1384
  alignItems: "center",
@@ -1069,11 +1401,11 @@ function GanttView(param) {
1069
1401
  },
1070
1402
  onPress: onItemPress ? function () {
1071
1403
  if (suppressClickRef.current) return;
1072
- setFocusedBarId(task.id);
1404
+ setFocusedBarId(firstKey);
1073
1405
  setBarKeyboardRing(false);
1074
1406
  onItemPress(task);
1075
1407
  } : function () {
1076
- setFocusedBarId(task.id);
1408
+ setFocusedBarId(firstKey);
1077
1409
  setBarKeyboardRing(false);
1078
1410
  },
1079
1411
  "data-gantt-row-label": task.id,
@@ -1146,7 +1478,10 @@ function GanttView(param) {
1146
1478
  }, tick.date.toISOString());
1147
1479
  }), /* Task rows */
1148
1480
  tasks.map(function (task, index) {
1149
- var selected = focusedBarId === task.id;
1481
+ var refs = resolveSpans(task);
1482
+ var selected = refs.some(function (ref) {
1483
+ return ref.key === focusedBarId;
1484
+ });
1150
1485
  var hovered = hoveredId === task.id;
1151
1486
  var last = index === tasks.length - 1;
1152
1487
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
@@ -1168,8 +1503,22 @@ function GanttView(param) {
1168
1503
  }
1169
1504
  },
1170
1505
  "data-gantt-row": task.id,
1171
- children: renderBar(task)
1506
+ children: refs.map(function (ref) {
1507
+ return renderBar(task, ref);
1508
+ })
1172
1509
  }, task.id);
1510
+ }), /* Marker line (controlled — the caller owns the date) */
1511
+ markerX !== null && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1512
+ position: "absolute",
1513
+ ...canvasPos(markerX - 1),
1514
+ top: 0,
1515
+ bottom: 0,
1516
+ width: 2,
1517
+ backgroundColor: "$color12",
1518
+ opacity: markerDragging ? 0.95 : 0.75,
1519
+ pointerEvents: "none",
1520
+ zIndex: 2,
1521
+ "data-gantt-marker": "true"
1173
1522
  }), /* Today line (above bars, non-interactive) */
1174
1523
  todayX !== null && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
1175
1524
  position: "absolute",