@toclocoinc/lattice-grid 1.98.1 → 1.98.2

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 (402) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -1
  3. package/angular/package.json +1 -1
  4. package/docs/API.html +27 -17
  5. package/docs/api/adapters.html +1 -1
  6. package/docs/api/ai.html +1 -1
  7. package/docs/api/alarms.html +1 -1
  8. package/docs/api/calendar.html +1 -1
  9. package/docs/api/charts.html +1 -1
  10. package/docs/api/dashboard.html +1 -1
  11. package/docs/api/data-router.html +1 -1
  12. package/docs/api/deckgl.html +1 -1
  13. package/docs/api/designer.html +1 -1
  14. package/docs/api/gantt.html +1 -1
  15. package/docs/api/geometry.html +1 -1
  16. package/docs/api/grid.html +2 -2
  17. package/docs/api/index.html +2 -2
  18. package/docs/api/kanban.html +1 -1
  19. package/docs/api/kpi.html +1 -1
  20. package/docs/api/layout.html +1 -1
  21. package/docs/api/leaflet.html +1 -1
  22. package/docs/api/list.html +1 -1
  23. package/docs/api/mapview.html +1 -1
  24. package/docs/api/mock-socket.html +1 -1
  25. package/docs/api/presets.html +1 -1
  26. package/docs/api/scheduler.html +22 -12
  27. package/docs/api/shell.html +1 -1
  28. package/docs/api/tabs.html +1 -1
  29. package/docs/api/types.html +3 -3
  30. package/docs/api-detail.html +12 -4
  31. package/docs/warnings.json +1 -1
  32. package/lattice-grid.d.ts +1 -1
  33. package/lattice-grid.esm.min.js +2 -2
  34. package/lattice-grid.min.cjs +2 -2
  35. package/lattice-grid.min.js +2 -2
  36. package/locales/all.d.ts +1 -1
  37. package/locales/all.esm.min.js +1 -1
  38. package/locales/all.min.cjs +1 -1
  39. package/locales/all.min.js +1 -1
  40. package/locales/ar.d.ts +1 -1
  41. package/locales/ar.esm.min.js +1 -1
  42. package/locales/ar.min.cjs +1 -1
  43. package/locales/ar.min.js +1 -1
  44. package/locales/cs-CZ.d.ts +1 -1
  45. package/locales/cs-CZ.esm.min.js +1 -1
  46. package/locales/cs-CZ.min.cjs +1 -1
  47. package/locales/cs-CZ.min.js +1 -1
  48. package/locales/da-DK.d.ts +1 -1
  49. package/locales/da-DK.esm.min.js +1 -1
  50. package/locales/da-DK.min.cjs +1 -1
  51. package/locales/da-DK.min.js +1 -1
  52. package/locales/de-DE.d.ts +1 -1
  53. package/locales/de-DE.esm.min.js +1 -1
  54. package/locales/de-DE.min.cjs +1 -1
  55. package/locales/de-DE.min.js +1 -1
  56. package/locales/el-GR.d.ts +1 -1
  57. package/locales/el-GR.esm.min.js +1 -1
  58. package/locales/el-GR.min.cjs +1 -1
  59. package/locales/el-GR.min.js +1 -1
  60. package/locales/en-US.d.ts +1 -1
  61. package/locales/en-US.esm.min.js +1 -1
  62. package/locales/en-US.min.cjs +1 -1
  63. package/locales/en-US.min.js +1 -1
  64. package/locales/es-ES.d.ts +1 -1
  65. package/locales/es-ES.esm.min.js +1 -1
  66. package/locales/es-ES.min.cjs +1 -1
  67. package/locales/es-ES.min.js +1 -1
  68. package/locales/fi-FI.d.ts +1 -1
  69. package/locales/fi-FI.esm.min.js +1 -1
  70. package/locales/fi-FI.min.cjs +1 -1
  71. package/locales/fi-FI.min.js +1 -1
  72. package/locales/fr-CA.d.ts +1 -1
  73. package/locales/fr-CA.esm.min.js +1 -1
  74. package/locales/fr-CA.min.cjs +1 -1
  75. package/locales/fr-CA.min.js +1 -1
  76. package/locales/fr-FR.d.ts +1 -1
  77. package/locales/fr-FR.esm.min.js +1 -1
  78. package/locales/fr-FR.min.cjs +1 -1
  79. package/locales/fr-FR.min.js +1 -1
  80. package/locales/hu-HU.d.ts +1 -1
  81. package/locales/hu-HU.esm.min.js +1 -1
  82. package/locales/hu-HU.min.cjs +1 -1
  83. package/locales/hu-HU.min.js +1 -1
  84. package/locales/it-IT.d.ts +1 -1
  85. package/locales/it-IT.esm.min.js +1 -1
  86. package/locales/it-IT.min.cjs +1 -1
  87. package/locales/it-IT.min.js +1 -1
  88. package/locales/ja-JP.d.ts +1 -1
  89. package/locales/ja-JP.esm.min.js +1 -1
  90. package/locales/ja-JP.min.cjs +1 -1
  91. package/locales/ja-JP.min.js +1 -1
  92. package/locales/nb-NO.d.ts +1 -1
  93. package/locales/nb-NO.esm.min.js +1 -1
  94. package/locales/nb-NO.min.cjs +1 -1
  95. package/locales/nb-NO.min.js +1 -1
  96. package/locales/nl-NL.d.ts +1 -1
  97. package/locales/nl-NL.esm.min.js +1 -1
  98. package/locales/nl-NL.min.cjs +1 -1
  99. package/locales/nl-NL.min.js +1 -1
  100. package/locales/pl-PL.d.ts +1 -1
  101. package/locales/pl-PL.esm.min.js +1 -1
  102. package/locales/pl-PL.min.cjs +1 -1
  103. package/locales/pl-PL.min.js +1 -1
  104. package/locales/pt-BR.d.ts +1 -1
  105. package/locales/pt-BR.esm.min.js +1 -1
  106. package/locales/pt-BR.min.cjs +1 -1
  107. package/locales/pt-BR.min.js +1 -1
  108. package/locales/ro-RO.d.ts +1 -1
  109. package/locales/ro-RO.esm.min.js +1 -1
  110. package/locales/ro-RO.min.cjs +1 -1
  111. package/locales/ro-RO.min.js +1 -1
  112. package/locales/sv-SE.d.ts +1 -1
  113. package/locales/sv-SE.esm.min.js +1 -1
  114. package/locales/sv-SE.min.cjs +1 -1
  115. package/locales/sv-SE.min.js +1 -1
  116. package/locales/uk-UA.d.ts +1 -1
  117. package/locales/uk-UA.esm.min.js +1 -1
  118. package/locales/uk-UA.min.cjs +1 -1
  119. package/locales/uk-UA.min.js +1 -1
  120. package/modules/ai.d.ts +1 -1
  121. package/modules/ai.esm.min.js +1 -1
  122. package/modules/ai.min.cjs +1 -1
  123. package/modules/ai.min.js +1 -1
  124. package/modules/alarms.d.ts +1 -1
  125. package/modules/alarms.esm.min.js +1 -1
  126. package/modules/alarms.min.cjs +1 -1
  127. package/modules/alarms.min.js +1 -1
  128. package/modules/angular.d.ts +1 -1
  129. package/modules/angular.esm.min.js +1 -1
  130. package/modules/angular.min.cjs +1 -1
  131. package/modules/angular.min.js +1 -1
  132. package/modules/calendar.d.ts +1 -1
  133. package/modules/calendar.esm.min.js +1 -1
  134. package/modules/calendar.min.cjs +1 -1
  135. package/modules/calendar.min.js +1 -1
  136. package/modules/chart-alluvial.d.ts +1 -1
  137. package/modules/chart-alluvial.esm.min.js +1 -1
  138. package/modules/chart-alluvial.min.cjs +1 -1
  139. package/modules/chart-alluvial.min.js +1 -1
  140. package/modules/chart-arc.d.ts +1 -1
  141. package/modules/chart-arc.esm.min.js +1 -1
  142. package/modules/chart-arc.min.cjs +1 -1
  143. package/modules/chart-arc.min.js +1 -1
  144. package/modules/chart-barrace.d.ts +1 -1
  145. package/modules/chart-barrace.esm.min.js +1 -1
  146. package/modules/chart-barrace.min.cjs +1 -1
  147. package/modules/chart-barrace.min.js +1 -1
  148. package/modules/chart-bubblemap.d.ts +1 -1
  149. package/modules/chart-bubblemap.esm.min.js +1 -1
  150. package/modules/chart-bubblemap.min.cjs +1 -1
  151. package/modules/chart-bubblemap.min.js +1 -1
  152. package/modules/chart-bump.d.ts +1 -1
  153. package/modules/chart-bump.esm.min.js +1 -1
  154. package/modules/chart-bump.min.cjs +1 -1
  155. package/modules/chart-bump.min.js +1 -1
  156. package/modules/chart-calendar.d.ts +1 -1
  157. package/modules/chart-calendar.esm.min.js +1 -1
  158. package/modules/chart-calendar.min.cjs +1 -1
  159. package/modules/chart-calendar.min.js +1 -1
  160. package/modules/chart-choropleth.d.ts +1 -1
  161. package/modules/chart-choropleth.esm.min.js +1 -1
  162. package/modules/chart-choropleth.min.cjs +1 -1
  163. package/modules/chart-choropleth.min.js +1 -1
  164. package/modules/chart-decomposition.d.ts +1 -1
  165. package/modules/chart-decomposition.esm.min.js +1 -1
  166. package/modules/chart-decomposition.min.cjs +1 -1
  167. package/modules/chart-decomposition.min.js +1 -1
  168. package/modules/chart-diverging.d.ts +1 -1
  169. package/modules/chart-diverging.esm.min.js +1 -1
  170. package/modules/chart-diverging.min.cjs +1 -1
  171. package/modules/chart-diverging.min.js +1 -1
  172. package/modules/chart-dumbbell.d.ts +1 -1
  173. package/modules/chart-dumbbell.esm.min.js +1 -1
  174. package/modules/chart-dumbbell.min.cjs +1 -1
  175. package/modules/chart-dumbbell.min.js +1 -1
  176. package/modules/chart-fan.d.ts +1 -1
  177. package/modules/chart-fan.esm.min.js +1 -1
  178. package/modules/chart-fan.min.cjs +1 -1
  179. package/modules/chart-fan.min.js +1 -1
  180. package/modules/chart-forcetree.d.ts +1 -1
  181. package/modules/chart-forcetree.esm.min.js +1 -1
  182. package/modules/chart-forcetree.min.cjs +1 -1
  183. package/modules/chart-forcetree.min.js +1 -1
  184. package/modules/chart-hexbin.d.ts +1 -1
  185. package/modules/chart-hexbin.esm.min.js +1 -1
  186. package/modules/chart-hexbin.min.cjs +1 -1
  187. package/modules/chart-hexbin.min.js +1 -1
  188. package/modules/chart-hexmap.d.ts +1 -1
  189. package/modules/chart-hexmap.esm.min.js +1 -1
  190. package/modules/chart-hexmap.min.cjs +1 -1
  191. package/modules/chart-hexmap.min.js +1 -1
  192. package/modules/chart-icicle.d.ts +1 -1
  193. package/modules/chart-icicle.esm.min.js +1 -1
  194. package/modules/chart-icicle.min.cjs +1 -1
  195. package/modules/chart-icicle.min.js +1 -1
  196. package/modules/chart-markermap.d.ts +1 -1
  197. package/modules/chart-markermap.esm.min.js +1 -1
  198. package/modules/chart-markermap.min.cjs +1 -1
  199. package/modules/chart-markermap.min.js +1 -1
  200. package/modules/chart-motion.d.ts +1 -1
  201. package/modules/chart-motion.esm.min.js +1 -1
  202. package/modules/chart-motion.min.cjs +1 -1
  203. package/modules/chart-motion.min.js +1 -1
  204. package/modules/chart-pack.d.ts +1 -1
  205. package/modules/chart-pack.esm.min.js +1 -1
  206. package/modules/chart-pack.min.cjs +1 -1
  207. package/modules/chart-pack.min.js +1 -1
  208. package/modules/chart-parallel.d.ts +1 -1
  209. package/modules/chart-parallel.esm.min.js +1 -1
  210. package/modules/chart-parallel.min.cjs +1 -1
  211. package/modules/chart-parallel.min.js +1 -1
  212. package/modules/chart-pictorial.d.ts +1 -1
  213. package/modules/chart-pictorial.esm.min.js +1 -1
  214. package/modules/chart-pictorial.min.cjs +1 -1
  215. package/modules/chart-pictorial.min.js +1 -1
  216. package/modules/chart-polararea.d.ts +1 -1
  217. package/modules/chart-polararea.esm.min.js +1 -1
  218. package/modules/chart-polararea.min.cjs +1 -1
  219. package/modules/chart-polararea.min.js +1 -1
  220. package/modules/chart-polarscatter.d.ts +1 -1
  221. package/modules/chart-polarscatter.esm.min.js +1 -1
  222. package/modules/chart-polarscatter.min.cjs +1 -1
  223. package/modules/chart-polarscatter.min.js +1 -1
  224. package/modules/chart-pyramid.d.ts +1 -1
  225. package/modules/chart-pyramid.esm.min.js +1 -1
  226. package/modules/chart-pyramid.min.cjs +1 -1
  227. package/modules/chart-pyramid.min.js +1 -1
  228. package/modules/chart-radialbar.d.ts +1 -1
  229. package/modules/chart-radialbar.esm.min.js +1 -1
  230. package/modules/chart-radialbar.min.cjs +1 -1
  231. package/modules/chart-radialbar.min.js +1 -1
  232. package/modules/chart-ridgeline.d.ts +1 -1
  233. package/modules/chart-ridgeline.esm.min.js +1 -1
  234. package/modules/chart-ridgeline.min.cjs +1 -1
  235. package/modules/chart-ridgeline.min.js +1 -1
  236. package/modules/chart-roc.d.ts +1 -1
  237. package/modules/chart-roc.esm.min.js +1 -1
  238. package/modules/chart-roc.min.cjs +1 -1
  239. package/modules/chart-roc.min.js +1 -1
  240. package/modules/chart-scatter3d.d.ts +1 -1
  241. package/modules/chart-scatter3d.esm.min.js +1 -1
  242. package/modules/chart-scatter3d.min.cjs +1 -1
  243. package/modules/chart-scatter3d.min.js +1 -1
  244. package/modules/chart-serpentine.d.ts +1 -1
  245. package/modules/chart-serpentine.esm.min.js +1 -1
  246. package/modules/chart-serpentine.min.cjs +1 -1
  247. package/modules/chart-serpentine.min.js +1 -1
  248. package/modules/chart-slope.d.ts +1 -1
  249. package/modules/chart-slope.esm.min.js +1 -1
  250. package/modules/chart-slope.min.cjs +1 -1
  251. package/modules/chart-slope.min.js +1 -1
  252. package/modules/chart-spiral.d.ts +1 -1
  253. package/modules/chart-spiral.esm.min.js +1 -1
  254. package/modules/chart-spiral.min.cjs +1 -1
  255. package/modules/chart-spiral.min.js +1 -1
  256. package/modules/chart-splom.d.ts +1 -1
  257. package/modules/chart-splom.esm.min.js +1 -1
  258. package/modules/chart-splom.min.cjs +1 -1
  259. package/modules/chart-splom.min.js +1 -1
  260. package/modules/chart-tree.d.ts +1 -1
  261. package/modules/chart-tree.esm.min.js +1 -1
  262. package/modules/chart-tree.min.cjs +1 -1
  263. package/modules/chart-tree.min.js +1 -1
  264. package/modules/chart-venn.d.ts +1 -1
  265. package/modules/chart-venn.esm.min.js +1 -1
  266. package/modules/chart-venn.min.cjs +1 -1
  267. package/modules/chart-venn.min.js +1 -1
  268. package/modules/chart-voronoi.d.ts +1 -1
  269. package/modules/chart-voronoi.esm.min.js +1 -1
  270. package/modules/chart-voronoi.min.cjs +1 -1
  271. package/modules/chart-voronoi.min.js +1 -1
  272. package/modules/chart-waffle.d.ts +1 -1
  273. package/modules/chart-waffle.esm.min.js +1 -1
  274. package/modules/chart-waffle.min.cjs +1 -1
  275. package/modules/chart-waffle.min.js +1 -1
  276. package/modules/chart-wordcloud.d.ts +1 -1
  277. package/modules/chart-wordcloud.esm.min.js +1 -1
  278. package/modules/chart-wordcloud.min.cjs +1 -1
  279. package/modules/chart-wordcloud.min.js +1 -1
  280. package/modules/charts.d.ts +1 -1
  281. package/modules/charts.esm.min.js +1 -1
  282. package/modules/charts.min.cjs +1 -1
  283. package/modules/charts.min.js +1 -1
  284. package/modules/dashboard.d.ts +1 -1
  285. package/modules/dashboard.esm.min.js +1 -1
  286. package/modules/dashboard.min.cjs +1 -1
  287. package/modules/dashboard.min.js +1 -1
  288. package/modules/data-router.d.ts +1 -1
  289. package/modules/data-router.esm.min.js +1 -1
  290. package/modules/data-router.min.cjs +1 -1
  291. package/modules/data-router.min.js +1 -1
  292. package/modules/deckgl.d.ts +1 -1
  293. package/modules/deckgl.esm.min.js +1 -1
  294. package/modules/deckgl.min.cjs +1 -1
  295. package/modules/deckgl.min.js +1 -1
  296. package/modules/designer.d.ts +1 -1
  297. package/modules/designer.esm.min.js +1 -1
  298. package/modules/designer.min.cjs +1 -1
  299. package/modules/designer.min.js +1 -1
  300. package/modules/devtools.d.ts +1 -1
  301. package/modules/devtools.esm.min.js +1 -1
  302. package/modules/devtools.min.cjs +1 -1
  303. package/modules/devtools.min.js +1 -1
  304. package/modules/dhtmlx-compat.d.ts +1 -1
  305. package/modules/dhtmlx-compat.esm.min.js +1 -1
  306. package/modules/dhtmlx-compat.min.cjs +1 -1
  307. package/modules/dhtmlx-compat.min.js +1 -1
  308. package/modules/gantt.d.ts +1 -1
  309. package/modules/gantt.esm.min.js +1 -1
  310. package/modules/gantt.min.cjs +1 -1
  311. package/modules/gantt.min.js +1 -1
  312. package/modules/geo-europe-nuts.d.ts +1 -1
  313. package/modules/geo-europe-nuts.esm.min.js +1 -1
  314. package/modules/geo-europe-nuts.min.cjs +1 -1
  315. package/modules/geo-europe-nuts.min.js +1 -1
  316. package/modules/geo-uk.d.ts +1 -1
  317. package/modules/geo-uk.esm.min.js +1 -1
  318. package/modules/geo-uk.min.cjs +1 -1
  319. package/modules/geo-uk.min.js +1 -1
  320. package/modules/geo-us-states.d.ts +1 -1
  321. package/modules/geo-us-states.esm.min.js +1 -1
  322. package/modules/geo-us-states.min.cjs +1 -1
  323. package/modules/geo-us-states.min.js +1 -1
  324. package/modules/geo-world-110m.d.ts +1 -1
  325. package/modules/geo-world-110m.esm.min.js +1 -1
  326. package/modules/geo-world-110m.min.cjs +1 -1
  327. package/modules/geo-world-110m.min.js +1 -1
  328. package/modules/geo-world-50m.d.ts +1 -1
  329. package/modules/geo-world-50m.esm.min.js +1 -1
  330. package/modules/geo-world-50m.min.cjs +1 -1
  331. package/modules/geo-world-50m.min.js +1 -1
  332. package/modules/geometry.d.ts +1 -1
  333. package/modules/geometry.esm.min.js +1 -1
  334. package/modules/geometry.min.cjs +1 -1
  335. package/modules/geometry.min.js +1 -1
  336. package/modules/htmx.d.ts +1 -1
  337. package/modules/htmx.esm.min.js +2 -2
  338. package/modules/htmx.min.cjs +2 -2
  339. package/modules/htmx.min.js +2 -2
  340. package/modules/kanban.d.ts +1 -1
  341. package/modules/kanban.esm.min.js +1 -1
  342. package/modules/kanban.min.cjs +1 -1
  343. package/modules/kanban.min.js +1 -1
  344. package/modules/kpi.d.ts +1 -1
  345. package/modules/kpi.esm.min.js +1 -1
  346. package/modules/kpi.min.cjs +1 -1
  347. package/modules/kpi.min.js +1 -1
  348. package/modules/layout.d.ts +1 -1
  349. package/modules/layout.esm.min.js +1 -1
  350. package/modules/layout.min.cjs +1 -1
  351. package/modules/layout.min.js +1 -1
  352. package/modules/leaflet.d.ts +1 -1
  353. package/modules/leaflet.esm.min.js +1 -1
  354. package/modules/leaflet.min.cjs +1 -1
  355. package/modules/leaflet.min.js +1 -1
  356. package/modules/list.d.ts +1 -1
  357. package/modules/list.esm.min.js +1 -1
  358. package/modules/list.min.cjs +1 -1
  359. package/modules/list.min.js +1 -1
  360. package/modules/mapview.d.ts +1 -1
  361. package/modules/mapview.esm.min.js +1 -1
  362. package/modules/mapview.min.cjs +1 -1
  363. package/modules/mapview.min.js +1 -1
  364. package/modules/mock-socket.d.ts +1 -1
  365. package/modules/mock-socket.esm.min.js +1 -1
  366. package/modules/mock-socket.min.cjs +1 -1
  367. package/modules/mock-socket.min.js +1 -1
  368. package/modules/presets.d.ts +1 -1
  369. package/modules/presets.esm.min.js +1 -1
  370. package/modules/presets.min.cjs +1 -1
  371. package/modules/presets.min.js +1 -1
  372. package/modules/react.d.ts +1 -1
  373. package/modules/react.esm.min.js +1 -1
  374. package/modules/react.min.cjs +1 -1
  375. package/modules/react.min.js +1 -1
  376. package/modules/scheduler.d.ts +12 -8
  377. package/modules/scheduler.esm.min.js +90 -78
  378. package/modules/scheduler.esm.min.js.map +2 -2
  379. package/modules/scheduler.min.cjs +90 -78
  380. package/modules/scheduler.min.js +90 -78
  381. package/modules/scheduler.min.js.map +2 -2
  382. package/modules/shell.d.ts +1 -1
  383. package/modules/shell.esm.min.js +1 -1
  384. package/modules/shell.min.cjs +1 -1
  385. package/modules/shell.min.js +1 -1
  386. package/modules/svelte.d.ts +1 -1
  387. package/modules/svelte.esm.min.js +1 -1
  388. package/modules/svelte.min.cjs +1 -1
  389. package/modules/svelte.min.js +1 -1
  390. package/modules/tabs.d.ts +1 -1
  391. package/modules/tabs.esm.min.js +1 -1
  392. package/modules/tabs.min.cjs +1 -1
  393. package/modules/tabs.min.js +1 -1
  394. package/modules/vue.d.ts +1 -1
  395. package/modules/vue.esm.min.js +1 -1
  396. package/modules/vue.min.cjs +1 -1
  397. package/modules/vue.min.js +1 -1
  398. package/modules/webcomponent.d.ts +1 -1
  399. package/modules/webcomponent.esm.min.js +2 -2
  400. package/modules/webcomponent.min.cjs +2 -2
  401. package/modules/webcomponent.min.js +2 -2
  402. package/package.json +1 -1
@@ -1,26 +1,26 @@
1
1
  /*!
2
- * Lattice Grid 1.98.1, scheduler module
2
+ * Lattice Grid 1.98.2, scheduler module
3
3
  * Copyright (c) 2026 TOCLOCO Inc. All rights reserved.
4
4
  * https://latticegrid.dev
5
5
  */
6
- var lt=Object.create(null),ct=Object.create(null);function Le(r,ae){lt[r]=ae}function ft(r){var ae=ct[r];if(ae)return ae;var De=Object.create(null);ct[r]=De;var le=lt[r];if(!le)throw new Error("[lattice] missing module: "+r);return le(De,ft),De}Le("packages/core/src/internal/predicates.js",function(r,ae){"use strict";Object.defineProperty(r,"isObject",{enumerable:!0,get:function(){return De}}),Object.defineProperty(r,"isFunction",{enumerable:!0,get:function(){return le}}),Object.defineProperty(r,"isNil",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"isBlank",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"isCtor",{enumerable:!0,get:function(){return se}});function De(A){return A!==null&&typeof A=="object"&&!Array.isArray(A)}function le(A){return typeof A=="function"}function Z(A){return A==null}function fe(A){return A==null||A===""}function se(A){return typeof A!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(A))?!0:!!(A.prototype&&Object.getOwnPropertyNames(A.prototype).length>1)}}),Le("packages/core/src/internal/warn.js",function(r,ae){"use strict";Object.defineProperty(r,"reportedWarnings",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"infoOnce",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"resetWarnings",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"fail",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"invariant",{enumerable:!0,get:function(){return J}}),Object.defineProperty(r,"DEV",{enumerable:!0,get:function(){return x}});const De=new Set,le=2e3;function Z(a){if(De.add(a),De.size>le){const g=De.values().next().value;g!==void 0&&De.delete(g)}}const fe=[],se=500;function A(a,g,y){fe.push({key:a,level:g,message:y.map(T=>typeof T=="string"?T:te(T)).join(" "),at:Date.now()}),fe.length>se&&fe.shift()}function te(a){if(a instanceof Error)return a.message;try{return JSON.stringify(a)}catch{return String(a)}}function b(){return fe.map(a=>({...a}))}function S(a){if(a.length===0||typeof a[0]!="string")return a;const g=a[0].replace(/^\[lattice\]\s*/,"");return g===a[0]?a:[g,...a.slice(1)]}function Y(a,...g){if(De.has(a))return;Z(a);const y=S(g);A(a,"warn",y),console.warn("[lattice]",...y)}function B(a,...g){if(De.has(a))return;Z(a);const y=S(g);A(a,"info",y),console.info("[lattice]",...y)}function O(){De.clear(),fe.length=0}function C(a,g){const y=new Error(`[lattice] ${a}`);throw g!==void 0&&(y.cause=g),y}function J(a,g){a||C(g)}const x=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})()}),Le("packages/core/src/internal/merge.js",function(r,ae){"use strict";Object.defineProperty(r,"expand",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"toArray",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"merge",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"mergeRow",{enumerable:!0,get:function(){return te}});const le=ae("packages/core/src/internal/predicates.js").isObject;function Z(b,S,Y){if(b!==void 0)return b===!0?{enabled:!0,...Y}:b===!1?{enabled:!1}:le(b)?b:{[S]:b,enabled:!0}}function fe(b){return b==null?[]:Array.isArray(b)?b:[b]}const se=Object.freeze(new Set(["__proto__","constructor","prototype"]));function A(b,S){if(!le(b))return le(S)?{...S}:S;if(!le(S))return S===void 0?b:S;const Y={...b};for(const B of Object.keys(S)){if(se.has(B))continue;const O=S[B];O!==void 0&&(Y[B]=le(O)&&le(Y[B])?A(Y[B],O):O)}return Y}function te(b,S){if(!le(b)||!le(S)||b===S)return S;const Y=Object.create(Object.getPrototypeOf(b));return Object.assign(Y,b,S),Y}}),Le("packages/core/src/internal/paths.js",function(r,ae){"use strict";Object.defineProperty(r,"pathGetter",{enumerable:!0,get:function(){return le}}),Object.defineProperty(r,"pathSetter",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"getPath",{enumerable:!0,get:function(){return se}}),Object.defineProperty(r,"setPath",{enumerable:!0,get:function(){return A}});const De=new Map;function le(te){let b=De.get(te);if(b)return b;if(!te.includes("."))b=S=>S?.[te];else{const S=te.split("."),Y=S.length;b=B=>{let O=B;for(let C=0;C<Y;C++){if(O==null)return;O=O[S[C]]}return O}}return De.set(te,b),b}const Z=new Map;function fe(te){let b=Z.get(te);if(b)return b;if(!te.includes("."))b=(S,Y)=>{S!=null&&(S[te]=Y)};else{const S=te.split("."),Y=S.length-1;b=(B,O)=>{let C=B;for(let J=0;J<Y;J++){if(C==null)return;const x=S[J];C[x]==null&&(C[x]={}),C=C[x]}C!=null&&(C[S[Y]]=O)}}return Z.set(te,b),b}function se(te,b){return le(b)(te)}function A(te,b,S){fe(b)(te,S)}}),Le("packages/modules/gantt/time.js",function(r,ae){"use strict";Object.defineProperty(r,"toDayNumber",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"fromDayNumber",{enumerable:!0,get:function(){return se}}),Object.defineProperty(r,"toISODate",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"resolveProjectEpoch",{enumerable:!0,get:function(){return te}});const le=ae("packages/core/src/internal/warn.js").warnOnce,Z=864e5;function fe(b){if(b==null||b==="")return null;if(typeof b=="number")return Number.isFinite(b)?b:null;if(b instanceof Date)return Number.isFinite(b.getTime())?Math.floor(Date.UTC(b.getFullYear(),b.getMonth(),b.getDate())/Z):null;const S=Date.parse(b);return Number.isFinite(S)?Math.floor(S/Z):null}function se(b){return Number.isFinite(b)?new Date(Math.round(b)*Z):null}function A(b){const S=se(b);return S?S.toISOString().slice(0,10):null}function te(b){if(b==null||b==="")return 0;const S=fe(b);return Number.isFinite(S)?S:(le(`gantt.projectEpoch:${String(b)}`,`[lattice] gantt: projectEpoch ${JSON.stringify(b)} is not a date or a day number; the plan is rendered against the Unix epoch (day 0 = 1970-01-01).`),0)}}),Le("packages/modules/gantt/calendar.js",function(r,ae){"use strict";Object.defineProperty(r,"createCalendar",{enumerable:!0,get:function(){return fe}});const le=ae("packages/modules/gantt/time.js").toDayNumber,Z=Object.freeze([1,2,3,4,5]);function fe(se,A=0){if(se==null)return null;let te,b;se==="weekends"?(te=Z,b=new Set):(te=Array.isArray(se.workdays)&&se.workdays.length?se.workdays.map(Number).filter(y=>y>=0&&y<=6):Z,b=new Set((Array.isArray(se.holidays)?se.holidays:[]).map(y=>le(y)).filter(y=>y!=null)));const S=new Set(te);if(S.size===7&&b.size===0||S.size===0)return null;const Y=y=>{let T=(y%7+4)%7;return T<0&&(T+=7),T},B=y=>{if(!Number.isFinite(y))return!1;const T=Math.round(y);return S.has(Y(T))&&!b.has(T)},O=y=>{let T=y;for(;!B(T);)T+=1;return T},C=O(Math.round(Number.isFinite(A)?A:0)),J=S.size,x=(y,T)=>{if(T<y)return 0;const ne=T-y+1,oe=Math.floor(ne/7);let W=oe*J;const ge=Y(y);for(let me=oe*7;me<ne;me+=1)S.has((ge+me)%7)&&(W+=1);for(const me of b)me>=y&&me<=T&&S.has(Y(me))&&(W-=1);return W};return{isWorking:B,nextWorking:O,dayOf:y=>{const T=Math.round(y);if(T===0)return C;if(T>0){const ye=Math.floor(T/J);let ke=C+ye*7,be=T-ye*J;for(;be>0;)ke+=1,S.has(Y(ke))&&(be-=1);let ve=0;for(const Se of b)Se>C&&Se<=ke&&S.has(Y(Se))&&(ve+=1);for(;ve>0;)ke+=1,B(ke)&&(ve-=1);for(;!B(ke);)ke+=1;return ke}const ne=-T,oe=Math.floor(ne/J);let W=C-oe*7,ge=ne-oe*J;for(;ge>0;)W-=1,S.has(Y(W))&&(ge-=1);let me=0;for(const ye of b)ye>=W&&ye<C&&S.has(Y(ye))&&(me+=1);for(;me>0;)W-=1,B(W)&&(me-=1);for(;!B(W);)W-=1;return W},indexOf:y=>{const T=O(Math.round(y));return T>=C?x(C,T)-1:-(x(T,C)-1)},anchor:C}}}),Le("packages/modules/gantt/week.js",function(r,ae){"use strict";Object.defineProperty(r,"EXPLICIT_WEEK_START_DAY",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"localeWeekStartDay",{enumerable:!0,get:function(){return se}}),Object.defineProperty(r,"validWeekStartDay",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"resolveWeekStartDay",{enumerable:!0,get:function(){return te}}),Object.defineProperty(r,"weekStartOf",{enumerable:!0,get:function(){return b}});const le=ae("packages/modules/gantt/time.js").fromDayNumber,Z=Symbol("gantt.explicitWeekStartDay"),fe=new Set(["US","CA","MX","BR","AR","CO","VE","EC","PE","CL","IL","JP","KR","TW","HK","PH","ZA","EG"]);function se(S){if(!S||typeof S!="string")return null;try{const Y=new Intl.Locale(S),B=Y.weekInfo??(typeof Y.getWeekInfo=="function"?Y.getWeekInfo():null);if(B&&Number.isFinite(B.firstDay))return B.firstDay===7?0:B.firstDay;const O=Y.region||S.split(/[-_]/).find(C=>C.length===2);if(O)return fe.has(O.toUpperCase())?0:1}catch{}return null}function A(S){return Number.isFinite(S)&&S>=0&&S<=6?Math.floor(S):null}function te(S,Y){const B=A(S);if(B!=null)return B;const O=se(Y);return O??0}function b(S,Y){const B=le(S),O=B?B.getUTCDay():0;return S-((O-Y)%7+7)%7}}),Le("packages/modules/gantt/zoom.js",function(r,ae){"use strict";Object.defineProperty(r,"ZOOM_PRESETS",{enumerable:!0,get:function(){return De}}),Object.defineProperty(r,"ZOOM_LEVEL_NAMES",{enumerable:!0,get:function(){return le}}),Object.defineProperty(r,"resolveZoomPreset",{enumerable:!0,get:function(){return Z}});const De=Object.freeze({hour:{px:624,step:1/24,level:"hour"},day:{px:26,step:1,level:"day"},week:{px:12,step:7,level:"week"},month:{px:4,step:30,level:"month"},quarter:{px:1.8,step:91,level:"quarter"}}),le=Object.freeze(["hour","day","week","month","quarter"]);function Z(fe,se="day"){if(typeof fe=="number"&&Number.isFinite(fe)&&fe>0){const A=fe>=60?"hour":fe>=18?"day":fe>=8?"week":fe>=2.5?"month":"quarter";return{px:fe,step:De[A].step,level:A}}return typeof fe=="string"&&Object.prototype.hasOwnProperty.call(De,fe)?De[fe]:De[se]||De.day}}),Le("packages/modules/gantt/workload-groups.js",function(r,ae){"use strict";Object.defineProperty(r,"GROUP_KEY_PREFIX",{enumerable:!0,get:function(){return De}}),Object.defineProperty(r,"isGroupKey",{enumerable:!0,get:function(){return le}}),Object.defineProperty(r,"normalizeGroupBy",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"groupOfResource",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"groupBookingSubRows",{enumerable:!0,get:function(){return te}}),Object.defineProperty(r,"groupWorkloadRows",{enumerable:!0,get:function(){return b}});const De="group:";function le(S){return typeof S=="string"&&S.startsWith(De)}function Z(S){return typeof S=="function"||typeof S=="string"&&S.trim()!==""?S:null}function fe(S,Y){let B=null;try{B=typeof S=="function"?S(Y):Y?Y[S]:null}catch{B=null}return B==null||B===""?null:String(B)}function se(S,Y){return Array.isArray(Y)?S?S.map((B,O)=>{const C=Y[O];return C==null?B:B==null?C:B+C}):Y.map(B=>B??null):S}function A(S,Y){return Y==null||!Number.isFinite(Y)?S:S==null?Y:S+Y}function te(S){const Y=[],B=new Map;for(const O of S){if(!O.external||O.group==null){Y.push(O);continue}const C=B.get(O.group);if(C){C.cells=se(C.cells,O.cells),C.total+=Number(O.total)||0,C.bookings.push(O);continue}const J={...O,id:`${De}${O.group}`,name:O.group,cells:se(null,O.cells),total:Number(O.total)||0,bookings:[O]};B.set(O.group,J),Y.push(J)}return Y}function b(S,Y){const B=new Map;for(const C of S){const J=Y(C.resource==null?null:C.resource);B.has(J)||B.set(J,[]),B.get(J).push(C)}return[...B.keys()].sort((C,J)=>C==null?J==null?0:1:J==null?-1:C.localeCompare(J,void 0,{numeric:!0,sensitivity:"base"})).map(C=>{const J=B.get(C);let x=null,a=null,g=null,y=null,T=null,ne=0;for(const W of J)x=se(x,W.cells),a=se(a,W.available),g=se(g,W.costCells),y=A(y,W.availableTotal),T=A(T,W.costTotal),ne+=Number(W.total)||0;x=x||[];const oe=x.map((W,ge)=>W!=null&&a!=null&&a[ge]!=null&&W>a[ge]+1e-9);return{value:C,key:`${De}${C??""}`,rows:J,cells:x,available:a,availableTotal:y,total:ne,costCells:g,costTotal:T,over:oe}})}}),Le("packages/modules/scheduler/model.js",function(r,ae){"use strict";Object.defineProperty(r,"GROUP_KEY_PREFIX",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(r,"parseDate",{enumerable:!0,get:function(){return me}}),Object.defineProperty(r,"accessorFor",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"dateToDay",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"eventSpan",{enumerable:!0,get:function(){return be}}),Object.defineProperty(r,"addMinutes",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(r,"defaultResourceColumns",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(r,"resolveWorkload",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"resolveContext",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"anchorDay",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"axisSpan",{enumerable:!0,get:function(){return c}}),Object.defineProperty(r,"monthStartOf",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"monthEndOf",{enumerable:!0,get:function(){return t}}),Object.defineProperty(r,"computeTicks",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"assignLanes",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"placeEvents",{enumerable:!0,get:function(){return z}}),Object.defineProperty(r,"colorFor",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"resourceNonWorking",{enumerable:!0,get:function(){return E}}),Object.defineProperty(r,"laneCount",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"eventText",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"searchableText",{enumerable:!0,get:function(){return i}}),Object.defineProperty(r,"visibleEvents",{enumerable:!0,get:function(){return L}}),Object.defineProperty(r,"visibleResources",{enumerable:!0,get:function(){return j}}),Object.defineProperty(r,"buildDisplayRows",{enumerable:!0,get:function(){return he}}),Object.defineProperty(r,"snapToStep",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"formatFieldDate",{enumerable:!0,get:function(){return q}}),Object.defineProperty(r,"formatFieldDateLike",{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(r,"isEventReadOnly",{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(r,"isResourceReadOnly",{enumerable:!0,get:function(){return Ee}});const le=ae("packages/core/src/internal/warn.js").warnOnce,fe=ae("packages/core/src/internal/paths.js").getPath,se=ae("packages/core/src/internal/predicates.js"),A=se.isFunction,te=se.isNil,b=se.isObject,S=ae("packages/modules/gantt/time.js"),Y=S.toDayNumber,B=S.fromDayNumber,C=ae("packages/modules/gantt/calendar.js").createCalendar,J=ae("packages/modules/gantt/week.js"),x=J.resolveWeekStartDay,a=J.weekStartOf,y=ae("packages/modules/gantt/zoom.js").resolveZoomPreset,T=ae("packages/modules/gantt/workload-groups.js"),ne=T.normalizeGroupBy,oe=T.groupOfResource,W=864e5,ge="sched:";function me(k){if(k instanceof Date)return Number.isNaN(k.getTime())?null:k;if(typeof k=="number"&&Number.isFinite(k))return new Date(k);if(typeof k!="string")return null;const m=k.trim();if(!m)return null;let o=/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2}))?$/.exec(m);if(o){const F=new Date(+o[1],+o[2]-1,+o[3],+o[4],+o[5],o[6]?+o[6]:0);return Number.isNaN(F.getTime())?null:F}if(o=/^(\d{4})-(\d{2})-(\d{2})$/.exec(m),o){const F=new Date(+o[1],+o[2]-1,+o[3]);return Number.isNaN(F.getTime())?null:F}const ie=new Date(m);return Number.isNaN(ie.getTime())?null:ie}function ye(k){return A(k)?k:typeof k=="string"?m=>fe(m,k):()=>{}}function ke(k){const m=Y(k),o=((k.getHours()*60+k.getMinutes())*60+k.getSeconds())/86400;return{day:m??0,frac:o}}function be(k,m){const o=ye(k.fields.startDate)(m),ie=me(o);if(!ie)return{start:null,end:null};const F=ke(ie);let ee;const s=ye(k.fields.endDate)(m),M=me(s);return M?ee=ke(M):ee=ve(F,k.defaultDuration),(ee.day<F.day||ee.day===F.day&&ee.frac<F.frac)&&(ee=ve(F,k.defaultDuration)),{start:F,end:ee}}function ve(k,m){const o=k.day*1440+Math.round(k.frac*1440)+m;return{day:Math.floor(o/1440),frac:o%1440/1440}}function Se(){return[{id:"name",field:"name",title:"Name",layout:{width:160}},{id:"role",field:"role",title:"Role",layout:{width:120}},{id:"capacity",field:"capacity",title:"Capacity",type:"number",layout:{width:90}}]}function G(k){if(k===!0)return{hoursPerDay:8,defaultCapacity:1,decimals:1};if(k&&typeof k=="object"&&!Array.isArray(k)){const m=(ie,F)=>typeof ie=="number"&&Number.isFinite(ie)&&ie>0?ie:F,o=typeof k.decimals=="number"&&Number.isFinite(k.decimals)&&k.decimals>=0?Math.round(k.decimals):1;return{hoursPerDay:m(k.hoursPerDay,8),defaultCapacity:m(k.defaultCapacity,1),decimals:o}}return null}function U(k){const m=b(k)?k:{},o=b(m.fields)?m.fields:{};return{resources:Array.isArray(m.resources)?m.resources:[],events:Array.isArray(m.events)?m.events:[],createGrid:A(m.createGrid)?m.createGrid:null,fields:{resourceId:typeof o.resourceId=="string"?o.resourceId:"resourceId",startDate:typeof o.startDate=="string"?o.startDate:"startDate",endDate:typeof o.endDate=="string"?o.endDate:"endDate",name:typeof o.name=="string"?o.name:"name",calendar:typeof o.calendar=="string"?o.calendar:"calendar"},resourceKey:typeof m.resourceKey=="string"?m.resourceKey:"id",eventKey:typeof m.eventKey=="string"?m.eventKey:"id",columns:Array.isArray(m.columns)&&m.columns.length?m.columns:Se(),zoom:y(m.zoom,"day"),zoomName:typeof m.zoom=="string"?m.zoom:"day",anchor:me(m.date)||me(m.startDate)||null,defaultDuration:typeof m.defaultDuration=="number"&&m.defaultDuration>0?m.defaultDuration:60,rowHeight:typeof m.rowHeight=="number"&&m.rowHeight>0?m.rowHeight:34,locale:typeof m.locale=="string"?m.locale:void 0,timeZone:typeof m.timeZone=="string"?m.timeZone:void 0,weekStartDay:x(m.weekStartDay,typeof m.locale=="string"?m.locale:void 0),todayLine:m.todayLine!==!1,nonWorking:m.nonWorking!==!1,calendars:b(m.calendars)?m.calendars:null,workload:G(m.workload),ariaLabel:typeof m.ariaLabel=="string"?m.ariaLabel:"",messages:b(m.messages)?m.messages:null,labels:b(m.labels)?m.labels:{},overscan:typeof m.overscan=="number"&&m.overscan>=0?m.overscan:5,colorProperty:typeof m.colorProperty=="string"?m.colorProperty:null,colorMap:b(m.colorMap)?m.colorMap:null,groupBy:ne(m.groupBy),search:typeof m.search=="string"?m.search.trim():"",resourceFilter:A(m.resourceFilter)?m.resourceFilter:null,eventFilter:A(m.eventFilter)?m.eventFilter:null,editable:m.editable!==!1,readOnlyWhen:A(m.readOnlyWhen)?m.readOnlyWhen:null,resourceReadOnlyWhen:A(m.resourceReadOnlyWhen)?m.resourceReadOnlyWhen:null}}function D(k){if(k.anchor)return Y(k.anchor);let m=null;for(const o of k.events){const ie=me(ye(k.fields.startDate)(o));if(ie){const F=Y(ie);(m==null||F<m)&&(m=F)}}return m??Y(new Date)}function c(k,m){let o=m,ie=m+1;for(const s of k.events){const M=be(k,s);M.start&&(M.start.day<o&&(o=M.start.day),M.end.day>ie&&(ie=M.end.day))}const F=a(o,k.weekStartDay);let ee=ie+1;return k.zoom.level==="month"||k.zoom.level==="quarter"?{startDay:H(F),endDay:t(ee)}:(ee-F<14&&(ee=F+14),{startDay:F,endDay:ee})}function H(k){const m=B(k);return Math.floor(Date.UTC(m.getUTCFullYear(),m.getUTCMonth(),1)/W)}function t(k){const m=B(k);return Math.floor(Date.UTC(m.getUTCFullYear(),m.getUTCMonth()+1,1)/W)}function u(k,m,o){const ie=k.zoom.level,F=k.locale||void 0,ee=k.timeZone||"UTC",s=[],M=(w,p)=>{const h=new Date(Math.round(w)*W);return new Intl.DateTimeFormat(F,{...p,timeZone:ee}).format(h)};if(ie==="hour"){for(let w=m;w<o;w+=1/24)s.push({day:w,label:new Intl.DateTimeFormat(F,{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:ee}).format(new Date(w*W))});return s}if(ie==="day"){for(let w=m;w<o;w+=1)s.push({day:w,label:M(w,{weekday:"short",day:"numeric"})});return s}if(ie==="week"){for(let w=a(m,k.weekStartDay);w<o;w+=7)s.push({day:w,label:M(w,{month:"short",day:"numeric"})});return s}const I=ie==="quarter"?3:1;let $=H(m);for(;$<o;){const w=new Date(Math.round($)*W),h=I===1||w.getUTCMonth()%3===0?new Intl.DateTimeFormat(F,{month:"short",year:w.getUTCMonth()===0||I===1?"numeric":void 0,timeZone:ee}).format(w):new Intl.DateTimeFormat(F,{month:"short",timeZone:ee}).format(w);s.push({day:$,label:h}),$=Math.floor(Date.UTC(w.getUTCFullYear(),w.getUTCMonth()+I,1)/W)}return s}function f(k){k.sort((o,ie)=>o.startDay-ie.startDay||ie.endDay-ie.startDay-(o.endDay-o.startDay)||(String(o.key)<String(ie.key)?-1:String(o.key)>String(ie.key)?1:0));const m=[];for(const o of k){const ie=m[m.length-1];ie&&o.startDay<ie.endDay?(ie.items.push(o),o.endDay>ie.endDay&&(ie.endDay=o.endDay)):m.push({items:[o],endDay:o.endDay})}for(const o of m){const ie=[];for(const F of o.items){let ee=0;for(;ee<ie.length&&ie[ee]>F.startDay;)ee++;F.lane=ee,ee===ie.length?ie.push(F.endDay):ie[ee]=F.endDay}for(const F of o.items)F.lanes=ie.length}return k}function z(k,m=k.events){const o=ye(k.fields.resourceId),ie=ye(k.eventKey),F=ye(k.fields.name),ee=new Map,s=[],M=new Map;let I=!1;for(const $ of m){const w=ie($),p=o($),h=be(k,$);if(!h.start){s.push({key:w,row:$}),I||(I=!0,le("scheduler:unparsable-start",`scheduler: an event's "${k.fields.startDate}" is empty or unparsable, so it is not shown; count it in \`unscheduled\`.`));continue}const V={key:w,row:$,resourceKey:p,name:F($),startDay:h.start.day+h.start.frac,endDay:h.end.day+h.end.frac,lane:0,lanes:1,color:v(k,$)};ee.has(p)||ee.set(p,[]),ee.get(p).push(V),M.set(w,V)}for(const[,$]of ee)f($);return{byResource:ee,unscheduled:s,keys:M}}function v(k,m){const o=k.colorProperty;if(!o)return null;const ie=ye(o)(m);return te(ie)?null:k.colorMap&&b(k.colorMap)&&typeof k.colorMap[String(ie)]=="string"?k.colorMap[String(ie)]:typeof ie=="string"&&/^(#|rgb|hsl|oklch|var\()/.test(ie.trim())?ie.trim():null}function E(k,m){const o=ye(k.fields.calendar)(m);let ie=o;if(typeof o=="string"&&k.calendars&&Object.prototype.hasOwnProperty.call(k.calendars,o)&&(ie=k.calendars[o]),ie==null)return null;const F=C(ie,0);return F?ee=>!F.isWorking(Math.round(ee)):null}function N(k){let m=1;for(const o of k)o.lanes>m&&(m=o.lanes);return m}function K(k,m,o){const ie=ye(k.fields.name)(m);return te(ie)?String(o):String(ie)}function i(k){return k==null?"":typeof k!="object"?String(k):Object.keys(k).filter(m=>k[m]!=null&&(typeof k[m]=="string"||typeof k[m]=="number")).map(m=>String(k[m])).join(" ")}function _(k,m){return m===""||String(k||"").toLocaleLowerCase().includes(m)}function n(k,m){try{return k(m)!==!1}catch{return!0}}function d(k){return(k.search||"").trim().toLocaleLowerCase()}function L(k){const m=d(k);return k.events.filter(o=>k.eventFilter&&!n(k.eventFilter,o)?!1:_(i(o),m))}function j(k){const m=d(k),o=ye(k.resourceKey),ie=ye(k.fields.resourceId);return k.resources.filter(F=>{if(k.resourceFilter&&!n(k.resourceFilter,F))return!1;if(!m||_(i(F),m))return!0;const ee=o(F);return k.events.some(s=>ie(s)===ee&&_(i(s),m))})}function he(k,m,o,ie){const F=[];if(!m){for(const M of k)F.push({type:"resource",resource:M});return F}const ee=new Map,s=[];for(const M of k){const I=oe(m,M);ee.has(I)||(ee.set(I,[]),s.push(I)),ee.get(I).push(M)}s.sort((M,I)=>M==null?I==null?0:1:I==null?-1:M.localeCompare(I,void 0,{numeric:!0,sensitivity:"base"}));for(const M of s){const I=M==null?ie||"Ungrouped":String(M);if(F.push({type:"group",key:`${ge}${M??""}`,value:M,label:I,expanded:!o.has(M)}),!o.has(M))for(const $ of ee.get(M))F.push({type:"resource",resource:$})}return F}function ce(k,m){return!Number.isFinite(k)||k<=0?m:Math.round(m/k)*k}function q(k){if(!Number.isFinite(k))return null;const m=B(Math.floor(k));if(!m)return null;const o=Math.round((k-Math.floor(k))*1440),ie=Math.floor(o/60),F=o%60,ee=s=>String(s).padStart(2,"0");return`${m.getUTCFullYear()}-${ee(m.getUTCMonth()+1)}-${ee(m.getUTCDate())} ${ee(ie)}:${ee(F)}`}function Pe(k,m){const o=q(m);return o&&typeof k=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(k)?o.slice(0,10):o}function Ae(k,m){if(!m)return!1;if(m.readOnly===!0)return!0;if(A(k.readOnlyWhen))try{return!!k.readOnlyWhen(m)}catch{return!1}return!1}function Ee(k,m){if(!m)return!1;if(m.readOnly===!0)return!0;if(A(k.resourceReadOnlyWhen))try{return!!k.resourceReadOnlyWhen(m)}catch{return!1}return!1}}),Le("packages/modules/shared/emitter.js",function(r,ae){"use strict";Object.defineProperty(r,"WILDCARD",{enumerable:!0,get:function(){return se}}),Object.defineProperty(r,"Emitter",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"gate",{enumerable:!0,get:function(){return S}});const le=ae("packages/core/src/internal/predicates.js").isFunction,fe=ae("packages/core/src/internal/warn.js").warnOnce,se="*",A=new Set(["api","user","init","ai"]);function te(Y,B){return Y&&Y.name?Y.name:`#${B}`}class b{#e=new Map;#t;constructor(B="module"){this.#t=String(B)}on(B,O){if(!le(O))return()=>{};let C=this.#e.get(B);return C||(C=new Set,this.#e.set(B,C)),C.add(O),()=>this.off(B,O)}off(B,O){const C=this.#e.get(B);C&&C.delete(O)}count(B){const O=this.#e.get(B);return O?O.size:0}emit(B,O){const C=this.#e.get(B),J=this.#e.get(se);if((!C||C.size===0)&&(!J||J.size===0))return;const x={...O||null,type:B};C&&C.size&&this.#n([...C],x,B),J&&J.size&&this.#n([...J],x,se)}#n(B,O,C){for(let J=0;J<B.length;J++)try{B[J](O)}catch(x){fe(`${this.#t}.emit.throw:${C}:${te(B[J],J)}`,`${this.#t}: a '${C}' handler threw; other handlers were unaffected.`,x)}}emitBefore(B,O,C){const J=C??(O&&O.origin),x=A.has(J)?J:"user";let a=!1,g=null;const y=me=>{a=!0,me!=null&&g===null&&(g=String(me))},T={...O||null,type:B,origin:x,get defaultPrevented(){return a},get reason(){return g},preventDefault(me){y(me)}},ne=this.#e.get(B);if(!ne||ne.size===0)return!0;const oe=[...ne],W=()=>(a&&g===null&&(g="prevented"),a&&O&&typeof O=="object"&&(O.reason=g),!a),ge=[];for(let me=0;me<oe.length;me++){const ye=oe[me];try{const ke=ye(T);ke&&le(ke.then)?ge.push(ke):ke===!1&&y("prevented")}catch(ke){y("error"),fe(`${this.#t}.beforeThrow:${B}:${te(ye,me)}`,`${this.#t}: a '${B}' before-handler threw; the action was cancelled.`,ke)}}return ge.length===0?W():Promise.allSettled(ge).then(me=>{for(const ye of me)ye.status==="rejected"?(y("error"),fe(`${this.#t}.beforeReject:${B}`,`${this.#t}: a '${B}' before-handler rejected; the action was cancelled.`,ye.reason)):ye.value===!1&&y("prevented");return W()})}clear(){this.#e.clear()}}function S(Y,B,O,C,J){const x=Y.emitBefore(B,C,C.origin),a=()=>(Y.emit(O,{...C,reason:C.reason||"prevented"}),!1);return x===!1?a():x&&le(x.then)?x.then(g=>g?J():a()):J()}}),Le("packages/modules/charts/svg.js",function(r,ae){"use strict";Object.defineProperty(r,"SVG_NS",{enumerable:!0,get:function(){return De}}),Object.defineProperty(r,"el",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"svg",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"attr",{enumerable:!0,get:function(){return se}}),Object.defineProperty(r,"attrs",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"setText",{enumerable:!0,get:function(){return te}}),Object.defineProperty(r,"clear",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"append",{enumerable:!0,get:function(){return S}}),Object.defineProperty(r,"path",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"ribbonPath",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"round",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"pathRings",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"insideRings",{enumerable:!0,get:function(){return J}});const De="http://www.w3.org/2000/svg";function le(x){const a=x.indexOf(")");return a<0?x:x.slice(a+1).trim()||"#0072b2"}function Z(x,a,g){const y=x.createElement(a);return g&&y.setAttribute("class",g),y}function fe(x,a,g){const y=x.createElementNS(De,a);if(g)for(const T of Object.keys(g))y.setAttribute(T,String(g[T]));return y}function se(x,a,g){if(!x)return;if(g==null){x.removeAttribute(a);return}let y=String(g);y.startsWith("url(#")&&(a==="stroke"||a==="fill"&&x.localName==="text")&&(y=le(y)),x.setAttribute(a,y)}function A(x,a){if(x)for(const g of Object.keys(a))se(x,g,a[g])}function te(x,a){x&&(x.textContent=a==null?"":String(a))}function b(x){if(x)for(;x.firstChild;)x.removeChild(x.firstChild)}function S(x,a){for(const g of a)g&&x.appendChild(g);return x}function Y(x){return x.join(" ")}function B(x){if(!x||x.length<2)return"";const a=["M",x[0].x,x[0].upper];for(let g=1;g<x.length;g++)a.push("L",x[g].x,x[g].upper);for(let g=x.length-1;g>=0;g--)a.push("L",x[g].x,x[g].lower);return a.push("Z"),Y(a)}function O(x){return Math.round(x*100)/100}function C(x){const a=[];let g=[];const y=String(x||"").match(/[A-Za-z]|-?\d*\.?\d+(?:e[-+]?\d+)?/gi)||[];let T="",ne=[];const oe=()=>{if(!T||!ne.length){ne=[];return}if(T==="M"||T==="L")for(let W=0;W+1<ne.length;W+=2)g.push([ne[W],ne[W+1]]);else T!=="Z"&&ne.length>=2&&g.push([ne[ne.length-2],ne[ne.length-1]]);ne=[]};for(const W of y){if(/[A-Za-z]/.test(W)){if(oe(),W==="Z"||W==="z"){g.length>2&&a.push(g),g=[],T="";continue}W==="M"&&g.length>2&&(a.push(g),g=[]),T=W;continue}ne.push(Number(W))}return oe(),g.length>2&&a.push(g),a}function J(x,a,g){let y=!1;for(const T of x)for(let ne=0,oe=T.length-1;ne<T.length;oe=ne++){const[W,ge]=T[ne],[me,ye]=T[oe];ge>g!=ye>g&&a<(me-W)*(g-ge)/(ye-ge||1e-12)+W&&(y=!y)}return y}}),Le("packages/modules/gantt/assignments.js",function(r,ae){"use strict";Object.defineProperty(r,"parseAssignments",{enumerable:!0,get:function(){return le}});function De(Z){if(Z==null||Z==="")return null;const fe=typeof Z=="number"?Z:Number(Z);return Number.isFinite(fe)?fe:null}function le(Z){if(Z&&Array.isArray(Z.assignments))return Z.assignments.map(A=>{const te=A&&(A.resource??A.name??A.id);if(te==null||te==="")return null;const b=De(A.units)??De(A.allocation)??1;return{resource:String(te),units:b}}).filter(Boolean);const fe=Z?Z.assignee??Z.assignees??Z.owner:null;return(Array.isArray(fe)?fe:fe==null||fe===""?[]:[fe]).map(A=>String(A)).filter(A=>A!=="").map(A=>({resource:A,units:1}))}}),Le("packages/modules/gantt/task-calendars.js",function(r,ae){"use strict";Object.defineProperty(r,"PLAN_CALENDAR_ID",{enumerable:!0,get:function(){return se}}),Object.defineProperty(r,"parseHolidayDays",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"planWorkingTime",{enumerable:!0,get:function(){return S}}),Object.defineProperty(r,"normalizeCalendarSpec",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"resolveCalendars",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"PLAIN_TIME",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"createTimeModel",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"workingRuns",{enumerable:!0,get:function(){return J}});const le=ae("packages/modules/gantt/calendar.js").createCalendar,fe=ae("packages/modules/gantt/time.js").toDayNumber,se="plan",A=Object.freeze([0,1,2,3,4,5,6]),te=Object.freeze([1,2,3,4,5]);function b(x){const a=new Set;for(const g of Array.isArray(x)?x:[]){if(g&&typeof g=="object"&&!(g instanceof Date)&&("from"in g||"to"in g)){const T=fe(g.from),ne=fe(g.to??g.from);if(T==null)continue;const oe=ne??T;for(let W=Math.min(T,oe);W<=Math.max(T,oe);W+=1)a.add(W);continue}const y=fe(g);y!=null&&a.add(y)}return[...a].sort((g,y)=>g-y)}function S(x){return x==null?{workdays:[...A],holidays:[],hoursPerDay:null}:x==="weekends"?{workdays:[...te],holidays:[],hoursPerDay:null}:{workdays:Array.isArray(x.workdays)&&x.workdays.length?x.workdays.map(Number).filter(g=>g>=0&&g<=6):[...te],holidays:b(x.holidays),hoursPerDay:null}}function Y(x,a){let g,y,T=null;if(x==="weekends")g=[...te],y=[];else if(x&&typeof x=="object"&&!Array.isArray(x)&&!(x instanceof Date)){const oe=x,W=oe.workdays??oe.workingDays;g=Array.isArray(W)&&W.length?W.map(Number).filter(me=>me>=0&&me<=6):a.workdays;const ge=oe.holidays??oe.exceptions;y=Array.isArray(ge)?b(ge):a.holidays,oe.hoursPerDay!=null&&(T=oe.hoursPerDay)}else return null;const ne=[...new Set(g)].sort((oe,W)=>oe-W);return{workdays:ne,holidays:y,hoursPerDay:T,key:`${ne.join(",")}|${y.join(",")}`}}function B(x){const a=S(x.calendar),g=Number.isFinite(x.projectStart)?x.projectStart:0,y=Y({workdays:a.workdays,holidays:a.holidays},a).key,T=new Map,ne=[],oe=new Map;for(const[be,ve]of Object.entries(x.calendars&&typeof x.calendars=="object"?x.calendars:{})){const Se=Y(ve,a);Se&&oe.set(be,Se)}const W=(be,ve)=>{if(!T.has(be)){const Se=le({workdays:ve.workdays,holidays:ve.holidays},g);T.set(be,{id:be,workdays:ve.workdays,holidays:ve.holidays,hoursPerDay:ve.hoursPerDay,calendar:Se,isWorking:Se?G=>Se.isWorking(G):()=>!0,key:ve.key})}return T.get(be)};W(se,{...a,key:y});const ge=(be,ve,Se)=>{if(be==null||be==="")return se;if(typeof be=="string"&&oe.has(be))return W(be,oe.get(be)).id;const G=be==="weekends"||be&&typeof be=="object"?Y(be,a):null;if(G){const D=be==="weekends"?"weekends":`${Se}:${ve}`;return W(D,G).id}const U=typeof be=="string"?be:JSON.stringify(be);return ne.push({code:"unknown-calendar",message:`${Se} "${ve}" names unknown calendar "${U}"`,id:ve,calendar:U,owner:Se}),null},me=new Map;let ye=!1;for(const be of x.tasks||[]){const ve=ge(be.calendar,be.id,"task");ve!=null&&(me.set(be.id,ve),T.get(ve).key!==y&&(ye=!0))}const ke=new Map;for(const be of x.resources||[]){const ve=ge(be.calendar,be.id,"resource");if(ve==null||ve===se)continue;const Se=T.get(ve);ke.set(be.id,{workingDays:Se.workdays,holidays:Se.holidays,...Se.hoursPerDay!=null?{hoursPerDay:Se.hoursPerDay}:null})}return{errors:ne,customised:ye,models:T,ofTask:me,resourceSpec:ke}}const O=Object.freeze({custom:!1,norm:(x,a)=>a,fin:(x,a,g)=>a+g,back:(x,a,g)=>a-g,shift:(x,a,g)=>a+g,unshift:(x,a,g)=>a-g,between:(x,a,g)=>a-g});function C(x){return{custom:!0,norm:(a,g)=>{const y=x(a);return y?y.nextWorking(g):g},fin:(a,g,y)=>{const T=x(a);return T?T.dayOf(T.indexOf(g)+y):g+y},back:(a,g,y)=>{const T=x(a);return T?T.dayOf(T.indexOf(g)-y):g-y},shift:(a,g,y)=>{const T=x(a);return T?T.dayOf(T.indexOf(g)+y):g+y},unshift:(a,g,y)=>{const T=x(a);return T?T.dayOf(T.indexOf(g)-y):g-y},between:(a,g,y)=>{const T=x(a);return T?T.indexOf(g)-T.indexOf(y):g-y}}}function J(x,a,g){const y=[];let T=null;for(let ne=Math.round(x);ne<Math.round(a);ne+=1)g(ne)?T==null&&(T=ne):T!=null&&(y.push([T,ne]),T=null);return T!=null&&y.push([T,Math.round(a)]),y}}),Le("packages/modules/gantt/unscheduled.js",function(r,ae){"use strict";Object.defineProperty(r,"UNSCHEDULED_DEFAULT_DURATION",{enumerable:!0,get:function(){return De}}),Object.defineProperty(r,"isUnscheduled",{enumerable:!0,get:function(){return le}}),Object.defineProperty(r,"findUnscheduled",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"activeEdges",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"unscheduledRecord",{enumerable:!0,get:function(){return se}}),Object.defineProperty(r,"completeUnscheduledPatch",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"unscheduledMarker",{enumerable:!0,get:function(){return te}});const De=1;function le(b){return!!(b&&b.unscheduled===!0)}function Z(b,S,Y){const B=new Set;for(const O of b)!Y.isSummary(O)&&S.get(O).duration==null&&B.add(O);if(!B.size)return B;for(const O of b)Y.isSummary(O)&&Y.descendantLeaves(O).every(C=>B.has(C))&&B.add(O);return B}function fe(b,S){return S.size?b.filter(Y=>!S.has(Y.from)&&!S.has(Y.to)):b}function se(b,S){return{id:b.id,name:b.name,duration:null,es:null,ef:null,ls:null,lf:null,totalFloat:null,critical:!1,percentComplete:S?null:b.percentComplete,parent:b.parent,isSummary:S,isMilestone:!1,locked:S?!1:!!b.locked,unscheduled:!0,children:[]}}function A(b,S){if(!le(S)||S.isSummary||b.duration!==void 0)return b;const Y=b.start!=null&&b.start!=="",B=b.end!=null&&b.end!=="";if(!Y&&!B)return b;const O={...b,duration:De};if(!Y){const C=Number(b.end);Number.isFinite(C)&&(O.start=C-De)}return O}function te(b,S,Y){const B=b.createElement("span");return B.setAttribute("class",`${S}__unscheduled`),B.textContent=Y("gantt.unscheduled"),B}}),Le("packages/modules/gantt/inactive.js",function(r,ae){"use strict";Object.defineProperty(r,"bridgeInactive",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"inactiveRecord",{enumerable:!0,get:function(){return se}}),Object.defineProperty(r,"inactiveMarker",{enumerable:!0,get:function(){return A}});const De=Object.freeze({FS:"es",SS:"es",FF:"ef",SF:"ef"}),le=Object.freeze({FS:"ef",SS:"es",FF:"ef",SF:"es"});function Z(te,b){const S=te.lag+b.lag,Y=le[te.type],B=De[b.type];let O;return Y==="ef"&&B==="es"?O="FS":Y==="ef"&&B==="ef"?O="FF":Y==="es"&&B==="es"?O="SS":O="SF",{from:te.from,to:b.to,type:O,lag:S}}function fe(te,b){if(!b.size)return te;let S=te;for(const Y of b){if(!S.some(a=>a.from===Y||a.to===Y))continue;const O=S.filter(a=>a.to===Y),C=S.filter(a=>a.from===Y),J=S.filter(a=>a.from!==Y&&a.to!==Y),x=[];for(const a of O)for(const g of C)a.from!==g.to&&x.push(Z(a,g));S=J.concat(x)}return S}function se(te){const b=te.earliestStart??null,S=te.duration??null,Y=b!=null&&S!=null?b+S:null;return{id:te.id,name:te.name,duration:S,es:b,ef:Y,ls:b,lf:Y,totalFloat:null,critical:!1,percentComplete:te.percentComplete,parent:te.parent,isSummary:!1,isMilestone:S===0,locked:!!te.locked,inactive:!0,children:[],colour:te.colour??null}}function A(te,b,S){const Y=te.createElement("span");return Y.setAttribute("class",`${b}__inactive-marker`),Y.textContent=S("gantt.inactive"),Y}}),Le("packages/modules/gantt/schedule.js",function(r,ae){"use strict";Object.defineProperty(r,"LINK_TYPES",{enumerable:!0,get:function(){return ne}}),Object.defineProperty(r,"CONSTRAINT_TYPES",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"resolveConstraintCode",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(r,"SCHEDULING_MODES",{enumerable:!0,get:function(){return me}}),Object.defineProperty(r,"resolveSchedulingMode",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"effortRate",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(r,"recomputeEffort",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(r,"reconcileEffort",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"EPS",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"SCHEDULE_ERROR",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"TASK_FIELDS",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"taskIdReader",{enumerable:!0,get:function(){return z}}),Object.defineProperty(r,"taskFieldWriters",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"isTaskLocked",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"normalizeTasks",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"buildTree",{enumerable:!0,get:function(){return i}}),Object.defineProperty(r,"normalizeLinkSpec",{enumerable:!0,get:function(){return n}}),Object.defineProperty(r,"normalizeDependencies",{enumerable:!0,get:function(){return d}}),Object.defineProperty(r,"expandDependencies",{enumerable:!0,get:function(){return L}}),Object.defineProperty(r,"topoOrder",{enumerable:!0,get:function(){return he}}),Object.defineProperty(r,"wouldCreateCycle",{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(r,"computeSchedule",{enumerable:!0,get:function(){return m}}),Object.defineProperty(r,"findViolations",{enumerable:!0,get:function(){return ee}});const le=ae("packages/core/src/internal/warn.js").warnOnce,fe=ae("packages/modules/gantt/calendar.js").createCalendar,se=ae("packages/modules/gantt/task-calendars.js"),A=se.PLAIN_TIME,te=se.createTimeModel,b=se.resolveCalendars,Y=ae("packages/modules/gantt/assignments.js").parseAssignments,O=ae("packages/modules/gantt/time.js").toDayNumber,C=ae("packages/modules/gantt/unscheduled.js"),J=C.activeEdges,x=C.findUnscheduled,a=C.unscheduledRecord,g=ae("packages/modules/gantt/inactive.js"),y=g.bridgeInactive,T=g.inactiveRecord,ne=["FS","SS","FF","SF"],oe=["ASAP","MSO","MFO","ALAP","SNET","SNLT","FNET","FNLT"],W=Object.freeze({asap:"ASAP","as-soon-as-possible":"ASAP",assoonaspossible:"ASAP",mso:"MSO","must-start-on":"MSO",muststarton:"MSO","start-on":"MSO",mfo:"MFO","must-finish-on":"MFO",mustfinishon:"MFO","finish-on":"MFO",alap:"ALAP","as-late-as-possible":"ALAP",aslateaspossible:"ALAP",late:"ALAP",snet:"SNET","start-no-earlier-than":"SNET",startnoearlierthan:"SNET",snlt:"SNLT","start-no-later-than":"SNLT",startnolaterthan:"SNLT",fnet:"FNET","finish-no-earlier-than":"FNET",finishnoearlierthan:"FNET",fnlt:"FNLT","finish-no-later-than":"FNLT",finishnolaterthan:"FNLT"});function ge(s){if(s==null||s===""||typeof s=="object"&&!Array.isArray(s)&&!(s instanceof Date)&&(s=s.type??s.constraint??s.code??null,s==null||s===""))return null;const M=String(s).toLowerCase().replace(/\s+/g,"-");return W[M]??(oe.includes(String(s).toUpperCase())?String(s).toUpperCase():null)}const me=["fixedDuration","fixedEffort","fixedUnits"],ye=Object.freeze({fixedduration:"fixedDuration","fixed-duration":"fixedDuration",duration:"fixedDuration",fixedeffort:"fixedEffort","fixed-effort":"fixedEffort",effort:"fixedEffort",work:"fixedEffort",fixedwork:"fixedEffort",fixedunits:"fixedUnits","fixed-units":"fixedUnits",units:"fixedUnits"});function ke(s){if(s==null||s==="")return null;const M=String(s).toLowerCase().replace(/\s+/g,"-");if(ye[M])return ye[M];const I=M.replace(/-/g,"");return ye[I]??null}const be=8;function ve(s,M){const I=M.hoursPerDay,$=M.resourceHours instanceof Map?M.resourceHours:new Map;if(!s||s.length===0)return{rate:I,units:1};let w=0,p=0;for(const h of s){const V=$.has(h.resource)?$.get(h.resource):I;w+=h.units*V,p+=h.units}return{rate:w,units:p}}function Se(s,M){const I=s.schedulingMode||M.defaultMode||"fixedDuration",$=s.effortDriven!=null?!!s.effortDriven:!!M.defaultEffortDriven,{rate:w,units:p}=ve(s.assignments,M),h=s.duration,V=s.statedEffort;let P=h,X=V??(h!=null?h*w:null);return I==="fixedEffort"?V!=null&&w>0?P=V/w:X=h!=null?h*w:null:I==="fixedUnits"?h!=null?(P=h,X=h*w):V!=null&&w>0&&(P=V/w,X=V):P=h,{duration:P,effort:X,units:p,schedulingMode:I,effortDriven:$}}function G(s,M){const I=ke(s.mode)||s.mode||"fixedDuration",$=!!s.effortDriven,w=s.hoursPerDay>0?s.hoursPerDay:be;let p=s.duration,h=s.units;const V=p*h*w,P=M.field,X=M.units!=null?M.units:1;if(P==="duration")p=M.value,I==="fixedEffort"&&(h=p>0?V/(p*w):h);else if(P==="effort"){const $e=M.value;I==="fixedDuration"?h=p>0?$e/(p*w):h:p=h>0?$e/(h*w):p}else if(P==="units")h=M.value,I!=="fixedDuration"&&(p=h>0?V/(h*w):p);else if(P==="addResource"||P==="removeResource"){const $e=P==="addResource"?X:-X;I==="fixedDuration"?$||(h=h+$e):(h=h+$e,p=h>0?V/(h*w):p)}return{duration:p,units:h,effort:p*h*w}}const U=1e-9,D={CYCLE:"cycle",DUPLICATE_ID:"duplicate-id",UNKNOWN_TASK:"unknown-task",BAD_DURATION:"bad-duration",BAD_LINK_TYPE:"bad-link-type",SELF_DEPENDENCY:"self-dependency",UNKNOWN_PARENT:"unknown-parent",PARENT_CYCLE:"parent-cycle",DEP_ACROSS_HIERARCHY:"dep-across-hierarchy",UNKNOWN_CALENDAR:"unknown-calendar"};function c(s){if(s==null||s==="")return null;const M=typeof s=="number"?s:Number(s);return Number.isFinite(M)?M:null}function H(s){if(!s)return null;const M=c(s.effort)??(Array.isArray(s.work)?null:c(s.work))??c(s.hours);if(M!=null)return M;if(Array.isArray(s.work)){let I=0,$=!1;for(const w of s.work){const p=c(w&&w.hours);p!=null&&(I+=p,$=!0)}return $?I:null}return null}function t(s){return s==null||s===""?null:O(s)}const u=Object.freeze(["id","name","start","end","duration","milestone","percentComplete","parent","baselineStart","baselineEnd","constraint","constraintDate","deadline"]);function f(s){const M=s&&typeof s=="object"?s:{},I={};for(const $ of u){const w=M[$];if(typeof w=="function")I[$]=w;else if(typeof w=="string"&&w!==""){const p=w;I[$]=h=>h[p]}else I[$]=p=>p[$]}return I}function z(s){return f(s).id}function v(s){const M=s&&typeof s=="object"?s:{},I={};for(const $ of u){const w=M[$];typeof w=="string"&&w!==""?I[$]=w:typeof w=="function"?I[$]=null:I[$]=$}return I}function E(s,M){const I=M.constraint(s);let $=I??(s&&s.constraintType),w=null;if($&&typeof $=="object"&&!Array.isArray($)&&!($ instanceof Date)&&(w=$.date??$.at??$.constraintDate??null,$=$.type??$.constraint??$.code??null),$==null||$==="")return null;const p=ge($);if(!p)return null;const h=t(w??M.constraintDate(s)??s.constraintAt??s.at);return{type:p,at:h}}function N(s,M){if(!s)return!1;if(s.locked===!0||typeof s.constraintMode=="string"&&s.constraintMode.toLowerCase()==="hard")return!0;if(typeof M=="function")try{return!!M(s)}catch{return!1}return!1}function K(s,M,I){const $=new Map,w=[],p=f(M);if(!Array.isArray(s))return{ok:!1,error:{code:D.BAD_DURATION,message:"tasks must be an array"},order:w,byId:$};for(const h of s){const V=h?p.id(h):null,P=V!=null?String(V):null;if(P==null)return{ok:!1,error:{code:D.UNKNOWN_TASK,message:"every task needs an id"},order:w,byId:$};if($.has(P))return{ok:!1,error:{code:D.DUPLICATE_ID,message:`duplicate task id "${P}"`,id:P},order:w,byId:$};const X=t(p.start(h)),$e=t(p.end(h)),Me=p.milestone(h)===!0;let we=Me?0:c(p.duration(h));if(we==null&&X!=null&&$e!=null&&(we=$e-X),we!=null&&we<0)return{ok:!1,error:{code:D.BAD_DURATION,message:`task "${P}" has negative duration ${we}`,id:P},order:w,byId:$};const xe=p.name(h),Te=p.parent(h),e=h.colour??h.color;$.set(P,{id:P,name:xe!=null?String(xe):P,colour:typeof e=="string"&&e.trim()!==""?e.trim():null,duration:we,milestoneFlag:Me,earliestStart:X,placedStart:X,placedEnd:$e,percentComplete:c(p.percentComplete(h)),parent:Te!=null?String(Te):null,constraint:E(h,p),locked:N(h,I),inactive:h.inactive===!0,baselineStart:t(p.baselineStart(h)??(h.baseline&&h.baseline.start)),baselineEnd:t(p.baselineEnd(h)??(h.baseline&&h.baseline.end)),deadline:t(p.deadline(h)),schedulingMode:ke(h.schedulingMode??h.taskType),effortDriven:h.effortDriven==null?null:!!h.effortDriven,statedEffort:H(h),assignments:Y(h)}),w.push(P)}return{ok:!0,order:w,byId:$}}function i(s,M){const I=new Map(s.map(V=>[V,[]]));for(const V of s){const P=M.get(V).parent;if(P!=null){if(!M.has(P))return{ok:!1,error:{code:D.UNKNOWN_PARENT,message:`task "${V}" names unknown parent "${P}"`,id:V}};I.get(P).push(V)}}for(const V of s){const P=new Set;let X=M.get(V).parent;for(;X!=null;){if(X===V||P.has(X))return{ok:!1,error:{code:D.PARENT_CYCLE,message:`parent cycle at "${V}"`,id:V}};P.add(X),X=M.get(X)?.parent??null}}const $=V=>I.get(V).length>0,w=new Map,p=V=>{if(w.has(V))return w.get(V);const P=I.get(V),X=P.length===0?[V]:P.flatMap($e=>p($e));return w.set(V,X),X};return{ok:!0,children:I,isSummary:$,descendantLeaves:p,ancestors:V=>{const P=new Set;let X=M.get(V).parent;for(;X!=null;)P.add(X),X=M.get(X).parent;return P}}}const _=/^\s*(FS|SS|FF|SF)\s*(?:([+-])\s*(\d+(?:\.\d+)?))?\s*$/i;function n(s){const M={...s||null};if(typeof M.type!="string")return M;const I=_.exec(M.type);if(!I||!I[2])return M;const $=(I[2]==="-"?-1:1)*Number(I[3]);M.type=I[1].toUpperCase();const w=c(s.lag);return w!=null&&w!==$?(le(`gantt-link-shorthand-${String(s.type)}-${w}`,`[lattice] gantt: dependency type ${JSON.stringify(s.type)} carries a lag of ${$} but lag: ${w} was also given; the explicit lag wins. Give one or the other.`),M):(M.lag=$,M)}function d(s,M,I={}){const $=[];if(s==null)return{ok:!0,edges:$};if(!Array.isArray(s))return{ok:!1,error:{code:D.UNKNOWN_TASK,message:"dependencies must be an array"},edges:$};const w=typeof I.ancestors=="function"?I.ancestors:null;for(const p of s){const h=n(p),V=h&&h.from!=null?String(h.from):null,P=h&&h.to!=null?String(h.to):null,X=h&&h.type!=null?String(h.type).toUpperCase():"FS",$e=c(h.lag)??0;if(V==null||P==null)return{ok:!1,error:{code:D.UNKNOWN_TASK,message:"a dependency needs both `from` and `to`"},edges:$};if(!M.has(V))return{ok:!1,error:{code:D.UNKNOWN_TASK,message:`dependency references unknown task "${V}"`,id:V},edges:$};if(!M.has(P))return{ok:!1,error:{code:D.UNKNOWN_TASK,message:`dependency references unknown task "${P}"`,id:P},edges:$};if(V===P)return{ok:!1,error:{code:D.SELF_DEPENDENCY,message:`task "${V}" depends on itself`,id:V},edges:$};if(!ne.includes(X))return{ok:!1,error:{code:D.BAD_LINK_TYPE,message:`unknown link type "${X}" (expected one of ${ne.join("/")})`},edges:$};if(w&&(w(V).has(P)||w(P).has(V)))return{ok:!1,error:{code:D.DEP_ACROSS_HIERARCHY,message:`dependency between "${V}" and "${P}" crosses their own parent/child hierarchy`,from:V,to:P},edges:$};$.push({from:V,to:P,type:X,lag:$e})}return{ok:!0,edges:$}}function L(s,M){const I=new Set,$=[];for(const w of s){(M.isSummary(w.from)||M.isSummary(w.to))&&w.type!=="FS"&&le(`gantt-summary-link-${w.type}-${w.from}-${w.to}`,`[lattice] gantt: ${w.type} link with a summary endpoint (${w.from} -> ${w.to}) is expanded to descendant leaves — a conservative v1 reading; only FS is exact for summary endpoints.`);for(const h of M.descendantLeaves(w.from))for(const V of M.descendantLeaves(w.to)){if(h===V)continue;const P=[h,V,w.type,w.lag].join("");I.has(P)||(I.add(P),$.push({from:h,to:V,type:w.type,lag:w.lag}))}}return $}function j(s,M,I,$=A){return s.map(w=>{const p=M.get(w.from),h=M.get(w.to);if(!p||!h||p.earliestStart==null||p.duration==null||h.earliestStart==null||h.duration==null)return w;if($.custom){const we=$.norm(w.from,p.earliestStart),xe=$.fin(w.from,we,p.duration),Te=$.norm(w.to,h.earliestStart),e=$.fin(w.to,Te,h.duration);switch(w.type){case"FS":return{...w,lag:$.between(w.to,Te,xe)};case"SS":return{...w,lag:$.between(w.to,Te,we)};case"FF":return{...w,lag:$.between(w.to,e,xe)};case"SF":return{...w,lag:$.between(w.to,e,we)};default:return w}}const V=I(p.earliestStart),P=V+p.duration,X=I(h.earliestStart),$e=X+h.duration;let Me;switch(w.type){case"FS":Me=X-P;break;case"SS":Me=X-V;break;case"FF":Me=$e-P;break;case"SF":Me=$e-V;break;default:return w}return{...w,lag:Me}})}function he(s,M){const I=new Map(s.map(h=>[h,0])),$=new Map(s.map(h=>[h,[]]));for(const h of M)ce(I,h.to),$.get(h.from).push(h.to);const w=s.filter(h=>I.get(h)===0),p=[];for(;w.length;){const h=w.shift();p.push(h);for(const V of $.get(h)){const P=I.get(V)-1;I.set(V,P),P===0&&w.push(V)}}return p.length===s.length?{ok:!0,sorted:p}:{ok:!1,cycle:q(s,$,new Set(p))}}function ce(s,M){s.set(M,s.get(M)+1)}function q(s,M,I){const $=s.find(V=>!I.has(V)),w=[],p=new Map;let h=$;for(;h!=null&&!p.has(h);)p.set(h,w.length),w.push(h),h=M.get(h).find(V=>!I.has(V));return h==null?w:w.slice(p.get(h)).concat(h)}function Pe(s,M,I){const $=String(M),w=String(I);if($===w)return!0;const p=new Map;for(const P of s){const X=String(P.from);p.has(X)||p.set(X,[]),p.get(X).push(String(P.to))}const h=new Set,V=[w];for(;V.length;){const P=V.pop();if(P===$)return!0;if(!h.has(P)){h.add(P);for(const X of p.get(P)||[])V.push(X)}}return!1}function Ae(s,M,I,$){switch(M.type){case"FS":return s.shift($.id,I.ef,M.lag);case"SS":return s.shift($.id,I.es,M.lag);case"FF":return s.back($.id,s.shift($.id,I.ef,M.lag),$.duration);case"SF":return s.back($.id,s.shift($.id,I.es,M.lag),$.duration);default:return-1/0}}function Ee(s,M,I,$,w,p=new Map,h=new Map,V=!1,P=A){const X=he(s,I);if(!X.ok)return le(`gantt-cycle-${X.cycle.join(">")}`,`[lattice] gantt: dependency cycle detected (${X.cycle.join(" -> ")}); schedule refused.`),{ok:!1,error:{code:D.CYCLE,message:`dependency cycle: ${X.cycle.join(" -> ")}`,cycle:X.cycle}};const $e=X.sorted,Me=new Map(s.map(l=>[l,[]])),we=new Map(s.map(l=>[l,[]]));for(const l of I)Me.get(l.to).push(l),we.get(l.from).push(l);const xe=new Map;for(const l of s){const re=M.get(l);xe.set(l,{id:l,name:re.name,duration:re.duration,es:0,ef:0,ls:0,lf:0,totalFloat:0,critical:!1,percentComplete:re.percentComplete,parent:re.parent,isSummary:!1,isMilestone:re.duration===0,children:[],colour:re.colour??null,locked:!!re.locked})}const Te=[];for(const l of $e){const re=M.get(l),de=xe.get(l);let Oe=Math.max($,re.earliestStart??$);for(const Ce of Me.get(l)){const Re=xe.get(Ce.from),Fe=Ae(P,Ce,Re,de);Fe>Oe&&(Oe=Fe)}const je=p.get(l);if(je&&je.at!=null)switch(je.type){case"MSO":je.at<Oe-U?Te.push({id:l,type:je.type,date:je.at,scheduled:Oe,at:je.at,earliestFeasible:Oe}):Oe=je.at,de.pinned=!0;break;case"MFO":{const Ce=P.back(l,je.at,de.duration);Ce<Oe-U?Te.push({id:l,type:je.type,date:je.at,scheduled:P.fin(l,Oe,de.duration),at:je.at,earliestFeasible:Oe}):Oe=Ce,de.pinned=!0;break}case"SNET":je.at>Oe+U&&(Oe=je.at);break;case"SNLT":Oe>je.at+U&&Te.push({id:l,type:je.type,date:je.at,scheduled:Oe,at:je.at,earliestFeasible:Oe});break;case"FNET":{const Ce=P.back(l,je.at,de.duration);Ce>Oe+U&&(Oe=Ce);break}case"FNLT":{const Ce=P.fin(l,Oe,de.duration);Ce>je.at+U&&Te.push({id:l,type:je.type,date:je.at,scheduled:Ce,at:je.at,earliestFeasible:Oe});break}default:break}if(re.locked){const Ce=je&&je.at!=null?je.type==="MFO"?P.back(l,je.at,de.duration):je.type==="MSO"?je.at:null:null,Re=re.earliestStart!=null?re.earliestStart:Ce??Oe;if(Oe-U>Re)for(const Fe of Me.get(l)){const Ke=xe.get(Fe.from),He=Ae(P,Fe,Ke,de);He>Re+U&&Te.push({id:l,from:Fe.from,to:l,type:"LOCKED",date:Re,scheduled:He,at:Re,earliestFeasible:Re})}Oe=Re,de.pinned=!0}Oe=P.norm(l,Oe),de.es=Oe,de.ef=P.fin(l,Oe,de.duration)}const e=s.length?Math.max(...s.map(l=>xe.get(l).ef)):$,R=Number.isFinite(w)?w:e;for(let l=$e.length-1;l>=0;l-=1){const re=$e[l],de=xe.get(re);let Oe=R;const je=h.get(re);je!=null&&je<Oe&&(Oe=je);for(const Ce of we.get(re)){const Re=xe.get(Ce.to);let Fe;switch(Ce.type){case"FS":Fe=P.unshift(Ce.to,Re.ls,Ce.lag);break;case"SS":Fe=P.fin(re,P.unshift(Ce.to,Re.ls,Ce.lag),de.duration);break;case"FF":Fe=P.unshift(Ce.to,Re.lf,Ce.lag);break;case"SF":Fe=P.fin(re,P.unshift(Ce.to,Re.lf,Ce.lag),de.duration);break;default:Fe=1/0}Fe<Oe&&(Oe=Fe)}de.pinned&&(Oe=de.ef),de.lf=Oe,de.ls=P.back(re,Oe,de.duration),de.totalFloat=P.between(re,de.ls,de.es),de.critical=de.totalFloat<=U,je!=null&&(de.deadline=je,de.late=de.ef>je+U)}for(const l of s){const re=p.get(l);if(!re||re.type!=="ALAP")continue;const de=xe.get(l);de.es=de.ls,de.ef=de.lf,de.totalFloat=0,de.critical=!0}const Q=s.filter(l=>xe.get(l).critical),ue=V?[]:F(s,I,xe,P);return{ok:!0,tasks:xe,critical:Q,criticalPaths:ue,projectFinish:e,conflicts:Te}}function k(s,M){let I=null;if(Array.isArray(s))for(const $ of s){const w=t($?M($):null);w!=null&&(I==null||w<I)&&(I=w)}return I}function m(s,M=[],I={}){const $=f(I.fields),w=t(I.projectStart),p=w??0,h=w??k(s,$.start)??0,V=t(I.deadline),P=fe(I.calendar,p),X=[];for(const pe of Array.isArray(s)?s:[]){const Ne=pe?$.id(pe):null;Ne!=null&&pe.calendar!=null&&X.push({id:String(Ne),calendar:pe.calendar})}const $e=[];for(const pe of Array.isArray(I.resources)?I.resources:[]){const Ne=pe&&(pe.id??pe.name??pe.resource);Ne!=null&&pe.calendar!=null&&$e.push({id:String(Ne),calendar:pe.calendar})}const Me=I.calendars&&typeof I.calendars=="object"&&Object.keys(I.calendars).length>0,we=X.length||$e.length||Me?b({calendar:I.calendar,calendars:I.calendars,projectStart:p,tasks:X,resources:$e}):null;if(we&&we.errors.length){const pe=we.errors.map(Ne=>({...Ne,code:D.UNKNOWN_CALENDAR}));return{ok:!1,error:pe[0],errors:pe}}const xe=!!(we&&we.customised),Te=xe?null:P,e=xe?te(pe=>we.models.get(we.ofTask.get(pe)??"plan").calendar):A,R=pe=>pe==null?null:Te?Te.indexOf(pe):pe,Q=pe=>Te?Te.dayOf(pe):pe,ue=K(s,I.fields,I.lockWhen);if(!ue.ok)return{ok:!1,error:ue.error,errors:[ue.error]};const{order:l,byId:re}=ue,de=i(l,re);if(!de.ok)return{ok:!1,error:de.error,errors:[de.error]};const Oe=d(M,re,de);if(!Oe.ok)return{ok:!1,error:Oe.error,errors:[Oe.error]};const je=I.honourDates?j(Oe.edges,re,R,e):Oe.edges,Ce={defaultMode:ke(I.schedulingMode)||"fixedDuration",defaultEffortDriven:!!I.effortDriven,hoursPerDay:c(I.hoursPerDay)??be,resourceHours:I.resourceHours instanceof Map?I.resourceHours:new Map},Re=new Map;for(const pe of l){if(de.isSummary(pe))continue;const Ne=re.get(pe);if(!(Ne.schedulingMode!=null||Ne.effortDriven!=null||Ne.statedEffort!=null||I.schedulingMode!=null||I.effortDriven!=null))continue;const Xe=Se(Ne,Ce);Xe.duration!=null&&(Ne.duration=Xe.duration),Re.set(pe,{schedulingMode:Xe.schedulingMode,effortDriven:Xe.effortDriven,effort:Xe.effort,units:Xe.units})}const Fe=x(l,re,de),Ke=new Set(l.filter(pe=>!de.isSummary(pe)&&re.get(pe).inactive===!0)),He=new Set([...Fe].filter(pe=>!Ke.has(pe))),We=l.filter(pe=>!de.isSummary(pe)&&!He.has(pe)&&!Ke.has(pe)),Qe=new Map(We.map(pe=>{const Ne=re.get(pe);return[pe,{...Ne,earliestStart:R(Ne.earliestStart)}]})),qe=new Map;for(const pe of We){const Ne=re.get(pe).constraint;Ne&&qe.set(pe,{type:Ne.type,at:R(Ne.at)})}const Ze=Te?Te.indexOf(p):p,Ue=V==null?void 0:R(V),ot=new Map;for(const pe of We){const Ne=Qe.get(pe).deadline;if(Ne==null)continue;const Ve=Te?Te.indexOf(Ne):Ne;Number.isFinite(Ve)&&ot.set(pe,Ve)}const et=y(J(L(je,de),He),Ke),Ge=Ee(We,Qe,et,Ze,Ue,qe,ot,!!I.skipCriticalPaths,e);if(!Ge.ok)return{ok:!1,error:Ge.error,errors:[Ge.error]};const Be=Ge.tasks;for(const pe of We){const Ne=Be.get(pe);Ne.es=Q(Ne.es),Ne.ef=Q(Ne.ef),Ne.ls=Q(Ne.ls),Ne.lf=Q(Ne.lf),Ne.deadline!=null&&(Ne.deadline=Q(Ne.deadline)),o(Ne,re.get(pe).baselineStart,re.get(pe).baselineEnd);const Ve=Re.get(pe);Ve&&(Ne.schedulingMode=Ve.schedulingMode,Ne.effortDriven=Ve.effortDriven,Ne.effort=Ve.effort,Ne.units=Ve.units)}for(const pe of l)He.has(pe)?Be.set(pe,a(re.get(pe),de.isSummary(pe))):Ke.has(pe)&&Be.set(pe,T(re.get(pe)));if(we)for(const pe of l)Be.get(pe).calendar=we.ofTask.get(pe)??"plan";for(let pe=l.length-1;pe>=0;pe-=1){const Ne=l[pe];!de.isSummary(Ne)||He.has(Ne)||Be.set(Ne,ie(Ne,re.get(Ne),de,Be))}for(const pe of l)de.isSummary(pe)&&(Be.get(pe).children=de.children.get(pe).slice());const Je=P?P.nextWorking(h):h,at=Q(Ge.projectFinish);return{ok:!0,tasks:Be,order:l,critical:Ge.critical,criticalPaths:Ge.criticalPaths,projectStart:Je,projectFinish:at,projectDuration:at-Je,conflicts:(Ge.conflicts||[]).map(pe=>({id:pe.id,type:pe.type,date:Q(pe.date),scheduled:Q(pe.scheduled),at:Q(pe.at),earliestFeasible:Q(pe.earliestFeasible),...pe.from!==void 0?{from:pe.from,to:pe.to}:null})),calendar:!!P,...xe?{calendars:we.models}:null,unscheduled:l.filter(pe=>He.has(pe)),...I.honourDates?{dependencies:je}:{}}}function o(s,M,I){M==null&&I==null||(s.baselineStart=M??null,s.baselineEnd=I??null,s.startVariance=M==null?null:s.es-M,s.finishVariance=I==null?null:s.ef-I,s.durationVariance=M==null||I==null?null:s.ef-s.es-(I-M))}function ie(s,M,I,$){const w=I.children.get(s).map(l=>$.get(l)),p=w.filter(l=>!l.unscheduled&&!l.inactive),h=p.length?p:w,V=Math.min(...h.map(l=>l.es)),P=Math.max(...h.map(l=>l.ef)),X=Math.min(...h.map(l=>l.ls)),$e=Math.max(...h.map(l=>l.lf)),Me=I.descendantLeaves(s).map(l=>$.get(l)),we=Me.filter(l=>!l.unscheduled&&!l.inactive),xe=we.length?we:Me,Te=xe.reduce((l,re)=>l+re.duration,0),e=Te>U?xe.reduce((l,re)=>l+re.duration*(re.percentComplete??0),0)/Te:null,R={id:s,name:M.name,duration:P-V,es:V,ef:P,ls:X,lf:$e,totalFloat:X-V,critical:h.some(l=>l.critical),percentComplete:e,parent:M.parent,isSummary:!0,isMilestone:!1,locked:!1,...M.inactive===!0?{inactive:!0}:null,children:[],colour:M.colour??null},Q=xe.map(l=>l.baselineStart).filter(l=>l!=null),ue=xe.map(l=>l.baselineEnd).filter(l=>l!=null);return(Q.length||ue.length)&&o(R,Q.length?Math.min(...Q):null,ue.length?Math.max(...ue):null),R}function F(s,M,I,$=A){const w=new Map(s.map(X=>[X,[]])),p=new Set;for(const X of M){const $e=I.get(X.from),Me=I.get(X.to);if(!$e.critical||!Me.critical)continue;const we=Ae($,X,$e,Me);Math.abs(we-Me.es)<=U&&(w.get(X.from).push(X.to),p.add(X.to))}const h=s.filter(X=>I.get(X).critical&&!p.has(X)),V=[],P=(X,$e)=>{const Me=w.get(X);if(!Me.length){V.push($e);return}for(const we of Me)P(we,$e.concat(we))};for(const X of h)P(X,[X]);return V}function ee(s,M,I){if(!M||!M.ok)return[];const $=[],w=f(I);for(const p of s){const h=p?w.id(p):null,V=h!=null?String(h):null;if(V==null||!M.tasks.has(V))continue;const P=M.tasks.get(V);if(P.isSummary)continue;const X=c(w.start(p));X==null||P.unscheduled||X<P.es-U&&$.push({id:V,placedStart:X,earliestStart:P.es,by:P.es-X})}return $}}),Le("packages/modules/gantt/resources.js",function(r,ae){"use strict";Object.defineProperty(r,"normalizeCapacities",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(r,"resourceDisplayNames",{enumerable:!0,get:function(){return me}}),Object.defineProperty(r,"resourceSpecsByKey",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"resourceAvatars",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"normalizeResources",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"resourceDailyHours",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"sweepLoad",{enumerable:!0,get:function(){return c}}),Object.defineProperty(r,"computeResourceLoad",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"normalizeResourceRates",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"rateOn",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"levelResources",{enumerable:!0,get:function(){return N}});const le=ae("packages/core/src/internal/warn.js").warnOnce,Z=ae("packages/modules/gantt/schedule.js"),fe=Z.computeSchedule,se=Z.EPS,A=Z.taskIdReader,te=Z.resolveConstraintCode,b=ae("packages/modules/gantt/assignments.js"),S=b.parseAssignments,B=ae("packages/modules/gantt/calendar.js").createCalendar,O=ae("packages/modules/gantt/task-calendars.js"),C=O.parseHolidayDays,J=O.normalizeCalendarSpec,x=O.planWorkingTime,a=O.workingRuns,g=ae("packages/modules/gantt/time.js"),y=g.fromDayNumber,T=g.toDayNumber;Object.defineProperty(r,"parseAssignments",{enumerable:!0,get:function(){return b.parseAssignments}});const ne=Object.freeze([1,2,3,4,5]),oe=8;function W(i){if(i==null||i==="")return null;const _=typeof i=="number"?i:Number(i);return Number.isFinite(_)?_:null}function ge(i,_){const n=new Map;if(Array.isArray(i))for(const d of i){const L=d&&(d.id??d.name??d.resource);if(L==null||L==="")continue;const j=W(d.capacity??d.maxUnits??d.max??d.units);n.set(String(L),j??_)}else if(i&&typeof i=="object")for(const[d,L]of Object.entries(i)){const j=W(L);n.set(String(d),j??_)}return n}function me(i){const _=new Map;if(Array.isArray(i))for(const n of i){if(!n)continue;const d=n.id??n.name??n.resource;if(d==null||d==="")continue;const L=n.name??n.id??n.resource;_.set(String(d),String(L))}else if(i&&typeof i=="object")for(const[n,d]of Object.entries(i))_.set(n,d&&typeof d=="object"&&d.name!=null?String(d.name):n);return _}function ye(i){const _=new Map;if(Array.isArray(i))for(const n of i){if(!n||typeof n!="object")continue;const d=n.id??n.name??n.resource;d!=null&&d!==""&&_.set(String(d),{...n})}else if(i&&typeof i=="object")for(const[n,d]of Object.entries(i))_.set(n,d&&typeof d=="object"?{...d}:{capacity:d});return _}function ke(i){const _=new Map,n=d=>typeof d=="string"?d.trim():"";if(Array.isArray(i))for(const d of i){if(!d)continue;const L=d.id??d.name??d.resource;if(L==null||L==="")continue;const j=n(d.avatar);j&&_.set(String(L),j)}else if(i&&typeof i=="object")for(const[d,L]of Object.entries(i)){const j=L&&typeof L=="object"?n(L.avatar):"";j&&_.set(d,j)}return _}function be(i){return new Set(C(i))}function ve(i){return i==null?{workdays:[0,1,2,3,4,5,6],holidays:new Set}:i==="weekends"?{workdays:[...ne],holidays:new Set}:{workdays:Array.isArray(i.workdays)&&i.workdays.length?i.workdays.map(Number).filter(n=>n>=0&&n<=6):[...ne],holidays:be(i.holidays)}}function Se(i,_,n){let d=i;if(typeof i=="string"&&(d=_&&Object.prototype.hasOwnProperty.call(_,i)?_[i]:i==="weekends"?i:null),d==null||typeof d=="string"&&d!=="weekends")return null;const L=J(d,n);if(!L)return null;const j=d;return{...j==="weekends"||j.workdays||j.workingDays?{workingDays:L.workdays}:null,...j!=="weekends"&&(j.holidays||j.exceptions)?{holidays:L.holidays}:null,...L.hoursPerDay!=null?{hoursPerDay:L.hoursPerDay}:null}}function G(i,_,n,d){const L=new Set(Array.isArray(i.workingDays)&&i.workingDays.length?i.workingDays.map(Number).filter(ie=>ie>=0&&ie<=6):d.workdays),j=be(i.holidays);for(const ie of d.holidays)j.add(ie);const he=i.hoursPerDay,ce=ie=>{if(he!=null&&typeof he=="object"){const ee=W(he[ie]);return ee??n}const F=W(he);return F??n},q=ie=>{const F=y(ie);return F?L.has(F.getUTCDay())&&!j.has(ie):!1},Pe=ie=>q(ie)?_??ce(y(ie).getUTCDay()):0,Ae=ie=>n>0?Pe(ie)/n:0;let Ee=0;for(const ie of L){const F=_??ce(ie);F>Ee&&(Ee=F)}const k=n>0?Ee/n:0;let m=0;for(const ie of d.workdays)L.has(ie)&&(m+=_??ce(ie));const o=d.workdays.length?m/d.workdays.length:n;return{hasCalendar:!0,capacityUnits:k,hoursPerWorkingDay:o,worksOn:q,capacityHoursOn:Pe,capacityUnitsOn:Ae}}function U(i,_,n={}){const d=W(n.hoursPerDay)??oe,L=ve(n.calendar),j=new Map,he=(ce,q)=>{const Pe=W(q.capacity??q.maxUnits??q.max??q.units),Ae=Se(q.calendar,n.calendars,x(n.calendar));Ae?j.set(ce,G(Ae,Pe,d,L)):j.set(ce,{hasCalendar:!1,capacityUnits:Pe??_,hoursPerWorkingDay:d})};if(Array.isArray(i))for(const ce of i){const q=ce&&(ce.id??ce.name??ce.resource);q==null||q===""||he(String(q),ce)}else if(i&&typeof i=="object")for(const[ce,q]of Object.entries(i))he(String(ce),typeof q=="object"&&q?q:{capacity:q});return j}function D(i,_,n={}){const d=W(n.hoursPerDay)??oe,L=U(i,_,n),j=new Map;for(const[he,ce]of L)j.set(he,ce.hoursPerWorkingDay!=null?ce.hoursPerWorkingDay:d);return j}function c(i){if(!i.length)return[];const _=new Set;for(const L of i)_.add(L.s),_.add(L.e);const n=[..._].sort((L,j)=>L-j),d=[];for(let L=0;L<n.length-1;L+=1){const j=n[L],he=n[L+1];if(he<=j)continue;let ce=0;const q=[];for(const Pe of i)Pe.s<=j&&Pe.e>=he&&(ce+=Pe.units,q.push(Pe.taskId));q.length&&d.push({s:j,e:he,load:ce,taskIds:q})}return d}function H(i,_,n={}){const d={ok:!1,resources:[],overAllocations:[],byResource:new Map};if(!_||!_.ok)return d;const L=W(n.defaultCapacity)??1,j=ge(n.resources,L),he=U(n.resources,L,{calendar:n.calendar,calendars:n.calendars,hoursPerDay:n.hoursPerDay}),ce=_.calendars instanceof Map?_.calendars:null,q=n.calendar!=null&&!ce?B(n.calendar,_.projectStart):null,Pe=s=>j.has(s)?j.get(s):L,Ae=s=>q?q.indexOf(s):s,Ee=s=>q?q.dayOf(s):s,k=A(n.fields),m=new Map;for(const s of i){if(!s)continue;const M=k(s);if(M==null)continue;const I=String(M);m.has(I)||m.set(I,s)}const o=new Map;for(const s of _.order){const M=_.tasks.get(s);if(!M||M.isSummary||M.unscheduled)continue;const I=m.get(s);if(!I)continue;const $=S(I);if(!$.length)continue;const w=Ae(M.es),p=Ae(M.ef);if(p<=w)continue;const h=ce&&ce.get(M.calendar),V=h?a(w,p,h.isWorking):[[w,p]];for(const P of $){o.has(P.resource)||o.set(P.resource,[]);for(const[X,$e]of V)o.get(P.resource).push({s:X,e:$e,units:P.units,taskId:s})}}const ie=new Map,F=[],ee=[];for(const[s,M]of o){const I=he.get(s),$=c(M);let w=0,p,h;if(I&&I.hasCalendar){h=I.capacityUnits,p=[];for(const P of $){P.load>w&&(w=P.load);let X=P.s,$e=I.capacityUnitsOn(Ee(P.s));const Me=we=>{const xe={start:Ee(X),end:Ee(we),load:P.load,taskIds:P.taskIds};p.push(xe),P.load>$e+se&&ee.push({resource:s,capacity:$e,start:xe.start,end:xe.end,load:P.load,taskIds:P.taskIds.slice()})};for(let we=P.s+1;we<P.e;we+=1){const xe=I.capacityUnitsOn(Ee(we));xe!==$e&&(Me(we),X=we,$e=xe)}Me(P.e)}}else h=Pe(s),p=$.map(P=>{P.load>w&&(w=P.load);const X={start:Ee(P.s),end:Ee(P.e),load:P.load,taskIds:P.taskIds};return P.load>h+se&&ee.push({resource:s,capacity:h,start:X.start,end:X.end,load:P.load,taskIds:P.taskIds.slice()}),X});const V={resource:s,capacity:h,peak:w,segments:p};ie.set(s,V),F.push(V)}return F.sort((s,M)=>s.resource<M.resource?-1:s.resource>M.resource?1:0),ee.sort((s,M)=>s.start-M.start||(s.resource<M.resource?-1:1)),{ok:!0,resources:F,overAllocations:ee,byResource:ie}}function t(i){const _=[];for(const n of Array.isArray(i)?i:[]){const d=T(n&&n.from),L=W(n&&n.rate);d==null||L==null||_.push({from:Math.round(d),rate:L})}return _.sort((n,d)=>n.from-d.from),_}function u(i){const _=new Map,n=(d,L)=>{if(!L||typeof L!="object")return;const j=L.type==="material"||L.type==="cost"?L.type:"work",he=W(L.rate),ce=t(L.rates),q=W(L.cost);he==null&&!ce.length&&q==null||_.set(d,{type:j,rate:he,rates:ce,cost:q})};if(Array.isArray(i))for(const d of i){const L=d&&(d.id??d.name??d.resource);L==null||L===""||n(String(L),d)}else if(i&&typeof i=="object")for(const[d,L]of Object.entries(i))L&&typeof L=="object"&&n(d,L);return _}function f(i,_){if(!i)return null;let n=i.rate;for(const d of i.rates)if(d.from<=_)n=d.rate;else break;return n??null}function z(i){if(!i)return!1;const _=i.constraint??i.constraintType;if(_==null||_==="")return!1;const n=String(_).toLowerCase().replace(/\s+/g,"-");return n==="mso"||n==="must-start-on"||n==="muststarton"||n==="start-on"||n==="mfo"||n==="must-finish-on"||n==="mustfinishon"||n==="finish-on"}function v(i){if(!i)return null;const _=i.constraint??i.constraintType,n=te(_);if(n!=="SNLT"&&n!=="FNLT")return null;let d=i.constraintDate??i.constraintAt??i.at;if(_&&typeof _=="object"&&d==null&&(d=_.date),d==null||d==="")return null;const L=T(d);return Number.isFinite(L)?{type:n,date:L}:null}function E(i,_){return i?W(i[_])??0:0}function N(i,_,n={}){const d={projectStart:n.projectStart,deadline:n.deadline,calendar:n.calendar,fields:n.fields,calendars:n.calendars,resources:Array.isArray(n.resources)?n.resources:void 0,skipCriticalPaths:!0},L=n.priorityField||"priority",j=n.maxIterations!=null?n.maxIterations:Math.max(100,i.length*i.length*2),he=A(n.fields),ce=i.map(p=>({...p})),q=ce.map(p=>String(he(p))),Pe=new Map(ce.map(p=>[String(he(p)),p])),Ae=new Map(q.map((p,h)=>[p,h])),Ee=p=>Ae.has(p)?Ae.get(p):-1;let k=fe(ce,_,d);if(!k.ok)return{ok:!1,error:k.error};const m=new Map;for(const p of k.order){const h=k.tasks.get(p);h&&!h.isSummary&&!h.unscheduled&&m.set(p,h.es)}const o=W(n.defaultCapacity)??1,ie=U(n.resources,o,{calendar:n.calendar,calendars:n.calendars,hoursPerDay:n.hoursPerDay}),F=n.calendar!=null?B(n.calendar,k.projectStart):null,ee=(p,h,V)=>{const P=S(h).map($e=>ie.get($e.resource)).filter($e=>$e&&$e.hasCalendar);let X=Math.round(p);for(let $e=0;$e<3660;$e+=1){if((V?V(X):!F||F.isWorking(X))&&P.every(Me=>Me.worksOn(X)))return X;X+=1}return Math.round(p)};let s=0;const M=Math.max(32,i.length*2);let I=1/0,$=0;for(;s<j;s+=1){const p=H(ce,k,n);p.overAllocations.length<I?(I=p.overAllocations.length,$=0):$+=1;const h=p.overAllocations.filter(we=>new Set(we.taskIds).size>=2);if(!h.length)return{ok:!0,resolved:p.overAllocations.length===0,tasks:ce,schedule:k,moves:K(m,k),remaining:p.overAllocations,iterations:s};if($>=M)return le("gantt-level-unresolved",`[lattice] gantt: resource leveling could not clear ${p.overAllocations.length} over-allocation(s) after ${s} iterations; the plan cannot be fully levelled, returning the partial result.`),{ok:!0,resolved:!1,tasks:ce,schedule:k,moves:K(m,k),remaining:p.overAllocations,iterations:s};const P=h.slice().sort((we,xe)=>we.start-xe.start||xe.load-we.load)[0].taskIds.map(we=>k.tasks.get(we)).filter(Boolean),X=P.filter(we=>!z(Pe.get(we.id)));if(!X.length)return{ok:!0,resolved:!1,tasks:ce,schedule:k,moves:K(m,k),remaining:p.overAllocations,iterations:s};X.sort((we,xe)=>{if(xe.totalFloat!==we.totalFloat)return xe.totalFloat-we.totalFloat;const Te=E(Pe.get(we.id),L),e=E(Pe.get(xe.id),L);return Te!==e?Te-e:xe.es!==we.es?xe.es-we.es:Ee(xe.id)-Ee(we.id)});let $e=null,Me=null;for(const we of X){const xe=P.filter(Q=>Q.id!==we.id).map(Q=>Q.ef).filter(Q=>Q>we.es+se),Te=xe.length?Math.min(...xe):we.es+1,e=ee(Te,Pe.get(we.id),k.calendars instanceof Map?k.calendars.get(we.calendar).isWorking:void 0),R=v(Pe.get(we.id));if(!(R&&(R.type==="SNLT"?e:e+(we.ef-we.es))>R.date+se)){$e=we,Me=e;break}}if(!$e)return{ok:!0,resolved:!1,tasks:ce,schedule:k,moves:K(m,k),remaining:p.overAllocations,iterations:s};if(Pe.get($e.id).start=Me,k=fe(ce,_,d),!k.ok)return{ok:!1,error:k.error}}const w=H(ce,k,n);return w.overAllocations.length&&le("gantt-level-unresolved",`[lattice] gantt: resource leveling hit its ${j}-iteration cap with ${w.overAllocations.length} over-allocation(s) unresolved; returning the partial result.`),{ok:!0,resolved:w.overAllocations.length===0,tasks:ce,schedule:k,moves:K(m,k),remaining:w.overAllocations,iterations:s}}function K(i,_){const n=[];for(const d of _.order){const L=_.tasks.get(d);if(!L||L.isSummary||L.unscheduled)continue;const j=i.get(d);j!=null&&L.es>j+se&&n.push({id:d,from:j,to:L.es,delay:L.es-j})}return n}}),Le("packages/modules/gantt/workload.js",function(r,ae){"use strict";Object.defineProperty(r,"WORKLOAD_DEFAULTS",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"HISTOGRAM_DEFAULTS",{enumerable:!0,get:function(){return a}}),Object.defineProperty(r,"normalizeThresholds",{enumerable:!0,get:function(){return y}}),Object.defineProperty(r,"thresholdFor",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"normalizeExternalLoad",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"statedHours",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(r,"taskContour",{enumerable:!0,get:function(){return me}}),Object.defineProperty(r,"contourTotal",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"serializeContour",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"contourSpan",{enumerable:!0,get:function(){return be}}),Object.defineProperty(r,"spanDuration",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(r,"spreadHours",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(r,"setContourBucket",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"retimeContour",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"recordWorkingDays",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"workloadBuckets",{enumerable:!0,get:function(){return c}}),Object.defineProperty(r,"taskAssignmentEffort",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"computeWorkload",{enumerable:!0,get:function(){return t}}),Object.defineProperty(r,"formatHours",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"formatPercent",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"formatCost",{enumerable:!0,get:function(){return z}});const De=ae("packages/modules/gantt/resources.js"),le=De.parseAssignments,Z=De.rateOn,fe=ae("packages/modules/gantt/schedule.js"),se=fe.EPS,A=fe.taskIdReader,te=ae("packages/modules/gantt/time.js"),b=te.fromDayNumber,S=te.toDayNumber,Y=te.toISODate,O=ae("packages/core/src/internal/warn.js").warnOnce,J=ae("packages/modules/gantt/week.js").weekStartOf,x=Object.freeze({hoursPerDay:8,height:160,rowHeight:28,decimals:1,totals:!0,maxHeight:null,unit:"hours",thresholds:null,showUnassigned:!0,labelWidth:null}),a=Object.freeze({resources:null,unit:"hours",stacked:!1,height:160,rowHeight:48,maxHeight:null,labelWidth:null});function g(v){if(v==null||v===""||typeof v=="boolean")return null;const E=typeof v=="number"?v:Number(v);return Number.isFinite(E)?E:null}function y(v){if(!Array.isArray(v))return null;const E=[];for(const N of v){if(!N||typeof N!="object")continue;const K=g(N.at);if(K==null||K<0)continue;const i=typeof N.className=="string"&&N.className?N.className:null,_=typeof N.colour=="string"&&N.colour?N.colour:typeof N.color=="string"&&N.color?N.color:null;!i&&!_||E.push({at:K,className:i,colour:_})}return E.length?(E.sort((N,K)=>N.at-K.at),E):null}function T(v,E){if(!v||E==null||!Number.isFinite(E))return null;let N=null;for(const K of v)if(E>=K.at)N=K;else break;return N}function ne(v,E){if(v==null||v==="")return null;if(typeof v=="number")return Number.isFinite(v)?v:null;const N=S(v);return Number.isFinite(N)?N-E:null}function oe(v,E=0){if(!Array.isArray(v))return[];const N=[];for(let K=0;K<v.length;K+=1){const i=v[K],_=i&&typeof i=="object"&&i.resource!=null&&i.resource!==""?String(i.resource):null,n=i&&typeof i=="object"?ne(i.start,E):null,d=i&&typeof i=="object"?ne(i.end,E):null;if(_==null||n==null||d==null){O(`gantt.workloadExternal.${K}`,`[lattice] gantt: workload.external entry ${K} has no resource or no drawable start/end; it is skipped.`);continue}const L=typeof i.label=="string"&&i.label!==""?i.label:null,j=typeof i.group=="string"&&i.group!==""?i.group:null;N.push({index:K,resource:_,start:n,end:d,units:g(i.units),hours:g(i.hours),label:L,group:j})}return N}function W(v){const E=S(v.start);if(!Number.isFinite(E))return null;const N=S(v.end);if(Number.isFinite(N))return{es:E,ef:N};const K=g(v.duration);return{es:E,ef:E+(K??0)}}function ge(v){if(!v||Array.isArray(v.work))return null;const E=g(v.work);return E??g(v.hours)}function me(v){if(!v||!Array.isArray(v.work))return null;const E=[];for(const K of v.work){if(!K||typeof K!="object")continue;const i=S(K.date),_=g(K.hours);i==null||_==null||E.push({day:Math.round(i),hours:_})}E.sort((K,i)=>K.day-i.day);const N=[];for(const K of E){const i=N[N.length-1];i&&i.day===K.day?i.hours+=K.hours:N.push({day:K.day,hours:K.hours})}return N}function ye(v){return(Array.isArray(v)?v:[]).reduce((E,N)=>E+(g(N.hours)??0),0)}function ke(v){const E=[];for(const N of Array.isArray(v)?v:[]){const K=g(N.hours);if(K==null||!(Math.abs(K)>se))continue;const i=Y(N.day);i!=null&&E.push({date:i,hours:Math.round(K*1e6)/1e6})}return E}function be(v){const E=(Array.isArray(v)?v:[]).filter(N=>Math.abs(g(N.hours)??0)>se);return E.length?{first:E[0].day,last:E[E.length-1].day}:null}function ve(v,E,N=null){if(!Number.isFinite(v)||!Number.isFinite(E)||E<v)return 0;if(typeof N!="function")return Math.round(E-v)+1;let K=0;for(let i=Math.round(v);i<=Math.round(E);i+=1)N(i)&&(K+=1);return K}function Se(v,E){if(!Array.isArray(v)||!v.length)return[];const N=E/v.length;return v.map(K=>({day:K,hours:N}))}function G(v,E,N,K){const i=(Array.isArray(v)?v:[]).filter(n=>!(n.day>=E.start&&n.day<E.end)),_=Math.abs(K)>se?Se(N,K):[];return[...i,..._].sort((n,d)=>n.day-d.day)}function U(v,E,N){const K=Array.isArray(E)?E:[],i=Array.isArray(N)?N:[];if(!Array.isArray(v)||!K.length||!i.length)return Array.isArray(v)?v:[];const _=new Map(v.map(j=>[j.day,g(j.hours)??0])),n=K.map(j=>_.get(j)??0),d=n.length,L=[];for(let j=0;j<i.length;j+=1){const he=n[Math.min(d-1,Math.floor(j*d/i.length))];Math.abs(he)>se&&L.push({day:i[j],hours:he})}return L}function D(v,E=null){const N=[];if(!v||!Number.isFinite(v.es)||!Number.isFinite(v.ef))return N;for(let K=Math.floor(v.es);K<Math.ceil(v.ef);K+=1)(typeof E!="function"||E(K))&&N.push(K);return N}function c(v,E,N,K=0){const i=Math.floor(E),_=Math.ceil(N),n=[];if(!(_>i))return n;if(v==="day"){for(let L=i;L<_;L+=1)n.push({start:L,end:L+1});return n}if(v==="month"||v==="quarter"){const L=b(i);if(!L)return n;let j=Date.UTC(L.getUTCFullYear(),L.getUTCMonth(),1)/864e5;for(;j<_;){const he=b(j),ce=Date.UTC(he.getUTCFullYear(),he.getUTCMonth()+1,1)/864e5;n.push({start:j,end:ce}),j=ce}return n}let d=J(i,K);for(;d<_;d+=7)n.push({start:d,end:d+7});return n}function H(v,E,N={}){const K=g(N.hoursPerDay)??x.hoursPerDay,i=typeof N.isWorking=="function"?N.isWorking:null,_=D(E,i),n=me(v);if(!n&&!_.length)return[];const d=le(v),L=d.length?d:[{resource:null,units:1}],j=L.reduce((ce,q)=>ce+(g(q.units)??0),0);if(!(j>0))return[];let he;if(n)he=n.filter(ce=>Math.abs(ce.hours)>se);else{const ce=ge(v),q=ce??_.length*K*j;if(!(Math.abs(q)>se))return[];he=Se(_,q)}return he.length?L.map(ce=>{const q=g(ce.units)??0,Pe=q/j;return{resource:ce.resource,units:q,unitsTotal:j,perDay:Pe>0?he.map(Ae=>({day:Ae.day,hours:Ae.hours*Pe})):[]}}):[]}function t(v,E,N={}){const K=Array.isArray(N.buckets)?N.buckets:[],i={ok:!1,buckets:[],rows:[],totals:K.map(()=>null),totalsAvailable:K.map(()=>null),totalsCost:K.map(()=>null),grandTotal:0,grandAvailableTotal:null,grandCostTotal:null};if(!E||!E.ok)return i;const _=g(N.hoursPerDay)??x.hoursPerDay,n=typeof N.isWorking=="function"?N.isWorking:null,d=N.capacities instanceof Map?N.capacities:null,L=N.resourceModels instanceof Map?N.resourceModels:null,j=N.resourceRates instanceof Map?N.resourceRates:null,he=A(N.fields),ce=new Map,q=(p,h,V,P)=>{ce.has(p)||ce.set(p,{days:new Map,costs:new Map,tasks:new Map});const X=ce.get(p);if(X.days.set(h,(X.days.get(h)||0)+V),j&&p!=null){const Me=Z(j.get(p),h);Me!=null&&X.costs.set(h,(X.costs.get(h)||0)+V*Me)}X.tasks.has(P.id)||X.tasks.set(P.id,{...P,days:new Map});const $e=X.tasks.get(P.id);$e.days.set(h,($e.days.get(h)||0)+V)},Pe=new Map;for(const p of Array.isArray(v)?v:[]){const h=p?he(p):null;h!=null&&Pe.set(String(h),p)}const Ae=Array.isArray(v)&&E.order.length===v.length;for(let p=0;p<E.order.length;p+=1){const h=E.order[p],V=E.tasks.get(h);if(!V||V.isSummary||V.unscheduled||V.inactive)continue;const P=Pe.get(h)||(Ae?v[p]:null);if(!P||P.loadOnly===!0)continue;const X=E.calendars instanceof Map?E.calendars.get(V.calendar):null,$e=H(P,V,{hoursPerDay:_,isWorking:X?X.isWorking:n});for(const Me of $e){if(!Me.perDay.length)continue;const we={id:h,name:V.name,units:Me.units,unitsTotal:Me.unitsTotal,raw:P,loadOnly:!1,external:!1,group:null};for(const xe of Me.perDay)q(Me.resource,xe.day,xe.hours,we)}}for(const p of Array.isArray(v)?v:[]){if(!p||p.loadOnly!==!0)continue;const h=W(p);if(!h)continue;const V=he(p),P=V!=null?String(V):`loadOnly:${v.indexOf(p)}`,X=p.name!=null?String(p.name):P,$e=H(p,h,{hoursPerDay:_,isWorking:n});for(const Me of $e){if(!Me.perDay.length)continue;const we={id:P,name:X,units:Me.units,unitsTotal:Me.unitsTotal,raw:p,loadOnly:!0,external:!1,group:null};for(const xe of Me.perDay)q(Me.resource,xe.day,xe.hours,we)}}for(const p of Array.isArray(N.external)?N.external:[]){if(!p||p.resource==null)continue;const h=g(p.start),V=g(p.end);if(h==null||V==null)continue;const P=D({es:h,ef:V},n),X=p.hours!=null?g(p.hours):P.length*_*(g(p.units)??1);if(X==null||!(Math.abs(X)>se)||!P.length)continue;const Me={id:`external:${p.index??v.length}`,name:p.label,units:null,unitsTotal:null,raw:null,loadOnly:!0,external:!0,group:p.group??null};for(const we of Se(P,X))q(String(p.resource),we.day,we.hours,Me)}const Ee=p=>{let h=0,V=K.length-1;for(;h<=V;){const P=h+V>>1;if(p<K[P].start)V=P-1;else if(p>=K[P].end)h=P+1;else return P}return-1},k=K.map(p=>{let h=0;for(let V=Math.floor(p.start);V<Math.ceil(p.end);V+=1)(!n||n(V))&&(h+=1);return{start:p.start,end:p.end,workingDays:h}}),m=p=>{const h=k.map(()=>0);for(const[V,P]of p){const X=Ee(V);X>=0&&(h[X]+=P)}return h},o=[...ce.keys()].filter(p=>p!=null).sort(),ie=ce.has(null)?[...o,null]:o,F=[],ee=k.map(()=>0),s=k.map(()=>null),M=j?k.map(()=>0):k.map(()=>null);let I=0,$=j?0:null;for(const p of ie){const h=ce.get(p),V=m(h.days),P=j?m(h.costs):null,X=p!=null&&d&&d.has(p)?d.get(p):null,$e=p!=null&&L?L.get(p):null,Me=V.map(ue=>Math.abs(ue)>se?ue:null),we=V.map((ue,l)=>{if($e&&$e.hasCalendar){let re=0;for(let de=Math.floor(k[l].start);de<Math.ceil(k[l].end);de+=1)(!n||n(de))&&(re+=$e.capacityHoursOn(de));return re}return X==null?null:X*_*k[l].workingDays}),xe=V.map((ue,l)=>we[l]!=null&&ue>we[l]+se);let Te=0,e=null,R=j?0:null;V.forEach((ue,l)=>{Te+=ue,ee[l]+=ue,we[l]!=null&&(e=(e??0)+we[l],s[l]=(s[l]??0)+we[l]),P&&(R+=P[l],M[l]+=P[l])}),I+=Te,j&&($+=R);const Q=[...h.tasks.values()].map(ue=>{const l=m(ue.days);return{id:ue.id,name:ue.name,units:ue.units,unitsTotal:ue.unitsTotal,raw:ue.raw,cells:l.map(re=>Math.abs(re)>se?re:null),total:l.reduce((re,de)=>re+de,0),loadOnly:!!ue.loadOnly,external:!!ue.external,group:ue.group??null}});F.push({resource:p,capacity:X,available:we,availableTotal:e,cells:Me,over:xe,total:Te,costCells:P?P.map(ue=>Math.abs(ue)>se?ue:null):null,costTotal:R,tasks:Q})}let w=null;for(const p of s)p!=null&&(w=(w??0)+p);return{ok:!0,buckets:k,rows:F,totals:ee.map(p=>Math.abs(p)>se?p:null),totalsAvailable:s,totalsCost:M,grandTotal:I,grandAvailableTotal:w,grandCostTotal:$}}function u(v,E){if(v==null||!Number.isFinite(v))return"";const K=10**(Number.isFinite(E)?Math.max(0,Math.min(6,Math.round(E))):1),i=Math.round(v*K)/K;return Object.is(i,-0)||i===0?"0":String(i)}function f(v,E,N){if(E==null||!(E>se))return"–";const K=Number.isFinite(v)?v:0;return u(K/E*100,N)}function z(v,E=2){return u(v,E)}}),Le("packages/modules/gantt/tooltip.js",function(r,ae){"use strict";Object.defineProperty(r,"taskTooltipRows",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"taskTooltipText",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"buildTooltipCard",{enumerable:!0,get:function(){return J}}),Object.defineProperty(r,"resolveTaskTooltip",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"positionTooltip",{enumerable:!0,get:function(){return a}}),Object.defineProperty(r,"tooltipCss",{enumerable:!0,get:function(){return g}});const De=ae("packages/modules/charts/svg.js"),le=De.el,Z=De.setText,fe=De.round,A=ae("packages/modules/gantt/assignments.js").parseAssignments,b=ae("packages/modules/gantt/workload.js").formatCost,S=["start","end","duration","percentComplete","effort","resources","cost","slack","deadline"],Y=new Set(["start","end","duration","slack"]);function B(y,T,ne,oe){const{t:W,formatDate:ge}=oe;switch(y){case"start":return{label:W("gantt.tip.start"),value:ge(T.es)};case"end":return{label:W("gantt.tip.end"),value:ge(T.ef)};case"duration":return{label:W("gantt.tip.durationLabel"),value:W("gantt.tip.durationValue",{days:fe(T.duration)})};case"percentComplete":return T.percentComplete==null?null:{label:W("gantt.tip.complete"),value:`${Math.round(T.percentComplete)}%`};case"effort":return T.effort==null?null:{label:W("gantt.tip.effortLabel"),value:W("gantt.tip.effortValue",{hours:fe(T.effort)})};case"resources":{const me=A(ne).map(ye=>ye.resource);return me.length?{label:W("gantt.tip.assigned"),value:me.map(ye=>oe.resourceName(ye)).join(", ")}:null}case"cost":{const me=ne&&ne.cost!=null?Number(ne.cost):NaN;return Number.isFinite(me)?{label:W("gantt.tip.cost"),value:b(me)}:null}case"slack":return Number.isFinite(T.totalFloat)?{label:W("gantt.tip.slackLabel"),value:W("gantt.tip.slackValue",{days:fe(T.totalFloat)})}:null;case"deadline":return Number.isFinite(T.deadline)?{label:W("gantt.tip.deadline"),value:ge(T.deadline)}:null;default:return null}}function O(y,T,ne,oe){if(y.isMilestone&&!y.unscheduled)return[{label:oe.t("gantt.tip.date"),value:oe.formatDate(y.es)}];let W=Array.isArray(ne)&&ne.length?ne:S;y.unscheduled&&(W=W.filter(me=>!Y.has(me)));const ge=[];for(const me of W){const ye=B(me,y,T,oe);ye&&ge.push(ye)}return ge}function C(y,T,ne){return[y.name,...T.map(oe=>ne("gantt.tip.row",{label:oe.label,value:oe.value}))].join(`
7
- `)}function J(y,T,ne,oe){const W=le(y,"div",`${T}__tip-card`),ge=le(y,"div",`${T}__tip-title`);Z(ge,ne.name),W.appendChild(ge);for(const me of oe){const ye=le(y,"div",`${T}__tip-row`),ke=le(y,"span",`${T}__tip-label`);Z(ke,me.label);const be=le(y,"span",`${T}__tip-value`);Z(be,me.value),ye.appendChild(ke),ye.appendChild(be),W.appendChild(ye)}return W}function x(y,T,ne,oe,W,ge){if(typeof W=="function"){const ke=W(ne,{...ge,rawTask:oe});if(ke==null||ke==="")return null;if(typeof ke=="string")return{node:null,text:ke};const be=ke.textContent||"",ve=le(y,"div",`${T}__tip-card`);return ve.appendChild(ke),{node:ve,text:be}}const me=W&&typeof W=="object"&&Array.isArray(W.fields)?W.fields:null,ye=O(ne,oe,me,ge);return{node:J(y,T,ne,ye),text:C(ne,ye,ge.t)}}function a(y,T,ne,oe,W,ge={}){const me=Number.isFinite(ge.gap)?ge.gap:8,ye=y.offsetWidth||0,ke=y.offsetHeight||0,be=ne.left+ne.width/2,ve=ne.top+ne.height/2;let Se="top",G=be-ye/2,U=ne.top-ke-me;if(U<oe.top&&(Se="bottom",U=ne.bottom+me),Se==="bottom"&&U+ke>oe.bottom&&(U=ve-ke/2,Se=ne.right+me+ye<=oe.right?"right":"left",G=Se==="right"?ne.right+me:ne.left-ye-me),G=Math.min(Math.max(G,oe.left),Math.max(oe.left,oe.right-ye)),U=Math.min(Math.max(U,oe.top),Math.max(oe.top,oe.bottom-ke)),y.setAttribute("data-placement",Se),y.style.left=`${fe(G-W.left)}px`,y.style.top=`${fe(U-W.top)}px`,!T)return;const D=(T.offsetWidth||0)/2,c=(T.offsetHeight||0)/2;if(Se==="top"||Se==="bottom"){const H=Math.min(Math.max(be-G-D,10-D),Math.max(10-D,ye-10-D));T.style.left=`${fe(H)}px`,T.style.top=""}else{const H=Math.min(Math.max(ve-U-c,10-c),Math.max(10-c,ke-10-c));T.style.top=`${fe(H)}px`,T.style.left=""}}function g(y){return`
8
- .${y}__tip-card{position:relative;max-width:280px;padding:6px 10px;border-radius:6px;font-size:11px;line-height:1.5;
6
+ var dt=Object.create(null),ft=Object.create(null);function Fe(r,se){dt[r]=se}function ht(r){var se=ft[r];if(se)return se;var we=Object.create(null);ft[r]=we;var ie=dt[r];if(!ie)throw new Error("[lattice] missing module: "+r);return ie(we,ht),we}Fe("packages/core/src/internal/predicates.js",function(r,se){"use strict";Object.defineProperty(r,"isObject",{enumerable:!0,get:function(){return we}}),Object.defineProperty(r,"isFunction",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"isNil",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"isBlank",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"isCtor",{enumerable:!0,get:function(){return re}});function we(A){return A!==null&&typeof A=="object"&&!Array.isArray(A)}function ie(A){return typeof A=="function"}function K(A){return A==null}function ue(A){return A==null||A===""}function re(A){return typeof A!="function"?!1:/^class[\s{]/.test(Function.prototype.toString.call(A))?!0:!!(A.prototype&&Object.getOwnPropertyNames(A.prototype).length>1)}}),Fe("packages/core/src/internal/warn.js",function(r,se){"use strict";Object.defineProperty(r,"reportedWarnings",{enumerable:!0,get:function(){return p}}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"infoOnce",{enumerable:!0,get:function(){return I}}),Object.defineProperty(r,"resetWarnings",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"fail",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"invariant",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"DEV",{enumerable:!0,get:function(){return v}});const we=new Set,ie=2e3;function K(o){if(we.add(o),we.size>ie){const d=we.values().next().value;d!==void 0&&we.delete(d)}}const ue=[],re=500;function A(o,d,u){ue.push({key:o,level:d,message:u.map(O=>typeof O=="string"?O:Q(O)).join(" "),at:Date.now()}),ue.length>re&&ue.shift()}function Q(o){if(o instanceof Error)return o.message;try{return JSON.stringify(o)}catch{return String(o)}}function p(){return ue.map(o=>({...o}))}function $(o){if(o.length===0||typeof o[0]!="string")return o;const d=o[0].replace(/^\[lattice\]\s*/,"");return d===o[0]?o:[d,...o.slice(1)]}function H(o,...d){if(we.has(o))return;K(o);const u=$(d);A(o,"warn",u),console.warn("[lattice]",...u)}function I(o,...d){if(we.has(o))return;K(o);const u=$(d);A(o,"info",u),console.info("[lattice]",...u)}function x(){we.clear(),ue.length=0}function N(o,d){const u=new Error(`[lattice] ${o}`);throw d!==void 0&&(u.cause=d),u}function V(o,d){o||N(d)}const v=(()=>{try{return!(typeof process<"u"&&process.env&&process.env.NODE_ENV==="production")}catch{return!0}})()}),Fe("packages/core/src/internal/merge.js",function(r,se){"use strict";Object.defineProperty(r,"expand",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"toArray",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"merge",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"mergeRow",{enumerable:!0,get:function(){return Q}});const ie=se("packages/core/src/internal/predicates.js").isObject;function K(p,$,H){if(p!==void 0)return p===!0?{enabled:!0,...H}:p===!1?{enabled:!1}:ie(p)?p:{[$]:p,enabled:!0}}function ue(p){return p==null?[]:Array.isArray(p)?p:[p]}const re=Object.freeze(new Set(["__proto__","constructor","prototype"]));function A(p,$){if(!ie(p))return ie($)?{...$}:$;if(!ie($))return $===void 0?p:$;const H={...p};for(const I of Object.keys($)){if(re.has(I))continue;const x=$[I];x!==void 0&&(H[I]=ie(x)&&ie(H[I])?A(H[I],x):x)}return H}function Q(p,$){if(!ie(p)||!ie($)||p===$)return $;const H=Object.create(Object.getPrototypeOf(p));return Object.assign(H,p,$),H}}),Fe("packages/core/src/internal/paths.js",function(r,se){"use strict";Object.defineProperty(r,"pathGetter",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"pathSetter",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"getPath",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"setPath",{enumerable:!0,get:function(){return A}});const we=new Map;function ie(Q){let p=we.get(Q);if(p)return p;if(!Q.includes("."))p=$=>$?.[Q];else{const $=Q.split("."),H=$.length;p=I=>{let x=I;for(let N=0;N<H;N++){if(x==null)return;x=x[$[N]]}return x}}return we.set(Q,p),p}const K=new Map;function ue(Q){let p=K.get(Q);if(p)return p;if(!Q.includes("."))p=($,H)=>{$!=null&&($[Q]=H)};else{const $=Q.split("."),H=$.length-1;p=(I,x)=>{let N=I;for(let V=0;V<H;V++){if(N==null)return;const v=$[V];N[v]==null&&(N[v]={}),N=N[v]}N!=null&&(N[$[H]]=x)}}return K.set(Q,p),p}function re(Q,p){return ie(p)(Q)}function A(Q,p,$){ue(p)(Q,$)}}),Fe("packages/modules/gantt/time.js",function(r,se){"use strict";Object.defineProperty(r,"toDayNumber",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"fromDayNumber",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"toISODate",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"resolveProjectEpoch",{enumerable:!0,get:function(){return Q}});const ie=se("packages/core/src/internal/warn.js").warnOnce,K=864e5;function ue(p){if(p==null||p==="")return null;if(typeof p=="number")return Number.isFinite(p)?p:null;if(p instanceof Date)return Number.isFinite(p.getTime())?Math.floor(Date.UTC(p.getFullYear(),p.getMonth(),p.getDate())/K):null;const $=Date.parse(p);return Number.isFinite($)?Math.floor($/K):null}function re(p){return Number.isFinite(p)?new Date(Math.round(p)*K):null}function A(p){const $=re(p);return $?$.toISOString().slice(0,10):null}function Q(p){if(p==null||p==="")return 0;const $=ue(p);return Number.isFinite($)?$:(ie(`gantt.projectEpoch:${String(p)}`,`[lattice] gantt: projectEpoch ${JSON.stringify(p)} is not a date or a day number; the plan is rendered against the Unix epoch (day 0 = 1970-01-01).`),0)}}),Fe("packages/modules/gantt/calendar.js",function(r,se){"use strict";Object.defineProperty(r,"createCalendar",{enumerable:!0,get:function(){return ue}});const ie=se("packages/modules/gantt/time.js").toDayNumber,K=Object.freeze([1,2,3,4,5]);function ue(re,A=0){if(re==null)return null;let Q,p;re==="weekends"?(Q=K,p=new Set):(Q=Array.isArray(re.workdays)&&re.workdays.length?re.workdays.map(Number).filter(u=>u>=0&&u<=6):K,p=new Set((Array.isArray(re.holidays)?re.holidays:[]).map(u=>ie(u)).filter(u=>u!=null)));const $=new Set(Q);if($.size===7&&p.size===0||$.size===0)return null;const H=u=>{let O=(u%7+4)%7;return O<0&&(O+=7),O},I=u=>{if(!Number.isFinite(u))return!1;const O=Math.round(u);return $.has(H(O))&&!p.has(O)},x=u=>{let O=u;for(;!I(O);)O+=1;return O},N=x(Math.round(Number.isFinite(A)?A:0)),V=$.size,v=(u,O)=>{if(O<u)return 0;const te=O-u+1,ne=Math.floor(te/7);let W=ne*V;const oe=H(u);for(let ce=ne*7;ce<te;ce+=1)$.has((oe+ce)%7)&&(W+=1);for(const ce of p)ce>=u&&ce<=O&&$.has(H(ce))&&(W-=1);return W};return{isWorking:I,nextWorking:x,dayOf:u=>{const O=Math.round(u);if(O===0)return N;if(O>0){const ye=Math.floor(O/V);let he=N+ye*7,fe=O-ye*V;for(;fe>0;)he+=1,$.has(H(he))&&(fe-=1);let ke=0;for(const ve of p)ve>N&&ve<=he&&$.has(H(ve))&&(ke+=1);for(;ke>0;)he+=1,I(he)&&(ke-=1);for(;!I(he);)he+=1;return he}const te=-O,ne=Math.floor(te/V);let W=N-ne*7,oe=te-ne*V;for(;oe>0;)W-=1,$.has(H(W))&&(oe-=1);let ce=0;for(const ye of p)ye>=W&&ye<N&&$.has(H(ye))&&(ce+=1);for(;ce>0;)W-=1,I(W)&&(ce-=1);for(;!I(W);)W-=1;return W},indexOf:u=>{const O=x(Math.round(u));return O>=N?v(N,O)-1:-(v(O,N)-1)},anchor:N}}}),Fe("packages/modules/gantt/week.js",function(r,se){"use strict";Object.defineProperty(r,"EXPLICIT_WEEK_START_DAY",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"localeWeekStartDay",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"validWeekStartDay",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"resolveWeekStartDay",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(r,"weekStartOf",{enumerable:!0,get:function(){return p}});const ie=se("packages/modules/gantt/time.js").fromDayNumber,K=Symbol("gantt.explicitWeekStartDay"),ue=new Set(["US","CA","MX","BR","AR","CO","VE","EC","PE","CL","IL","JP","KR","TW","HK","PH","ZA","EG"]);function re($){if(!$||typeof $!="string")return null;try{const H=new Intl.Locale($),I=H.weekInfo??(typeof H.getWeekInfo=="function"?H.getWeekInfo():null);if(I&&Number.isFinite(I.firstDay))return I.firstDay===7?0:I.firstDay;const x=H.region||$.split(/[-_]/).find(N=>N.length===2);if(x)return ue.has(x.toUpperCase())?0:1}catch{}return null}function A($){return Number.isFinite($)&&$>=0&&$<=6?Math.floor($):null}function Q($,H){const I=A($);if(I!=null)return I;const x=re(H);return x??0}function p($,H){const I=ie($),x=I?I.getUTCDay():0;return $-((x-H)%7+7)%7}}),Fe("packages/modules/gantt/zoom.js",function(r,se){"use strict";Object.defineProperty(r,"ZOOM_PRESETS",{enumerable:!0,get:function(){return we}}),Object.defineProperty(r,"ZOOM_LEVEL_NAMES",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"resolveZoomPreset",{enumerable:!0,get:function(){return K}});const we=Object.freeze({hour:{px:624,step:1/24,level:"hour"},day:{px:26,step:1,level:"day"},week:{px:12,step:7,level:"week"},month:{px:4,step:30,level:"month"},quarter:{px:1.8,step:91,level:"quarter"}}),ie=Object.freeze(["hour","day","week","month","quarter"]);function K(ue,re="day"){if(typeof ue=="number"&&Number.isFinite(ue)&&ue>0){const A=ue>=60?"hour":ue>=18?"day":ue>=8?"week":ue>=2.5?"month":"quarter";return{px:ue,step:we[A].step,level:A}}return typeof ue=="string"&&Object.prototype.hasOwnProperty.call(we,ue)?we[ue]:we[re]||we.day}}),Fe("packages/modules/gantt/workload-groups.js",function(r,se){"use strict";Object.defineProperty(r,"GROUP_KEY_PREFIX",{enumerable:!0,get:function(){return we}}),Object.defineProperty(r,"isGroupKey",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"normalizeGroupBy",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"groupOfResource",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"groupBookingSubRows",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(r,"groupWorkloadRows",{enumerable:!0,get:function(){return p}});const we="group:";function ie($){return typeof $=="string"&&$.startsWith(we)}function K($){return typeof $=="function"||typeof $=="string"&&$.trim()!==""?$:null}function ue($,H){let I=null;try{I=typeof $=="function"?$(H):H?H[$]:null}catch{I=null}return I==null||I===""?null:String(I)}function re($,H){return Array.isArray(H)?$?$.map((I,x)=>{const N=H[x];return N==null?I:I==null?N:I+N}):H.map(I=>I??null):$}function A($,H){return H==null||!Number.isFinite(H)?$:$==null?H:$+H}function Q($){const H=[],I=new Map;for(const x of $){if(!x.external||x.group==null){H.push(x);continue}const N=I.get(x.group);if(N){N.cells=re(N.cells,x.cells),N.total+=Number(x.total)||0,N.bookings.push(x);continue}const V={...x,id:`${we}${x.group}`,name:x.group,cells:re(null,x.cells),total:Number(x.total)||0,bookings:[x]};I.set(x.group,V),H.push(V)}return H}function p($,H){const I=new Map;for(const N of $){const V=H(N.resource==null?null:N.resource);I.has(V)||I.set(V,[]),I.get(V).push(N)}return[...I.keys()].sort((N,V)=>N==null?V==null?0:1:V==null?-1:N.localeCompare(V,void 0,{numeric:!0,sensitivity:"base"})).map(N=>{const V=I.get(N);let v=null,o=null,d=null,u=null,O=null,te=0;for(const W of V)v=re(v,W.cells),o=re(o,W.available),d=re(d,W.costCells),u=A(u,W.availableTotal),O=A(O,W.costTotal),te+=Number(W.total)||0;v=v||[];const ne=v.map((W,oe)=>W!=null&&o!=null&&o[oe]!=null&&W>o[oe]+1e-9);return{value:N,key:`${we}${N??""}`,rows:V,cells:v,available:o,availableTotal:u,total:te,costCells:d,costTotal:O,over:ne}})}}),Fe("packages/modules/shared/axislabels.js",function(r,se){"use strict";Object.defineProperty(r,"CHAR_RATIO",{enumerable:!0,get:function(){return we}}),Object.defineProperty(r,"BOLD_FACTOR",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"MIN_GAP",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"estimateLabelWidth",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"thinLabels",{enumerable:!0,get:function(){return re}});const we=.62,ie=1.05,K=6;function ue(A,Q,p=!1){return String(A??"").length*Q*we*(p?ie:1)}function re(A,Q){const p=Number.isFinite(Q.gap)?Number(Q.gap):K,$=Number.isFinite(Q.fontSize)?Number(Q.fontSize):11,H=typeof Q.measure=="function"?Q.measure:v=>ue(v,$,!!Q.bold),I=A.filter(v=>v&&Number.isFinite(v.at)).map(v=>({...v,width:H(String(v.text??""))})).sort((v,o)=>v.at-o.at);if(I.length<2)return{every:1,kept:I};const x=v=>{let o=null;for(let d=0;d<I.length;d+=v){const u=I[d];if(o&&u.at-o.at<o.width+p)return!1;o=u}return!0};let N=1;for(;N<I.length&&!x(N);)N++;const V=[];for(let v=0;v<I.length;v+=N)V.push(I[v]);return{every:N,kept:V}}}),Fe("packages/modules/scheduler/ticklabels.js",function(r,se){"use strict";Object.defineProperty(r,"TICK_FONT_SIZE",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"TICK_INSET",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"labelWidth",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"resolveTickLabels",{enumerable:!0,get:function(){return A}});const ie=se("packages/modules/shared/axislabels.js").thinLabels,K=11,ue=7;function re(Q,p){const $=String(Q??"");let H=0;for(const I of $)H+=I>="A"&&I<="Z"?1:.62;return H*p}function A(Q,p,$){const H=$.px,I=$.startDay,x=$.endDay,N=Number.isFinite($.fontSize)&&$.fontSize>0?$.fontSize:K,V=Q.map(u=>({day:u,at:(u-I)*H,label:""}));if(V.length===0)return V;let v=1/0;for(let u=1;u<V.length;u++){const O=V[u].at-V[u-1].at;O<v&&(v=O)}let o=null;for(const u of p){let O=0;for(const te of Q){const ne=re(u.label(te),N);ne>O&&(O=ne)}if(O<=v){o=u;break}}if(o)for(const u of V)u.label=o.label(u.day);else{const u=p[p.length-1],O=V.map(W=>({at:W.at,text:u.label(W.day)})),te=ie(O,{fontSize:N,measure:W=>re(W,N)}).kept,ne=new Set(te.map(W=>W.at));for(const W of V)W.label=ne.has(W.at)?u.label(W.day):""}const d=(x-I)*H;for(let u=V.length-1;u>=0;u--){const O=V[u];if(O.label)if(O.at+ue+re(O.label,N)>d)O.label="";else break}return V}}),Fe("packages/modules/scheduler/model.js",function(r,se){"use strict";Object.defineProperty(r,"GROUP_KEY_PREFIX",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"parseDate",{enumerable:!0,get:function(){return he}}),Object.defineProperty(r,"accessorFor",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"dateToDay",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"eventSpan",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(r,"addMinutes",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"defaultResourceColumns",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"resolveWorkload",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"resolveContext",{enumerable:!0,get:function(){return h}}),Object.defineProperty(r,"anchorDay",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"axisSpan",{enumerable:!0,get:function(){return n}}),Object.defineProperty(r,"monthStartOf",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"monthEndOf",{enumerable:!0,get:function(){return y}}),Object.defineProperty(r,"computeTicks",{enumerable:!0,get:function(){return z}}),Object.defineProperty(r,"assignLanes",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"placeEvents",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"colorFor",{enumerable:!0,get:function(){return F}}),Object.defineProperty(r,"resourceNonWorking",{enumerable:!0,get:function(){return J}}),Object.defineProperty(r,"laneCount",{enumerable:!0,get:function(){return c}}),Object.defineProperty(r,"eventText",{enumerable:!0,get:function(){return R}}),Object.defineProperty(r,"searchableText",{enumerable:!0,get:function(){return s}}),Object.defineProperty(r,"visibleEvents",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(r,"visibleResources",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(r,"buildDisplayRows",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"snapToStep",{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(r,"formatFieldDate",{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(r,"formatFieldDateLike",{enumerable:!0,get:function(){return Me}}),Object.defineProperty(r,"isEventReadOnly",{enumerable:!0,get:function(){return $e}}),Object.defineProperty(r,"isResourceReadOnly",{enumerable:!0,get:function(){return Ee}});const ie=se("packages/core/src/internal/warn.js").warnOnce,ue=se("packages/core/src/internal/paths.js").getPath,re=se("packages/core/src/internal/predicates.js"),A=re.isFunction,Q=re.isNil,p=re.isObject,$=se("packages/modules/gantt/time.js"),H=$.toDayNumber,I=$.fromDayNumber,N=se("packages/modules/gantt/calendar.js").createCalendar,V=se("packages/modules/gantt/week.js"),v=V.resolveWeekStartDay,o=V.weekStartOf,u=se("packages/modules/gantt/zoom.js").resolveZoomPreset,O=se("packages/modules/gantt/workload-groups.js"),te=O.normalizeGroupBy,ne=O.groupOfResource,oe=se("packages/modules/scheduler/ticklabels.js").resolveTickLabels,ce=864e5,ye="sched:";function he(C){if(C instanceof Date)return Number.isNaN(C.getTime())?null:C;if(typeof C=="number"&&Number.isFinite(C))return new Date(C);if(typeof C!="string")return null;const w=C.trim();if(!w)return null;let i=/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2}))?$/.exec(w);if(i){const t=new Date(+i[1],+i[2]-1,+i[3],+i[4],+i[5],i[6]?+i[6]:0);return Number.isNaN(t.getTime())?null:t}if(i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(w),i){const t=new Date(+i[1],+i[2]-1,+i[3]);return Number.isNaN(t.getTime())?null:t}const de=new Date(w);return Number.isNaN(de.getTime())?null:de}function fe(C){return A(C)?C:typeof C=="string"?w=>ue(w,C):()=>{}}function ke(C){const w=H(C),i=((C.getHours()*60+C.getMinutes())*60+C.getSeconds())/86400;return{day:w??0,frac:i}}function ve(C,w){const i=fe(C.fields.startDate)(w),de=he(i);if(!de)return{start:null,end:null};const t=ke(de);let l;const E=fe(C.fields.endDate)(w),b=he(E);return b?l=ke(b):l=G(t,C.defaultDuration),(l.day<t.day||l.day===t.day&&l.frac<t.frac)&&(l=G(t,C.defaultDuration)),{start:t,end:l}}function G(C,w){const i=C.day*1440+Math.round(C.frac*1440)+w;return{day:Math.floor(i/1440),frac:i%1440/1440}}function U(){return[{id:"name",field:"name",title:"Name",layout:{width:160}},{id:"role",field:"role",title:"Role",layout:{width:120}},{id:"capacity",field:"capacity",title:"Capacity",type:"number",layout:{width:90}}]}function M(C){if(C===!0)return{hoursPerDay:8,defaultCapacity:1,decimals:1};if(C&&typeof C=="object"&&!Array.isArray(C)){const w=(de,t)=>typeof de=="number"&&Number.isFinite(de)&&de>0?de:t,i=typeof C.decimals=="number"&&Number.isFinite(C.decimals)&&C.decimals>=0?Math.round(C.decimals):1;return{hoursPerDay:w(C.hoursPerDay,8),defaultCapacity:w(C.defaultCapacity,1),decimals:i}}return null}function h(C){const w=p(C)?C:{},i=p(w.fields)?w.fields:{};return{resources:Array.isArray(w.resources)?w.resources:[],events:Array.isArray(w.events)?w.events:[],createGrid:A(w.createGrid)?w.createGrid:null,fields:{resourceId:typeof i.resourceId=="string"?i.resourceId:"resourceId",startDate:typeof i.startDate=="string"?i.startDate:"startDate",endDate:typeof i.endDate=="string"?i.endDate:"endDate",name:typeof i.name=="string"?i.name:"name",calendar:typeof i.calendar=="string"?i.calendar:"calendar"},resourceKey:typeof w.resourceKey=="string"?w.resourceKey:"id",eventKey:typeof w.eventKey=="string"?w.eventKey:"id",columns:Array.isArray(w.columns)&&w.columns.length?w.columns:U(),zoom:u(w.zoom==="fit"?"day":w.zoom,"day"),fit:w.zoom==="fit",zoomName:typeof w.zoom=="string"?w.zoom:"day",anchor:he(w.date)||he(w.startDate)||null,defaultDuration:typeof w.defaultDuration=="number"&&w.defaultDuration>0?w.defaultDuration:60,rowHeight:typeof w.rowHeight=="number"&&w.rowHeight>0?w.rowHeight:34,resourceWidth:typeof w.resourceWidth=="number"&&Number.isFinite(w.resourceWidth)&&w.resourceWidth>0?w.resourceWidth:300,locale:typeof w.locale=="string"?w.locale:void 0,timeZone:typeof w.timeZone=="string"?w.timeZone:void 0,weekStartDay:v(w.weekStartDay,typeof w.locale=="string"?w.locale:void 0),todayLine:w.todayLine!==!1,nonWorking:w.nonWorking!==!1,calendars:p(w.calendars)?w.calendars:null,workload:M(w.workload),ariaLabel:typeof w.ariaLabel=="string"?w.ariaLabel:"",messages:p(w.messages)?w.messages:null,labels:p(w.labels)?w.labels:{},overscan:typeof w.overscan=="number"&&w.overscan>=0?w.overscan:5,colorProperty:typeof w.colorProperty=="string"?w.colorProperty:null,colorMap:p(w.colorMap)?w.colorMap:null,groupBy:te(w.groupBy),search:typeof w.search=="string"?w.search.trim():"",resourceFilter:A(w.resourceFilter)?w.resourceFilter:null,eventFilter:A(w.eventFilter)?w.eventFilter:null,editable:w.editable!==!1,readOnlyWhen:A(w.readOnlyWhen)?w.readOnlyWhen:null,resourceReadOnlyWhen:A(w.resourceReadOnlyWhen)?w.resourceReadOnlyWhen:null}}function B(C){if(C.anchor)return H(C.anchor);let w=null;for(const i of C.events){const de=he(fe(C.fields.startDate)(i));if(de){const t=H(de);(w==null||t<w)&&(w=t)}}return w??H(new Date)}function n(C,w){let i=w,de=w+1;for(const E of C.events){const b=ve(C,E);b.start&&(b.start.day<i&&(i=b.start.day),b.end.day>de&&(de=b.end.day))}const t=o(i,C.weekStartDay);let l=de+1;return C.zoom.level==="month"||C.zoom.level==="quarter"?{startDay:f(t),endDay:y(l)}:(l-t<14&&(l=t+14),{startDay:t,endDay:l})}function f(C){const w=I(C);return Math.floor(Date.UTC(w.getUTCFullYear(),w.getUTCMonth(),1)/ce)}function y(C){const w=I(C);return Math.floor(Date.UTC(w.getUTCFullYear(),w.getUTCMonth()+1,1)/ce)}function z(C,w,i){const de=C.zoom.level,t=C.zoom.px,l=C.locale||void 0,E=C.timeZone||"UTC",b=g=>new Date(Math.round(g)*ce),P=g=>new Intl.DateTimeFormat(l,{...g,timeZone:E}),m=(g,X)=>P(X).format(b(g)),k=[];let Y;if(de==="hour"){for(let g=w;g<i;g+=1/24)k.push(g);Y=[{name:"hour-minute",label:g=>P({hour:"2-digit",minute:"2-digit",hour12:!1}).format(new Date(g*ce))},{name:"hour",label:g=>P({hour:"2-digit",hour12:!1}).format(new Date(g*ce))}]}else if(de==="day"){for(let g=w;g<i;g+=1)k.push(g);Y=[{name:"weekday-day",label:g=>m(g,{weekday:"short",day:"numeric"})},{name:"weekday",label:g=>m(g,{weekday:"short"})},{name:"weekday-narrow",label:g=>m(g,{weekday:"narrow"})}]}else if(de==="week"){for(let g=o(w,C.weekStartDay);g<i;g+=7)k.push(g);Y=[{name:"month-day",label:g=>m(g,{month:"short",day:"numeric"})},{name:"day",label:g=>m(g,{day:"numeric"})}]}else{const g=de==="quarter"?3:1;let X=f(w);for(;X<i;){k.push(X);const me=b(X);X=Math.floor(Date.UTC(me.getUTCFullYear(),me.getUTCMonth()+g,1)/ce)}de==="quarter"?Y=[{name:"quarter",label:me=>b(me).getUTCMonth()===0?m(me,{month:"short",year:"numeric"}):m(me,{month:"short"})},{name:"month",label:me=>m(me,{month:"short"})}]:Y=[{name:"month-year",label:me=>m(me,{month:"short",year:"numeric"})},{name:"month",label:me=>m(me,{month:"short"})}]}return oe(k,Y,{px:t,startDay:w,endDay:i})}function D(C){C.sort((i,de)=>i.startDay-de.startDay||de.endDay-de.startDay-(i.endDay-i.startDay)||(String(i.key)<String(de.key)?-1:String(i.key)>String(de.key)?1:0));const w=[];for(const i of C){const de=w[w.length-1];de&&i.startDay<de.endDay?(de.items.push(i),i.endDay>de.endDay&&(de.endDay=i.endDay)):w.push({items:[i],endDay:i.endDay})}for(const i of w){const de=[];for(const t of i.items){let l=0;for(;l<de.length&&de[l]>t.startDay;)l++;t.lane=l,l===de.length?de.push(t.endDay):de[l]=t.endDay}for(const t of i.items)t.lanes=de.length}return C}function T(C,w=C.events){const i=fe(C.fields.resourceId),de=fe(C.eventKey),t=fe(C.fields.name),l=new Map,E=[],b=new Map;let P=!1;for(const m of w){const k=de(m),Y=i(m),g=ve(C,m);if(!g.start){E.push({key:k,row:m}),P||(P=!0,ie("scheduler:unparsable-start",`scheduler: an event's "${C.fields.startDate}" is empty or unparsable, so it is not shown; count it in \`unscheduled\`.`));continue}const X={key:k,row:m,resourceKey:Y,name:t(m),startDay:g.start.day+g.start.frac,endDay:g.end.day+g.end.frac,lane:0,lanes:1,color:F(C,m)};l.has(Y)||l.set(Y,[]),l.get(Y).push(X),b.set(k,X)}for(const[,m]of l)D(m);return{byResource:l,unscheduled:E,keys:b}}function F(C,w){const i=C.colorProperty;if(!i)return null;const de=fe(i)(w);return Q(de)?null:C.colorMap&&p(C.colorMap)&&typeof C.colorMap[String(de)]=="string"?C.colorMap[String(de)]:typeof de=="string"&&/^(#|rgb|hsl|oklch|var\()/.test(de.trim())?de.trim():null}function J(C,w){const i=fe(C.fields.calendar)(w);let de=i;if(typeof i=="string"&&C.calendars&&Object.prototype.hasOwnProperty.call(C.calendars,i)&&(de=C.calendars[i]),de==null)return null;const t=N(de,0);return t?l=>!t.isWorking(Math.round(l)):null}function c(C){let w=1;for(const i of C)i.lanes>w&&(w=i.lanes);return w}function R(C,w,i){const de=fe(C.fields.name)(w);return Q(de)?String(i):String(de)}function s(C){return C==null?"":typeof C!="object"?String(C):Object.keys(C).filter(w=>C[w]!=null&&(typeof C[w]=="string"||typeof C[w]=="number")).map(w=>String(C[w])).join(" ")}function S(C,w){return w===""||String(C||"").toLocaleLowerCase().includes(w)}function j(C,w){try{return C(w)!==!1}catch{return!0}}function _(C){return(C.search||"").trim().toLocaleLowerCase()}function ge(C){const w=_(C);return C.events.filter(i=>C.eventFilter&&!j(C.eventFilter,i)?!1:S(s(i),w))}function ae(C){const w=_(C),i=fe(C.resourceKey),de=fe(C.fields.resourceId);return C.resources.filter(t=>{if(C.resourceFilter&&!j(C.resourceFilter,t))return!1;if(!w||S(s(t),w))return!0;const l=i(t);return C.events.some(E=>de(E)===l&&S(s(E),w))})}function Z(C,w,i,de){const t=[];if(!w){for(const b of C)t.push({type:"resource",resource:b});return t}const l=new Map,E=[];for(const b of C){const P=ne(w,b);l.has(P)||(l.set(P,[]),E.push(P)),l.get(P).push(b)}E.sort((b,P)=>b==null?P==null?0:1:P==null?-1:b.localeCompare(P,void 0,{numeric:!0,sensitivity:"base"}));for(const b of E){const P=b==null?de||"Ungrouped":String(b);if(t.push({type:"group",key:`${ye}${b??""}`,value:b,label:P,expanded:!i.has(b)}),!i.has(b))for(const m of l.get(b))t.push({type:"resource",resource:m})}return t}function Oe(C,w){return!Number.isFinite(C)||C<=0?w:Math.round(w/C)*C}function Pe(C){if(!Number.isFinite(C))return null;const w=I(Math.floor(C));if(!w)return null;const i=Math.round((C-Math.floor(C))*1440),de=Math.floor(i/60),t=i%60,l=E=>String(E).padStart(2,"0");return`${w.getUTCFullYear()}-${l(w.getUTCMonth()+1)}-${l(w.getUTCDate())} ${l(de)}:${l(t)}`}function Me(C,w){const i=Pe(w);return i&&typeof C=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(C)?i.slice(0,10):i}function $e(C,w){if(!w)return!1;if(w.readOnly===!0)return!0;if(A(C.readOnlyWhen))try{return!!C.readOnlyWhen(w)}catch{return!1}return!1}function Ee(C,w){if(!w)return!1;if(w.readOnly===!0)return!0;if(A(C.resourceReadOnlyWhen))try{return!!C.resourceReadOnlyWhen(w)}catch{return!1}return!1}}),Fe("packages/modules/shared/emitter.js",function(r,se){"use strict";Object.defineProperty(r,"WILDCARD",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"Emitter",{enumerable:!0,get:function(){return p}}),Object.defineProperty(r,"gate",{enumerable:!0,get:function(){return $}});const ie=se("packages/core/src/internal/predicates.js").isFunction,ue=se("packages/core/src/internal/warn.js").warnOnce,re="*",A=new Set(["api","user","init","ai"]);function Q(H,I){return H&&H.name?H.name:`#${I}`}class p{#e=new Map;#t;constructor(I="module"){this.#t=String(I)}on(I,x){if(!ie(x))return()=>{};let N=this.#e.get(I);return N||(N=new Set,this.#e.set(I,N)),N.add(x),()=>this.off(I,x)}off(I,x){const N=this.#e.get(I);N&&N.delete(x)}count(I){const x=this.#e.get(I);return x?x.size:0}emit(I,x){const N=this.#e.get(I),V=this.#e.get(re);if((!N||N.size===0)&&(!V||V.size===0))return;const v={...x||null,type:I};N&&N.size&&this.#n([...N],v,I),V&&V.size&&this.#n([...V],v,re)}#n(I,x,N){for(let V=0;V<I.length;V++)try{I[V](x)}catch(v){ue(`${this.#t}.emit.throw:${N}:${Q(I[V],V)}`,`${this.#t}: a '${N}' handler threw; other handlers were unaffected.`,v)}}emitBefore(I,x,N){const V=N??(x&&x.origin),v=A.has(V)?V:"user";let o=!1,d=null;const u=ce=>{o=!0,ce!=null&&d===null&&(d=String(ce))},O={...x||null,type:I,origin:v,get defaultPrevented(){return o},get reason(){return d},preventDefault(ce){u(ce)}},te=this.#e.get(I);if(!te||te.size===0)return!0;const ne=[...te],W=()=>(o&&d===null&&(d="prevented"),o&&x&&typeof x=="object"&&(x.reason=d),!o),oe=[];for(let ce=0;ce<ne.length;ce++){const ye=ne[ce];try{const he=ye(O);he&&ie(he.then)?oe.push(he):he===!1&&u("prevented")}catch(he){u("error"),ue(`${this.#t}.beforeThrow:${I}:${Q(ye,ce)}`,`${this.#t}: a '${I}' before-handler threw; the action was cancelled.`,he)}}return oe.length===0?W():Promise.allSettled(oe).then(ce=>{for(const ye of ce)ye.status==="rejected"?(u("error"),ue(`${this.#t}.beforeReject:${I}`,`${this.#t}: a '${I}' before-handler rejected; the action was cancelled.`,ye.reason)):ye.value===!1&&u("prevented");return W()})}clear(){this.#e.clear()}}function $(H,I,x,N,V){const v=H.emitBefore(I,N,N.origin),o=()=>(H.emit(x,{...N,reason:N.reason||"prevented"}),!1);return v===!1?o():v&&ie(v.then)?v.then(d=>d?V():o()):V()}}),Fe("packages/modules/charts/svg.js",function(r,se){"use strict";Object.defineProperty(r,"SVG_NS",{enumerable:!0,get:function(){return we}}),Object.defineProperty(r,"el",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"svg",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"attr",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"attrs",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"setText",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(r,"clear",{enumerable:!0,get:function(){return p}}),Object.defineProperty(r,"append",{enumerable:!0,get:function(){return $}}),Object.defineProperty(r,"path",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"ribbonPath",{enumerable:!0,get:function(){return I}}),Object.defineProperty(r,"round",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"pathRings",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"insideRings",{enumerable:!0,get:function(){return V}});const we="http://www.w3.org/2000/svg";function ie(v){const o=v.indexOf(")");return o<0?v:v.slice(o+1).trim()||"#0072b2"}function K(v,o,d){const u=v.createElement(o);return d&&u.setAttribute("class",d),u}function ue(v,o,d){const u=v.createElementNS(we,o);if(d)for(const O of Object.keys(d))u.setAttribute(O,String(d[O]));return u}function re(v,o,d){if(!v)return;if(d==null){v.removeAttribute(o);return}let u=String(d);u.startsWith("url(#")&&(o==="stroke"||o==="fill"&&v.localName==="text")&&(u=ie(u)),v.setAttribute(o,u)}function A(v,o){if(v)for(const d of Object.keys(o))re(v,d,o[d])}function Q(v,o){v&&(v.textContent=o==null?"":String(o))}function p(v){if(v)for(;v.firstChild;)v.removeChild(v.firstChild)}function $(v,o){for(const d of o)d&&v.appendChild(d);return v}function H(v){return v.join(" ")}function I(v){if(!v||v.length<2)return"";const o=["M",v[0].x,v[0].upper];for(let d=1;d<v.length;d++)o.push("L",v[d].x,v[d].upper);for(let d=v.length-1;d>=0;d--)o.push("L",v[d].x,v[d].lower);return o.push("Z"),H(o)}function x(v){return Math.round(v*100)/100}function N(v){const o=[];let d=[];const u=String(v||"").match(/[A-Za-z]|-?\d*\.?\d+(?:e[-+]?\d+)?/gi)||[];let O="",te=[];const ne=()=>{if(!O||!te.length){te=[];return}if(O==="M"||O==="L")for(let W=0;W+1<te.length;W+=2)d.push([te[W],te[W+1]]);else O!=="Z"&&te.length>=2&&d.push([te[te.length-2],te[te.length-1]]);te=[]};for(const W of u){if(/[A-Za-z]/.test(W)){if(ne(),W==="Z"||W==="z"){d.length>2&&o.push(d),d=[],O="";continue}W==="M"&&d.length>2&&(o.push(d),d=[]),O=W;continue}te.push(Number(W))}return ne(),d.length>2&&o.push(d),o}function V(v,o,d){let u=!1;for(const O of v)for(let te=0,ne=O.length-1;te<O.length;ne=te++){const[W,oe]=O[te],[ce,ye]=O[ne];oe>d!=ye>d&&o<(ce-W)*(d-oe)/(ye-oe||1e-12)+W&&(u=!u)}return u}}),Fe("packages/modules/gantt/assignments.js",function(r,se){"use strict";Object.defineProperty(r,"parseAssignments",{enumerable:!0,get:function(){return ie}});function we(K){if(K==null||K==="")return null;const ue=typeof K=="number"?K:Number(K);return Number.isFinite(ue)?ue:null}function ie(K){if(K&&Array.isArray(K.assignments))return K.assignments.map(A=>{const Q=A&&(A.resource??A.name??A.id);if(Q==null||Q==="")return null;const p=we(A.units)??we(A.allocation)??1;return{resource:String(Q),units:p}}).filter(Boolean);const ue=K?K.assignee??K.assignees??K.owner:null;return(Array.isArray(ue)?ue:ue==null||ue===""?[]:[ue]).map(A=>String(A)).filter(A=>A!=="").map(A=>({resource:A,units:1}))}}),Fe("packages/modules/gantt/task-calendars.js",function(r,se){"use strict";Object.defineProperty(r,"PLAN_CALENDAR_ID",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"parseHolidayDays",{enumerable:!0,get:function(){return p}}),Object.defineProperty(r,"planWorkingTime",{enumerable:!0,get:function(){return $}}),Object.defineProperty(r,"normalizeCalendarSpec",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"resolveCalendars",{enumerable:!0,get:function(){return I}}),Object.defineProperty(r,"PLAIN_TIME",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"createTimeModel",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"workingRuns",{enumerable:!0,get:function(){return V}});const ie=se("packages/modules/gantt/calendar.js").createCalendar,ue=se("packages/modules/gantt/time.js").toDayNumber,re="plan",A=Object.freeze([0,1,2,3,4,5,6]),Q=Object.freeze([1,2,3,4,5]);function p(v){const o=new Set;for(const d of Array.isArray(v)?v:[]){if(d&&typeof d=="object"&&!(d instanceof Date)&&("from"in d||"to"in d)){const O=ue(d.from),te=ue(d.to??d.from);if(O==null)continue;const ne=te??O;for(let W=Math.min(O,ne);W<=Math.max(O,ne);W+=1)o.add(W);continue}const u=ue(d);u!=null&&o.add(u)}return[...o].sort((d,u)=>d-u)}function $(v){return v==null?{workdays:[...A],holidays:[],hoursPerDay:null}:v==="weekends"?{workdays:[...Q],holidays:[],hoursPerDay:null}:{workdays:Array.isArray(v.workdays)&&v.workdays.length?v.workdays.map(Number).filter(d=>d>=0&&d<=6):[...Q],holidays:p(v.holidays),hoursPerDay:null}}function H(v,o){let d,u,O=null;if(v==="weekends")d=[...Q],u=[];else if(v&&typeof v=="object"&&!Array.isArray(v)&&!(v instanceof Date)){const ne=v,W=ne.workdays??ne.workingDays;d=Array.isArray(W)&&W.length?W.map(Number).filter(ce=>ce>=0&&ce<=6):o.workdays;const oe=ne.holidays??ne.exceptions;u=Array.isArray(oe)?p(oe):o.holidays,ne.hoursPerDay!=null&&(O=ne.hoursPerDay)}else return null;const te=[...new Set(d)].sort((ne,W)=>ne-W);return{workdays:te,holidays:u,hoursPerDay:O,key:`${te.join(",")}|${u.join(",")}`}}function I(v){const o=$(v.calendar),d=Number.isFinite(v.projectStart)?v.projectStart:0,u=H({workdays:o.workdays,holidays:o.holidays},o).key,O=new Map,te=[],ne=new Map;for(const[fe,ke]of Object.entries(v.calendars&&typeof v.calendars=="object"?v.calendars:{})){const ve=H(ke,o);ve&&ne.set(fe,ve)}const W=(fe,ke)=>{if(!O.has(fe)){const ve=ie({workdays:ke.workdays,holidays:ke.holidays},d);O.set(fe,{id:fe,workdays:ke.workdays,holidays:ke.holidays,hoursPerDay:ke.hoursPerDay,calendar:ve,isWorking:ve?G=>ve.isWorking(G):()=>!0,key:ke.key})}return O.get(fe)};W(re,{...o,key:u});const oe=(fe,ke,ve)=>{if(fe==null||fe==="")return re;if(typeof fe=="string"&&ne.has(fe))return W(fe,ne.get(fe)).id;const G=fe==="weekends"||fe&&typeof fe=="object"?H(fe,o):null;if(G){const M=fe==="weekends"?"weekends":`${ve}:${ke}`;return W(M,G).id}const U=typeof fe=="string"?fe:JSON.stringify(fe);return te.push({code:"unknown-calendar",message:`${ve} "${ke}" names unknown calendar "${U}"`,id:ke,calendar:U,owner:ve}),null},ce=new Map;let ye=!1;for(const fe of v.tasks||[]){const ke=oe(fe.calendar,fe.id,"task");ke!=null&&(ce.set(fe.id,ke),O.get(ke).key!==u&&(ye=!0))}const he=new Map;for(const fe of v.resources||[]){const ke=oe(fe.calendar,fe.id,"resource");if(ke==null||ke===re)continue;const ve=O.get(ke);he.set(fe.id,{workingDays:ve.workdays,holidays:ve.holidays,...ve.hoursPerDay!=null?{hoursPerDay:ve.hoursPerDay}:null})}return{errors:te,customised:ye,models:O,ofTask:ce,resourceSpec:he}}const x=Object.freeze({custom:!1,norm:(v,o)=>o,fin:(v,o,d)=>o+d,back:(v,o,d)=>o-d,shift:(v,o,d)=>o+d,unshift:(v,o,d)=>o-d,between:(v,o,d)=>o-d});function N(v){return{custom:!0,norm:(o,d)=>{const u=v(o);return u?u.nextWorking(d):d},fin:(o,d,u)=>{const O=v(o);return O?O.dayOf(O.indexOf(d)+u):d+u},back:(o,d,u)=>{const O=v(o);return O?O.dayOf(O.indexOf(d)-u):d-u},shift:(o,d,u)=>{const O=v(o);return O?O.dayOf(O.indexOf(d)+u):d+u},unshift:(o,d,u)=>{const O=v(o);return O?O.dayOf(O.indexOf(d)-u):d-u},between:(o,d,u)=>{const O=v(o);return O?O.indexOf(d)-O.indexOf(u):d-u}}}function V(v,o,d){const u=[];let O=null;for(let te=Math.round(v);te<Math.round(o);te+=1)d(te)?O==null&&(O=te):O!=null&&(u.push([O,te]),O=null);return O!=null&&u.push([O,Math.round(o)]),u}}),Fe("packages/modules/gantt/unscheduled.js",function(r,se){"use strict";Object.defineProperty(r,"UNSCHEDULED_DEFAULT_DURATION",{enumerable:!0,get:function(){return we}}),Object.defineProperty(r,"isUnscheduled",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(r,"findUnscheduled",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"activeEdges",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"unscheduledRecord",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"completeUnscheduledPatch",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"unscheduledMarker",{enumerable:!0,get:function(){return Q}});const we=1;function ie(p){return!!(p&&p.unscheduled===!0)}function K(p,$,H){const I=new Set;for(const x of p)!H.isSummary(x)&&$.get(x).duration==null&&I.add(x);if(!I.size)return I;for(const x of p)H.isSummary(x)&&H.descendantLeaves(x).every(N=>I.has(N))&&I.add(x);return I}function ue(p,$){return $.size?p.filter(H=>!$.has(H.from)&&!$.has(H.to)):p}function re(p,$){return{id:p.id,name:p.name,duration:null,es:null,ef:null,ls:null,lf:null,totalFloat:null,critical:!1,percentComplete:$?null:p.percentComplete,parent:p.parent,isSummary:$,isMilestone:!1,locked:$?!1:!!p.locked,unscheduled:!0,children:[]}}function A(p,$){if(!ie($)||$.isSummary||p.duration!==void 0)return p;const H=p.start!=null&&p.start!=="",I=p.end!=null&&p.end!=="";if(!H&&!I)return p;const x={...p,duration:we};if(!H){const N=Number(p.end);Number.isFinite(N)&&(x.start=N-we)}return x}function Q(p,$,H){const I=p.createElement("span");return I.setAttribute("class",`${$}__unscheduled`),I.textContent=H("gantt.unscheduled"),I}}),Fe("packages/modules/gantt/inactive.js",function(r,se){"use strict";Object.defineProperty(r,"bridgeInactive",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(r,"inactiveRecord",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"inactiveMarker",{enumerable:!0,get:function(){return A}});const we=Object.freeze({FS:"es",SS:"es",FF:"ef",SF:"ef"}),ie=Object.freeze({FS:"ef",SS:"es",FF:"ef",SF:"es"});function K(Q,p){const $=Q.lag+p.lag,H=ie[Q.type],I=we[p.type];let x;return H==="ef"&&I==="es"?x="FS":H==="ef"&&I==="ef"?x="FF":H==="es"&&I==="es"?x="SS":x="SF",{from:Q.from,to:p.to,type:x,lag:$}}function ue(Q,p){if(!p.size)return Q;let $=Q;for(const H of p){if(!$.some(o=>o.from===H||o.to===H))continue;const x=$.filter(o=>o.to===H),N=$.filter(o=>o.from===H),V=$.filter(o=>o.from!==H&&o.to!==H),v=[];for(const o of x)for(const d of N)o.from!==d.to&&v.push(K(o,d));$=V.concat(v)}return $}function re(Q){const p=Q.earliestStart??null,$=Q.duration??null,H=p!=null&&$!=null?p+$:null;return{id:Q.id,name:Q.name,duration:$,es:p,ef:H,ls:p,lf:H,totalFloat:null,critical:!1,percentComplete:Q.percentComplete,parent:Q.parent,isSummary:!1,isMilestone:$===0,locked:!!Q.locked,inactive:!0,children:[],colour:Q.colour??null}}function A(Q,p,$){const H=Q.createElement("span");return H.setAttribute("class",`${p}__inactive-marker`),H.textContent=$("gantt.inactive"),H}}),Fe("packages/modules/gantt/schedule.js",function(r,se){"use strict";Object.defineProperty(r,"LINK_TYPES",{enumerable:!0,get:function(){return te}}),Object.defineProperty(r,"CONSTRAINT_TYPES",{enumerable:!0,get:function(){return ne}}),Object.defineProperty(r,"resolveConstraintCode",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"SCHEDULING_MODES",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"resolveSchedulingMode",{enumerable:!0,get:function(){return he}}),Object.defineProperty(r,"effortRate",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"recomputeEffort",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(r,"reconcileEffort",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"EPS",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"SCHEDULE_ERROR",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"TASK_FIELDS",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"taskIdReader",{enumerable:!0,get:function(){return z}}),Object.defineProperty(r,"taskFieldWriters",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"isTaskLocked",{enumerable:!0,get:function(){return F}}),Object.defineProperty(r,"normalizeTasks",{enumerable:!0,get:function(){return J}}),Object.defineProperty(r,"buildTree",{enumerable:!0,get:function(){return c}}),Object.defineProperty(r,"normalizeLinkSpec",{enumerable:!0,get:function(){return s}}),Object.defineProperty(r,"normalizeDependencies",{enumerable:!0,get:function(){return S}}),Object.defineProperty(r,"expandDependencies",{enumerable:!0,get:function(){return j}}),Object.defineProperty(r,"topoOrder",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(r,"wouldCreateCycle",{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(r,"computeSchedule",{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(r,"findViolations",{enumerable:!0,get:function(){return de}});const ie=se("packages/core/src/internal/warn.js").warnOnce,ue=se("packages/modules/gantt/calendar.js").createCalendar,re=se("packages/modules/gantt/task-calendars.js"),A=re.PLAIN_TIME,Q=re.createTimeModel,p=re.resolveCalendars,H=se("packages/modules/gantt/assignments.js").parseAssignments,x=se("packages/modules/gantt/time.js").toDayNumber,N=se("packages/modules/gantt/unscheduled.js"),V=N.activeEdges,v=N.findUnscheduled,o=N.unscheduledRecord,d=se("packages/modules/gantt/inactive.js"),u=d.bridgeInactive,O=d.inactiveRecord,te=["FS","SS","FF","SF"],ne=["ASAP","MSO","MFO","ALAP","SNET","SNLT","FNET","FNLT"],W=Object.freeze({asap:"ASAP","as-soon-as-possible":"ASAP",assoonaspossible:"ASAP",mso:"MSO","must-start-on":"MSO",muststarton:"MSO","start-on":"MSO",mfo:"MFO","must-finish-on":"MFO",mustfinishon:"MFO","finish-on":"MFO",alap:"ALAP","as-late-as-possible":"ALAP",aslateaspossible:"ALAP",late:"ALAP",snet:"SNET","start-no-earlier-than":"SNET",startnoearlierthan:"SNET",snlt:"SNLT","start-no-later-than":"SNLT",startnolaterthan:"SNLT",fnet:"FNET","finish-no-earlier-than":"FNET",finishnoearlierthan:"FNET",fnlt:"FNLT","finish-no-later-than":"FNLT",finishnolaterthan:"FNLT"});function oe(t){if(t==null||t===""||typeof t=="object"&&!Array.isArray(t)&&!(t instanceof Date)&&(t=t.type??t.constraint??t.code??null,t==null||t===""))return null;const l=String(t).toLowerCase().replace(/\s+/g,"-");return W[l]??(ne.includes(String(t).toUpperCase())?String(t).toUpperCase():null)}const ce=["fixedDuration","fixedEffort","fixedUnits"],ye=Object.freeze({fixedduration:"fixedDuration","fixed-duration":"fixedDuration",duration:"fixedDuration",fixedeffort:"fixedEffort","fixed-effort":"fixedEffort",effort:"fixedEffort",work:"fixedEffort",fixedwork:"fixedEffort",fixedunits:"fixedUnits","fixed-units":"fixedUnits",units:"fixedUnits"});function he(t){if(t==null||t==="")return null;const l=String(t).toLowerCase().replace(/\s+/g,"-");if(ye[l])return ye[l];const E=l.replace(/-/g,"");return ye[E]??null}const fe=8;function ke(t,l){const E=l.hoursPerDay,b=l.resourceHours instanceof Map?l.resourceHours:new Map;if(!t||t.length===0)return{rate:E,units:1};let P=0,m=0;for(const k of t){const Y=b.has(k.resource)?b.get(k.resource):E;P+=k.units*Y,m+=k.units}return{rate:P,units:m}}function ve(t,l){const E=t.schedulingMode||l.defaultMode||"fixedDuration",b=t.effortDriven!=null?!!t.effortDriven:!!l.defaultEffortDriven,{rate:P,units:m}=ke(t.assignments,l),k=t.duration,Y=t.statedEffort;let g=k,X=Y??(k!=null?k*P:null);return E==="fixedEffort"?Y!=null&&P>0?g=Y/P:X=k!=null?k*P:null:E==="fixedUnits"?k!=null?(g=k,X=k*P):Y!=null&&P>0&&(g=Y/P,X=Y):g=k,{duration:g,effort:X,units:m,schedulingMode:E,effortDriven:b}}function G(t,l){const E=he(t.mode)||t.mode||"fixedDuration",b=!!t.effortDriven,P=t.hoursPerDay>0?t.hoursPerDay:fe;let m=t.duration,k=t.units;const Y=m*k*P,g=l.field,X=l.units!=null?l.units:1;if(g==="duration")m=l.value,E==="fixedEffort"&&(k=m>0?Y/(m*P):k);else if(g==="effort"){const me=l.value;E==="fixedDuration"?k=m>0?me/(m*P):k:m=k>0?me/(k*P):m}else if(g==="units")k=l.value,E!=="fixedDuration"&&(m=k>0?Y/(k*P):m);else if(g==="addResource"||g==="removeResource"){const me=g==="addResource"?X:-X;E==="fixedDuration"?b||(k=k+me):(k=k+me,m=k>0?Y/(k*P):m)}return{duration:m,units:k,effort:m*k*P}}const U=1e-9,M={CYCLE:"cycle",DUPLICATE_ID:"duplicate-id",UNKNOWN_TASK:"unknown-task",BAD_DURATION:"bad-duration",BAD_LINK_TYPE:"bad-link-type",SELF_DEPENDENCY:"self-dependency",UNKNOWN_PARENT:"unknown-parent",PARENT_CYCLE:"parent-cycle",DEP_ACROSS_HIERARCHY:"dep-across-hierarchy",UNKNOWN_CALENDAR:"unknown-calendar"};function h(t){if(t==null||t==="")return null;const l=typeof t=="number"?t:Number(t);return Number.isFinite(l)?l:null}function B(t){if(!t)return null;const l=h(t.effort)??(Array.isArray(t.work)?null:h(t.work))??h(t.hours);if(l!=null)return l;if(Array.isArray(t.work)){let E=0,b=!1;for(const P of t.work){const m=h(P&&P.hours);m!=null&&(E+=m,b=!0)}return b?E:null}return null}function n(t){return t==null||t===""?null:x(t)}const f=Object.freeze(["id","name","start","end","duration","milestone","percentComplete","parent","baselineStart","baselineEnd","constraint","constraintDate","deadline"]);function y(t){const l=t&&typeof t=="object"?t:{},E={};for(const b of f){const P=l[b];if(typeof P=="function")E[b]=P;else if(typeof P=="string"&&P!==""){const m=P;E[b]=k=>k[m]}else E[b]=m=>m[b]}return E}function z(t){return y(t).id}function D(t){const l=t&&typeof t=="object"?t:{},E={};for(const b of f){const P=l[b];typeof P=="string"&&P!==""?E[b]=P:typeof P=="function"?E[b]=null:E[b]=b}return E}function T(t,l){const E=l.constraint(t);let b=E??(t&&t.constraintType),P=null;if(b&&typeof b=="object"&&!Array.isArray(b)&&!(b instanceof Date)&&(P=b.date??b.at??b.constraintDate??null,b=b.type??b.constraint??b.code??null),b==null||b==="")return null;const m=oe(b);if(!m)return null;const k=n(P??l.constraintDate(t)??t.constraintAt??t.at);return{type:m,at:k}}function F(t,l){if(!t)return!1;if(t.locked===!0||typeof t.constraintMode=="string"&&t.constraintMode.toLowerCase()==="hard")return!0;if(typeof l=="function")try{return!!l(t)}catch{return!1}return!1}function J(t,l,E){const b=new Map,P=[],m=y(l);if(!Array.isArray(t))return{ok:!1,error:{code:M.BAD_DURATION,message:"tasks must be an array"},order:P,byId:b};for(const k of t){const Y=k?m.id(k):null,g=Y!=null?String(Y):null;if(g==null)return{ok:!1,error:{code:M.UNKNOWN_TASK,message:"every task needs an id"},order:P,byId:b};if(b.has(g))return{ok:!1,error:{code:M.DUPLICATE_ID,message:`duplicate task id "${g}"`,id:g},order:P,byId:b};const X=n(m.start(k)),me=n(m.end(k)),je=m.milestone(k)===!0;let pe=je?0:h(m.duration(k));if(pe==null&&X!=null&&me!=null&&(pe=me-X),pe!=null&&pe<0)return{ok:!1,error:{code:M.BAD_DURATION,message:`task "${g}" has negative duration ${pe}`,id:g},order:P,byId:b};const De=m.name(k),Ce=m.parent(k),Ie=k.colour??k.color;b.set(g,{id:g,name:De!=null?String(De):g,colour:typeof Ie=="string"&&Ie.trim()!==""?Ie.trim():null,duration:pe,milestoneFlag:je,earliestStart:X,placedStart:X,placedEnd:me,percentComplete:h(m.percentComplete(k)),parent:Ce!=null?String(Ce):null,constraint:T(k,m),locked:F(k,E),inactive:k.inactive===!0,baselineStart:n(m.baselineStart(k)??(k.baseline&&k.baseline.start)),baselineEnd:n(m.baselineEnd(k)??(k.baseline&&k.baseline.end)),deadline:n(m.deadline(k)),schedulingMode:he(k.schedulingMode??k.taskType),effortDriven:k.effortDriven==null?null:!!k.effortDriven,statedEffort:B(k),assignments:H(k)}),P.push(g)}return{ok:!0,order:P,byId:b}}function c(t,l){const E=new Map(t.map(Y=>[Y,[]]));for(const Y of t){const g=l.get(Y).parent;if(g!=null){if(!l.has(g))return{ok:!1,error:{code:M.UNKNOWN_PARENT,message:`task "${Y}" names unknown parent "${g}"`,id:Y}};E.get(g).push(Y)}}for(const Y of t){const g=new Set;let X=l.get(Y).parent;for(;X!=null;){if(X===Y||g.has(X))return{ok:!1,error:{code:M.PARENT_CYCLE,message:`parent cycle at "${Y}"`,id:Y}};g.add(X),X=l.get(X)?.parent??null}}const b=Y=>E.get(Y).length>0,P=new Map,m=Y=>{if(P.has(Y))return P.get(Y);const g=E.get(Y),X=g.length===0?[Y]:g.flatMap(me=>m(me));return P.set(Y,X),X};return{ok:!0,children:E,isSummary:b,descendantLeaves:m,ancestors:Y=>{const g=new Set;let X=l.get(Y).parent;for(;X!=null;)g.add(X),X=l.get(X).parent;return g}}}const R=/^\s*(FS|SS|FF|SF)\s*(?:([+-])\s*(\d+(?:\.\d+)?))?\s*$/i;function s(t){const l={...t||null};if(typeof l.type!="string")return l;const E=R.exec(l.type);if(!E||!E[2])return l;const b=(E[2]==="-"?-1:1)*Number(E[3]);l.type=E[1].toUpperCase();const P=h(t.lag);return P!=null&&P!==b?(ie(`gantt-link-shorthand-${String(t.type)}-${P}`,`[lattice] gantt: dependency type ${JSON.stringify(t.type)} carries a lag of ${b} but lag: ${P} was also given; the explicit lag wins. Give one or the other.`),l):(l.lag=b,l)}function S(t,l,E={}){const b=[];if(t==null)return{ok:!0,edges:b};if(!Array.isArray(t))return{ok:!1,error:{code:M.UNKNOWN_TASK,message:"dependencies must be an array"},edges:b};const P=typeof E.ancestors=="function"?E.ancestors:null;for(const m of t){const k=s(m),Y=k&&k.from!=null?String(k.from):null,g=k&&k.to!=null?String(k.to):null,X=k&&k.type!=null?String(k.type).toUpperCase():"FS",me=h(k.lag)??0;if(Y==null||g==null)return{ok:!1,error:{code:M.UNKNOWN_TASK,message:"a dependency needs both `from` and `to`"},edges:b};if(!l.has(Y))return{ok:!1,error:{code:M.UNKNOWN_TASK,message:`dependency references unknown task "${Y}"`,id:Y},edges:b};if(!l.has(g))return{ok:!1,error:{code:M.UNKNOWN_TASK,message:`dependency references unknown task "${g}"`,id:g},edges:b};if(Y===g)return{ok:!1,error:{code:M.SELF_DEPENDENCY,message:`task "${Y}" depends on itself`,id:Y},edges:b};if(!te.includes(X))return{ok:!1,error:{code:M.BAD_LINK_TYPE,message:`unknown link type "${X}" (expected one of ${te.join("/")})`},edges:b};if(P&&(P(Y).has(g)||P(g).has(Y)))return{ok:!1,error:{code:M.DEP_ACROSS_HIERARCHY,message:`dependency between "${Y}" and "${g}" crosses their own parent/child hierarchy`,from:Y,to:g},edges:b};b.push({from:Y,to:g,type:X,lag:me})}return{ok:!0,edges:b}}function j(t,l){const E=new Set,b=[];for(const P of t){(l.isSummary(P.from)||l.isSummary(P.to))&&P.type!=="FS"&&ie(`gantt-summary-link-${P.type}-${P.from}-${P.to}`,`[lattice] gantt: ${P.type} link with a summary endpoint (${P.from} -> ${P.to}) is expanded to descendant leaves — a conservative v1 reading; only FS is exact for summary endpoints.`);for(const k of l.descendantLeaves(P.from))for(const Y of l.descendantLeaves(P.to)){if(k===Y)continue;const g=[k,Y,P.type,P.lag].join("");E.has(g)||(E.add(g),b.push({from:k,to:Y,type:P.type,lag:P.lag}))}}return b}function _(t,l,E,b=A){return t.map(P=>{const m=l.get(P.from),k=l.get(P.to);if(!m||!k||m.earliestStart==null||m.duration==null||k.earliestStart==null||k.duration==null)return P;if(b.custom){const pe=b.norm(P.from,m.earliestStart),De=b.fin(P.from,pe,m.duration),Ce=b.norm(P.to,k.earliestStart),Ie=b.fin(P.to,Ce,k.duration);switch(P.type){case"FS":return{...P,lag:b.between(P.to,Ce,De)};case"SS":return{...P,lag:b.between(P.to,Ce,pe)};case"FF":return{...P,lag:b.between(P.to,Ie,De)};case"SF":return{...P,lag:b.between(P.to,Ie,pe)};default:return P}}const Y=E(m.earliestStart),g=Y+m.duration,X=E(k.earliestStart),me=X+k.duration;let je;switch(P.type){case"FS":je=X-g;break;case"SS":je=X-Y;break;case"FF":je=me-g;break;case"SF":je=me-Y;break;default:return P}return{...P,lag:je}})}function ge(t,l){const E=new Map(t.map(k=>[k,0])),b=new Map(t.map(k=>[k,[]]));for(const k of l)ae(E,k.to),b.get(k.from).push(k.to);const P=t.filter(k=>E.get(k)===0),m=[];for(;P.length;){const k=P.shift();m.push(k);for(const Y of b.get(k)){const g=E.get(Y)-1;E.set(Y,g),g===0&&P.push(Y)}}return m.length===t.length?{ok:!0,sorted:m}:{ok:!1,cycle:Z(t,b,new Set(m))}}function ae(t,l){t.set(l,t.get(l)+1)}function Z(t,l,E){const b=t.find(Y=>!E.has(Y)),P=[],m=new Map;let k=b;for(;k!=null&&!m.has(k);)m.set(k,P.length),P.push(k),k=l.get(k).find(Y=>!E.has(Y));return k==null?P:P.slice(m.get(k)).concat(k)}function Oe(t,l,E){const b=String(l),P=String(E);if(b===P)return!0;const m=new Map;for(const g of t){const X=String(g.from);m.has(X)||m.set(X,[]),m.get(X).push(String(g.to))}const k=new Set,Y=[P];for(;Y.length;){const g=Y.pop();if(g===b)return!0;if(!k.has(g)){k.add(g);for(const X of m.get(g)||[])Y.push(X)}}return!1}function Pe(t,l,E,b){switch(l.type){case"FS":return t.shift(b.id,E.ef,l.lag);case"SS":return t.shift(b.id,E.es,l.lag);case"FF":return t.back(b.id,t.shift(b.id,E.ef,l.lag),b.duration);case"SF":return t.back(b.id,t.shift(b.id,E.es,l.lag),b.duration);default:return-1/0}}function Me(t,l,E,b,P,m=new Map,k=new Map,Y=!1,g=A){const X=ge(t,E);if(!X.ok)return ie(`gantt-cycle-${X.cycle.join(">")}`,`[lattice] gantt: dependency cycle detected (${X.cycle.join(" -> ")}); schedule refused.`),{ok:!1,error:{code:M.CYCLE,message:`dependency cycle: ${X.cycle.join(" -> ")}`,cycle:X.cycle}};const me=X.sorted,je=new Map(t.map(a=>[a,[]])),pe=new Map(t.map(a=>[a,[]]));for(const a of E)je.get(a.to).push(a),pe.get(a.from).push(a);const De=new Map;for(const a of t){const ee=l.get(a);De.set(a,{id:a,name:ee.name,duration:ee.duration,es:0,ef:0,ls:0,lf:0,totalFloat:0,critical:!1,percentComplete:ee.percentComplete,parent:ee.parent,isSummary:!1,isMilestone:ee.duration===0,children:[],colour:ee.colour??null,locked:!!ee.locked})}const Ce=[];for(const a of me){const ee=l.get(a),q=De.get(a);let L=Math.max(b,ee.earliestStart??b);for(const Se of je.get(a)){const Ae=De.get(Se.from),Te=Pe(g,Se,Ae,q);Te>L&&(L=Te)}const le=m.get(a);if(le&&le.at!=null)switch(le.type){case"MSO":le.at<L-U?Ce.push({id:a,type:le.type,date:le.at,scheduled:L,at:le.at,earliestFeasible:L}):L=le.at,q.pinned=!0;break;case"MFO":{const Se=g.back(a,le.at,q.duration);Se<L-U?Ce.push({id:a,type:le.type,date:le.at,scheduled:g.fin(a,L,q.duration),at:le.at,earliestFeasible:L}):L=Se,q.pinned=!0;break}case"SNET":le.at>L+U&&(L=le.at);break;case"SNLT":L>le.at+U&&Ce.push({id:a,type:le.type,date:le.at,scheduled:L,at:le.at,earliestFeasible:L});break;case"FNET":{const Se=g.back(a,le.at,q.duration);Se>L+U&&(L=Se);break}case"FNLT":{const Se=g.fin(a,L,q.duration);Se>le.at+U&&Ce.push({id:a,type:le.type,date:le.at,scheduled:Se,at:le.at,earliestFeasible:L});break}default:break}if(ee.locked){const Se=le&&le.at!=null?le.type==="MFO"?g.back(a,le.at,q.duration):le.type==="MSO"?le.at:null:null,Ae=ee.earliestStart!=null?ee.earliestStart:Se??L;if(L-U>Ae)for(const Te of je.get(a)){const Re=De.get(Te.from),_e=Pe(g,Te,Re,q);_e>Ae+U&&Ce.push({id:a,from:Te.from,to:a,type:"LOCKED",date:Ae,scheduled:_e,at:Ae,earliestFeasible:Ae})}L=Ae,q.pinned=!0}L=g.norm(a,L),q.es=L,q.ef=g.fin(a,L,q.duration)}const Ie=t.length?Math.max(...t.map(a=>De.get(a).ef)):b,Ue=Number.isFinite(P)?P:Ie;for(let a=me.length-1;a>=0;a-=1){const ee=me[a],q=De.get(ee);let L=Ue;const le=k.get(ee);le!=null&&le<L&&(L=le);for(const Se of pe.get(ee)){const Ae=De.get(Se.to);let Te;switch(Se.type){case"FS":Te=g.unshift(Se.to,Ae.ls,Se.lag);break;case"SS":Te=g.fin(ee,g.unshift(Se.to,Ae.ls,Se.lag),q.duration);break;case"FF":Te=g.unshift(Se.to,Ae.lf,Se.lag);break;case"SF":Te=g.fin(ee,g.unshift(Se.to,Ae.lf,Se.lag),q.duration);break;default:Te=1/0}Te<L&&(L=Te)}q.pinned&&(L=q.ef),q.lf=L,q.ls=g.back(ee,L,q.duration),q.totalFloat=g.between(ee,q.ls,q.es),q.critical=q.totalFloat<=U,le!=null&&(q.deadline=le,q.late=q.ef>le+U)}for(const a of t){const ee=m.get(a);if(!ee||ee.type!=="ALAP")continue;const q=De.get(a);q.es=q.ls,q.ef=q.lf,q.totalFloat=0,q.critical=!0}const Ne=t.filter(a=>De.get(a).critical),e=Y?[]:i(t,E,De,g);return{ok:!0,tasks:De,critical:Ne,criticalPaths:e,projectFinish:Ie,conflicts:Ce}}function $e(t,l){let E=null;if(Array.isArray(t))for(const b of t){const P=n(b?l(b):null);P!=null&&(E==null||P<E)&&(E=P)}return E}function Ee(t,l=[],E={}){const b=y(E.fields),P=n(E.projectStart),m=P??0,k=P??$e(t,b.start)??0,Y=n(E.deadline),g=ue(E.calendar,m),X=[];for(const be of Array.isArray(t)?t:[]){const xe=be?b.id(be):null;xe!=null&&be.calendar!=null&&X.push({id:String(xe),calendar:be.calendar})}const me=[];for(const be of Array.isArray(E.resources)?E.resources:[]){const xe=be&&(be.id??be.name??be.resource);xe!=null&&be.calendar!=null&&me.push({id:String(xe),calendar:be.calendar})}const je=E.calendars&&typeof E.calendars=="object"&&Object.keys(E.calendars).length>0,pe=X.length||me.length||je?p({calendar:E.calendar,calendars:E.calendars,projectStart:m,tasks:X,resources:me}):null;if(pe&&pe.errors.length){const be=pe.errors.map(xe=>({...xe,code:M.UNKNOWN_CALENDAR}));return{ok:!1,error:be[0],errors:be}}const De=!!(pe&&pe.customised),Ce=De?null:g,Ie=De?Q(be=>pe.models.get(pe.ofTask.get(be)??"plan").calendar):A,Ue=be=>be==null?null:Ce?Ce.indexOf(be):be,Ne=be=>Ce?Ce.dayOf(be):be,e=J(t,E.fields,E.lockWhen);if(!e.ok)return{ok:!1,error:e.error,errors:[e.error]};const{order:a,byId:ee}=e,q=c(a,ee);if(!q.ok)return{ok:!1,error:q.error,errors:[q.error]};const L=S(l,ee,q);if(!L.ok)return{ok:!1,error:L.error,errors:[L.error]};const le=E.honourDates?_(L.edges,ee,Ue,Ie):L.edges,Se={defaultMode:he(E.schedulingMode)||"fixedDuration",defaultEffortDriven:!!E.effortDriven,hoursPerDay:h(E.hoursPerDay)??fe,resourceHours:E.resourceHours instanceof Map?E.resourceHours:new Map},Ae=new Map;for(const be of a){if(q.isSummary(be))continue;const xe=ee.get(be);if(!(xe.schedulingMode!=null||xe.effortDriven!=null||xe.statedEffort!=null||E.schedulingMode!=null||E.effortDriven!=null))continue;const Ge=ve(xe,Se);Ge.duration!=null&&(xe.duration=Ge.duration),Ae.set(be,{schedulingMode:Ge.schedulingMode,effortDriven:Ge.effortDriven,effort:Ge.effort,units:Ge.units})}const Te=v(a,ee,q),Re=new Set(a.filter(be=>!q.isSummary(be)&&ee.get(be).inactive===!0)),_e=new Set([...Te].filter(be=>!Re.has(be))),We=a.filter(be=>!q.isSummary(be)&&!_e.has(be)&&!Re.has(be)),Ve=new Map(We.map(be=>{const xe=ee.get(be);return[be,{...xe,earliestStart:Ue(xe.earliestStart)}]})),Ye=new Map;for(const be of We){const xe=ee.get(be).constraint;xe&&Ye.set(be,{type:xe.type,at:Ue(xe.at)})}const Be=Ce?Ce.indexOf(m):m,rt=Y==null?void 0:Ue(Y),tt=new Map;for(const be of We){const xe=Ve.get(be).deadline;if(xe==null)continue;const Xe=Ce?Ce.indexOf(xe):xe;Number.isFinite(Xe)&&tt.set(be,Xe)}const Qe=u(V(j(le,q),_e),Re),He=Me(We,Ve,Qe,Be,rt,Ye,tt,!!E.skipCriticalPaths,Ie);if(!He.ok)return{ok:!1,error:He.error,errors:[He.error]};const Ze=He.tasks;for(const be of We){const xe=Ze.get(be);xe.es=Ne(xe.es),xe.ef=Ne(xe.ef),xe.ls=Ne(xe.ls),xe.lf=Ne(xe.lf),xe.deadline!=null&&(xe.deadline=Ne(xe.deadline)),C(xe,ee.get(be).baselineStart,ee.get(be).baselineEnd);const Xe=Ae.get(be);Xe&&(xe.schedulingMode=Xe.schedulingMode,xe.effortDriven=Xe.effortDriven,xe.effort=Xe.effort,xe.units=Xe.units)}for(const be of a)_e.has(be)?Ze.set(be,o(ee.get(be),q.isSummary(be))):Re.has(be)&&Ze.set(be,O(ee.get(be)));if(pe)for(const be of a)Ze.get(be).calendar=pe.ofTask.get(be)??"plan";for(let be=a.length-1;be>=0;be-=1){const xe=a[be];!q.isSummary(xe)||_e.has(xe)||Ze.set(xe,w(xe,ee.get(xe),q,Ze))}for(const be of a)q.isSummary(be)&&(Ze.get(be).children=q.children.get(be).slice());const qe=g?g.nextWorking(k):k,et=Ne(He.projectFinish);return{ok:!0,tasks:Ze,order:a,critical:He.critical,criticalPaths:He.criticalPaths,projectStart:qe,projectFinish:et,projectDuration:et-qe,conflicts:(He.conflicts||[]).map(be=>({id:be.id,type:be.type,date:Ne(be.date),scheduled:Ne(be.scheduled),at:Ne(be.at),earliestFeasible:Ne(be.earliestFeasible),...be.from!==void 0?{from:be.from,to:be.to}:null})),calendar:!!g,...De?{calendars:pe.models}:null,unscheduled:a.filter(be=>_e.has(be)),...E.honourDates?{dependencies:le}:{}}}function C(t,l,E){l==null&&E==null||(t.baselineStart=l??null,t.baselineEnd=E??null,t.startVariance=l==null?null:t.es-l,t.finishVariance=E==null?null:t.ef-E,t.durationVariance=l==null||E==null?null:t.ef-t.es-(E-l))}function w(t,l,E,b){const P=E.children.get(t).map(a=>b.get(a)),m=P.filter(a=>!a.unscheduled&&!a.inactive),k=m.length?m:P,Y=Math.min(...k.map(a=>a.es)),g=Math.max(...k.map(a=>a.ef)),X=Math.min(...k.map(a=>a.ls)),me=Math.max(...k.map(a=>a.lf)),je=E.descendantLeaves(t).map(a=>b.get(a)),pe=je.filter(a=>!a.unscheduled&&!a.inactive),De=pe.length?pe:je,Ce=De.reduce((a,ee)=>a+ee.duration,0),Ie=Ce>U?De.reduce((a,ee)=>a+ee.duration*(ee.percentComplete??0),0)/Ce:null,Ue={id:t,name:l.name,duration:g-Y,es:Y,ef:g,ls:X,lf:me,totalFloat:X-Y,critical:k.some(a=>a.critical),percentComplete:Ie,parent:l.parent,isSummary:!0,isMilestone:!1,locked:!1,...l.inactive===!0?{inactive:!0}:null,children:[],colour:l.colour??null},Ne=De.map(a=>a.baselineStart).filter(a=>a!=null),e=De.map(a=>a.baselineEnd).filter(a=>a!=null);return(Ne.length||e.length)&&C(Ue,Ne.length?Math.min(...Ne):null,e.length?Math.max(...e):null),Ue}function i(t,l,E,b=A){const P=new Map(t.map(X=>[X,[]])),m=new Set;for(const X of l){const me=E.get(X.from),je=E.get(X.to);if(!me.critical||!je.critical)continue;const pe=Pe(b,X,me,je);Math.abs(pe-je.es)<=U&&(P.get(X.from).push(X.to),m.add(X.to))}const k=t.filter(X=>E.get(X).critical&&!m.has(X)),Y=[],g=(X,me)=>{const je=P.get(X);if(!je.length){Y.push(me);return}for(const pe of je)g(pe,me.concat(pe))};for(const X of k)g(X,[X]);return Y}function de(t,l,E){if(!l||!l.ok)return[];const b=[],P=y(E);for(const m of t){const k=m?P.id(m):null,Y=k!=null?String(k):null;if(Y==null||!l.tasks.has(Y))continue;const g=l.tasks.get(Y);if(g.isSummary)continue;const X=h(P.start(m));X==null||g.unscheduled||X<g.es-U&&b.push({id:Y,placedStart:X,earliestStart:g.es,by:g.es-X})}return b}}),Fe("packages/modules/gantt/resources.js",function(r,se){"use strict";Object.defineProperty(r,"normalizeCapacities",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"resourceDisplayNames",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"resourceSpecsByKey",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"resourceAvatars",{enumerable:!0,get:function(){return he}}),Object.defineProperty(r,"normalizeResources",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"resourceDailyHours",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"sweepLoad",{enumerable:!0,get:function(){return h}}),Object.defineProperty(r,"computeResourceLoad",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"normalizeResourceRates",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"rateOn",{enumerable:!0,get:function(){return y}}),Object.defineProperty(r,"levelResources",{enumerable:!0,get:function(){return F}});const ie=se("packages/core/src/internal/warn.js").warnOnce,K=se("packages/modules/gantt/schedule.js"),ue=K.computeSchedule,re=K.EPS,A=K.taskIdReader,Q=K.resolveConstraintCode,p=se("packages/modules/gantt/assignments.js"),$=p.parseAssignments,I=se("packages/modules/gantt/calendar.js").createCalendar,x=se("packages/modules/gantt/task-calendars.js"),N=x.parseHolidayDays,V=x.normalizeCalendarSpec,v=x.planWorkingTime,o=x.workingRuns,d=se("packages/modules/gantt/time.js"),u=d.fromDayNumber,O=d.toDayNumber;Object.defineProperty(r,"parseAssignments",{enumerable:!0,get:function(){return p.parseAssignments}});const te=Object.freeze([1,2,3,4,5]),ne=8;function W(c){if(c==null||c==="")return null;const R=typeof c=="number"?c:Number(c);return Number.isFinite(R)?R:null}function oe(c,R){const s=new Map;if(Array.isArray(c))for(const S of c){const j=S&&(S.id??S.name??S.resource);if(j==null||j==="")continue;const _=W(S.capacity??S.maxUnits??S.max??S.units);s.set(String(j),_??R)}else if(c&&typeof c=="object")for(const[S,j]of Object.entries(c)){const _=W(j);s.set(String(S),_??R)}return s}function ce(c){const R=new Map;if(Array.isArray(c))for(const s of c){if(!s)continue;const S=s.id??s.name??s.resource;if(S==null||S==="")continue;const j=s.name??s.id??s.resource;R.set(String(S),String(j))}else if(c&&typeof c=="object")for(const[s,S]of Object.entries(c))R.set(s,S&&typeof S=="object"&&S.name!=null?String(S.name):s);return R}function ye(c){const R=new Map;if(Array.isArray(c))for(const s of c){if(!s||typeof s!="object")continue;const S=s.id??s.name??s.resource;S!=null&&S!==""&&R.set(String(S),{...s})}else if(c&&typeof c=="object")for(const[s,S]of Object.entries(c))R.set(s,S&&typeof S=="object"?{...S}:{capacity:S});return R}function he(c){const R=new Map,s=S=>typeof S=="string"?S.trim():"";if(Array.isArray(c))for(const S of c){if(!S)continue;const j=S.id??S.name??S.resource;if(j==null||j==="")continue;const _=s(S.avatar);_&&R.set(String(j),_)}else if(c&&typeof c=="object")for(const[S,j]of Object.entries(c)){const _=j&&typeof j=="object"?s(j.avatar):"";_&&R.set(S,_)}return R}function fe(c){return new Set(N(c))}function ke(c){return c==null?{workdays:[0,1,2,3,4,5,6],holidays:new Set}:c==="weekends"?{workdays:[...te],holidays:new Set}:{workdays:Array.isArray(c.workdays)&&c.workdays.length?c.workdays.map(Number).filter(s=>s>=0&&s<=6):[...te],holidays:fe(c.holidays)}}function ve(c,R,s){let S=c;if(typeof c=="string"&&(S=R&&Object.prototype.hasOwnProperty.call(R,c)?R[c]:c==="weekends"?c:null),S==null||typeof S=="string"&&S!=="weekends")return null;const j=V(S,s);if(!j)return null;const _=S;return{..._==="weekends"||_.workdays||_.workingDays?{workingDays:j.workdays}:null,..._!=="weekends"&&(_.holidays||_.exceptions)?{holidays:j.holidays}:null,...j.hoursPerDay!=null?{hoursPerDay:j.hoursPerDay}:null}}function G(c,R,s,S){const j=new Set(Array.isArray(c.workingDays)&&c.workingDays.length?c.workingDays.map(Number).filter(w=>w>=0&&w<=6):S.workdays),_=fe(c.holidays);for(const w of S.holidays)_.add(w);const ge=c.hoursPerDay,ae=w=>{if(ge!=null&&typeof ge=="object"){const de=W(ge[w]);return de??s}const i=W(ge);return i??s},Z=w=>{const i=u(w);return i?j.has(i.getUTCDay())&&!_.has(w):!1},Oe=w=>Z(w)?R??ae(u(w).getUTCDay()):0,Pe=w=>s>0?Oe(w)/s:0;let Me=0;for(const w of j){const i=R??ae(w);i>Me&&(Me=i)}const $e=s>0?Me/s:0;let Ee=0;for(const w of S.workdays)j.has(w)&&(Ee+=R??ae(w));const C=S.workdays.length?Ee/S.workdays.length:s;return{hasCalendar:!0,capacityUnits:$e,hoursPerWorkingDay:C,worksOn:Z,capacityHoursOn:Oe,capacityUnitsOn:Pe}}function U(c,R,s={}){const S=W(s.hoursPerDay)??ne,j=ke(s.calendar),_=new Map,ge=(ae,Z)=>{const Oe=W(Z.capacity??Z.maxUnits??Z.max??Z.units),Pe=ve(Z.calendar,s.calendars,v(s.calendar));Pe?_.set(ae,G(Pe,Oe,S,j)):_.set(ae,{hasCalendar:!1,capacityUnits:Oe??R,hoursPerWorkingDay:S})};if(Array.isArray(c))for(const ae of c){const Z=ae&&(ae.id??ae.name??ae.resource);Z==null||Z===""||ge(String(Z),ae)}else if(c&&typeof c=="object")for(const[ae,Z]of Object.entries(c))ge(String(ae),typeof Z=="object"&&Z?Z:{capacity:Z});return _}function M(c,R,s={}){const S=W(s.hoursPerDay)??ne,j=U(c,R,s),_=new Map;for(const[ge,ae]of j)_.set(ge,ae.hoursPerWorkingDay!=null?ae.hoursPerWorkingDay:S);return _}function h(c){if(!c.length)return[];const R=new Set;for(const j of c)R.add(j.s),R.add(j.e);const s=[...R].sort((j,_)=>j-_),S=[];for(let j=0;j<s.length-1;j+=1){const _=s[j],ge=s[j+1];if(ge<=_)continue;let ae=0;const Z=[];for(const Oe of c)Oe.s<=_&&Oe.e>=ge&&(ae+=Oe.units,Z.push(Oe.taskId));Z.length&&S.push({s:_,e:ge,load:ae,taskIds:Z})}return S}function B(c,R,s={}){const S={ok:!1,resources:[],overAllocations:[],byResource:new Map};if(!R||!R.ok)return S;const j=W(s.defaultCapacity)??1,_=oe(s.resources,j),ge=U(s.resources,j,{calendar:s.calendar,calendars:s.calendars,hoursPerDay:s.hoursPerDay}),ae=R.calendars instanceof Map?R.calendars:null,Z=s.calendar!=null&&!ae?I(s.calendar,R.projectStart):null,Oe=t=>_.has(t)?_.get(t):j,Pe=t=>Z?Z.indexOf(t):t,Me=t=>Z?Z.dayOf(t):t,$e=A(s.fields),Ee=new Map;for(const t of c){if(!t)continue;const l=$e(t);if(l==null)continue;const E=String(l);Ee.has(E)||Ee.set(E,t)}const C=new Map;for(const t of R.order){const l=R.tasks.get(t);if(!l||l.isSummary||l.unscheduled)continue;const E=Ee.get(t);if(!E)continue;const b=$(E);if(!b.length)continue;const P=Pe(l.es),m=Pe(l.ef);if(m<=P)continue;const k=ae&&ae.get(l.calendar),Y=k?o(P,m,k.isWorking):[[P,m]];for(const g of b){C.has(g.resource)||C.set(g.resource,[]);for(const[X,me]of Y)C.get(g.resource).push({s:X,e:me,units:g.units,taskId:t})}}const w=new Map,i=[],de=[];for(const[t,l]of C){const E=ge.get(t),b=h(l);let P=0,m,k;if(E&&E.hasCalendar){k=E.capacityUnits,m=[];for(const g of b){g.load>P&&(P=g.load);let X=g.s,me=E.capacityUnitsOn(Me(g.s));const je=pe=>{const De={start:Me(X),end:Me(pe),load:g.load,taskIds:g.taskIds};m.push(De),g.load>me+re&&de.push({resource:t,capacity:me,start:De.start,end:De.end,load:g.load,taskIds:g.taskIds.slice()})};for(let pe=g.s+1;pe<g.e;pe+=1){const De=E.capacityUnitsOn(Me(pe));De!==me&&(je(pe),X=pe,me=De)}je(g.e)}}else k=Oe(t),m=b.map(g=>{g.load>P&&(P=g.load);const X={start:Me(g.s),end:Me(g.e),load:g.load,taskIds:g.taskIds};return g.load>k+re&&de.push({resource:t,capacity:k,start:X.start,end:X.end,load:g.load,taskIds:g.taskIds.slice()}),X});const Y={resource:t,capacity:k,peak:P,segments:m};w.set(t,Y),i.push(Y)}return i.sort((t,l)=>t.resource<l.resource?-1:t.resource>l.resource?1:0),de.sort((t,l)=>t.start-l.start||(t.resource<l.resource?-1:1)),{ok:!0,resources:i,overAllocations:de,byResource:w}}function n(c){const R=[];for(const s of Array.isArray(c)?c:[]){const S=O(s&&s.from),j=W(s&&s.rate);S==null||j==null||R.push({from:Math.round(S),rate:j})}return R.sort((s,S)=>s.from-S.from),R}function f(c){const R=new Map,s=(S,j)=>{if(!j||typeof j!="object")return;const _=j.type==="material"||j.type==="cost"?j.type:"work",ge=W(j.rate),ae=n(j.rates),Z=W(j.cost);ge==null&&!ae.length&&Z==null||R.set(S,{type:_,rate:ge,rates:ae,cost:Z})};if(Array.isArray(c))for(const S of c){const j=S&&(S.id??S.name??S.resource);j==null||j===""||s(String(j),S)}else if(c&&typeof c=="object")for(const[S,j]of Object.entries(c))j&&typeof j=="object"&&s(S,j);return R}function y(c,R){if(!c)return null;let s=c.rate;for(const S of c.rates)if(S.from<=R)s=S.rate;else break;return s??null}function z(c){if(!c)return!1;const R=c.constraint??c.constraintType;if(R==null||R==="")return!1;const s=String(R).toLowerCase().replace(/\s+/g,"-");return s==="mso"||s==="must-start-on"||s==="muststarton"||s==="start-on"||s==="mfo"||s==="must-finish-on"||s==="mustfinishon"||s==="finish-on"}function D(c){if(!c)return null;const R=c.constraint??c.constraintType,s=Q(R);if(s!=="SNLT"&&s!=="FNLT")return null;let S=c.constraintDate??c.constraintAt??c.at;if(R&&typeof R=="object"&&S==null&&(S=R.date),S==null||S==="")return null;const j=O(S);return Number.isFinite(j)?{type:s,date:j}:null}function T(c,R){return c?W(c[R])??0:0}function F(c,R,s={}){const S={projectStart:s.projectStart,deadline:s.deadline,calendar:s.calendar,fields:s.fields,calendars:s.calendars,resources:Array.isArray(s.resources)?s.resources:void 0,skipCriticalPaths:!0},j=s.priorityField||"priority",_=s.maxIterations!=null?s.maxIterations:Math.max(100,c.length*c.length*2),ge=A(s.fields),ae=c.map(m=>({...m})),Z=ae.map(m=>String(ge(m))),Oe=new Map(ae.map(m=>[String(ge(m)),m])),Pe=new Map(Z.map((m,k)=>[m,k])),Me=m=>Pe.has(m)?Pe.get(m):-1;let $e=ue(ae,R,S);if(!$e.ok)return{ok:!1,error:$e.error};const Ee=new Map;for(const m of $e.order){const k=$e.tasks.get(m);k&&!k.isSummary&&!k.unscheduled&&Ee.set(m,k.es)}const C=W(s.defaultCapacity)??1,w=U(s.resources,C,{calendar:s.calendar,calendars:s.calendars,hoursPerDay:s.hoursPerDay}),i=s.calendar!=null?I(s.calendar,$e.projectStart):null,de=(m,k,Y)=>{const g=$(k).map(me=>w.get(me.resource)).filter(me=>me&&me.hasCalendar);let X=Math.round(m);for(let me=0;me<3660;me+=1){if((Y?Y(X):!i||i.isWorking(X))&&g.every(je=>je.worksOn(X)))return X;X+=1}return Math.round(m)};let t=0;const l=Math.max(32,c.length*2);let E=1/0,b=0;for(;t<_;t+=1){const m=B(ae,$e,s);m.overAllocations.length<E?(E=m.overAllocations.length,b=0):b+=1;const k=m.overAllocations.filter(pe=>new Set(pe.taskIds).size>=2);if(!k.length)return{ok:!0,resolved:m.overAllocations.length===0,tasks:ae,schedule:$e,moves:J(Ee,$e),remaining:m.overAllocations,iterations:t};if(b>=l)return ie("gantt-level-unresolved",`[lattice] gantt: resource leveling could not clear ${m.overAllocations.length} over-allocation(s) after ${t} iterations; the plan cannot be fully levelled, returning the partial result.`),{ok:!0,resolved:!1,tasks:ae,schedule:$e,moves:J(Ee,$e),remaining:m.overAllocations,iterations:t};const g=k.slice().sort((pe,De)=>pe.start-De.start||De.load-pe.load)[0].taskIds.map(pe=>$e.tasks.get(pe)).filter(Boolean),X=g.filter(pe=>!z(Oe.get(pe.id)));if(!X.length)return{ok:!0,resolved:!1,tasks:ae,schedule:$e,moves:J(Ee,$e),remaining:m.overAllocations,iterations:t};X.sort((pe,De)=>{if(De.totalFloat!==pe.totalFloat)return De.totalFloat-pe.totalFloat;const Ce=T(Oe.get(pe.id),j),Ie=T(Oe.get(De.id),j);return Ce!==Ie?Ce-Ie:De.es!==pe.es?De.es-pe.es:Me(De.id)-Me(pe.id)});let me=null,je=null;for(const pe of X){const De=g.filter(Ne=>Ne.id!==pe.id).map(Ne=>Ne.ef).filter(Ne=>Ne>pe.es+re),Ce=De.length?Math.min(...De):pe.es+1,Ie=de(Ce,Oe.get(pe.id),$e.calendars instanceof Map?$e.calendars.get(pe.calendar).isWorking:void 0),Ue=D(Oe.get(pe.id));if(!(Ue&&(Ue.type==="SNLT"?Ie:Ie+(pe.ef-pe.es))>Ue.date+re)){me=pe,je=Ie;break}}if(!me)return{ok:!0,resolved:!1,tasks:ae,schedule:$e,moves:J(Ee,$e),remaining:m.overAllocations,iterations:t};if(Oe.get(me.id).start=je,$e=ue(ae,R,S),!$e.ok)return{ok:!1,error:$e.error}}const P=B(ae,$e,s);return P.overAllocations.length&&ie("gantt-level-unresolved",`[lattice] gantt: resource leveling hit its ${_}-iteration cap with ${P.overAllocations.length} over-allocation(s) unresolved; returning the partial result.`),{ok:!0,resolved:P.overAllocations.length===0,tasks:ae,schedule:$e,moves:J(Ee,$e),remaining:P.overAllocations,iterations:t}}function J(c,R){const s=[];for(const S of R.order){const j=R.tasks.get(S);if(!j||j.isSummary||j.unscheduled)continue;const _=c.get(S);_!=null&&j.es>_+re&&s.push({id:S,from:_,to:j.es,delay:j.es-_})}return s}}),Fe("packages/modules/gantt/workload.js",function(r,se){"use strict";Object.defineProperty(r,"WORKLOAD_DEFAULTS",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"HISTOGRAM_DEFAULTS",{enumerable:!0,get:function(){return o}}),Object.defineProperty(r,"normalizeThresholds",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"thresholdFor",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"normalizeExternalLoad",{enumerable:!0,get:function(){return ne}}),Object.defineProperty(r,"statedHours",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"taskContour",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"contourTotal",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"serializeContour",{enumerable:!0,get:function(){return he}}),Object.defineProperty(r,"contourSpan",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"spanDuration",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"spreadHours",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(r,"setContourBucket",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"retimeContour",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"recordWorkingDays",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"workloadBuckets",{enumerable:!0,get:function(){return h}}),Object.defineProperty(r,"taskAssignmentEffort",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"computeWorkload",{enumerable:!0,get:function(){return n}}),Object.defineProperty(r,"formatHours",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"formatPercent",{enumerable:!0,get:function(){return y}}),Object.defineProperty(r,"formatCost",{enumerable:!0,get:function(){return z}});const we=se("packages/modules/gantt/resources.js"),ie=we.parseAssignments,K=we.rateOn,ue=se("packages/modules/gantt/schedule.js"),re=ue.EPS,A=ue.taskIdReader,Q=se("packages/modules/gantt/time.js"),p=Q.fromDayNumber,$=Q.toDayNumber,H=Q.toISODate,x=se("packages/core/src/internal/warn.js").warnOnce,V=se("packages/modules/gantt/week.js").weekStartOf,v=Object.freeze({hoursPerDay:8,height:160,rowHeight:28,decimals:1,totals:!0,maxHeight:null,unit:"hours",thresholds:null,showUnassigned:!0,labelWidth:null}),o=Object.freeze({resources:null,unit:"hours",stacked:!1,height:160,rowHeight:48,maxHeight:null,labelWidth:null});function d(D){if(D==null||D===""||typeof D=="boolean")return null;const T=typeof D=="number"?D:Number(D);return Number.isFinite(T)?T:null}function u(D){if(!Array.isArray(D))return null;const T=[];for(const F of D){if(!F||typeof F!="object")continue;const J=d(F.at);if(J==null||J<0)continue;const c=typeof F.className=="string"&&F.className?F.className:null,R=typeof F.colour=="string"&&F.colour?F.colour:typeof F.color=="string"&&F.color?F.color:null;!c&&!R||T.push({at:J,className:c,colour:R})}return T.length?(T.sort((F,J)=>F.at-J.at),T):null}function O(D,T){if(!D||T==null||!Number.isFinite(T))return null;let F=null;for(const J of D)if(T>=J.at)F=J;else break;return F}function te(D,T){if(D==null||D==="")return null;if(typeof D=="number")return Number.isFinite(D)?D:null;const F=$(D);return Number.isFinite(F)?F-T:null}function ne(D,T=0){if(!Array.isArray(D))return[];const F=[];for(let J=0;J<D.length;J+=1){const c=D[J],R=c&&typeof c=="object"&&c.resource!=null&&c.resource!==""?String(c.resource):null,s=c&&typeof c=="object"?te(c.start,T):null,S=c&&typeof c=="object"?te(c.end,T):null;if(R==null||s==null||S==null){x(`gantt.workloadExternal.${J}`,`[lattice] gantt: workload.external entry ${J} has no resource or no drawable start/end; it is skipped.`);continue}const j=typeof c.label=="string"&&c.label!==""?c.label:null,_=typeof c.group=="string"&&c.group!==""?c.group:null;F.push({index:J,resource:R,start:s,end:S,units:d(c.units),hours:d(c.hours),label:j,group:_})}return F}function W(D){const T=$(D.start);if(!Number.isFinite(T))return null;const F=$(D.end);if(Number.isFinite(F))return{es:T,ef:F};const J=d(D.duration);return{es:T,ef:T+(J??0)}}function oe(D){if(!D||Array.isArray(D.work))return null;const T=d(D.work);return T??d(D.hours)}function ce(D){if(!D||!Array.isArray(D.work))return null;const T=[];for(const J of D.work){if(!J||typeof J!="object")continue;const c=$(J.date),R=d(J.hours);c==null||R==null||T.push({day:Math.round(c),hours:R})}T.sort((J,c)=>J.day-c.day);const F=[];for(const J of T){const c=F[F.length-1];c&&c.day===J.day?c.hours+=J.hours:F.push({day:J.day,hours:J.hours})}return F}function ye(D){return(Array.isArray(D)?D:[]).reduce((T,F)=>T+(d(F.hours)??0),0)}function he(D){const T=[];for(const F of Array.isArray(D)?D:[]){const J=d(F.hours);if(J==null||!(Math.abs(J)>re))continue;const c=H(F.day);c!=null&&T.push({date:c,hours:Math.round(J*1e6)/1e6})}return T}function fe(D){const T=(Array.isArray(D)?D:[]).filter(F=>Math.abs(d(F.hours)??0)>re);return T.length?{first:T[0].day,last:T[T.length-1].day}:null}function ke(D,T,F=null){if(!Number.isFinite(D)||!Number.isFinite(T)||T<D)return 0;if(typeof F!="function")return Math.round(T-D)+1;let J=0;for(let c=Math.round(D);c<=Math.round(T);c+=1)F(c)&&(J+=1);return J}function ve(D,T){if(!Array.isArray(D)||!D.length)return[];const F=T/D.length;return D.map(J=>({day:J,hours:F}))}function G(D,T,F,J){const c=(Array.isArray(D)?D:[]).filter(s=>!(s.day>=T.start&&s.day<T.end)),R=Math.abs(J)>re?ve(F,J):[];return[...c,...R].sort((s,S)=>s.day-S.day)}function U(D,T,F){const J=Array.isArray(T)?T:[],c=Array.isArray(F)?F:[];if(!Array.isArray(D)||!J.length||!c.length)return Array.isArray(D)?D:[];const R=new Map(D.map(_=>[_.day,d(_.hours)??0])),s=J.map(_=>R.get(_)??0),S=s.length,j=[];for(let _=0;_<c.length;_+=1){const ge=s[Math.min(S-1,Math.floor(_*S/c.length))];Math.abs(ge)>re&&j.push({day:c[_],hours:ge})}return j}function M(D,T=null){const F=[];if(!D||!Number.isFinite(D.es)||!Number.isFinite(D.ef))return F;for(let J=Math.floor(D.es);J<Math.ceil(D.ef);J+=1)(typeof T!="function"||T(J))&&F.push(J);return F}function h(D,T,F,J=0){const c=Math.floor(T),R=Math.ceil(F),s=[];if(!(R>c))return s;if(D==="day"){for(let j=c;j<R;j+=1)s.push({start:j,end:j+1});return s}if(D==="month"||D==="quarter"){const j=p(c);if(!j)return s;let _=Date.UTC(j.getUTCFullYear(),j.getUTCMonth(),1)/864e5;for(;_<R;){const ge=p(_),ae=Date.UTC(ge.getUTCFullYear(),ge.getUTCMonth()+1,1)/864e5;s.push({start:_,end:ae}),_=ae}return s}let S=V(c,J);for(;S<R;S+=7)s.push({start:S,end:S+7});return s}function B(D,T,F={}){const J=d(F.hoursPerDay)??v.hoursPerDay,c=typeof F.isWorking=="function"?F.isWorking:null,R=M(T,c),s=ce(D);if(!s&&!R.length)return[];const S=ie(D),j=S.length?S:[{resource:null,units:1}],_=j.reduce((ae,Z)=>ae+(d(Z.units)??0),0);if(!(_>0))return[];let ge;if(s)ge=s.filter(ae=>Math.abs(ae.hours)>re);else{const ae=oe(D),Z=ae??R.length*J*_;if(!(Math.abs(Z)>re))return[];ge=ve(R,Z)}return ge.length?j.map(ae=>{const Z=d(ae.units)??0,Oe=Z/_;return{resource:ae.resource,units:Z,unitsTotal:_,perDay:Oe>0?ge.map(Pe=>({day:Pe.day,hours:Pe.hours*Oe})):[]}}):[]}function n(D,T,F={}){const J=Array.isArray(F.buckets)?F.buckets:[],c={ok:!1,buckets:[],rows:[],totals:J.map(()=>null),totalsAvailable:J.map(()=>null),totalsCost:J.map(()=>null),grandTotal:0,grandAvailableTotal:null,grandCostTotal:null};if(!T||!T.ok)return c;const R=d(F.hoursPerDay)??v.hoursPerDay,s=typeof F.isWorking=="function"?F.isWorking:null,S=F.capacities instanceof Map?F.capacities:null,j=F.resourceModels instanceof Map?F.resourceModels:null,_=F.resourceRates instanceof Map?F.resourceRates:null,ge=A(F.fields),ae=new Map,Z=(m,k,Y,g)=>{ae.has(m)||ae.set(m,{days:new Map,costs:new Map,tasks:new Map});const X=ae.get(m);if(X.days.set(k,(X.days.get(k)||0)+Y),_&&m!=null){const je=K(_.get(m),k);je!=null&&X.costs.set(k,(X.costs.get(k)||0)+Y*je)}X.tasks.has(g.id)||X.tasks.set(g.id,{...g,days:new Map});const me=X.tasks.get(g.id);me.days.set(k,(me.days.get(k)||0)+Y)},Oe=new Map;for(const m of Array.isArray(D)?D:[]){const k=m?ge(m):null;k!=null&&Oe.set(String(k),m)}const Pe=Array.isArray(D)&&T.order.length===D.length;for(let m=0;m<T.order.length;m+=1){const k=T.order[m],Y=T.tasks.get(k);if(!Y||Y.isSummary||Y.unscheduled||Y.inactive)continue;const g=Oe.get(k)||(Pe?D[m]:null);if(!g||g.loadOnly===!0)continue;const X=T.calendars instanceof Map?T.calendars.get(Y.calendar):null,me=B(g,Y,{hoursPerDay:R,isWorking:X?X.isWorking:s});for(const je of me){if(!je.perDay.length)continue;const pe={id:k,name:Y.name,units:je.units,unitsTotal:je.unitsTotal,raw:g,loadOnly:!1,external:!1,group:null};for(const De of je.perDay)Z(je.resource,De.day,De.hours,pe)}}for(const m of Array.isArray(D)?D:[]){if(!m||m.loadOnly!==!0)continue;const k=W(m);if(!k)continue;const Y=ge(m),g=Y!=null?String(Y):`loadOnly:${D.indexOf(m)}`,X=m.name!=null?String(m.name):g,me=B(m,k,{hoursPerDay:R,isWorking:s});for(const je of me){if(!je.perDay.length)continue;const pe={id:g,name:X,units:je.units,unitsTotal:je.unitsTotal,raw:m,loadOnly:!0,external:!1,group:null};for(const De of je.perDay)Z(je.resource,De.day,De.hours,pe)}}for(const m of Array.isArray(F.external)?F.external:[]){if(!m||m.resource==null)continue;const k=d(m.start),Y=d(m.end);if(k==null||Y==null)continue;const g=M({es:k,ef:Y},s),X=m.hours!=null?d(m.hours):g.length*R*(d(m.units)??1);if(X==null||!(Math.abs(X)>re)||!g.length)continue;const je={id:`external:${m.index??D.length}`,name:m.label,units:null,unitsTotal:null,raw:null,loadOnly:!0,external:!0,group:m.group??null};for(const pe of ve(g,X))Z(String(m.resource),pe.day,pe.hours,je)}const Me=m=>{let k=0,Y=J.length-1;for(;k<=Y;){const g=k+Y>>1;if(m<J[g].start)Y=g-1;else if(m>=J[g].end)k=g+1;else return g}return-1},$e=J.map(m=>{let k=0;for(let Y=Math.floor(m.start);Y<Math.ceil(m.end);Y+=1)(!s||s(Y))&&(k+=1);return{start:m.start,end:m.end,workingDays:k}}),Ee=m=>{const k=$e.map(()=>0);for(const[Y,g]of m){const X=Me(Y);X>=0&&(k[X]+=g)}return k},C=[...ae.keys()].filter(m=>m!=null).sort(),w=ae.has(null)?[...C,null]:C,i=[],de=$e.map(()=>0),t=$e.map(()=>null),l=_?$e.map(()=>0):$e.map(()=>null);let E=0,b=_?0:null;for(const m of w){const k=ae.get(m),Y=Ee(k.days),g=_?Ee(k.costs):null,X=m!=null&&S&&S.has(m)?S.get(m):null,me=m!=null&&j?j.get(m):null,je=Y.map(e=>Math.abs(e)>re?e:null),pe=Y.map((e,a)=>{if(me&&me.hasCalendar){let ee=0;for(let q=Math.floor($e[a].start);q<Math.ceil($e[a].end);q+=1)(!s||s(q))&&(ee+=me.capacityHoursOn(q));return ee}return X==null?null:X*R*$e[a].workingDays}),De=Y.map((e,a)=>pe[a]!=null&&e>pe[a]+re);let Ce=0,Ie=null,Ue=_?0:null;Y.forEach((e,a)=>{Ce+=e,de[a]+=e,pe[a]!=null&&(Ie=(Ie??0)+pe[a],t[a]=(t[a]??0)+pe[a]),g&&(Ue+=g[a],l[a]+=g[a])}),E+=Ce,_&&(b+=Ue);const Ne=[...k.tasks.values()].map(e=>{const a=Ee(e.days);return{id:e.id,name:e.name,units:e.units,unitsTotal:e.unitsTotal,raw:e.raw,cells:a.map(ee=>Math.abs(ee)>re?ee:null),total:a.reduce((ee,q)=>ee+q,0),loadOnly:!!e.loadOnly,external:!!e.external,group:e.group??null}});i.push({resource:m,capacity:X,available:pe,availableTotal:Ie,cells:je,over:De,total:Ce,costCells:g?g.map(e=>Math.abs(e)>re?e:null):null,costTotal:Ue,tasks:Ne})}let P=null;for(const m of t)m!=null&&(P=(P??0)+m);return{ok:!0,buckets:$e,rows:i,totals:de.map(m=>Math.abs(m)>re?m:null),totalsAvailable:t,totalsCost:l,grandTotal:E,grandAvailableTotal:P,grandCostTotal:b}}function f(D,T){if(D==null||!Number.isFinite(D))return"";const J=10**(Number.isFinite(T)?Math.max(0,Math.min(6,Math.round(T))):1),c=Math.round(D*J)/J;return Object.is(c,-0)||c===0?"0":String(c)}function y(D,T,F){if(T==null||!(T>re))return"–";const J=Number.isFinite(D)?D:0;return f(J/T*100,F)}function z(D,T=2){return f(D,T)}}),Fe("packages/modules/gantt/tooltip.js",function(r,se){"use strict";Object.defineProperty(r,"taskTooltipRows",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"taskTooltipText",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"buildTooltipCard",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"resolveTaskTooltip",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"positionTooltip",{enumerable:!0,get:function(){return o}}),Object.defineProperty(r,"tooltipCss",{enumerable:!0,get:function(){return d}});const we=se("packages/modules/charts/svg.js"),ie=we.el,K=we.setText,ue=we.round,A=se("packages/modules/gantt/assignments.js").parseAssignments,p=se("packages/modules/gantt/workload.js").formatCost,$=["start","end","duration","percentComplete","effort","resources","cost","slack","deadline"],H=new Set(["start","end","duration","slack"]);function I(u,O,te,ne){const{t:W,formatDate:oe}=ne;switch(u){case"start":return{label:W("gantt.tip.start"),value:oe(O.es)};case"end":return{label:W("gantt.tip.end"),value:oe(O.ef)};case"duration":return{label:W("gantt.tip.durationLabel"),value:W("gantt.tip.durationValue",{days:ue(O.duration)})};case"percentComplete":return O.percentComplete==null?null:{label:W("gantt.tip.complete"),value:`${Math.round(O.percentComplete)}%`};case"effort":return O.effort==null?null:{label:W("gantt.tip.effortLabel"),value:W("gantt.tip.effortValue",{hours:ue(O.effort)})};case"resources":{const ce=A(te).map(ye=>ye.resource);return ce.length?{label:W("gantt.tip.assigned"),value:ce.map(ye=>ne.resourceName(ye)).join(", ")}:null}case"cost":{const ce=te&&te.cost!=null?Number(te.cost):NaN;return Number.isFinite(ce)?{label:W("gantt.tip.cost"),value:p(ce)}:null}case"slack":return Number.isFinite(O.totalFloat)?{label:W("gantt.tip.slackLabel"),value:W("gantt.tip.slackValue",{days:ue(O.totalFloat)})}:null;case"deadline":return Number.isFinite(O.deadline)?{label:W("gantt.tip.deadline"),value:oe(O.deadline)}:null;default:return null}}function x(u,O,te,ne){if(u.isMilestone&&!u.unscheduled)return[{label:ne.t("gantt.tip.date"),value:ne.formatDate(u.es)}];let W=Array.isArray(te)&&te.length?te:$;u.unscheduled&&(W=W.filter(ce=>!H.has(ce)));const oe=[];for(const ce of W){const ye=I(ce,u,O,ne);ye&&oe.push(ye)}return oe}function N(u,O,te){return[u.name,...O.map(ne=>te("gantt.tip.row",{label:ne.label,value:ne.value}))].join(`
7
+ `)}function V(u,O,te,ne){const W=ie(u,"div",`${O}__tip-card`),oe=ie(u,"div",`${O}__tip-title`);K(oe,te.name),W.appendChild(oe);for(const ce of ne){const ye=ie(u,"div",`${O}__tip-row`),he=ie(u,"span",`${O}__tip-label`);K(he,ce.label);const fe=ie(u,"span",`${O}__tip-value`);K(fe,ce.value),ye.appendChild(he),ye.appendChild(fe),W.appendChild(ye)}return W}function v(u,O,te,ne,W,oe){if(typeof W=="function"){const he=W(te,{...oe,rawTask:ne});if(he==null||he==="")return null;if(typeof he=="string")return{node:null,text:he};const fe=he.textContent||"",ke=ie(u,"div",`${O}__tip-card`);return ke.appendChild(he),{node:ke,text:fe}}const ce=W&&typeof W=="object"&&Array.isArray(W.fields)?W.fields:null,ye=x(te,ne,ce,oe);return{node:V(u,O,te,ye),text:N(te,ye,oe.t)}}function o(u,O,te,ne,W,oe={}){const ce=Number.isFinite(oe.gap)?oe.gap:8,ye=u.offsetWidth||0,he=u.offsetHeight||0,fe=te.left+te.width/2,ke=te.top+te.height/2;let ve="top",G=fe-ye/2,U=te.top-he-ce;if(U<ne.top&&(ve="bottom",U=te.bottom+ce),ve==="bottom"&&U+he>ne.bottom&&(U=ke-he/2,ve=te.right+ce+ye<=ne.right?"right":"left",G=ve==="right"?te.right+ce:te.left-ye-ce),G=Math.min(Math.max(G,ne.left),Math.max(ne.left,ne.right-ye)),U=Math.min(Math.max(U,ne.top),Math.max(ne.top,ne.bottom-he)),u.setAttribute("data-placement",ve),u.style.left=`${ue(G-W.left)}px`,u.style.top=`${ue(U-W.top)}px`,!O)return;const M=(O.offsetWidth||0)/2,h=(O.offsetHeight||0)/2;if(ve==="top"||ve==="bottom"){const B=Math.min(Math.max(fe-G-M,10-M),Math.max(10-M,ye-10-M));O.style.left=`${ue(B)}px`,O.style.top=""}else{const B=Math.min(Math.max(ke-U-h,10-h),Math.max(10-h,he-10-h));O.style.top=`${ue(B)}px`,O.style.left=""}}function d(u){return`
8
+ .${u}__tip-card{position:relative;max-width:280px;padding:6px 10px;border-radius:6px;font-size:11px;line-height:1.5;
9
9
  background:var(--lattice-surface,#242b33);color:var(--lattice-foreground,#fff);
10
10
  border:1px solid var(--lattice-border-color,#3a4552);
11
11
  box-shadow:var(--lattice-popup-shadow,0 6px 16px -4px rgb(16 20 24/35%))}
12
- .${y}__tip-title{font-weight:600;margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
13
- .${y}__tip-row{display:flex;gap:10px;white-space:nowrap}
14
- .${y}__tip-label{color:var(--lattice-foreground-muted,#9aa5b1)}
15
- .${y}__tip-value{margin-inline-start:auto;font-weight:600}
16
- .${y}__tip-arrow{position:absolute;width:9px;height:9px;transform:rotate(45deg);
12
+ .${u}__tip-title{font-weight:600;margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
13
+ .${u}__tip-row{display:flex;gap:10px;white-space:nowrap}
14
+ .${u}__tip-label{color:var(--lattice-foreground-muted,#9aa5b1)}
15
+ .${u}__tip-value{margin-inline-start:auto;font-weight:600}
16
+ .${u}__tip-arrow{position:absolute;width:9px;height:9px;transform:rotate(45deg);
17
17
  background:var(--lattice-surface,#242b33);border:1px solid var(--lattice-border-color,#3a4552);z-index:-1}
18
- .${y}__tooltip[data-placement="top"] .${y}__tip-arrow{bottom:-5px;border-top:none;border-left:none}
19
- .${y}__tooltip[data-placement="bottom"] .${y}__tip-arrow{top:-5px;border-bottom:none;border-right:none}
20
- .${y}__tooltip[data-placement="right"] .${y}__tip-arrow{left:-5px;border-top:none;border-right:none}
21
- .${y}__tooltip[data-placement="left"] .${y}__tip-arrow{right:-5px;border-bottom:none;border-left:none}
22
- `.trim()}}),Le("packages/modules/scheduler/styles.js",function(r,ae){"use strict";Object.defineProperty(r,"NS",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"css",{enumerable:!0,get:function(){return se}}),Object.defineProperty(r,"injectStyles",{enumerable:!0,get:function(){return A}});const le=ae("packages/modules/gantt/tooltip.js").tooltipCss,Z="lat-sched",fe="data-lattice-scheduler-styles";function se(){return`
23
- .${Z}{
18
+ .${u}__tooltip[data-placement="top"] .${u}__tip-arrow{bottom:-5px;border-top:none;border-left:none}
19
+ .${u}__tooltip[data-placement="bottom"] .${u}__tip-arrow{top:-5px;border-bottom:none;border-right:none}
20
+ .${u}__tooltip[data-placement="right"] .${u}__tip-arrow{left:-5px;border-top:none;border-right:none}
21
+ .${u}__tooltip[data-placement="left"] .${u}__tip-arrow{right:-5px;border-bottom:none;border-left:none}
22
+ `.trim()}}),Fe("packages/modules/scheduler/styles.js",function(r,se){"use strict";Object.defineProperty(r,"NS",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"css",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"injectStyles",{enumerable:!0,get:function(){return A}});const ie=se("packages/modules/gantt/tooltip.js").tooltipCss,K="lat-sched",ue="data-lattice-scheduler-styles";function re(){return`
23
+ .${K}{
24
24
  display:flex; flex-direction:column; box-sizing:border-box; position:relative;
25
25
  width:100%; height:100%; min-height:0; overflow:hidden;
26
26
  background:var(--lattice-background,#fff);
@@ -28,49 +28,61 @@ var lt=Object.create(null),ct=Object.create(null);function Le(r,ae){lt[r]=ae}fun
28
28
  font-family:var(--lattice-font-family,system-ui,sans-serif);
29
29
  font-size:var(--lattice-font-size,13px);
30
30
  }
31
- .${Z}[hidden]{display:none}
32
- .${Z}__head{
31
+ .${K}[hidden]{display:none}
32
+ .${K}__head{
33
33
  display:flex; flex:0 0 auto; height:var(--lattice-scheduler-head-height,32px);
34
34
  border-bottom:var(--lattice-border-width,1px) solid var(--lattice-border-color,#e0e0e0);
35
35
  background:var(--lattice-scheduler-head-bg,var(--lattice-header-bg,var(--lattice-background,#fff)));
36
36
  }
37
- .${Z}__head-corner{
37
+ .${K}__head-corner{
38
38
  flex:0 0 var(--lattice-scheduler-grid-width,300px); min-width:0; box-sizing:border-box;
39
39
  display:flex; align-items:center; padding:0 8px;
40
40
  border-right:var(--lattice-border-width,1px) solid var(--lattice-border-color,#e0e0e0);
41
41
  color:var(--lattice-foreground-muted,#777); font-weight:var(--lattice-header-font-weight,600);
42
42
  overflow:hidden; white-space:nowrap;
43
43
  }
44
- .${Z}__head-view{ flex:1 1 auto; overflow:hidden; position:relative; }
45
- .${Z}__head-inner{ position:relative; height:100%; }
46
- .${Z}__tick{
44
+ .${K}__head-view{ flex:1 1 auto; overflow:hidden; position:relative; }
45
+ .${K}__head-inner{ position:relative; height:100%; }
46
+ .${K}__tick{
47
47
  position:absolute; top:0; bottom:0; box-sizing:border-box;
48
48
  padding:6px 0 0 6px; white-space:nowrap; overflow:hidden; text-overflow:clip;
49
49
  color:var(--lattice-foreground-muted,#777); font-size:var(--lattice-font-size-sm,11px);
50
50
  font-variant-numeric:tabular-nums;
51
51
  border-left:var(--lattice-border-width,1px) solid var(--lattice-border-color,#e0e0e0);
52
52
  }
53
- .${Z}__body{ display:flex; flex:1 1 auto; min-height:0; }
54
- .${Z}__grid-space{
53
+ .${K}__body{ display:flex; flex:1 1 auto; min-height:0; }
54
+ .${K}__grid-space{
55
55
  flex:0 0 var(--lattice-scheduler-grid-width,300px); min-width:0;
56
56
  }
57
- .${Z}__grid{
57
+ .${K}__grid{
58
58
  position:absolute; left:0; top:0; bottom:0; width:var(--lattice-scheduler-grid-width,300px);
59
59
  min-width:0; box-sizing:border-box; overflow:hidden; z-index:2;
60
60
  border-right:var(--lattice-border-width,1px) solid var(--lattice-border-color,#e0e0e0);
61
61
  background:var(--lattice-background,#fff);
62
62
  }
63
- .${Z}__timeline{
63
+ .${K}__timeline{
64
64
  flex:1 1 auto; min-height:0; min-width:0; overflow:auto; position:relative;
65
65
  background:var(--lattice-scheduler-timeline-bg,var(--lattice-background,#fff));
66
66
  }
67
- .${Z}__canvas{ position:relative; }
68
- .${Z}__row{
67
+ /* The resource-pane divider (BACKLOG-0002163): a 1px seam in the head and the
68
+ body, the body's own seam being the draggable, keyboard-operable handle. The
69
+ pseudo-element widens the handle's hit area to 7px without widening the line
70
+ itself; z-index:3 lifts it above the absolutely-positioned grid overlay
71
+ (z-index:2), whose right edge it sits beside. */
72
+ .${K}__divider{flex:0 0 1px;width:1px;align-self:stretch;background:var(--lattice-border-color,#e0e0e0)}
73
+ .${K}__divider--resize{position:relative;z-index:3;cursor:col-resize;touch-action:none}
74
+ .${K}__divider--resize::before{content:'';position:absolute;top:0;bottom:0;left:-3px;right:-3px;cursor:col-resize;touch-action:none}
75
+ .${K}__divider--resize:focus,.${K}__divider--resize:focus-visible{
76
+ outline:var(--lattice-focus-width,2px) solid var(--lattice-focus-color,var(--lattice-accent,#2d7ff9));
77
+ outline-offset:var(--lattice-focus-offset,1px);
78
+ }
79
+ .${K}__canvas{ position:relative; }
80
+ .${K}__row{
69
81
  position:absolute; left:0; box-sizing:border-box;
70
82
  border-bottom:var(--lattice-border-width,1px) solid var(--lattice-border-color,#e0e0e0);
71
83
  }
72
- .${Z}__row:nth-child(even){ background:var(--lattice-background-subtle,var(--lattice-surface-alt,#fafbfc)); }
73
- .${Z}__group{
84
+ .${K}__row:nth-child(even){ background:var(--lattice-background-subtle,var(--lattice-surface-alt,#fafbfc)); }
85
+ .${K}__group{
74
86
  position:absolute; left:0; box-sizing:border-box; display:flex; align-items:center; gap:6px;
75
87
  padding:0 6px; width:100%;
76
88
  background:var(--lattice-scheduler-group-bg,var(--lattice-header-bg,var(--lattice-group-background,#f2f4f7)));
@@ -78,22 +90,22 @@ var lt=Object.create(null),ct=Object.create(null);function Le(r,ae){lt[r]=ae}fun
78
90
  color:var(--lattice-foreground,#1a1a1a); font-weight:var(--lattice-header-font-weight,600);
79
91
  overflow:hidden; white-space:nowrap;
80
92
  }
81
- .${Z}__group-toggle{
93
+ .${K}__group-toggle{
82
94
  flex:0 0 auto; box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center;
83
95
  width:16px; height:16px; padding:0; border:0; margin:0;
84
96
  background:transparent; color:var(--lattice-foreground-muted,#777);
85
97
  font:inherit; font-size:10px; line-height:1; cursor:pointer;
86
98
  }
87
- .${Z}__group-toggle:focus-visible{
99
+ .${K}__group-toggle:focus-visible{
88
100
  outline:var(--lattice-focus-width,2px) solid var(--lattice-focus-color,var(--lattice-accent,#2d7ff9));
89
101
  outline-offset:var(--lattice-focus-offset,1px);
90
102
  }
91
- .${Z}__group-label{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
92
- .${Z}__shade{
103
+ .${K}__group-label{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
104
+ .${K}__shade{
93
105
  position:absolute; top:0; bottom:0; pointer-events:none;
94
106
  background:var(--lattice-scheduler-shade-bg,var(--lattice-surface,#f2f4f7));
95
107
  }
96
- .${Z}__bar{
108
+ .${K}__bar{
97
109
  position:absolute; box-sizing:border-box; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
98
110
  border:var(--lattice-border-width,1px) solid var(--lattice-border-color,#e0e0e0);
99
111
  border-radius:var(--lattice-scheduler-bar-radius,var(--lattice-radius-sm,4px));
@@ -104,44 +116,44 @@ var lt=Object.create(null),ct=Object.create(null);function Le(r,ae){lt[r]=ae}fun
104
116
  forces a minimum bar width: a 2 px bar really is 2 px, not 12 px. */
105
117
  box-shadow:inset 3px 0 0 var(--lattice-scheduler-accent,var(--lattice-accent,#2d7ff9));
106
118
  }
107
- .${Z}__bar:focus-visible,.${Z}__bar[data-focused="true"]{
119
+ .${K}__bar:focus-visible,.${K}__bar[data-focused="true"]{
108
120
  outline:var(--lattice-focus-width,2px) solid var(--lattice-focus-color,var(--lattice-accent,#2d7ff9));
109
121
  outline-offset:var(--lattice-focus-offset,1px);
110
122
  }
111
- .${Z}__timeline:focus-visible{
123
+ .${K}__timeline:focus-visible{
112
124
  outline:var(--lattice-focus-width,2px) solid var(--lattice-focus-color,var(--lattice-accent,#2d7ff9));
113
125
  outline-offset:-2px;
114
126
  }
115
- .${Z}__tooltip{position:absolute;pointer-events:none;z-index:5}
116
- .${Z}__tooltip[hidden]{display:none}
117
- ${le(Z)}
118
- .${Z}__bar[aria-readonly="true"]{cursor:default}
119
- .${Z}__handle{
127
+ .${K}__tooltip{position:absolute;pointer-events:none;z-index:5}
128
+ .${K}__tooltip[hidden]{display:none}
129
+ ${ie(K)}
130
+ .${K}__bar[aria-readonly="true"]{cursor:default}
131
+ .${K}__handle{
120
132
  position:absolute; top:0; bottom:0; width:6px; box-sizing:border-box;
121
133
  cursor:ew-resize; touch-action:none;
122
134
  }
123
- .${Z}__handle--start{ left:-2px; }
124
- .${Z}__handle--end{ right:-2px; }
125
- .${Z}__bar--ghost{
135
+ .${K}__handle--start{ left:-2px; }
136
+ .${K}__handle--end{ right:-2px; }
137
+ .${K}__bar--ghost{
126
138
  pointer-events:none; opacity:.55;
127
139
  border-style:dashed;
128
140
  }
129
- .${Z}__menu{
141
+ .${K}__menu{
130
142
  position:fixed; z-index:1000; min-width:120px; box-sizing:border-box;
131
143
  padding:4px 0; border:var(--lattice-border-width,1px) solid var(--lattice-border-color,#e0e0e0);
132
144
  border-radius:var(--lattice-radius-md,6px);
133
145
  background:var(--lattice-background,#fff); color:var(--lattice-foreground,#1a1a1a);
134
146
  box-shadow:var(--lattice-shadow-lg,0 6px 20px rgba(0,0,0,.15));
135
147
  }
136
- .${Z}__menu-item{
148
+ .${K}__menu-item{
137
149
  display:block; width:100%; box-sizing:border-box; text-align:left;
138
150
  padding:6px 12px; border:0; background:none; color:inherit; font:inherit; cursor:pointer;
139
151
  }
140
- .${Z}__menu-item:hover,.${Z}__menu-item:focus-visible{
152
+ .${K}__menu-item:hover,.${K}__menu-item:focus-visible{
141
153
  background:var(--lattice-hovered-background,#eef2f7);
142
154
  outline:none;
143
155
  }
144
- .${Z}__today{
156
+ .${K}__today{
145
157
  position:absolute; top:0; bottom:0; width:0; pointer-events:none;
146
158
  border-left:2px solid var(--lattice-scheduler-today-color,var(--lattice-accent,#2d7ff9));
147
159
  }
@@ -149,64 +161,64 @@ ${le(Z)}
149
161
  bottom of each row, its fill height the booked share of the resource's
150
162
  available hours. An over-allocated bucket takes the theme's danger fill and
151
163
  a warning glyph, so the state is never carried by colour alone. */
152
- .${Z}__load{
164
+ .${K}__load{
153
165
  position:absolute; left:0; right:0; bottom:0; height:var(--lattice-scheduler-load-height,12px);
154
166
  pointer-events:none; overflow:hidden;
155
167
  }
156
- .${Z}__load-bucket{
168
+ .${K}__load-bucket{
157
169
  position:absolute; top:0; bottom:0; box-sizing:border-box;
158
170
  border-left:var(--lattice-border-width,1px) solid var(--lattice-border-color,#e0e0e0);
159
171
  }
160
- .${Z}__load-fill{
172
+ .${K}__load-fill{
161
173
  position:absolute; left:0; right:0; bottom:0;
162
174
  background:var(--lattice-scheduler-load-fill,var(--lattice-accent,#2d7ff9)); opacity:.4;
163
175
  }
164
- .${Z}__load-bucket--over{
176
+ .${K}__load-bucket--over{
165
177
  background:var(--lattice-variant-danger-fill,#fdecea);
166
178
  border-left-color:var(--lattice-variant-danger-solid,#e2513b);
167
179
  }
168
- .${Z}__load-bucket--over .${Z}__load-fill{
180
+ .${K}__load-bucket--over .${K}__load-fill{
169
181
  background:var(--lattice-variant-danger-solid,#e2513b); opacity:1;
170
182
  }
171
- .${Z}__load-icon{
183
+ .${K}__load-icon{
172
184
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
173
185
  font-size:9px; line-height:1; color:var(--lattice-variant-danger-text,#a4291b);
174
186
  }
175
- .${Z}__live{
187
+ .${K}__live{
176
188
  position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap;
177
189
  }
178
- @media (forced-colors: active){ .${Z}__bar,.${Z}__tick,.${Z}__row{ border-color:CanvasText; } }
179
- @media (prefers-reduced-motion: reduce){ .${Z}__bar{ transition:none; } }
180
- @scope ([data-theme="dark"]){:scope.${Z},.${Z}{color-scheme:dark}}
181
- @scope ([data-theme="light"],[data-theme="auto"]){:scope.${Z},.${Z}{color-scheme:light}}
182
- @media (prefers-color-scheme:dark){@scope ([data-theme="auto"]){:scope.${Z},.${Z}{color-scheme:dark}}}
183
- `.trim()}function A(te){const b=te&&te.documentElement;if(!b||b.getAttribute(fe))return;b.setAttribute(fe,"1");const S=te.createElement("style");S.textContent=se(),(te.head||te.body||b).appendChild(S)}}),Le("packages/modules/scheduler/workload.js",function(r,ae){"use strict";Object.defineProperty(r,"bucketPeriodLabel",{enumerable:!0,get:function(){return J}}),Object.defineProperty(r,"computeWorkloadModel",{enumerable:!0,get:function(){return x}});const De=ae("packages/modules/gantt/workload.js"),le=De.computeWorkload,Z=De.workloadBuckets,fe=ae("packages/modules/gantt/resources.js"),se=fe.normalizeCapacities,A=fe.normalizeResources,te=fe.resourceDisplayNames,b=ae("packages/modules/scheduler/model.js"),S=b.accessorFor,Y=b.eventSpan,B=b.eventText,O=864e5;function C(a){return typeof a=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(a.trim())}function J(a,g){const y=a.locale||void 0,T=a.timeZone||"UTC";return new Intl.DateTimeFormat(y,{month:"short",day:"numeric",timeZone:T}).format(new Date(Math.round(g)*O))}function x(a,g){const y=a.workload;if(!y||!g)return null;const T=a.zoom.level==="hour"?"day":a.zoom.level,ne=Z(T,g.startDay,g.endDay,a.weekStartDay),oe=S(a.resourceKey),W=S(a.fields.resourceId),ge=S(a.eventKey),me=S(a.fields.calendar),ye=[];for(const u of a.resources){const f=oe(u);f==null||f===""||ye.push({...u,id:String(f),calendar:me(u)})}const ke=se(ye,y.defaultCapacity),be=A(ye,y.defaultCapacity,{calendar:null,calendars:a.calendars,hoursPerDay:y.hoursPerDay}),ve=new Map;for(const[u,f]of be)f&&f.hasCalendar&&typeof f.worksOn=="function"&&ve.set(u,{isWorking:z=>f.worksOn(z)});const Se=[],G=[],U=new Map;for(const u of a.events){const f=Y(a,u);if(!f.start)continue;const z=W(u);if(z==null||z==="")continue;const v=String(z),E=ge(u),N=E==null?`event:${a.events.indexOf(u)}`:String(E),K=B(a,u,E),i=S(a.fields.startDate)(u),_=S(a.fields.endDate)(u),d=C(i)&&C(_)?null:(f.end.day+f.end.frac-f.start.day-f.start.frac)*24;Se.push({id:N,name:K,assignee:v,hours:d}),G.push(N),U.set(N,{es:f.start.day+f.start.frac,ef:f.end.day+f.end.frac,isSummary:!1,unscheduled:!1,inactive:!1,name:K,calendar:ve.has(v)?v:null})}const D=le(Se,{ok:!0,order:G,tasks:U,calendars:ve},{buckets:ne,hoursPerDay:y.hoursPerDay,isWorking:null,capacities:ke,resourceModels:be}),c=new Map;for(const u of D.rows)u.resource!=null&&c.set(u.resource,u);for(const[u,f]of be){if(c.has(u))continue;const z=ke.has(u)?ke.get(u):null,v=D.buckets.map(N=>{if(f.hasCalendar){let K=0;for(let i=Math.floor(N.start);i<Math.ceil(N.end);i+=1)K+=f.capacityHoursOn(i);return K}return z==null?null:z*y.hoursPerDay*N.workingDays});let E=null;for(const N of v)N!=null&&(E=(E??0)+N);c.set(u,{resource:u,capacity:z,available:v,availableTotal:E,cells:D.buckets.map(()=>null),over:D.buckets.map(()=>!1),total:0})}const H=te(ye),t=[];for(const u of D.rows){if(u.resource==null)continue;const f=[];u.over.forEach((z,v)=>{z&&f.push(v)}),f.length&&t.push({resource:u.resource,name:H.get(u.resource)||u.resource,count:f.length,periods:f.map(z=>J(a,D.buckets[z].start))})}return{buckets:D.buckets,rows:c,overAllocated:t,hoursPerDay:y.hoursPerDay,decimals:y.decimals}}}),Le("packages/modules/scheduler/messages.js",function(r,ae){"use strict";Object.defineProperty(r,"FALLBACK_EN",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"t",{enumerable:!0,get:function(){return se}});const le=ae("packages/core/src/internal/predicates.js").isFunction,Z=Object.freeze({"scheduler.scheduler":"Scheduler","scheduler.resource":"Resource","scheduler.event":{one:"event",other:"events"},"scheduler.print.page":"Page {page} of {pages}","scheduler.print.printed":"Printed {date}","scheduler.readOnlyEvent":"The event is read-only.","scheduler.readOnlyResource":"The resource is read-only.","scheduler.delete":"Delete","scheduler.ungrouped":"Ungrouped","scheduler.group":"Group","scheduler.timeline":"Time axis","scheduler.toggleGroup":"Toggle {group}","scheduler.eventActivated":"{name}","scheduler.tip.start":"Start","scheduler.tip.end":"End","scheduler.tip.duration":"Duration","scheduler.tip.durationValue":"{hours} h","scheduler.tip.resource":"Resource","scheduler.tip.row":"{label}: {value}","scheduler.workload.overSummary":"Over-allocated: {list}","scheduler.workload.overItem":"{resource} ({periods})","scheduler.workload.overCell":"{resource}, {period}: {percent} — over-allocated"});function fe(A,te){const b=Z[A];if(!b)return A;const S=te&&typeof te.count=="number"?te.count:NaN;return(typeof b=="string"?b:(S===1?b.one:b.other)||b.other).replace(/\{(\w+)\}/g,(B,O)=>te&&O in te?String(te[O]):B)}function se(A,te,b){const S=A&&A.config?A.config:{},Y=S.messages&&le(S.messages.t)?S.messages:null;if(Y){let B;try{B=Y.t(te,b)}catch{B=null}if(typeof B=="string"&&B&&B!==te)return B}return fe(te,b)}}),Le("packages/modules/scheduler/gestures.js",function(r,ae){"use strict";Object.defineProperty(r,"attachEditing",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"addHandles",{enumerable:!0,get:function(){return B}});const le=ae("packages/modules/scheduler/styles.js").NS,fe=ae("packages/modules/scheduler/messages.js").t,se=ae("packages/modules/scheduler/model.js"),A=se.isEventReadOnly,te=se.isResourceReadOnly,b=se.accessorFor,S=3;function Y(O){const C=O.ctx,J=O.doc;if(!O.canvas||!J)return;let x=null,a=null;const g=()=>O.pxPerDay||1,y=c=>{const H=O.canvas.getBoundingClientRect(),t=Math.floor((c-H.top)/C.rowHeight),u=O.resources[t];return u?b(C.resourceKey)(u):null},T=c=>{const H=O.canvas.getBoundingClientRect();return O.span.startDay+(c-H.left)/g()},ne=c=>{const H=c&&c.closest?c:null;if(!H)return null;const t=H.closest(`.${le}__handle`),u=t?t.closest(`.${le}__bar`):H.closest(`.${le}__bar`);return u?{key:u.getAttribute("data-key"),bar:u,edge:t?t.getAttribute("data-edge"):null}:null},oe=c=>{O.live&&(O.live.textContent=c)},W=c=>{oe(fe(O,c==="event"?"scheduler.readOnlyEvent":"scheduler.readOnlyResource"))},ge=c=>{const H=O.events.get(c);if(!H||!C.editable)return!1;if(A(C,H))return W("event"),!1;const t=b(C.fields.resourceId)(H),u=t==null?null:O.rows.get(t);return te(C,u)?(W("resource"),!1):!0},me=(c,H,t)=>{if(!ge(c.key))return;const u=O.placement.keys.get(c.key);u&&(x={mode:c.edge?"resize":"move",key:c.key,edge:c.edge,startX:H,startY:t,startDay:u.startDay,endDay:u.endDay,resourceKey:u.resourceKey,bar:c.bar,ghost:null})},ye=(c,H)=>{if(!C.editable)return;const t=y(H);if(t==null)return;const u=O.rows.get(t);if(te(C,u)){W("resource");return}x={mode:"create",key:null,edge:null,startX:c,startY:H,startDay:T(c),endDay:T(c),resourceKey:t,bar:null,ghost:null}},ke=(c,H)=>{if(!x)return;const t=x;if(t.mode==="move"){const u=(c-t.startX)/g();t.bar.style.left=`${(t.startDay-O.span.startDay+u)*g()}px`}else if(t.mode==="resize"){const u=(c-t.startX)/g();if(t.edge==="start"){const f=(t.startDay-O.span.startDay+u)*g();t.bar.style.left=`${f}px`,t.bar.style.width=`${Math.max(2,(t.endDay-t.startDay-u)*g())}px`}else t.bar.style.width=`${Math.max(2,(t.endDay-t.startDay+u)*g())}px`}else if(t.mode==="create"){t.endDay=T(c),t.ghost||(t.ghost=O.doc.createElement("div"),t.ghost.className=`${le}__bar ${le}__bar--ghost`,(O.canvas.querySelector(`.${le}__row[data-resource="${CSS.escape(String(t.resourceKey))}"]`)||O.canvas).appendChild(t.ghost));const u=Math.min(t.startDay,t.endDay),f=Math.max(t.startDay,t.endDay);t.ghost.style.left=`${(u-O.span.startDay)*g()}px`,t.ghost.style.width=`${Math.max(2,(f-u)*g())}px`}},be=(c,H)=>{if(!x)return;const t=x;if(x=null,t.ghost&&t.ghost.parentNode&&t.ghost.parentNode.removeChild(t.ghost),t.mode==="move"){const u=y(H);if(u!=null&&String(u)!==String(t.resourceKey))O.edit.reassign(t.key,u,{origin:"user"});else{const f=(c-t.startX)/g();O.edit.move(t.key,f,{origin:"user"})}}else if(t.mode==="resize"){const u=(c-t.startX)/g(),f=(t.edge==="start"?t.startDay:t.endDay)+u;O.edit.resize(t.key,t.edge,f,{origin:"user"})}else t.mode==="create"&&O.edit.create(t.resourceKey,t.startDay,t.endDay,{origin:"user"})},ve=c=>{if(c.button!=null&&c.button!==0)return;const H=ne(c.target);if(H?(c.preventDefault&&c.preventDefault(),me(H,c.clientX,c.clientY)):c.target&&c.target.closest&&c.target.closest(`.${le}__row`)&&ye(c.clientX,c.clientY),x){const t=f=>ke(f.clientX,f.clientY),u=f=>{be(f.clientX,f.clientY),J.removeEventListener("pointermove",t),J.removeEventListener("pointerup",u)};J.addEventListener("pointermove",t),J.addEventListener("pointerup",u)}},Se=c=>{const H=ne(c.target);if(c.key==="z"&&(c.ctrlKey||c.metaKey)){if(!O.edit)return;c.preventDefault&&c.preventDefault(),c.shiftKey?O.edit.redo({origin:"user"}):O.edit.undo({origin:"user"});return}if(!H)return;const t=C.zoom.step;if(c.key==="Delete"||c.key==="Backspace"){if(!ge(H.key))return;c.preventDefault&&c.preventDefault(),O.edit.remove(H.key,{origin:"user",event:c})}else if(c.key==="ArrowLeft"||c.key==="ArrowRight"){if(!ge(H.key))return;c.preventDefault&&c.preventDefault();const u=c.key==="ArrowRight"?1:-1;if(c.shiftKey){const f=O.placement.keys.get(H.key);f&&O.edit.resize(H.key,"end",f.endDay+u*t,{origin:"user",event:c})}else O.edit.move(H.key,u*t,{origin:"user",event:c})}else if(c.key==="ArrowUp"||c.key==="ArrowDown"){if(!ge(H.key))return;c.preventDefault&&c.preventDefault();const u=O.placement.keys.get(H.key);if(!u)return;const f=O.resources.findIndex(v=>String(b(C.resourceKey)(v))===String(u.resourceKey)),z=O.resources[f+(c.key==="ArrowDown"?1:-1)];if(z){const v=b(C.resourceKey)(z);if(te(C,z)){W("resource");return}O.edit.reassign(H.key,v,{origin:"user",event:c})}}},G=c=>{const H=ne(c.target);if(!H||(c.preventDefault&&c.preventDefault(),!ge(H.key)))return;U(),a=H.key;const t=O.doc.createElement("div");t.className=`${le}__menu`,t.setAttribute("role","menu");const u=O.doc.createElement("button");u.className=`${le}__menu-item`,u.setAttribute("role","menuitem"),u.textContent=fe(O,"scheduler.delete"),u.addEventListener("click",()=>{a!=null&&O.edit.remove(a,{origin:"user"}),U()}),t.appendChild(u),t.style.left=`${c.clientX}px`,t.style.top=`${c.clientY}px`,t.style.position="fixed",O.el.appendChild(t),t.__menu=!0;const f=z=>{if(!t.contains(z.target)){if(z.key==="Escape"){U();return}U()}};J.addEventListener("pointerdown",f,!0),J.addEventListener("keydown",f,!0),t.__cleanup=()=>{J.removeEventListener("pointerdown",f,!0),J.removeEventListener("keydown",f,!0)},u.focus()},U=()=>{const c=O.el?O.el.querySelector(`.${le}__menu`):null;c&&(c.__cleanup&&c.__cleanup(),c.parentNode&&c.parentNode.removeChild(c)),a=null};O.canvas.addEventListener("pointerdown",ve),O.canvas.addEventListener("keydown",Se),O.canvas.addEventListener("contextmenu",G);const D=()=>{U(),O.canvas.removeEventListener("pointerdown",ve),O.canvas.removeEventListener("keydown",Se),O.canvas.removeEventListener("contextmenu",G)};O._editDetach=D}function B(O,C){if(O.ctx.editable===!1)return;const J=O.doc;for(const x of["start","end"]){const a=J.createElement("div");a.className=`${le}__handle ${le}__handle--${x}`,a.setAttribute("data-edge",x),a.setAttribute("aria-hidden","true"),C.appendChild(a)}}}),Le("packages/modules/scheduler/view.js",function(r,ae){"use strict";Object.defineProperty(r,"HEAD_H",{enumerable:!0,get:function(){return E}}),Object.defineProperty(r,"GROUP_COL_ID",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"LOAD_H",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"t",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"FALLBACK_EN",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"computeDisplayRows",{enumerable:!0,get:function(){return n}}),Object.defineProperty(r,"refreshVisible",{enumerable:!0,get:function(){return d}}),Object.defineProperty(r,"layout",{enumerable:!0,get:function(){return L}}),Object.defineProperty(r,"xOf",{enumerable:!0,get:function(){return j}}),Object.defineProperty(r,"render",{enumerable:!0,get:function(){return he}}),Object.defineProperty(r,"mountGrid",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"syncGrid",{enumerable:!0,get:function(){return q}}),Object.defineProperty(r,"toggleGroup",{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(r,"renderHead",{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(r,"renderTimeline",{enumerable:!0,get:function(){return m}});const le=ae("packages/core/src/internal/predicates.js").isFunction,fe=ae("packages/modules/charts/svg.js").el,se=ae("packages/modules/scheduler/styles.js"),A=se.NS,te=se.injectStyles,b=ae("packages/modules/scheduler/model.js"),S=b.accessorFor,Y=b.placeEvents,B=b.axisSpan,O=b.anchorDay,C=b.computeTicks,J=b.resourceNonWorking,x=b.laneCount,a=b.eventText,g=b.parseDate,y=b.visibleEvents,T=b.visibleResources,ne=b.buildDisplayRows,oe=b.isEventReadOnly,W=ae("packages/modules/scheduler/workload.js"),ge=W.computeWorkloadModel,me=W.bucketPeriodLabel,ke=ae("packages/modules/gantt/workload.js").formatPercent,be=ae("packages/modules/scheduler/gestures.js"),ve=be.attachEditing,Se=be.addHandles,G=ae("packages/modules/scheduler/messages.js"),U=G.t,D=G.FALLBACK_EN,H=ae("packages/modules/gantt/time.js").toDayNumber,t=ae("packages/modules/gantt/tooltip.js"),u=t.buildTooltipCard,f=t.positionTooltip,v=ae("packages/modules/gantt/workload-groups.js").groupOfResource,E=32,N="__schedGroup",K=12;function i(e,R){return R==null||R===""?U(e,"scheduler.ungrouped"):String(R)}function _(e,R,Q){const ue=R&&(R.name??R.label??R.title);return ue!=null&&ue!==""?String(ue):String(Q)}function n(e){const R=e.ctx;if(e.grid&&e.groupColId&&le(e.grid.rows.get)&&le(e.grid.rows.count)){const Q=new Map(e.resources.map(re=>[String(S(R.resourceKey)(re)),re])),ue=[],l=e.grid.rows.count();for(let re=0;re<l;re++){const de=e.grid.rows.get(re);if(de)if(de.group)ue.push({type:"group",key:de.key,value:de.groupValue,label:i(e,de.groupValue),expanded:!!de.expanded});else{const Oe=Q.get(String(de.key));Oe&&ue.push({type:"resource",resource:Oe})}}return ue}return ne(R.visibleResources,R.groupBy,e.collapsedGroups,U(e,"scheduler.ungrouped"))}function d(e){e.ctx.visibleEvents=y(e.ctx),e.ctx.visibleResources=T(e.ctx)}function L(e){const R=e.ctx;d(e),e.placement=Y(R,R.visibleEvents);const Q=O(R);e.span=B(R,Q),e.ticks=C(R,e.span.startDay,e.span.endDay),e.pxPerDay=R.zoom.px,e.totalWidth=(e.span.endDay-e.span.startDay)*e.pxPerDay,e.displayRows||(e.displayRows=n(e)),e.totalHeight=e.displayRows.length*R.rowHeight,e.anchorDay=Q,e.workload=ge(R,e.span),Ee(e),m(e),$e(e)}function j(e,R){return(R-e.span.startDay)*e.pxPerDay}function he(e){const{el:R,doc:Q}=e;if(!R)return;for(te(Q),R.classList.add(A),R.setAttribute("role","grid"),R.setAttribute("aria-label",e.ctx.ariaLabel||e.ctx.labels.scheduler||U(e,"scheduler.scheduler"));R.firstChild;)R.removeChild(R.firstChild);const ue=Q.createElement("div");ue.className=`${A}__head`;const l=Q.createElement("div");l.className=`${A}__head-corner`,l.textContent=e.ctx.labels.resource||U(e,"scheduler.resource"),ue.appendChild(l);const re=Q.createElement("div");re.className=`${A}__head-view`;const de=Q.createElement("div");de.className=`${A}__head-inner`,re.appendChild(de),ue.appendChild(re),R.appendChild(ue),e.headView=re,e.headInner=de;const Oe=Q.createElement("div");Oe.className=`${A}__body`;const je=Q.createElement("div");je.className=`${A}__grid-space`,Oe.appendChild(je);const Ce=Q.createElement("div");Ce.className=`${A}__timeline`,Ce.setAttribute("tabindex","0"),Ce.setAttribute("aria-label",U(e,"scheduler.timeline"));const Re=Q.createElement("div");Re.className=`${A}__canvas`,Ce.appendChild(Re),Oe.appendChild(Ce),R.appendChild(Oe);const Fe=Q.createElement("div");Fe.className=`${A}__grid`,R.appendChild(Fe),e.gridHost=Fe,e.timeline=Ce,e.canvas=Re;const Ke=fe(Q,"div",`${A}__tooltip`);Ke.setAttribute("hidden","");const He=fe(Q,"div",`${A}__tip-arrow`);Ke.appendChild(He),R.appendChild(Ke),e.tip=Ke,e.tipArrow=He;const We=Q.createElement("div");We.className=`${A}__live`,We.setAttribute("aria-live","polite"),We.setAttribute("role","status"),R.appendChild(We),e.live=We,d(e),ce(e),q(e),L(e),e.wired||(we(e),e.wired=!0)}function ce(e){const{ctx:R}=e;if(e.grid=null,e.groupColId=null,!R.createGrid||!e.gridHost)return;const Q=R.resourceKey,ue=R.groupBy,l=[...R.columns];let re=null,de=!1;if(ue){if(typeof ue=="string"){const je=l.find(Ce=>Ce&&(Ce.id===ue||Ce.field===ue));je&&(re=je.id)}re||(re=N,de=!0,l.push({id:N,field:N,title:U(e,"scheduler.group"),layout:{width:120}}))}const Oe=R.visibleResources.map(je=>{const Ce={...je,__key:S(Q)(je)};return de&&(Ce[N]=v(ue,je)??""),Ce});try{e.grid=R.createGrid(e.gridHost,{columns:l,rows:Oe,rowKey:"__key",edit:!1,selection:"none",contextMenu:!1,headerHeight:E,rowHeight:R.rowHeight}),re&&e.grid.columns&&le(e.grid.columns.group)&&e.grid.columns.group([re]),e.groupColId=re,e._gridKeys=new Set(Oe.map(je=>je.__key))}catch{e.grid=null,e.groupColId=null}Me(e)}function q(e){const{ctx:R}=e;if(d(e),e.grid&&e.grid.rows&&le(e.grid.rows.apply)){const Q=R.resourceKey,ue=R.visibleResources.map(Oe=>{const je={...Oe,__key:S(Q)(Oe)};return e.groupColId===N&&(je[N]=v(R.groupBy,Oe)??""),je}),l=e._gridKeys||new Set,re=new Set;for(const Oe of ue)re.add(Oe.__key);const de=[];for(const Oe of l)re.has(Oe)||de.push(Oe);try{e.grid.rows.apply({add:ue,remove:de})}catch{}e._gridKeys=re}e.displayRows=n(e)}function Pe(e){e.displayRows=n(e),e.totalHeight=e.displayRows.length*e.ctx.rowHeight,m(e)}function Ae(e,R){if(e.groupColId&&e.grid&&le(e.grid.rows.collapse)&&le(e.grid.rows.expand)){e.grid.rows[R.expanded?"collapse":"expand"](R.key);return}R.expanded?e.collapsedGroups.add(R.value):e.collapsedGroups.delete(R.value),Pe(e)}function Ee(e){if(!e.headInner)return;const R=e.doc;for(;e.headInner.firstChild;)e.headInner.removeChild(e.headInner.firstChild);e.headInner.style.width=`${e.totalWidth}px`;for(const Q of e.ticks){const ue=R.createElement("div");ue.className=`${A}__tick`,ue.style.left=`${j(e,Q.day)}px`,ue.textContent=Q.label,e.headInner.appendChild(ue)}}function k(e,R){const Q=e.pxPerDay||1,ue=e.span.startDay+Math.floor(R/Q),l=e.timeline?e.timeline.clientWidth:0,re=ue+Math.ceil(l/Q)+1;return{first:ue,last:Math.min(re,e.span.endDay)}}function m(e){if(!e.canvas)return;const R=e.ctx,Q=e.doc,ue=e.timeline?e.timeline.scrollTop:0,l=e.timeline?e.timeline.scrollLeft:0;for(e.canvas.style.width=`${e.totalWidth}px`,e.canvas.style.height=`${e.totalHeight}px`;e.canvas.firstChild;)e.canvas.removeChild(e.canvas.firstChild);const re=e.displayRows||[],de=R.rowHeight,Oe=R.overscan,je=Math.max(0,Math.floor(ue/de)-Oe),Ce=e.timeline?e.timeline.clientHeight:0,Re=Math.min(re.length-1,Math.ceil((ue+Ce)/de)+Oe),Fe=k(e,l),Ke=S(R.resourceKey),He=e.workload,We=He?He.buckets:[];let Qe=0,qe=We.length-1;for(;Qe<We.length&&We[Qe].end<=Fe.first;)Qe+=1;for(;qe>=0&&We[qe].start>=Fe.last;)qe-=1;for(let Ze=je;Ze<=Re;Ze++){const Ue=re[Ze];if(!Ue)continue;const ot=Ze*de;if(Ue.type==="group"){const _e=Q.createElement("div");_e.className=`${A}__group`,_e.setAttribute("data-group",String(Ue.value??"")),_e.setAttribute("role","row"),_e.setAttribute("aria-label",Ue.label),_e.style.top=`${ot}px`,_e.style.height=`${de}px`,_e.style.width=`${e.totalWidth}px`;const ze=Q.createElement("button");ze.className=`${A}__group-toggle`,ze.type="button",ze.setAttribute("aria-label",U(e,"scheduler.toggleGroup",{group:Ue.label})),ze.setAttribute("aria-expanded",Ue.expanded?"true":"false"),ze.textContent=Ue.expanded?"−":"+",ze.addEventListener("click",Ie=>{Ie.stopPropagation(),Ae(e,Ue)}),_e.appendChild(ze);const Ye=Q.createElement("span");Ye.className=`${A}__group-label`,Ye.textContent=Ue.label,_e.appendChild(Ye),e.canvas.appendChild(_e);continue}const et=Ue.resource,Ge=Ke(et),Be=e.placement.byResource.get(Ge)||[],Je=He&&He.rows.get(String(Ge))||null,at=Je?K:0,pe=Q.createElement("div");pe.className=`${A}__row`,pe.setAttribute("data-resource",String(Ge)),pe.setAttribute("role","row"),pe.setAttribute("aria-label",_(e,et,Ge)),pe.style.top=`${ot}px`,pe.style.height=`${de}px`,pe.style.width=`${e.totalWidth}px`;const Ne=R.nonWorking?J(R,et):null;if(Ne)for(let _e=Fe.first;_e<Fe.last;_e++){if(!Ne(_e))continue;const ze=Q.createElement("div");ze.className=`${A}__shade`,ze.style.left=`${j(e,_e)}px`,ze.style.width=`${e.pxPerDay}px`,pe.appendChild(ze)}const Ve=x(Be),Xe=Math.max(4,(de-at-4)/Ve);for(const _e of Be){const ze=_e.startDay,Ye=_e.endDay;if(Ye<Fe.first||ze>Fe.last)continue;const Ie=Q.createElement("div");Ie.className=`${A}__bar`,Ie.setAttribute("data-key",String(_e.key)),Ie.setAttribute("role","gridcell"),Ie.setAttribute("aria-label",a(R,_e.row,_e.key));const nt=oe(R,_e.row),tt=e.focusKey!=null&&String(e.focusKey)===String(_e.key);R.editable!==!1?(Ie.setAttribute("tabindex","0"),Ie.setAttribute("role","button"),nt&&Ie.setAttribute("aria-readonly","true")):(Ie.setAttribute("tabindex",tt?"0":"-1"),tt&&Ie.setAttribute("data-focused","true"));const st=j(e,ze),it=Math.max(2,j(e,Ye)-st);Ie.style.left=`${st}px`,Ie.style.width=`${it}px`,Ie.style.top=`${2+_e.lane*Xe}px`,Ie.style.height=`${Math.max(2,Xe-3)}px`,_e.color&&(Ie.setAttribute("data-accent",""),Ie.style.setProperty("--lattice-scheduler-accent",_e.color)),Ie.textContent=a(R,_e.row,_e.key),R.editable!==!1&&!nt&&Se(e,Ie),pe.appendChild(Ie)}if(Je){const _e=Q.createElement("div");_e.className=`${A}__load`;for(let ze=Qe;ze<=qe;ze++){const Ye=We[ze],Ie=Q.createElement("div");Ie.className=`${A}__load-bucket`,Ie.style.left=`${j(e,Ye.start)}px`,Ie.style.width=`${Math.max(1,j(e,Ye.end)-j(e,Ye.start))}px`;const nt=Je.cells[ze],tt=Je.available[ze],st=tt!=null&&tt>0&&nt!=null?nt/tt*100:null,it=Q.createElement("div");if(it.className=`${A}__load-fill`,it.style.height=`${st==null?0:Math.min(100,Math.round(st))}%`,Ie.appendChild(it),Je.over[ze]===!0){Ie.classList.add(`${A}__load-bucket--over`);const ut=Q.createElement("span");ut.className=`${A}__load-icon`,ut.setAttribute("aria-hidden","true"),ut.textContent="⚠",Ie.appendChild(ut),Ie.setAttribute("aria-label",U(e,"scheduler.workload.overCell",{resource:et.name!=null?String(et.name):String(Ge),period:me(R,Ye.start),percent:`${ke(nt,tt,He.decimals)}%`}))}_e.appendChild(Ie)}pe.appendChild(_e)}e.canvas.appendChild(pe)}if(R.todayLine){const Ze=H(new Date);if(Ze>=Fe.first&&Ze<=Fe.last){const Ue=Q.createElement("div");Ue.className=`${A}__today`,Ue.setAttribute("data-today","true"),Ue.style.left=`${j(e,Ze)}px`,e.canvas.appendChild(Ue)}}}function o(e,R){const Q=e.canvas.querySelectorAll(`.${A}__bar`);for(const ue of Q)if(ue.dataset.key===String(R))return ue;return null}function ie(e){const R=e.ctx,Q=S(R.resourceKey),ue=[];for(const l of e.displayRows||[]){if(l.type!=="resource")continue;const re=Q(l.resource),de=e.placement.byResource.get(re)||[];de.length&&ue.push({resourceKey:re,events:de})}return ue}function F(e,R){const Q=S(e.ctx.resourceKey),ue=e.displayRows||[];for(let l=0;l<ue.length;l++){const re=ue[l];if(re.type==="resource"&&String(Q(re.resource))===String(R))return l}return-1}function ee(e,R){e.focusKey=String(R.key);const Q=F(e,R.resourceKey);if(Q>=0&&e.timeline){const l=e.ctx.rowHeight,re=Q*l,de=e.timeline.clientHeight;(re<e.timeline.scrollTop||re+l>e.timeline.scrollTop+de)&&(e.timeline.scrollTop=Math.max(0,re-de/2+l/2),m(e));const Oe=j(e,R.startDay),je=j(e,R.endDay),Ce=e.timeline.clientWidth;(je>e.timeline.scrollLeft+Ce||Oe<e.timeline.scrollLeft)&&(e.timeline.scrollLeft=Math.max(0,Oe-Ce/2),m(e))}const ue=o(e,R.key);if(ue){for(const l of e.canvas.querySelectorAll(`.${A}__bar`))l.setAttribute("tabindex","-1"),l.removeAttribute("data-focused");ue.setAttribute("tabindex","0"),ue.setAttribute("data-focused","true"),ue.focus()}}function s(e,R){const Q=ie(e);if(!Q.length)return;const ue=e.focusKey==null?null:String(e.focusKey);let l=-1,re=-1;if(ue!=null)for(let Re=0;Re<Q.length;Re++){const Fe=Q[Re].events.findIndex(Ke=>String(Ke.key)===ue);if(Fe>=0){l=Re,re=Fe;break}}if(l<0){ee(e,Q[0].events[0]);return}if(R==="left"||R==="right"){const Re=Q[l].events,Fe=R==="right"?re+1:re-1;ee(e,Re[Fe>=0&&Fe<Re.length?Fe:R==="right"?0:Re.length-1]);return}const de=Q[l+(R==="down"?1:-1)];if(!de)return;const Oe=Q[l].events[re].startDay;let je=null,Ce=1/0;for(const Re of de.events){const Fe=Math.abs(Re.startDay-Oe);Fe<Ce&&(Ce=Fe,je=Re)}je&&ee(e,je)}function M(e,R){e.live&&(e.live.textContent=R)}function I(e,R){M(e,U(e,"scheduler.eventActivated",{name:a(e.ctx,R.row,R.key)}));const Q=o(e,R.key);Q&&V(e,R,Q)}function $(e,R){if(R==null||R==="")return"";const Q=g(R);if(!Q)return String(R);const l={year:"numeric",month:"short",day:"numeric",...typeof R=="string"&&/(\d{1,2}:\d{2})/.test(R)?{hour:"2-digit",minute:"2-digit"}:{},...e.timeZone?{timeZone:e.timeZone}:{}};try{return new Intl.DateTimeFormat(e.locale,l).format(Q)}catch{return String(R)}}function w(e){const R=e*24;return Math.abs(R-Math.round(R))<.05?String(Math.round(R)):R.toFixed(1).replace(/\.0$/,"")}function p(e,R){const Q=e.ctx,ue=[],l=$(Q,S(Q.fields.startDate)(R.row)),re=$(Q,S(Q.fields.endDate)(R.row));l&&ue.push({label:U(e,"scheduler.tip.start"),value:l}),re&&ue.push({label:U(e,"scheduler.tip.end"),value:re}),ue.push({label:U(e,"scheduler.tip.duration"),value:U(e,"scheduler.tip.durationValue",{hours:w(R.endDay-R.startDay)})});const de=e.rows.get(R.resourceKey);return de&&ue.push({label:U(e,"scheduler.tip.resource"),value:_(e,de,R.resourceKey)}),ue}function h(e,R,Q){return[a(e.ctx,R.row,R.key),...Q.map(ue=>U(e,"scheduler.tip.row",{label:ue.label,value:ue.value}))].join(", ")}function V(e,R,Q){if(!e.tip)return;const ue=p(e,R),l=u(e.doc,A,{name:a(e.ctx,R.row,R.key)},ue);for(const re of[...e.tip.children])re!==e.tipArrow&&e.tip.removeChild(re);e.tip.appendChild(l),e.tip.removeAttribute("hidden"),Q.setAttribute("aria-description",h(e,R,ue)),X(e,Q)}function P(e){if(e.tip){e.tip.setAttribute("hidden","");for(const R of[...e.tip.children])R!==e.tipArrow&&e.tip.removeChild(R)}}function X(e,R){if(!e.tip||!R||typeof R.getBoundingClientRect!="function")return;const Q=R.getBoundingClientRect(),ue=e.el.getBoundingClientRect(),l=e.doc.defaultView||globalThis,re=Number.isFinite(l.innerWidth)?l.innerWidth:1/0,de=Number.isFinite(l.innerHeight)?l.innerHeight:1/0,Oe={left:Math.max(0,ue.left),top:Math.max(0,ue.top),right:Math.min(re,ue.right),bottom:Math.min(de,ue.bottom)};f(e.tip,e.tipArrow,Q,Oe,ue)}function $e(e){if(!e.live)return;const R=e.workload;if(!R||!R.overAllocated.length){e.live.textContent="";return}const Q=R.overAllocated.map(ue=>U(e,"scheduler.workload.overItem",{resource:ue.name,periods:ue.periods.join(", ")})).join("; ");e.live.textContent=U(e,"scheduler.workload.overSummary",{list:Q})}function Me(e){if(e._gridOff){try{e._gridOff()}catch{}e._gridOff=null}if(e._gridGroupOff){try{e._gridGroupOff()}catch{}e._gridGroupOff=null}const R=e.grid;if(!R||!le(R.on))return;const Q=()=>{if(e._syncing)return;e._syncing=!0;const l=xe(e),re=l?l.scrollTop:0;e.timeline.scrollTop!==re&&(e.timeline.scrollTop=re),e._syncing=!1,m(e)};R.on("scroll",Q),e._gridOff=()=>{le(R.off)&&R.off("scroll",Q)};const ue=()=>Pe(e);R.on("group:toggled",ue),e._gridGroupOff=()=>{le(R.off)&&R.off("group:toggled",ue)}}function we(e){const R=[];e._listeners=R;const Q=(l,re)=>{e.el.addEventListener(l,re),R.push({type:l,fn:re})},ue=()=>{if(e._syncing)return;e._syncing=!0,e.headView&&e.headView.scrollLeft!==e.timeline.scrollLeft&&(e.headView.scrollLeft=e.timeline.scrollLeft);const l=xe(e);l&&l.scrollTop!==e.timeline.scrollTop&&(l.scrollTop=e.timeline.scrollTop),e._syncing=!1,m(e)};e.timeline.addEventListener("scroll",ue),e._timelineScroll={target:e.timeline,type:"scroll",fn:ue},Q("wheel",l=>{if(l.ctrlKey||l.metaKey){l.preventDefault&&l.preventDefault();const re=l.deltaY<0?1.25:.8;e.setZoom(Te(e,e.pxPerDay*re),"control")}}),Q("pointerover",l=>{const re=l.target&&l.target.closest?l.target.closest(`.${A}__bar`):null;if(re){const de=e.placement.keys.get(re.dataset.key);de&&V(e,de,re)}}),Q("pointerout",l=>{l.target&&l.target.closest&&l.target.closest(`.${A}__bar`)&&P(e)}),Q("focusin",l=>{const re=l.target&&l.target.closest?l.target.closest(`.${A}__bar`):null;if(re){const de=e.placement.keys.get(re.dataset.key);de&&V(e,de,re)}}),Q("focusout",l=>{l.target&&l.target.closest&&l.target.closest(`.${A}__bar`)&&P(e)}),Q("keydown",l=>{const re=e.doc.activeElement&&e.doc.activeElement.closest?e.doc.activeElement.closest(`.${A}__bar`):null;if(re&&e.ctx.editable===!1){const de=e.placement.keys.get(re.dataset.key);if(l.key==="ArrowLeft"||l.key==="ArrowRight"||l.key==="ArrowUp"||l.key==="ArrowDown")l.preventDefault&&l.preventDefault(),s(e,l.key==="ArrowLeft"?"left":l.key==="ArrowRight"?"right":l.key==="ArrowUp"?"up":"down");else if(l.key==="Enter"||l.key===" ")l.preventDefault&&l.preventDefault(),de&&I(e,de);else if(l.key==="Home"||l.key==="End"){l.preventDefault&&l.preventDefault();const Oe=ie(e);for(const je of Oe)if(je.resourceKey===de.resourceKey){ee(e,je.events[l.key==="Home"?0:je.events.length-1]);break}}return}l.target&&l.target.closest&&l.target.closest(`.${A}__bar`)||(l.key==="+"||l.key==="="?(l.preventDefault&&l.preventDefault(),e.setZoom(Te(e,e.pxPerDay*1.25),"control")):l.key==="-"?(l.preventDefault&&l.preventDefault(),e.setZoom(Te(e,e.pxPerDay*.8),"control")):l.key==="ArrowLeft"||l.key==="ArrowRight"?(l.preventDefault&&l.preventDefault(),e.timeline.scrollLeft+=l.key==="ArrowRight"?80:-80,m(e)):(l.key==="ArrowUp"||l.key==="ArrowDown")&&(l.preventDefault&&l.preventDefault(),e.timeline.scrollTop+=l.key==="ArrowDown"?80:-80,m(e)))}),ve(e)}function xe(e){return e.gridHost?e.gridHost.querySelector(".lat-body-viewport"):null}function Te(e,R){return Math.min(624,Math.max(1.8,R))}}),Le("packages/modules/charts/scale.js",function(r,ae){"use strict";Object.defineProperty(r,"isNumber",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"toNumber",{enumerable:!0,get:function(){return S}}),Object.defineProperty(r,"toTime",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(r,"extent",{enumerable:!0,get:function(){return B}}),Object.defineProperty(r,"niceStep",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"niceDomain",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"measureDomain",{enumerable:!0,get:function(){return J}}),Object.defineProperty(r,"linearTicks",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"timeStepFor",{enumerable:!0,get:function(){return a}}),Object.defineProperty(r,"MONTH_STEPS",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"timeTicks",{enumerable:!0,get:function(){return me}}),Object.defineProperty(r,"linearScale",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"timeScale",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"key",{enumerable:!0,get:function(){return be}}),Object.defineProperty(r,"bandScale",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(r,"sqrtScale",{enumerable:!0,get:function(){return Se}});const De=[1,2,2.5,5,10],le=6e4,Z=36e5,fe=864e5,se=365.25*fe,A=[1,2,5,10,20,25,50,100],te=[1,5,10,25,50,100,250,500,1e3,5e3,15e3,3e4,le,5*le,15*le,30*le,Z,3*Z,6*Z,12*Z,fe,2*fe,7*fe,14*fe,30*fe,90*fe,180*fe,...A.map(G=>G*se)];function b(G){return typeof G=="number"&&Number.isFinite(G)}function S(G){if(G==null||G==="")return null;if(G instanceof Date){const D=G.getTime();return Number.isFinite(D)?D:null}if(typeof G=="boolean")return G?1:0;const U=Number(G);return Number.isFinite(U)?U:null}function Y(G){if(G==null||G==="")return null;if(G instanceof Date){const D=G.getTime();return Number.isFinite(D)?D:null}if(typeof G=="number")return Number.isFinite(G)?G:null;const U=Date.parse(String(G));return Number.isFinite(U)?U:null}function B(G){let U=1/0,D=-1/0;for(let c=0;c<G.length;c++){const H=G[c];b(H)&&(H<U&&(U=H),H>D&&(D=H))}return U===1/0?null:{min:U,max:D}}function O(G){if(!(G>0))return 1;const U=10**Math.floor(Math.log10(G));for(const D of De)if(G<=D*U)return D*U;return 10*U}function C(G,U=5){const D=O((G.max-G.min)/Math.max(1,U));return{min:Math.floor(G.min/D)*D,max:Math.ceil(G.max/D)*D,step:D}}function J(G,U={}){const D=B(G)||{min:0,max:1};let{min:c,max:H}=D;if(U.zero&&(c>0&&(c=0),H<0&&(H=0)),c===H){const t=Math.abs(c)>0?Math.abs(c)/10:1;c-=t,H+=t}if(U.nice!==!1){const t=C({min:c,max:H},U.ticks||5);c=t.min,H=t.max}return b(U.min)&&(c=U.min),b(U.max)&&(H=U.max),c===H&&(H=c+1),{min:c,max:H}}function x(G,U=5){const D=O((G.max-G.min)/Math.max(1,U)),c=Math.ceil(G.min/D),H=Math.floor(G.max/D),t=[];for(let u=c;u<=H;u++){const f=u*D;t.push(Math.abs(f)<D/1e6?0:Number(f.toPrecision(12)))}return t}function a(G,U=5){const D=Math.max(1,U),c=G/D;let H=te[te.length-1];for(const f of te)if(f>=c){H=f;break}if(H<se)return H;let t=H,u=Math.abs(G/H-D);for(const f of te){if(f<se)continue;const z=Math.abs(G/f-D);z<u&&(u=z,t=f)}return t}const g=new Map;function y(G){let U=g.get(G);return U||(U=new Intl.DateTimeFormat("en-US",{timeZone:G,year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}),g.set(G,U)),U}function T(G,U){const D={year:0,month:0,day:1,hour:0,minute:0,second:0};for(const c of y(U).formatToParts(new Date(G)))switch(c.type){case"year":D.year=Number(c.value);break;case"month":D.month=Number(c.value)-1;break;case"day":D.day=Number(c.value);break;case"hour":D.hour=Number(c.value)%24;break;case"minute":D.minute=Number(c.value);break;case"second":D.second=Number(c.value);break;default:break}return D}function ne(G,U,D){const c=Date.UTC(G,U,1);let H=c;for(let t=0;t<2;t++){const u=T(H,D),f=Date.UTC(u.year,u.month,u.day,u.hour,u.minute,u.second),z=c-f;if(z===0)break;H+=z}return H}function oe(G,U,D){const c=D?T(G.min,D).year:new Date(G.min).getUTCFullYear();let H=Math.ceil(c/U)*U;const t=f=>D?ne(f,0,D):Date.UTC(f,0,1);t(H)<G.min&&(H+=U);const u=[];for(;t(H)<=G.max;H+=U)u.push(t(H));return u}const W=new Map([[30*fe,1],[90*fe,3],[180*fe,6]]);function ge(G,U,D){const c=D?T(G.min,D):{year:new Date(G.min).getUTCFullYear(),month:new Date(G.min).getUTCMonth()};let H=c.year*12+c.month;const t=f=>{const z=Math.floor(f/12),v=f-z*12;return D?ne(z,v,D):Date.UTC(z,v,1)};t(H)<G.min&&(H+=1),H=Math.ceil(H/U)*U;const u=[];for(;;H+=U){const f=t(H);if(f>G.max)break;u.push(f)}return u}function me(G,U=5,D){const c=a(G.max-G.min,U);if(c>=se)return oe(G,Math.round(c/se),D);const H=W.get(c);if(H)return ge(G,H,D);const t=[],u=Math.ceil(G.min/c)*c;for(let f=u;f<=G.max;f+=c)t.push(f);return t}function ye(G,U){const D=G.max-G.min||1,[c,H]=U;return{kind:"linear",domain:G,range:U,of(t){return c+(t-G.min)/D*(H-c)},invert(t){return G.min+(t-c)/(H-c||1)*D},ticks(t=5){return x(G,t)}}}function ke(G,U){return{...ye(G,U),kind:"time",ticks(c=5,H){return me(G,c,H)}}}function be(G){if(G==null)return" null";if(G instanceof Date)return` date:${G.getTime()}`;if(typeof G=="object"){const U=G,D=U.id??U.key??U.value;return D!==void 0&&typeof D!="object"?` obj:${String(D)}`:` obj:${String(G)}`}return String(G)}function ve(G,U,D=.2){const c=Math.min(.9,Math.max(0,D)),[H,t]=U,u=new Map;for(let v=0;v<G.length;v++){const E=be(G[v]);u.has(E)||u.set(E,v)}const f=G.length?(t-H)/G.length:t-H,z=Math.max(0,f*(1-c));return{kind:"band",domain:G,range:U,bandwidth:z,step:f,of(v){const E=u.get(be(v));return E===void 0?NaN:H+E*f+(f-z)/2},centre(v){const E=this.of(v);return Number.isNaN(E)?NaN:E+z/2},ticks(){return G}}}function Se(G,U){const[D,c]=U,H=Math.max(Math.abs(G.max),Math.abs(G.min),0)||1;return{kind:"sqrt",domain:G,range:U,of(t){const u=Math.sqrt(Math.abs(t)/H);return D+u*(c-D)}}}}),Le("packages/modules/gantt/export.js",function(r,ae){"use strict";Object.defineProperty(r,"PRINT_NS",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"PAPERS",{enumerable:!0,get:function(){return te}}),Object.defineProperty(r,"PAGE_MARGIN",{enumerable:!0,get:function(){return b}}),Object.defineProperty(r,"PALETTE",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"esc",{enumerable:!0,get:function(){return J}}),Object.defineProperty(r,"paperPx",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"resolveRange",{enumerable:!0,get:function(){return a}}),Object.defineProperty(r,"cellText",{enumerable:!0,get:function(){return g}}),Object.defineProperty(r,"barMarkup",{enumerable:!0,get:function(){return y}}),Object.defineProperty(r,"timeHeadMarkup",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"bandRowsMarkup",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"bandGridMarkup",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"dataBandMarkup",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(r,"buildSplitSVG",{enumerable:!0,get:function(){return me}}),Object.defineProperty(r,"inlineSvgStyles",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"rasterizePNG",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"buildPrintDocument",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"openPrintWindow",{enumerable:!0,get:function(){return H}});const le=ae("packages/modules/charts/scale.js").linearScale,Z=ae("packages/modules/gantt/time.js"),fe=Z.toISODate,se=Z.toDayNumber,A="lat-gantt-print",te=Object.freeze({A4:{w:794,h:1123},Letter:{w:816,h:1056},A3:{w:1123,h:1587}}),b=36,S=26,Y=20,B=24,O=28,C=Object.freeze({text:"#1f2933",muted:"#57606a",border:"#d0d7de",surface:"#f1f3f5",bar:"#4a90d9",critical:"#e2513b",summary:"#2c3e50",milestone:"#33404d",progress:"rgba(0,0,0,0.28)",today:"#e2513b",workload:"#4a90d9",histogram:"#2c7a7b",over:"#e2513b",pageBg:"#ffffff"});function J(t){return String(t??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function x(t,u){const f=te[t]||te.A4;return u==="portrait"?{w:f.w,h:f.h}:{w:f.h,h:f.w}}function a(t,u){const f=u&&u.from!=null?se(u.from):t.domainMin,z=u&&u.to!=null?se(u.to):t.domainMax;return Number.isFinite(f)&&Number.isFinite(z)&&z>f?{from:f,to:z}:{from:t.domainMin,to:t.domainMax}}function g(t,u,f){if(u.unscheduled&&(t.kind==="start"||t.kind==="end"||t.kind==="duration"))return"";switch(t.kind){case"name":return u.name??"";case"start":return fe(u.es)??String(u.es);case"end":return fe(u.ef)??String(u.ef);case"duration":return String(Math.round(u.ef-u.es));case"assignee":{const z=f?f.assignee??f.assignees??f.owner:null;return(Array.isArray(z)?z:z==null?[]:[z]).map(String).filter(Boolean).join(", ")}case"progress":return u.percentComplete==null?"":`${Math.round(u.percentComplete)}%`;default:return f&&t.key?String(f[t.key]??""):""}}function y(t,u,f,z){if(!Number.isFinite(t.es)||!Number.isFinite(t.ef))return"";const v=Math.max(2,Math.round(z*.18)),E=f+v,N=Math.max(2,z-v*2);if(t.milestone){const L=u(t.es),j=f+z/2,he=Math.max(4,Math.min(9,z*.3)),ce=t.critical?C.critical:C.milestone;return`<path d="M ${L} ${j-he} L ${L+he} ${j} L ${L} ${j+he} L ${L-he} ${j} Z" fill="${ce}"/>`}const K=u(t.es),i=u(t.ef),_=Math.max(1,i-K),n=t.isSummary?C.summary:t.critical?C.critical:C.bar;let d=`<rect x="${K}" y="${E}" width="${_}" height="${N}" rx="3" fill="${n}"/>`;if(!t.isSummary&&t.percentComplete!=null&&t.percentComplete>0){const L=Math.max(0,Math.min(100,t.percentComplete)),j=Math.round(_*L/100);d+=`<rect x="${K}" y="${E}" width="${j}" height="${N}" fill="${C.progress}"/>`}return d}function T(t,u,f,z,v,E){const N=E==="month"||E==="quarter"?30:7;let K=`<rect x="0" y="0" width="${z}" height="${v}" fill="${C.surface}"/>`,i=Math.floor(t/N)*N;for(;i<u;i+=N){const _=f(i);K+=`<line x1="${_}" y1="0" x2="${_}" y2="${v}" stroke="${C.border}"/>`,K+=`<text x="${_+4}" y="${Math.round(v*.68)}" font-size="11" font-weight="600" fill="${C.muted}">${J(fe(i)??String(i))}</text>`}return K+=`<line x1="0" y1="${v}" x2="${z}" y2="${v}" stroke="${C.border}"/>`,K}function ne(t,u,f,z,v,E,N,K){const i=Math.max(1,...t.flatMap(n=>(n.cells||[]).filter(d=>d!=null)));let _="";return(u.cells||[]).forEach((n,d)=>{if(n==null)return;const L=K[d];if(!L)return;const j=z+f(L.start),he=Math.max(1,f(L.end)-f(L.start)-2),ce=Math.max(1,Math.round(n/i*(v-8))),q=E+v-4-ce,Pe=u.over&&u.over[d];_+=`<rect x="${j}" y="${q}" width="${he}" height="${ce}" fill="${Pe?C.over:N}"/>`}),_}function oe(t,u,f,z,v,E){if(!t||!t.rows||!t.rows.length)return"";let N="";return t.rows.forEach((K,i)=>{const _=v+i*z;N+=`<text x="4" y="${_+z/2+4}" font-size="11" fill="${C.text}">${J(K.label)}</text>`,N+=`<line x1="0" y1="${_+z}" x2="${f}" y2="${_+z}" stroke="${C.border}"/>`,N+=ne(t.rows,K,u,f,z,_,E,t.buckets)}),N}function W(t,u,f,z,v){const E=t&&t.grid;if(!E||!E.rows||!E.rows.length)return"";const N=E.columns,K=E.columnWidths,i=K.reduce((d,L)=>d+L,0);let _="",n=0;for(let d=0;d<N.length;d++)_+=`<text x="${n+6}" y="${z+Math.round(f*.65)}" font-size="11" font-weight="600" fill="${C.muted}">${J(N[d].title||N[d].id)}</text>`,n+=K[d];return _+=`<line x1="0" y1="${z+f}" x2="${i}" y2="${z+f}" stroke="${C.border}"/>`,E.rows.forEach((d,L)=>{const j=z+f+L*f;let he=0;for(let ce=0;ce<N.length;ce++){const q=ce===0&&d.taskId!=null?14:6;_+=`<text x="${he+q}" y="${j+f/2+4}" font-size="11" fill="${C.text}">${J(d.texts?d.texts[ce]:"")}</text>`,he+=K[ce]}_+=`<line x1="0" y1="${j+f}" x2="${i}" y2="${j+f}" stroke="${C.border}"/>`,_+=ne(E.rows,d,u,i,f,j,v,t.buckets)}),_}function ge(t,u,f,z,v){const E=t.rowHeight;let N=`<text x="6" y="${z+Math.round(E*.65)}" font-size="11" font-weight="600" fill="${C.muted}">${J(t.title)}</text>`;if(N+=`<line x1="0" y1="${z+E}" x2="${f+v}" y2="${z+E}" stroke="${C.border}"/>`,t.collapsed)return N;const K=t.totalsColumn?f-6:null;return t.rows.forEach((i,_)=>{const n=z+E+_*E,d=n+E/2+4,L=i.isTotal||i.isSummary?600:400;N+=`<text x="${6+(i.depth||0)*14}" y="${d}" font-size="11" font-weight="${L}" fill="${C.text}">${J(i.label)}</text>`,K!=null&&i.totalText&&(N+=`<text x="${K}" y="${d}" font-size="11" font-weight="${L}" text-anchor="end" fill="${C.text}">${J(i.totalText)}</text>`),(i.texts||[]).forEach((j,he)=>{const ce=t.buckets[he];if(!ce||!j)return;const q=u(ce.end);q<=0||u(ce.start)>=v||(N+=`<text x="${f+Math.min(v,q)-4}" y="${d}" font-size="10" font-weight="${L}" text-anchor="end" fill="${C.text}">${J(j)}</text>`)}),N+=`<line x1="0" y1="${n+E}" x2="${f+v}" y2="${n+E}" stroke="${C.border}"/>`}),N}function me(t,u={}){const f=a(t,u.range),z=Math.max(1,Math.round(t.pxPerDay*(f.to-f.from))),v=le({min:f.from,max:f.to},[0,z]),E=q=>Math.round(v.of(q)),N=t.columnWidths.reduce((q,Pe)=>q+Pe,0),K=N+z,i=Math.max(B,O),_=i;let n=0;t.workload&&(n+=t.workload.cfg.height),t.histogram&&(n+=t.histogram.cfg.height);const d=Array.isArray(t.dataBands)?t.dataBands:[];for(const q of d)n+=q.collapsed?q.rowHeight:(q.rows.length+1)*q.rowHeight;const L=_+t.totalHeight+n;let j="",he=0;for(let q=0;q<t.columns.length;q++){const Pe=t.columnWidths[q];j+=`<text x="${he+6}" y="${Math.round(i*.65)}" font-size="11" font-weight="600" fill="${C.muted}">${J(t.columns[q].title||t.columns[q].id||t.columns[q].key)}</text>`,he+=Pe}if(j+=`<line x1="0" y1="${i}" x2="${N}" y2="${i}" stroke="${C.border}"/>`,j+=`<g transform="translate(${N},0)">${T(f.from,f.to,E,z,i,t.zoomLevel)}</g>`,t.rows.forEach((q,Pe)=>{const Ae=_+q.top;let Ee=0;for(let k=0;k<t.columns.length;k++){const m=t.columns[k],o=t.columnWidths[k],ie=t.cellTexts?t.cellTexts[Pe][k]:g(m,q.rec,t.rawById.get(String(q.id))),F=m.kind==="name"?q.depth*14+6:6;j+=`<text x="${Ee+F}" y="${Ae+q.height/2+4}" font-size="12" font-weight="${q.rec.isSummary?600:400}" fill="${q.rec.isSummary?C.summary:C.text}">${J(ie)}</text>`,Ee+=o}j+=`<line x1="0" y1="${Ae+q.height}" x2="${K}" y2="${Ae+q.height}" stroke="${C.border}"/>`,j+=`<g transform="translate(${N},${Ae})">${y(q.rec,E,0,q.height)}</g>`}),t.today!=null&&t.today>=f.from&&t.today<=f.to){const q=N+E(t.today);j+=`<line x1="${q}" y1="0" x2="${q}" y2="${_+t.totalHeight}" stroke="${C.today}" stroke-width="1.5" stroke-dasharray="4 3"/>`}let ce=_+t.totalHeight;for(const[q,Pe]of[[t.workload,C.workload],[t.histogram,C.histogram]])if(q){if(j+=`<rect x="0" y="${ce}" width="${K}" height="${q.cfg.height}" fill="${C.pageBg}"/>`,q.data&&q.data.grid)j+=W(q.data,E,q.cfg.rowHeight,ce,Pe);else{const Ae=Math.max(40,N);j+=`<g transform="translate(${Ae},0)">${oe(q.data,E,0,q.cfg.rowHeight,ce,Pe)}</g>`}j+=`<line x1="0" y1="${ce}" x2="${K}" y2="${ce}" stroke="${C.border}" stroke-width="2"/>`,ce+=q.cfg.height}for(const q of d){const Pe=q.collapsed?q.rowHeight:(q.rows.length+1)*q.rowHeight;j+=`<g data-band="${J(q.id)}">${ge(q,E,N,ce,z)}</g>`,j+=`<line x1="0" y1="${ce}" x2="${K}" y2="${ce}" stroke="${C.border}" stroke-width="2"/>`,ce+=Pe}return`<svg xmlns="http://www.w3.org/2000/svg" width="${K}" height="${L}" viewBox="0 0 ${K} ${L}" font-family="system-ui,sans-serif"><rect x="0" y="0" width="${K}" height="${L}" fill="${C.pageBg}"/>${j}</svg>`}function ye(t,u,f){const z=["fill","fill-opacity","stroke","stroke-width","stroke-opacity","stroke-dasharray","stroke-linejoin","stroke-linecap","font-size","font-family","font-weight","opacity","text-anchor","dominant-baseline","visibility"],v=[t,...t.querySelectorAll("*")],E=[u,...u.querySelectorAll("*")];for(let N=0;N<v.length&&N<E.length;N++){const K=f.getComputedStyle(v[N]),i=[];for(const _ of z){const n=K.getPropertyValue(_);n&&i.push(`${_}:${n}`)}i.length&&E[N].setAttribute("style",i.join(";"))}}async function ke(t,u,f,z,v,E){const N=t&&t.defaultView||globalThis;if(!N.Image||!t.createElement)return null;const K=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(u)}`,i=new N.Image;await new Promise((d,L)=>{i.onload=d,i.onerror=()=>L(new Error("the plan could not be rasterised")),i.src=K});const _=t.createElement("canvas");_.width=Math.max(1,Math.round(f*v)),_.height=Math.max(1,Math.round(z*v));const n=_.getContext("2d");return E&&(n.fillStyle=E,n.fillRect(0,0,_.width,_.height)),n.drawImage(i,0,0,_.width,_.height),new Promise(d=>_.toBlob(d,"image/png"))}function be(t,u){const f=[];let z=[],v=0;for(const E of t){const N=Math.max(1,E.height);z.length&&v+N>u&&(f.push(z),z=[],v=0),z.push(E),v+=N}return(z.length||!f.length)&&f.push(z),f}function ve(t){return`
184
- @page { size: ${t.w}px ${t.h}px; margin: 0; }
190
+ @media (forced-colors: active){ .${K}__bar,.${K}__tick,.${K}__row{ border-color:CanvasText; } }
191
+ @media (prefers-reduced-motion: reduce){ .${K}__bar{ transition:none; } }
192
+ @scope ([data-theme="dark"]){:scope.${K},.${K}{color-scheme:dark}}
193
+ @scope ([data-theme="light"],[data-theme="auto"]){:scope.${K},.${K}{color-scheme:light}}
194
+ @media (prefers-color-scheme:dark){@scope ([data-theme="auto"]){:scope.${K},.${K}{color-scheme:dark}}}
195
+ `.trim()}function A(Q){const p=Q&&Q.documentElement;if(!p||p.getAttribute(ue))return;p.setAttribute(ue,"1");const $=Q.createElement("style");$.textContent=re(),(Q.head||Q.body||p).appendChild($)}}),Fe("packages/modules/scheduler/workload.js",function(r,se){"use strict";Object.defineProperty(r,"bucketPeriodLabel",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"computeWorkloadModel",{enumerable:!0,get:function(){return v}});const we=se("packages/modules/gantt/workload.js"),ie=we.computeWorkload,K=we.workloadBuckets,ue=se("packages/modules/gantt/resources.js"),re=ue.normalizeCapacities,A=ue.normalizeResources,Q=ue.resourceDisplayNames,p=se("packages/modules/scheduler/model.js"),$=p.accessorFor,H=p.eventSpan,I=p.eventText,x=864e5;function N(o){return typeof o=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(o.trim())}function V(o,d){const u=o.locale||void 0,O=o.timeZone||"UTC";return new Intl.DateTimeFormat(u,{month:"short",day:"numeric",timeZone:O}).format(new Date(Math.round(d)*x))}function v(o,d){const u=o.workload;if(!u||!d)return null;const O=o.zoom.level==="hour"?"day":o.zoom.level,te=K(O,d.startDay,d.endDay,o.weekStartDay),ne=$(o.resourceKey),W=$(o.fields.resourceId),oe=$(o.eventKey),ce=$(o.fields.calendar),ye=[];for(const f of o.resources){const y=ne(f);y==null||y===""||ye.push({...f,id:String(y),calendar:ce(f)})}const he=re(ye,u.defaultCapacity),fe=A(ye,u.defaultCapacity,{calendar:null,calendars:o.calendars,hoursPerDay:u.hoursPerDay}),ke=new Map;for(const[f,y]of fe)y&&y.hasCalendar&&typeof y.worksOn=="function"&&ke.set(f,{isWorking:z=>y.worksOn(z)});const ve=[],G=[],U=new Map;for(const f of o.events){const y=H(o,f);if(!y.start)continue;const z=W(f);if(z==null||z==="")continue;const D=String(z),T=oe(f),F=T==null?`event:${o.events.indexOf(f)}`:String(T),J=I(o,f,T),c=$(o.fields.startDate)(f),R=$(o.fields.endDate)(f),S=N(c)&&N(R)?null:(y.end.day+y.end.frac-y.start.day-y.start.frac)*24;ve.push({id:F,name:J,assignee:D,hours:S}),G.push(F),U.set(F,{es:y.start.day+y.start.frac,ef:y.end.day+y.end.frac,isSummary:!1,unscheduled:!1,inactive:!1,name:J,calendar:ke.has(D)?D:null})}const M=ie(ve,{ok:!0,order:G,tasks:U,calendars:ke},{buckets:te,hoursPerDay:u.hoursPerDay,isWorking:null,capacities:he,resourceModels:fe}),h=new Map;for(const f of M.rows)f.resource!=null&&h.set(f.resource,f);for(const[f,y]of fe){if(h.has(f))continue;const z=he.has(f)?he.get(f):null,D=M.buckets.map(F=>{if(y.hasCalendar){let J=0;for(let c=Math.floor(F.start);c<Math.ceil(F.end);c+=1)J+=y.capacityHoursOn(c);return J}return z==null?null:z*u.hoursPerDay*F.workingDays});let T=null;for(const F of D)F!=null&&(T=(T??0)+F);h.set(f,{resource:f,capacity:z,available:D,availableTotal:T,cells:M.buckets.map(()=>null),over:M.buckets.map(()=>!1),total:0})}const B=Q(ye),n=[];for(const f of M.rows){if(f.resource==null)continue;const y=[];f.over.forEach((z,D)=>{z&&y.push(D)}),y.length&&n.push({resource:f.resource,name:B.get(f.resource)||f.resource,count:y.length,periods:y.map(z=>V(o,M.buckets[z].start))})}return{buckets:M.buckets,rows:h,overAllocated:n,hoursPerDay:u.hoursPerDay,decimals:u.decimals}}}),Fe("packages/modules/scheduler/messages.js",function(r,se){"use strict";Object.defineProperty(r,"FALLBACK_EN",{enumerable:!0,get:function(){return K}}),Object.defineProperty(r,"t",{enumerable:!0,get:function(){return re}});const ie=se("packages/core/src/internal/predicates.js").isFunction,K=Object.freeze({"scheduler.scheduler":"Scheduler","scheduler.resource":"Resource","scheduler.event":{one:"event",other:"events"},"scheduler.print.page":"Page {page} of {pages}","scheduler.print.printed":"Printed {date}","scheduler.readOnlyEvent":"The event is read-only.","scheduler.readOnlyResource":"The resource is read-only.","scheduler.delete":"Delete","scheduler.ungrouped":"Ungrouped","scheduler.group":"Group","scheduler.timeline":"Time axis","scheduler.divider":"Resource pane divider","scheduler.divider.resize":"Resource pane {width} pixels wide","scheduler.divider.min":"Resource pane at its minimum width","scheduler.divider.max":"Resource pane at its maximum width","scheduler.toggleGroup":"Toggle {group}","scheduler.eventActivated":"{name}","scheduler.tip.start":"Start","scheduler.tip.end":"End","scheduler.tip.duration":"Duration","scheduler.tip.durationValue":"{hours} h","scheduler.tip.resource":"Resource","scheduler.tip.row":"{label}: {value}","scheduler.workload.overSummary":"Over-allocated: {list}","scheduler.workload.overItem":"{resource} ({periods})","scheduler.workload.overCell":"{resource}, {period}: {percent} — over-allocated"});function ue(A,Q){const p=K[A];if(!p)return A;const $=Q&&typeof Q.count=="number"?Q.count:NaN;return(typeof p=="string"?p:($===1?p.one:p.other)||p.other).replace(/\{(\w+)\}/g,(I,x)=>Q&&x in Q?String(Q[x]):I)}function re(A,Q,p){const $=A&&A.config?A.config:{},H=$.messages&&ie($.messages.t)?$.messages:null;if(H){let I;try{I=H.t(Q,p)}catch{I=null}if(typeof I=="string"&&I&&I!==Q)return I}return ue(Q,p)}}),Fe("packages/modules/scheduler/gestures.js",function(r,se){"use strict";Object.defineProperty(r,"attachEditing",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"addHandles",{enumerable:!0,get:function(){return I}});const ie=se("packages/modules/scheduler/styles.js").NS,ue=se("packages/modules/scheduler/messages.js").t,re=se("packages/modules/scheduler/model.js"),A=re.isEventReadOnly,Q=re.isResourceReadOnly,p=re.accessorFor,$=3;function H(x){const N=x.ctx,V=x.doc;if(!x.canvas||!V)return;let v=null,o=null;const d=()=>x.pxPerDay||1,u=h=>{const B=x.canvas.getBoundingClientRect(),n=Math.floor((h-B.top)/N.rowHeight),f=x.resources[n];return f?p(N.resourceKey)(f):null},O=h=>{const B=x.canvas.getBoundingClientRect();return x.span.startDay+(h-B.left)/d()},te=h=>{const B=h&&h.closest?h:null;if(!B)return null;const n=B.closest(`.${ie}__handle`),f=n?n.closest(`.${ie}__bar`):B.closest(`.${ie}__bar`);return f?{key:f.getAttribute("data-key"),bar:f,edge:n?n.getAttribute("data-edge"):null}:null},ne=h=>{x.live&&(x.live.textContent=h)},W=h=>{ne(ue(x,h==="event"?"scheduler.readOnlyEvent":"scheduler.readOnlyResource"))},oe=h=>{const B=x.events.get(h);if(!B||!N.editable)return!1;if(A(N,B))return W("event"),!1;const n=p(N.fields.resourceId)(B),f=n==null?null:x.rows.get(n);return Q(N,f)?(W("resource"),!1):!0},ce=(h,B,n)=>{if(!oe(h.key))return;const f=x.placement.keys.get(h.key);f&&(v={mode:h.edge?"resize":"move",key:h.key,edge:h.edge,startX:B,startY:n,startDay:f.startDay,endDay:f.endDay,resourceKey:f.resourceKey,bar:h.bar,ghost:null})},ye=(h,B)=>{if(!N.editable)return;const n=u(B);if(n==null)return;const f=x.rows.get(n);if(Q(N,f)){W("resource");return}v={mode:"create",key:null,edge:null,startX:h,startY:B,startDay:O(h),endDay:O(h),resourceKey:n,bar:null,ghost:null}},he=(h,B)=>{if(!v)return;const n=v;if(n.mode==="move"){const f=(h-n.startX)/d();n.bar.style.left=`${(n.startDay-x.span.startDay+f)*d()}px`}else if(n.mode==="resize"){const f=(h-n.startX)/d();if(n.edge==="start"){const y=(n.startDay-x.span.startDay+f)*d();n.bar.style.left=`${y}px`,n.bar.style.width=`${Math.max(2,(n.endDay-n.startDay-f)*d())}px`}else n.bar.style.width=`${Math.max(2,(n.endDay-n.startDay+f)*d())}px`}else if(n.mode==="create"){n.endDay=O(h),n.ghost||(n.ghost=x.doc.createElement("div"),n.ghost.className=`${ie}__bar ${ie}__bar--ghost`,(x.canvas.querySelector(`.${ie}__row[data-resource="${CSS.escape(String(n.resourceKey))}"]`)||x.canvas).appendChild(n.ghost));const f=Math.min(n.startDay,n.endDay),y=Math.max(n.startDay,n.endDay);n.ghost.style.left=`${(f-x.span.startDay)*d()}px`,n.ghost.style.width=`${Math.max(2,(y-f)*d())}px`}},fe=(h,B)=>{if(!v)return;const n=v;if(v=null,n.ghost&&n.ghost.parentNode&&n.ghost.parentNode.removeChild(n.ghost),n.mode==="move"){const f=u(B);if(f!=null&&String(f)!==String(n.resourceKey))x.edit.reassign(n.key,f,{origin:"user"});else{const y=(h-n.startX)/d();x.edit.move(n.key,y,{origin:"user"})}}else if(n.mode==="resize"){const f=(h-n.startX)/d(),y=(n.edge==="start"?n.startDay:n.endDay)+f;x.edit.resize(n.key,n.edge,y,{origin:"user"})}else n.mode==="create"&&x.edit.create(n.resourceKey,n.startDay,n.endDay,{origin:"user"})},ke=h=>{if(h.button!=null&&h.button!==0)return;const B=te(h.target);if(B?(h.preventDefault&&h.preventDefault(),ce(B,h.clientX,h.clientY)):h.target&&h.target.closest&&h.target.closest(`.${ie}__row`)&&ye(h.clientX,h.clientY),v){const n=y=>he(y.clientX,y.clientY),f=y=>{fe(y.clientX,y.clientY),V.removeEventListener("pointermove",n),V.removeEventListener("pointerup",f)};V.addEventListener("pointermove",n),V.addEventListener("pointerup",f)}},ve=h=>{const B=te(h.target);if(h.key==="z"&&(h.ctrlKey||h.metaKey)){if(!x.edit)return;h.preventDefault&&h.preventDefault(),h.shiftKey?x.edit.redo({origin:"user"}):x.edit.undo({origin:"user"});return}if(!B)return;const n=N.zoom.step;if(h.key==="Delete"||h.key==="Backspace"){if(!oe(B.key))return;h.preventDefault&&h.preventDefault(),x.edit.remove(B.key,{origin:"user",event:h})}else if(h.key==="ArrowLeft"||h.key==="ArrowRight"){if(!oe(B.key))return;h.preventDefault&&h.preventDefault();const f=h.key==="ArrowRight"?1:-1;if(h.shiftKey){const y=x.placement.keys.get(B.key);y&&x.edit.resize(B.key,"end",y.endDay+f*n,{origin:"user",event:h})}else x.edit.move(B.key,f*n,{origin:"user",event:h})}else if(h.key==="ArrowUp"||h.key==="ArrowDown"){if(!oe(B.key))return;h.preventDefault&&h.preventDefault();const f=x.placement.keys.get(B.key);if(!f)return;const y=x.resources.findIndex(D=>String(p(N.resourceKey)(D))===String(f.resourceKey)),z=x.resources[y+(h.key==="ArrowDown"?1:-1)];if(z){const D=p(N.resourceKey)(z);if(Q(N,z)){W("resource");return}x.edit.reassign(B.key,D,{origin:"user",event:h})}}},G=h=>{const B=te(h.target);if(!B||(h.preventDefault&&h.preventDefault(),!oe(B.key)))return;U(),o=B.key;const n=x.doc.createElement("div");n.className=`${ie}__menu`,n.setAttribute("role","menu");const f=x.doc.createElement("button");f.className=`${ie}__menu-item`,f.setAttribute("role","menuitem"),f.textContent=ue(x,"scheduler.delete"),f.addEventListener("click",()=>{o!=null&&x.edit.remove(o,{origin:"user"}),U()}),n.appendChild(f),n.style.left=`${h.clientX}px`,n.style.top=`${h.clientY}px`,n.style.position="fixed",x.el.appendChild(n),n.__menu=!0;const y=z=>{if(!n.contains(z.target)){if(z.key==="Escape"){U();return}U()}};V.addEventListener("pointerdown",y,!0),V.addEventListener("keydown",y,!0),n.__cleanup=()=>{V.removeEventListener("pointerdown",y,!0),V.removeEventListener("keydown",y,!0)},f.focus()},U=()=>{const h=x.el?x.el.querySelector(`.${ie}__menu`):null;h&&(h.__cleanup&&h.__cleanup(),h.parentNode&&h.parentNode.removeChild(h)),o=null};x.canvas.addEventListener("pointerdown",ke),x.canvas.addEventListener("keydown",ve),x.canvas.addEventListener("contextmenu",G);const M=()=>{U(),x.canvas.removeEventListener("pointerdown",ke),x.canvas.removeEventListener("keydown",ve),x.canvas.removeEventListener("contextmenu",G)};x._editDetach=M}function I(x,N){if(x.ctx.editable===!1)return;const V=x.doc;for(const v of["start","end"]){const o=V.createElement("div");o.className=`${ie}__handle ${ie}__handle--${v}`,o.setAttribute("data-edge",v),o.setAttribute("aria-hidden","true"),N.appendChild(o)}}}),Fe("packages/modules/scheduler/divider.js",function(r,se){"use strict";Object.defineProperty(r,"DEFAULT_RESOURCE_WIDTH",{enumerable:!0,get:function(){return re}}),Object.defineProperty(r,"MIN_RESOURCE_WIDTH",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"MIN_TIMELINE_SHARE_PX",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(r,"maxResourceWidth",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"clampResourceWidth",{enumerable:!0,get:function(){return I}}),Object.defineProperty(r,"applyResourceWidth",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"insertDividers",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"wireDivider",{enumerable:!0,get:function(){return v}});const ie=se("packages/modules/scheduler/styles.js").NS,ue=se("packages/modules/scheduler/messages.js").t,re=300,A=80,Q=120,p=8,$=32;function H(o){const d=o.el&&Number.isFinite(o.el.clientWidth)?o.el.clientWidth:0;return d>0?Math.max(A,d-Q):1/0}function I(o,d){return Math.round(Math.max(A,Math.min(H(o),d)))}function x(o,d){const u=I(o,d);return o.ctx.resourceWidth=u,o.el&&o.el.style&&o.el.style.setProperty("--lattice-scheduler-grid-width",`${u}px`),o.divider&&(o.divider.setAttribute("aria-valuenow",String(u)),o.divider.setAttribute("aria-valuemax",String(H(o)))),u}function N(o){if(!o.head||!o.body)return;const{doc:d}=o,u=d.createElement("div");u.className=`${ie}__divider`,u.setAttribute("aria-hidden","true"),o.head.insertBefore(u,o.headView);const O=d.createElement("div");O.className=`${ie}__divider ${ie}__divider--resize`,O.setAttribute("tabindex","0"),O.setAttribute("role","separator"),O.setAttribute("aria-orientation","vertical"),O.setAttribute("aria-label",ue(o,"scheduler.divider")),O.setAttribute("aria-valuemin",String(A)),O.setAttribute("aria-valuemax",String(H(o))),O.setAttribute("aria-valuenow",String(o.ctx.resourceWidth)),o.body.insertBefore(O,o.timeline),o.divider=O,v(o)}function V(o,d,u){o.live&&(o.live.textContent=ue(o,d,u))}function v(o){const d=o.divider;if(!d||!o.doc)return;let u=null;const O=oe=>{oe&&oe.button!=null&&oe.button!==0||(u={startX:oe&&oe.clientX||0,startWidth:o.ctx.resourceWidth},oe&&oe.preventDefault&&oe.preventDefault(),o.doc.addEventListener("pointermove",te),o.doc.addEventListener("pointerup",ne))},te=oe=>{if(!u)return;const ce=(oe&&oe.clientX||0)-u.startX;x(o,u.startWidth+ce)},ne=oe=>{const ce=u;if(u=null,o.doc.removeEventListener("pointermove",te),o.doc.removeEventListener("pointerup",ne),!ce)return;const ye=(oe&&oe.clientX||0)-ce.startX,he=x(o,ce.startWidth+ye);V(o,"scheduler.divider.resize",{width:he})},W=oe=>{if(oe.key!=="ArrowLeft"&&oe.key!=="ArrowRight")return;oe.preventDefault&&oe.preventDefault();const ce=oe.shiftKey?$:p,ye=oe.key==="ArrowRight"?ce:-ce,he=o.ctx.resourceWidth,fe=x(o,he+ye);fe!==he?V(o,"scheduler.divider.resize",{width:fe}):V(o,ye<0?"scheduler.divider.min":"scheduler.divider.max")};d.addEventListener("pointerdown",O),d.addEventListener("keydown",W),o._dividerOff=()=>{d.removeEventListener("pointerdown",O),d.removeEventListener("keydown",W),o.doc.removeEventListener("pointermove",te),o.doc.removeEventListener("pointerup",ne)}}}),Fe("packages/modules/scheduler/view.js",function(r,se){"use strict";Object.defineProperty(r,"HEAD_H",{enumerable:!0,get:function(){return c}}),Object.defineProperty(r,"GROUP_COL_ID",{enumerable:!0,get:function(){return R}}),Object.defineProperty(r,"LOAD_H",{enumerable:!0,get:function(){return s}}),Object.defineProperty(r,"t",{enumerable:!0,get:function(){return U}}),Object.defineProperty(r,"FALLBACK_EN",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"computeDisplayRows",{enumerable:!0,get:function(){return _}}),Object.defineProperty(r,"refreshVisible",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(r,"layout",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(r,"xOf",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(r,"render",{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(r,"mountGrid",{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(r,"syncGrid",{enumerable:!0,get:function(){return Me}}),Object.defineProperty(r,"toggleGroup",{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(r,"renderHead",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"renderTimeline",{enumerable:!0,get:function(){return i}});const ie=se("packages/core/src/internal/predicates.js").isFunction,ue=se("packages/modules/charts/svg.js").el,re=se("packages/modules/scheduler/styles.js"),A=re.NS,Q=re.injectStyles,p=se("packages/modules/scheduler/model.js"),$=p.accessorFor,H=p.placeEvents,I=p.axisSpan,x=p.anchorDay,N=p.computeTicks,V=p.resourceNonWorking,v=p.laneCount,o=p.eventText,d=p.parseDate,u=p.visibleEvents,O=p.visibleResources,te=p.buildDisplayRows,ne=p.isEventReadOnly,W=se("packages/modules/scheduler/workload.js"),oe=W.computeWorkloadModel,ce=W.bucketPeriodLabel,he=se("packages/modules/gantt/workload.js").formatPercent,fe=se("packages/modules/scheduler/gestures.js"),ke=fe.attachEditing,ve=fe.addHandles,G=se("packages/modules/scheduler/messages.js"),U=G.t,M=G.FALLBACK_EN,B=se("packages/modules/gantt/time.js").toDayNumber,n=se("packages/modules/gantt/tooltip.js"),f=n.buildTooltipCard,y=n.positionTooltip,D=se("packages/modules/gantt/workload-groups.js").groupOfResource,T=se("packages/modules/scheduler/divider.js"),F=T.insertDividers,J=T.applyResourceWidth,c=32,R="__schedGroup",s=12;function S(e,a){return a==null||a===""?U(e,"scheduler.ungrouped"):String(a)}function j(e,a,ee){const q=a&&(a.name??a.label??a.title);return q!=null&&q!==""?String(q):String(ee)}function _(e){const a=e.ctx;if(e.grid&&e.groupColId&&ie(e.grid.rows.get)&&ie(e.grid.rows.count)){const ee=new Map(e.resources.map(le=>[String($(a.resourceKey)(le)),le])),q=[],L=e.grid.rows.count();for(let le=0;le<L;le++){const Se=e.grid.rows.get(le);if(Se)if(Se.group)q.push({type:"group",key:Se.key,value:Se.groupValue,label:S(e,Se.groupValue),expanded:!!Se.expanded});else{const Ae=ee.get(String(Se.key));Ae&&q.push({type:"resource",resource:Ae})}}return q}return te(a.visibleResources,a.groupBy,e.collapsedGroups,U(e,"scheduler.ungrouped"))}function ge(e){e.ctx.visibleEvents=u(e.ctx),e.ctx.visibleResources=O(e.ctx)}function ae(e){const a=e.ctx;ge(e),e.placement=H(a,a.visibleEvents);const ee=x(a);if(e.span=I(a,ee),a.fit){const q=e.timeline?e.timeline.clientWidth:0,L=e.span.endDay-e.span.startDay;q>0&&L>0&&(a.zoom.px=q/L)}e.ticks=N(a,e.span.startDay,e.span.endDay),e.pxPerDay=a.zoom.px,e.totalWidth=(e.span.endDay-e.span.startDay)*e.pxPerDay,e.displayRows||(e.displayRows=_(e)),e.totalHeight=e.displayRows.length*a.rowHeight,e.anchorDay=ee,e.workload=oe(a,e.span),C(e),i(e),De(e)}function Z(e,a){return(a-e.span.startDay)*e.pxPerDay}function Oe(e){const{el:a,doc:ee}=e;if(!a)return;for(Q(ee),a.classList.add(A),a.setAttribute("role","grid"),a.setAttribute("aria-label",e.ctx.ariaLabel||e.ctx.labels.scheduler||U(e,"scheduler.scheduler"));a.firstChild;)a.removeChild(a.firstChild);const q=ee.createElement("div");q.className=`${A}__head`;const L=ee.createElement("div");L.className=`${A}__head-corner`,L.textContent=e.ctx.labels.resource||U(e,"scheduler.resource"),q.appendChild(L);const le=ee.createElement("div");le.className=`${A}__head-view`;const Se=ee.createElement("div");Se.className=`${A}__head-inner`,le.appendChild(Se),q.appendChild(le),a.appendChild(q),e.head=q,e.headView=le,e.headInner=Se;const Ae=ee.createElement("div");Ae.className=`${A}__body`;const Te=ee.createElement("div");Te.className=`${A}__grid-space`,Ae.appendChild(Te);const Re=ee.createElement("div");Re.className=`${A}__timeline`,Re.setAttribute("tabindex","0"),Re.setAttribute("aria-label",U(e,"scheduler.timeline"));const _e=ee.createElement("div");_e.className=`${A}__canvas`,Re.appendChild(_e),Ae.appendChild(Re),a.appendChild(Ae),e.body=Ae;const We=ee.createElement("div");We.className=`${A}__grid`,a.appendChild(We),e.gridHost=We,e.timeline=Re,e.canvas=_e;const Ve=ue(ee,"div",`${A}__tooltip`);Ve.setAttribute("hidden","");const Ye=ue(ee,"div",`${A}__tip-arrow`);Ve.appendChild(Ye),a.appendChild(Ve),e.tip=Ve,e.tipArrow=Ye;const Be=ee.createElement("div");Be.className=`${A}__live`,Be.setAttribute("aria-live","polite"),Be.setAttribute("role","status"),a.appendChild(Be),e.live=Be,J(e,e.ctx.resourceWidth),F(e),ge(e),Pe(e),Me(e),ae(e),e.wired||(Ie(e),e.wired=!0)}function Pe(e){const{ctx:a}=e;if(e.grid=null,e.groupColId=null,!a.createGrid||!e.gridHost)return;const ee=a.resourceKey,q=a.groupBy,L=[...a.columns];let le=null,Se=!1,Ae;if(q){if(typeof q=="string"){const Re=L.find(_e=>_e&&(_e.id===q||_e.field===q));Re&&(le=Re.id,Re.layout&&typeof Re.layout.width=="number"&&Re.layout.width>0&&(Ae=Re.layout.width))}le||(le=R,Se=!0,Ae=120,L.push({id:R,field:R,title:U(e,"scheduler.group"),layout:{width:120}}))}const Te=a.visibleResources.map(Re=>{const _e={...Re,__key:$(ee)(Re)};return Se&&(_e[R]=D(q,Re)??""),_e});try{const Re={columns:L,rows:Te,rowKey:"__key",edit:!1,selection:"none",contextMenu:!1,headerHeight:c,rowHeight:a.rowHeight};Ae!=null&&(Re.autoGroupColumnWidth=Ae),e.grid=a.createGrid(e.gridHost,Re),le&&e.grid.columns&&ie(e.grid.columns.group)&&e.grid.columns.group([le]),e.groupColId=le,e._gridKeys=new Set(Te.map(_e=>_e.__key))}catch{e.grid=null,e.groupColId=null}Ce(e)}function Me(e){const{ctx:a}=e;if(ge(e),e.grid&&e.grid.rows&&ie(e.grid.rows.apply)){const ee=a.resourceKey,q=a.visibleResources.map(Ae=>{const Te={...Ae,__key:$(ee)(Ae)};return e.groupColId===R&&(Te[R]=D(a.groupBy,Ae)??""),Te}),L=e._gridKeys||new Set,le=new Set;for(const Ae of q)le.add(Ae.__key);const Se=[];for(const Ae of L)le.has(Ae)||Se.push(Ae);try{e.grid.rows.apply({add:q,remove:Se})}catch{}e._gridKeys=le}e.displayRows=_(e)}function $e(e){e.displayRows=_(e),e.totalHeight=e.displayRows.length*e.ctx.rowHeight,i(e)}function Ee(e,a){if(e.groupColId&&e.grid&&ie(e.grid.rows.collapse)&&ie(e.grid.rows.expand)){e.grid.rows[a.expanded?"collapse":"expand"](a.key);return}a.expanded?e.collapsedGroups.add(a.value):e.collapsedGroups.delete(a.value),$e(e)}function C(e){if(!e.headInner)return;const a=e.doc;for(;e.headInner.firstChild;)e.headInner.removeChild(e.headInner.firstChild);e.headInner.style.width=`${e.totalWidth}px`;for(const ee of e.ticks){const q=a.createElement("div");q.className=`${A}__tick`,q.style.left=`${Z(e,ee.day)}px`,q.textContent=ee.label,e.headInner.appendChild(q)}}function w(e,a){const ee=e.pxPerDay||1,q=e.span.startDay+Math.floor(a/ee),L=e.timeline?e.timeline.clientWidth:0,le=q+Math.ceil(L/ee)+1;return{first:q,last:Math.min(le,e.span.endDay)}}function i(e){if(!e.canvas)return;const a=e.ctx,ee=e.doc,q=e.timeline?e.timeline.scrollTop:0,L=e.timeline?e.timeline.scrollLeft:0;for(e.canvas.style.width=`${e.totalWidth}px`,e.canvas.style.height=`${e.totalHeight}px`;e.canvas.firstChild;)e.canvas.removeChild(e.canvas.firstChild);const le=e.displayRows||[],Se=a.rowHeight,Ae=a.overscan,Te=Math.max(0,Math.floor(q/Se)-Ae),Re=e.timeline?e.timeline.clientHeight:0,_e=Math.min(le.length-1,Math.ceil((q+Re)/Se)+Ae),We=w(e,L),Ve=$(a.resourceKey),Ye=e.workload,Be=Ye?Ye.buckets:[];let rt=0,tt=Be.length-1;for(;rt<Be.length&&Be[rt].end<=We.first;)rt+=1;for(;tt>=0&&Be[tt].start>=We.last;)tt-=1;for(let Qe=Te;Qe<=_e;Qe++){const He=le[Qe];if(!He)continue;const Ze=Qe*Se;if(He.type==="group"){const Le=ee.createElement("div");Le.className=`${A}__group`,Le.setAttribute("data-group",String(He.value??"")),Le.setAttribute("role","row"),Le.setAttribute("aria-label",He.label),Le.style.top=`${Ze}px`,Le.style.height=`${Se}px`,Le.style.width=`${e.totalWidth}px`;const Ke=ee.createElement("button");Ke.className=`${A}__group-toggle`,Ke.type="button",Ke.setAttribute("aria-label",U(e,"scheduler.toggleGroup",{group:He.label})),Ke.setAttribute("aria-expanded",He.expanded?"true":"false"),Ke.textContent=He.expanded?"−":"+",Ke.addEventListener("click",ze=>{ze.stopPropagation(),Ee(e,He)}),Le.appendChild(Ke);const Je=ee.createElement("span");Je.className=`${A}__group-label`,Je.textContent=He.label,Le.appendChild(Je),e.canvas.appendChild(Le);continue}const qe=He.resource,et=Ve(qe),be=e.placement.byResource.get(et)||[],xe=Ye&&Ye.rows.get(String(et))||null,Xe=xe?s:0,Ge=ee.createElement("div");Ge.className=`${A}__row`,Ge.setAttribute("data-resource",String(et)),Ge.setAttribute("role","row"),Ge.setAttribute("aria-label",j(e,qe,et)),Ge.style.top=`${Ze}px`,Ge.style.height=`${Se}px`,Ge.style.width=`${e.totalWidth}px`;const lt=a.nonWorking?V(a,qe):null;if(lt)for(let Le=We.first;Le<We.last;Le++){if(!lt(Le))continue;const Ke=ee.createElement("div");Ke.className=`${A}__shade`,Ke.style.left=`${Z(e,Le)}px`,Ke.style.width=`${e.pxPerDay}px`,Ge.appendChild(Ke)}const mt=v(be),ct=Math.max(4,(Se-Xe-4)/mt);for(const Le of be){const Ke=Le.startDay,Je=Le.endDay;if(Je<We.first||Ke>We.last)continue;const ze=ee.createElement("div");ze.className=`${A}__bar`,ze.setAttribute("data-key",String(Le.key)),ze.setAttribute("role","gridcell"),ze.setAttribute("aria-label",o(a,Le.row,Le.key));const ot=ne(a,Le.row),nt=e.focusKey!=null&&String(e.focusKey)===String(Le.key);a.editable!==!1?(ze.setAttribute("tabindex","0"),ze.setAttribute("role","button"),ot&&ze.setAttribute("aria-readonly","true")):(ze.setAttribute("tabindex",nt?"0":"-1"),nt&&ze.setAttribute("data-focused","true"));const it=Z(e,Ke),at=Math.max(2,Z(e,Je)-it);ze.style.left=`${it}px`,ze.style.width=`${at}px`,ze.style.top=`${2+Le.lane*ct}px`,ze.style.height=`${Math.max(2,ct-3)}px`,Le.color&&(ze.setAttribute("data-accent",""),ze.style.setProperty("--lattice-scheduler-accent",Le.color)),ze.textContent=o(a,Le.row,Le.key),a.editable!==!1&&!ot&&ve(e,ze),Ge.appendChild(ze)}if(xe){const Le=ee.createElement("div");Le.className=`${A}__load`;for(let Ke=rt;Ke<=tt;Ke++){const Je=Be[Ke],ze=ee.createElement("div");ze.className=`${A}__load-bucket`,ze.style.left=`${Z(e,Je.start)}px`,ze.style.width=`${Math.max(1,Z(e,Je.end)-Z(e,Je.start))}px`;const ot=xe.cells[Ke],nt=xe.available[Ke],it=nt!=null&&nt>0&&ot!=null?ot/nt*100:null,at=ee.createElement("div");if(at.className=`${A}__load-fill`,at.style.height=`${it==null?0:Math.min(100,Math.round(it))}%`,ze.appendChild(at),xe.over[Ke]===!0){ze.classList.add(`${A}__load-bucket--over`);const ut=ee.createElement("span");ut.className=`${A}__load-icon`,ut.setAttribute("aria-hidden","true"),ut.textContent="⚠",ze.appendChild(ut),ze.setAttribute("aria-label",U(e,"scheduler.workload.overCell",{resource:qe.name!=null?String(qe.name):String(et),period:ce(a,Je.start),percent:`${he(ot,nt,Ye.decimals)}%`}))}Le.appendChild(ze)}Ge.appendChild(Le)}e.canvas.appendChild(Ge)}if(a.todayLine){const Qe=B(new Date);if(Qe>=We.first&&Qe<=We.last){const He=ee.createElement("div");He.className=`${A}__today`,He.setAttribute("data-today","true"),He.style.left=`${Z(e,Qe)}px`,e.canvas.appendChild(He)}}}function de(e,a){const ee=e.canvas.querySelectorAll(`.${A}__bar`);for(const q of ee)if(q.dataset.key===String(a))return q;return null}function t(e){const a=e.ctx,ee=$(a.resourceKey),q=[];for(const L of e.displayRows||[]){if(L.type!=="resource")continue;const le=ee(L.resource),Se=e.placement.byResource.get(le)||[];Se.length&&q.push({resourceKey:le,events:Se})}return q}function l(e,a){const ee=$(e.ctx.resourceKey),q=e.displayRows||[];for(let L=0;L<q.length;L++){const le=q[L];if(le.type==="resource"&&String(ee(le.resource))===String(a))return L}return-1}function E(e,a){e.focusKey=String(a.key);const ee=l(e,a.resourceKey);if(ee>=0&&e.timeline){const L=e.ctx.rowHeight,le=ee*L,Se=e.timeline.clientHeight;(le<e.timeline.scrollTop||le+L>e.timeline.scrollTop+Se)&&(e.timeline.scrollTop=Math.max(0,le-Se/2+L/2),i(e));const Ae=Z(e,a.startDay),Te=Z(e,a.endDay),Re=e.timeline.clientWidth;(Te>e.timeline.scrollLeft+Re||Ae<e.timeline.scrollLeft)&&(e.timeline.scrollLeft=Math.max(0,Ae-Re/2),i(e))}const q=de(e,a.key);if(q){for(const L of e.canvas.querySelectorAll(`.${A}__bar`))L.setAttribute("tabindex","-1"),L.removeAttribute("data-focused");q.setAttribute("tabindex","0"),q.setAttribute("data-focused","true"),q.focus()}}function b(e,a){const ee=t(e);if(!ee.length)return;const q=e.focusKey==null?null:String(e.focusKey);let L=-1,le=-1;if(q!=null)for(let _e=0;_e<ee.length;_e++){const We=ee[_e].events.findIndex(Ve=>String(Ve.key)===q);if(We>=0){L=_e,le=We;break}}if(L<0){E(e,ee[0].events[0]);return}if(a==="left"||a==="right"){const _e=ee[L].events,We=a==="right"?le+1:le-1;E(e,_e[We>=0&&We<_e.length?We:a==="right"?0:_e.length-1]);return}const Se=ee[L+(a==="down"?1:-1)];if(!Se)return;const Ae=ee[L].events[le].startDay;let Te=null,Re=1/0;for(const _e of Se.events){const We=Math.abs(_e.startDay-Ae);We<Re&&(Re=We,Te=_e)}Te&&E(e,Te)}function P(e,a){e.live&&(e.live.textContent=a)}function m(e,a){P(e,U(e,"scheduler.eventActivated",{name:o(e.ctx,a.row,a.key)}));const ee=de(e,a.key);ee&&me(e,a,ee)}function k(e,a){if(a==null||a==="")return"";const ee=d(a);if(!ee)return String(a);const L={year:"numeric",month:"short",day:"numeric",...typeof a=="string"&&/(\d{1,2}:\d{2})/.test(a)?{hour:"2-digit",minute:"2-digit"}:{},...e.timeZone?{timeZone:e.timeZone}:{}};try{return new Intl.DateTimeFormat(e.locale,L).format(ee)}catch{return String(a)}}function Y(e){const a=e*24;return Math.abs(a-Math.round(a))<.05?String(Math.round(a)):a.toFixed(1).replace(/\.0$/,"")}function g(e,a){const ee=e.ctx,q=[],L=k(ee,$(ee.fields.startDate)(a.row)),le=k(ee,$(ee.fields.endDate)(a.row));L&&q.push({label:U(e,"scheduler.tip.start"),value:L}),le&&q.push({label:U(e,"scheduler.tip.end"),value:le}),q.push({label:U(e,"scheduler.tip.duration"),value:U(e,"scheduler.tip.durationValue",{hours:Y(a.endDay-a.startDay)})});const Se=e.rows.get(a.resourceKey);return Se&&q.push({label:U(e,"scheduler.tip.resource"),value:j(e,Se,a.resourceKey)}),q}function X(e,a,ee){return[o(e.ctx,a.row,a.key),...ee.map(q=>U(e,"scheduler.tip.row",{label:q.label,value:q.value}))].join(", ")}function me(e,a,ee){if(!e.tip)return;const q=g(e,a),L=f(e.doc,A,{name:o(e.ctx,a.row,a.key)},q);for(const le of[...e.tip.children])le!==e.tipArrow&&e.tip.removeChild(le);e.tip.appendChild(L),e.tip.removeAttribute("hidden"),ee.setAttribute("aria-description",X(e,a,q)),pe(e,ee)}function je(e){if(e.tip){e.tip.setAttribute("hidden","");for(const a of[...e.tip.children])a!==e.tipArrow&&e.tip.removeChild(a)}}function pe(e,a){if(!e.tip||!a||typeof a.getBoundingClientRect!="function")return;const ee=a.getBoundingClientRect(),q=e.el.getBoundingClientRect(),L=e.doc.defaultView||globalThis,le=Number.isFinite(L.innerWidth)?L.innerWidth:1/0,Se=Number.isFinite(L.innerHeight)?L.innerHeight:1/0,Ae={left:Math.max(0,q.left),top:Math.max(0,q.top),right:Math.min(le,q.right),bottom:Math.min(Se,q.bottom)};y(e.tip,e.tipArrow,ee,Ae,q)}function De(e){if(!e.live)return;const a=e.workload;if(!a||!a.overAllocated.length){e.live.textContent="";return}const ee=a.overAllocated.map(q=>U(e,"scheduler.workload.overItem",{resource:q.name,periods:q.periods.join(", ")})).join("; ");e.live.textContent=U(e,"scheduler.workload.overSummary",{list:ee})}function Ce(e){if(e._gridOff){try{e._gridOff()}catch{}e._gridOff=null}if(e._gridGroupOff){try{e._gridGroupOff()}catch{}e._gridGroupOff=null}const a=e.grid;if(!a||!ie(a.on))return;const ee=()=>{if(e._syncing)return;e._syncing=!0;const L=Ue(e),le=L?L.scrollTop:0;e.timeline.scrollTop!==le&&(e.timeline.scrollTop=le),e._syncing=!1,i(e)};a.on("scroll",ee),e._gridOff=()=>{ie(a.off)&&a.off("scroll",ee)};const q=()=>$e(e);a.on("group:toggled",q),e._gridGroupOff=()=>{ie(a.off)&&a.off("group:toggled",q)}}function Ie(e){const a=[];e._listeners=a;const ee=(L,le)=>{e.el.addEventListener(L,le),a.push({type:L,fn:le})},q=()=>{if(e._syncing)return;e._syncing=!0,e.headView&&e.headView.scrollLeft!==e.timeline.scrollLeft&&(e.headView.scrollLeft=e.timeline.scrollLeft);const L=Ue(e);L&&L.scrollTop!==e.timeline.scrollTop&&(L.scrollTop=e.timeline.scrollTop),e._syncing=!1,i(e)};e.timeline.addEventListener("scroll",q),e._timelineScroll={target:e.timeline,type:"scroll",fn:q},ee("wheel",L=>{if(L.ctrlKey||L.metaKey){L.preventDefault&&L.preventDefault();const le=L.deltaY<0?1.25:.8;e.setZoom(Ne(e,e.pxPerDay*le),"control")}}),ee("pointerover",L=>{const le=L.target&&L.target.closest?L.target.closest(`.${A}__bar`):null;if(le){const Se=e.placement.keys.get(le.dataset.key);Se&&me(e,Se,le)}}),ee("pointerout",L=>{L.target&&L.target.closest&&L.target.closest(`.${A}__bar`)&&je(e)}),ee("focusin",L=>{const le=L.target&&L.target.closest?L.target.closest(`.${A}__bar`):null;if(le){const Se=e.placement.keys.get(le.dataset.key);Se&&me(e,Se,le)}}),ee("focusout",L=>{L.target&&L.target.closest&&L.target.closest(`.${A}__bar`)&&je(e)}),ee("keydown",L=>{const le=e.doc.activeElement&&e.doc.activeElement.closest?e.doc.activeElement.closest(`.${A}__bar`):null;if(le&&e.ctx.editable===!1){const Se=e.placement.keys.get(le.dataset.key);if(L.key==="ArrowLeft"||L.key==="ArrowRight"||L.key==="ArrowUp"||L.key==="ArrowDown")L.preventDefault&&L.preventDefault(),b(e,L.key==="ArrowLeft"?"left":L.key==="ArrowRight"?"right":L.key==="ArrowUp"?"up":"down");else if(L.key==="Enter"||L.key===" ")L.preventDefault&&L.preventDefault(),Se&&m(e,Se);else if(L.key==="Home"||L.key==="End"){L.preventDefault&&L.preventDefault();const Ae=t(e);for(const Te of Ae)if(Te.resourceKey===Se.resourceKey){E(e,Te.events[L.key==="Home"?0:Te.events.length-1]);break}}return}L.target&&L.target.closest&&L.target.closest(`.${A}__bar`)||(L.key==="+"||L.key==="="?(L.preventDefault&&L.preventDefault(),e.setZoom(Ne(e,e.pxPerDay*1.25),"control")):L.key==="-"?(L.preventDefault&&L.preventDefault(),e.setZoom(Ne(e,e.pxPerDay*.8),"control")):L.key==="ArrowLeft"||L.key==="ArrowRight"?(L.preventDefault&&L.preventDefault(),e.timeline.scrollLeft+=L.key==="ArrowRight"?80:-80,i(e)):(L.key==="ArrowUp"||L.key==="ArrowDown")&&(L.preventDefault&&L.preventDefault(),e.timeline.scrollTop+=L.key==="ArrowDown"?80:-80,i(e)))}),ke(e)}function Ue(e){return e.gridHost?e.gridHost.querySelector(".lat-body-viewport"):null}function Ne(e,a){return Math.min(624,Math.max(1.8,a))}}),Fe("packages/modules/charts/scale.js",function(r,se){"use strict";Object.defineProperty(r,"isNumber",{enumerable:!0,get:function(){return p}}),Object.defineProperty(r,"toNumber",{enumerable:!0,get:function(){return $}}),Object.defineProperty(r,"toTime",{enumerable:!0,get:function(){return H}}),Object.defineProperty(r,"extent",{enumerable:!0,get:function(){return I}}),Object.defineProperty(r,"niceStep",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"niceDomain",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"measureDomain",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"linearTicks",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"timeStepFor",{enumerable:!0,get:function(){return o}}),Object.defineProperty(r,"MONTH_STEPS",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"timeTicks",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"linearScale",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"timeScale",{enumerable:!0,get:function(){return he}}),Object.defineProperty(r,"key",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(r,"bandScale",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"sqrtScale",{enumerable:!0,get:function(){return ve}});const we=[1,2,2.5,5,10],ie=6e4,K=36e5,ue=864e5,re=365.25*ue,A=[1,2,5,10,20,25,50,100],Q=[1,5,10,25,50,100,250,500,1e3,5e3,15e3,3e4,ie,5*ie,15*ie,30*ie,K,3*K,6*K,12*K,ue,2*ue,7*ue,14*ue,30*ue,90*ue,180*ue,...A.map(G=>G*re)];function p(G){return typeof G=="number"&&Number.isFinite(G)}function $(G){if(G==null||G==="")return null;if(G instanceof Date){const M=G.getTime();return Number.isFinite(M)?M:null}if(typeof G=="boolean")return G?1:0;const U=Number(G);return Number.isFinite(U)?U:null}function H(G){if(G==null||G==="")return null;if(G instanceof Date){const M=G.getTime();return Number.isFinite(M)?M:null}if(typeof G=="number")return Number.isFinite(G)?G:null;const U=Date.parse(String(G));return Number.isFinite(U)?U:null}function I(G){let U=1/0,M=-1/0;for(let h=0;h<G.length;h++){const B=G[h];p(B)&&(B<U&&(U=B),B>M&&(M=B))}return U===1/0?null:{min:U,max:M}}function x(G){if(!(G>0))return 1;const U=10**Math.floor(Math.log10(G));for(const M of we)if(G<=M*U)return M*U;return 10*U}function N(G,U=5){const M=x((G.max-G.min)/Math.max(1,U));return{min:Math.floor(G.min/M)*M,max:Math.ceil(G.max/M)*M,step:M}}function V(G,U={}){const M=I(G)||{min:0,max:1};let{min:h,max:B}=M;if(U.zero&&(h>0&&(h=0),B<0&&(B=0)),h===B){const n=Math.abs(h)>0?Math.abs(h)/10:1;h-=n,B+=n}if(U.nice!==!1){const n=N({min:h,max:B},U.ticks||5);h=n.min,B=n.max}return p(U.min)&&(h=U.min),p(U.max)&&(B=U.max),h===B&&(B=h+1),{min:h,max:B}}function v(G,U=5){const M=x((G.max-G.min)/Math.max(1,U)),h=Math.ceil(G.min/M),B=Math.floor(G.max/M),n=[];for(let f=h;f<=B;f++){const y=f*M;n.push(Math.abs(y)<M/1e6?0:Number(y.toPrecision(12)))}return n}function o(G,U=5){const M=Math.max(1,U),h=G/M;let B=Q[Q.length-1];for(const y of Q)if(y>=h){B=y;break}if(B<re)return B;let n=B,f=Math.abs(G/B-M);for(const y of Q){if(y<re)continue;const z=Math.abs(G/y-M);z<f&&(f=z,n=y)}return n}const d=new Map;function u(G){let U=d.get(G);return U||(U=new Intl.DateTimeFormat("en-US",{timeZone:G,year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}),d.set(G,U)),U}function O(G,U){const M={year:0,month:0,day:1,hour:0,minute:0,second:0};for(const h of u(U).formatToParts(new Date(G)))switch(h.type){case"year":M.year=Number(h.value);break;case"month":M.month=Number(h.value)-1;break;case"day":M.day=Number(h.value);break;case"hour":M.hour=Number(h.value)%24;break;case"minute":M.minute=Number(h.value);break;case"second":M.second=Number(h.value);break;default:break}return M}function te(G,U,M){const h=Date.UTC(G,U,1);let B=h;for(let n=0;n<2;n++){const f=O(B,M),y=Date.UTC(f.year,f.month,f.day,f.hour,f.minute,f.second),z=h-y;if(z===0)break;B+=z}return B}function ne(G,U,M){const h=M?O(G.min,M).year:new Date(G.min).getUTCFullYear();let B=Math.ceil(h/U)*U;const n=y=>M?te(y,0,M):Date.UTC(y,0,1);n(B)<G.min&&(B+=U);const f=[];for(;n(B)<=G.max;B+=U)f.push(n(B));return f}const W=new Map([[30*ue,1],[90*ue,3],[180*ue,6]]);function oe(G,U,M){const h=M?O(G.min,M):{year:new Date(G.min).getUTCFullYear(),month:new Date(G.min).getUTCMonth()};let B=h.year*12+h.month;const n=y=>{const z=Math.floor(y/12),D=y-z*12;return M?te(z,D,M):Date.UTC(z,D,1)};n(B)<G.min&&(B+=1),B=Math.ceil(B/U)*U;const f=[];for(;;B+=U){const y=n(B);if(y>G.max)break;f.push(y)}return f}function ce(G,U=5,M){const h=o(G.max-G.min,U);if(h>=re)return ne(G,Math.round(h/re),M);const B=W.get(h);if(B)return oe(G,B,M);const n=[],f=Math.ceil(G.min/h)*h;for(let y=f;y<=G.max;y+=h)n.push(y);return n}function ye(G,U){const M=G.max-G.min||1,[h,B]=U;return{kind:"linear",domain:G,range:U,of(n){return h+(n-G.min)/M*(B-h)},invert(n){return G.min+(n-h)/(B-h||1)*M},ticks(n=5){return v(G,n)}}}function he(G,U){return{...ye(G,U),kind:"time",ticks(h=5,B){return ce(G,h,B)}}}function fe(G){if(G==null)return" null";if(G instanceof Date)return` date:${G.getTime()}`;if(typeof G=="object"){const U=G,M=U.id??U.key??U.value;return M!==void 0&&typeof M!="object"?` obj:${String(M)}`:` obj:${String(G)}`}return String(G)}function ke(G,U,M=.2){const h=Math.min(.9,Math.max(0,M)),[B,n]=U,f=new Map;for(let D=0;D<G.length;D++){const T=fe(G[D]);f.has(T)||f.set(T,D)}const y=G.length?(n-B)/G.length:n-B,z=Math.max(0,y*(1-h));return{kind:"band",domain:G,range:U,bandwidth:z,step:y,of(D){const T=f.get(fe(D));return T===void 0?NaN:B+T*y+(y-z)/2},centre(D){const T=this.of(D);return Number.isNaN(T)?NaN:T+z/2},ticks(){return G}}}function ve(G,U){const[M,h]=U,B=Math.max(Math.abs(G.max),Math.abs(G.min),0)||1;return{kind:"sqrt",domain:G,range:U,of(n){const f=Math.sqrt(Math.abs(n)/B);return M+f*(h-M)}}}}),Fe("packages/modules/gantt/export.js",function(r,se){"use strict";Object.defineProperty(r,"PRINT_NS",{enumerable:!0,get:function(){return A}}),Object.defineProperty(r,"PAPERS",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(r,"PAGE_MARGIN",{enumerable:!0,get:function(){return p}}),Object.defineProperty(r,"PALETTE",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"esc",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"paperPx",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"resolveRange",{enumerable:!0,get:function(){return o}}),Object.defineProperty(r,"cellText",{enumerable:!0,get:function(){return d}}),Object.defineProperty(r,"barMarkup",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"timeHeadMarkup",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"bandRowsMarkup",{enumerable:!0,get:function(){return ne}}),Object.defineProperty(r,"bandGridMarkup",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"dataBandMarkup",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(r,"buildSplitSVG",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"inlineSvgStyles",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(r,"rasterizePNG",{enumerable:!0,get:function(){return he}}),Object.defineProperty(r,"buildPrintDocument",{enumerable:!0,get:function(){return M}}),Object.defineProperty(r,"openPrintWindow",{enumerable:!0,get:function(){return B}});const ie=se("packages/modules/charts/scale.js").linearScale,K=se("packages/modules/gantt/time.js"),ue=K.toISODate,re=K.toDayNumber,A="lat-gantt-print",Q=Object.freeze({A4:{w:794,h:1123},Letter:{w:816,h:1056},A3:{w:1123,h:1587}}),p=36,$=26,H=20,I=24,x=28,N=Object.freeze({text:"#1f2933",muted:"#57606a",border:"#d0d7de",surface:"#f1f3f5",bar:"#4a90d9",critical:"#e2513b",summary:"#2c3e50",milestone:"#33404d",progress:"rgba(0,0,0,0.28)",today:"#e2513b",workload:"#4a90d9",histogram:"#2c7a7b",over:"#e2513b",pageBg:"#ffffff"});function V(n){return String(n??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function v(n,f){const y=Q[n]||Q.A4;return f==="portrait"?{w:y.w,h:y.h}:{w:y.h,h:y.w}}function o(n,f){const y=f&&f.from!=null?re(f.from):n.domainMin,z=f&&f.to!=null?re(f.to):n.domainMax;return Number.isFinite(y)&&Number.isFinite(z)&&z>y?{from:y,to:z}:{from:n.domainMin,to:n.domainMax}}function d(n,f,y){if(f.unscheduled&&(n.kind==="start"||n.kind==="end"||n.kind==="duration"))return"";switch(n.kind){case"name":return f.name??"";case"start":return ue(f.es)??String(f.es);case"end":return ue(f.ef)??String(f.ef);case"duration":return String(Math.round(f.ef-f.es));case"assignee":{const z=y?y.assignee??y.assignees??y.owner:null;return(Array.isArray(z)?z:z==null?[]:[z]).map(String).filter(Boolean).join(", ")}case"progress":return f.percentComplete==null?"":`${Math.round(f.percentComplete)}%`;default:return y&&n.key?String(y[n.key]??""):""}}function u(n,f,y,z){if(!Number.isFinite(n.es)||!Number.isFinite(n.ef))return"";const D=Math.max(2,Math.round(z*.18)),T=y+D,F=Math.max(2,z-D*2);if(n.milestone){const j=f(n.es),_=y+z/2,ge=Math.max(4,Math.min(9,z*.3)),ae=n.critical?N.critical:N.milestone;return`<path d="M ${j} ${_-ge} L ${j+ge} ${_} L ${j} ${_+ge} L ${j-ge} ${_} Z" fill="${ae}"/>`}const J=f(n.es),c=f(n.ef),R=Math.max(1,c-J),s=n.isSummary?N.summary:n.critical?N.critical:N.bar;let S=`<rect x="${J}" y="${T}" width="${R}" height="${F}" rx="3" fill="${s}"/>`;if(!n.isSummary&&n.percentComplete!=null&&n.percentComplete>0){const j=Math.max(0,Math.min(100,n.percentComplete)),_=Math.round(R*j/100);S+=`<rect x="${J}" y="${T}" width="${_}" height="${F}" fill="${N.progress}"/>`}return S}function O(n,f,y,z,D,T){const F=T==="month"||T==="quarter"?30:7;let J=`<rect x="0" y="0" width="${z}" height="${D}" fill="${N.surface}"/>`,c=Math.floor(n/F)*F;for(;c<f;c+=F){const R=y(c);J+=`<line x1="${R}" y1="0" x2="${R}" y2="${D}" stroke="${N.border}"/>`,J+=`<text x="${R+4}" y="${Math.round(D*.68)}" font-size="11" font-weight="600" fill="${N.muted}">${V(ue(c)??String(c))}</text>`}return J+=`<line x1="0" y1="${D}" x2="${z}" y2="${D}" stroke="${N.border}"/>`,J}function te(n,f,y,z,D,T,F,J){const c=Math.max(1,...n.flatMap(s=>(s.cells||[]).filter(S=>S!=null)));let R="";return(f.cells||[]).forEach((s,S)=>{if(s==null)return;const j=J[S];if(!j)return;const _=z+y(j.start),ge=Math.max(1,y(j.end)-y(j.start)-2),ae=Math.max(1,Math.round(s/c*(D-8))),Z=T+D-4-ae,Oe=f.over&&f.over[S];R+=`<rect x="${_}" y="${Z}" width="${ge}" height="${ae}" fill="${Oe?N.over:F}"/>`}),R}function ne(n,f,y,z,D,T){if(!n||!n.rows||!n.rows.length)return"";let F="";return n.rows.forEach((J,c)=>{const R=D+c*z;F+=`<text x="4" y="${R+z/2+4}" font-size="11" fill="${N.text}">${V(J.label)}</text>`,F+=`<line x1="0" y1="${R+z}" x2="${y}" y2="${R+z}" stroke="${N.border}"/>`,F+=te(n.rows,J,f,y,z,R,T,n.buckets)}),F}function W(n,f,y,z,D){const T=n&&n.grid;if(!T||!T.rows||!T.rows.length)return"";const F=T.columns,J=T.columnWidths,c=J.reduce((S,j)=>S+j,0);let R="",s=0;for(let S=0;S<F.length;S++)R+=`<text x="${s+6}" y="${z+Math.round(y*.65)}" font-size="11" font-weight="600" fill="${N.muted}">${V(F[S].title||F[S].id)}</text>`,s+=J[S];return R+=`<line x1="0" y1="${z+y}" x2="${c}" y2="${z+y}" stroke="${N.border}"/>`,T.rows.forEach((S,j)=>{const _=z+y+j*y;let ge=0;for(let ae=0;ae<F.length;ae++){const Z=ae===0&&S.taskId!=null?14:6;R+=`<text x="${ge+Z}" y="${_+y/2+4}" font-size="11" fill="${N.text}">${V(S.texts?S.texts[ae]:"")}</text>`,ge+=J[ae]}R+=`<line x1="0" y1="${_+y}" x2="${c}" y2="${_+y}" stroke="${N.border}"/>`,R+=te(T.rows,S,f,c,y,_,D,n.buckets)}),R}function oe(n,f,y,z,D){const T=n.rowHeight;let F=`<text x="6" y="${z+Math.round(T*.65)}" font-size="11" font-weight="600" fill="${N.muted}">${V(n.title)}</text>`;if(F+=`<line x1="0" y1="${z+T}" x2="${y+D}" y2="${z+T}" stroke="${N.border}"/>`,n.collapsed)return F;const J=n.totalsColumn?y-6:null;return n.rows.forEach((c,R)=>{const s=z+T+R*T,S=s+T/2+4,j=c.isTotal||c.isSummary?600:400;F+=`<text x="${6+(c.depth||0)*14}" y="${S}" font-size="11" font-weight="${j}" fill="${N.text}">${V(c.label)}</text>`,J!=null&&c.totalText&&(F+=`<text x="${J}" y="${S}" font-size="11" font-weight="${j}" text-anchor="end" fill="${N.text}">${V(c.totalText)}</text>`),(c.texts||[]).forEach((_,ge)=>{const ae=n.buckets[ge];if(!ae||!_)return;const Z=f(ae.end);Z<=0||f(ae.start)>=D||(F+=`<text x="${y+Math.min(D,Z)-4}" y="${S}" font-size="10" font-weight="${j}" text-anchor="end" fill="${N.text}">${V(_)}</text>`)}),F+=`<line x1="0" y1="${s+T}" x2="${y+D}" y2="${s+T}" stroke="${N.border}"/>`}),F}function ce(n,f={}){const y=o(n,f.range),z=Math.max(1,Math.round(n.pxPerDay*(y.to-y.from))),D=ie({min:y.from,max:y.to},[0,z]),T=Z=>Math.round(D.of(Z)),F=n.columnWidths.reduce((Z,Oe)=>Z+Oe,0),J=F+z,c=Math.max(I,x),R=c;let s=0;n.workload&&(s+=n.workload.cfg.height),n.histogram&&(s+=n.histogram.cfg.height);const S=Array.isArray(n.dataBands)?n.dataBands:[];for(const Z of S)s+=Z.collapsed?Z.rowHeight:(Z.rows.length+1)*Z.rowHeight;const j=R+n.totalHeight+s;let _="",ge=0;for(let Z=0;Z<n.columns.length;Z++){const Oe=n.columnWidths[Z];_+=`<text x="${ge+6}" y="${Math.round(c*.65)}" font-size="11" font-weight="600" fill="${N.muted}">${V(n.columns[Z].title||n.columns[Z].id||n.columns[Z].key)}</text>`,ge+=Oe}if(_+=`<line x1="0" y1="${c}" x2="${F}" y2="${c}" stroke="${N.border}"/>`,_+=`<g transform="translate(${F},0)">${O(y.from,y.to,T,z,c,n.zoomLevel)}</g>`,n.rows.forEach((Z,Oe)=>{const Pe=R+Z.top;let Me=0;for(let $e=0;$e<n.columns.length;$e++){const Ee=n.columns[$e],C=n.columnWidths[$e],w=n.cellTexts?n.cellTexts[Oe][$e]:d(Ee,Z.rec,n.rawById.get(String(Z.id))),i=Ee.kind==="name"?Z.depth*14+6:6;_+=`<text x="${Me+i}" y="${Pe+Z.height/2+4}" font-size="12" font-weight="${Z.rec.isSummary?600:400}" fill="${Z.rec.isSummary?N.summary:N.text}">${V(w)}</text>`,Me+=C}_+=`<line x1="0" y1="${Pe+Z.height}" x2="${J}" y2="${Pe+Z.height}" stroke="${N.border}"/>`,_+=`<g transform="translate(${F},${Pe})">${u(Z.rec,T,0,Z.height)}</g>`}),n.today!=null&&n.today>=y.from&&n.today<=y.to){const Z=F+T(n.today);_+=`<line x1="${Z}" y1="0" x2="${Z}" y2="${R+n.totalHeight}" stroke="${N.today}" stroke-width="1.5" stroke-dasharray="4 3"/>`}let ae=R+n.totalHeight;for(const[Z,Oe]of[[n.workload,N.workload],[n.histogram,N.histogram]])if(Z){if(_+=`<rect x="0" y="${ae}" width="${J}" height="${Z.cfg.height}" fill="${N.pageBg}"/>`,Z.data&&Z.data.grid)_+=W(Z.data,T,Z.cfg.rowHeight,ae,Oe);else{const Pe=Math.max(40,F);_+=`<g transform="translate(${Pe},0)">${ne(Z.data,T,0,Z.cfg.rowHeight,ae,Oe)}</g>`}_+=`<line x1="0" y1="${ae}" x2="${J}" y2="${ae}" stroke="${N.border}" stroke-width="2"/>`,ae+=Z.cfg.height}for(const Z of S){const Oe=Z.collapsed?Z.rowHeight:(Z.rows.length+1)*Z.rowHeight;_+=`<g data-band="${V(Z.id)}">${oe(Z,T,F,ae,z)}</g>`,_+=`<line x1="0" y1="${ae}" x2="${J}" y2="${ae}" stroke="${N.border}" stroke-width="2"/>`,ae+=Oe}return`<svg xmlns="http://www.w3.org/2000/svg" width="${J}" height="${j}" viewBox="0 0 ${J} ${j}" font-family="system-ui,sans-serif"><rect x="0" y="0" width="${J}" height="${j}" fill="${N.pageBg}"/>${_}</svg>`}function ye(n,f,y){const z=["fill","fill-opacity","stroke","stroke-width","stroke-opacity","stroke-dasharray","stroke-linejoin","stroke-linecap","font-size","font-family","font-weight","opacity","text-anchor","dominant-baseline","visibility"],D=[n,...n.querySelectorAll("*")],T=[f,...f.querySelectorAll("*")];for(let F=0;F<D.length&&F<T.length;F++){const J=y.getComputedStyle(D[F]),c=[];for(const R of z){const s=J.getPropertyValue(R);s&&c.push(`${R}:${s}`)}c.length&&T[F].setAttribute("style",c.join(";"))}}async function he(n,f,y,z,D,T){const F=n&&n.defaultView||globalThis;if(!F.Image||!n.createElement)return null;const J=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(f)}`,c=new F.Image;await new Promise((S,j)=>{c.onload=S,c.onerror=()=>j(new Error("the plan could not be rasterised")),c.src=J});const R=n.createElement("canvas");R.width=Math.max(1,Math.round(y*D)),R.height=Math.max(1,Math.round(z*D));const s=R.getContext("2d");return T&&(s.fillStyle=T,s.fillRect(0,0,R.width,R.height)),s.drawImage(c,0,0,R.width,R.height),new Promise(S=>R.toBlob(S,"image/png"))}function fe(n,f){const y=[];let z=[],D=0;for(const T of n){const F=Math.max(1,T.height);z.length&&D+F>f&&(y.push(z),z=[],D=0),z.push(T),D+=F}return(z.length||!y.length)&&y.push(z),y}function ke(n){return`
196
+ @page { size: ${n.w}px ${n.h}px; margin: 0; }
185
197
  *{box-sizing:border-box}
186
- body{margin:0;font:12px/1.4 system-ui,sans-serif;color:${C.text};background:${C.pageBg}}
187
- .${A}__page{width:${t.w}px;height:${t.h}px;padding:${b}px;break-after:page;page-break-after:always;overflow:hidden;position:relative}
198
+ body{margin:0;font:12px/1.4 system-ui,sans-serif;color:${N.text};background:${N.pageBg}}
199
+ .${A}__page{width:${n.w}px;height:${n.h}px;padding:${p}px;break-after:page;page-break-after:always;overflow:hidden;position:relative}
188
200
  .${A}__page:last-child{break-after:auto;page-break-after:auto}
189
201
  .${A}__title{font-size:14px;font-weight:600;margin:0 0 6px 0}
190
- .${A}__foot{position:absolute;left:${b}px;right:${b}px;bottom:${b-Y}px;height:${Y}px;font-size:10px;color:${C.muted};display:flex;justify-content:space-between}
202
+ .${A}__foot{position:absolute;left:${p}px;right:${p}px;bottom:${p-H}px;height:${H}px;font-size:10px;color:${N.muted};display:flex;justify-content:space-between}
191
203
  table.${A}__table{border-collapse:collapse;width:100%}
192
- .${A}__table th,.${A}__table td{border-bottom:1px solid ${C.border};padding:2px 6px;text-align:left;font-weight:400;vertical-align:middle}
193
- .${A}__table thead th{background:${C.surface};color:${C.muted};font-weight:600;font-size:11px}
204
+ .${A}__table th,.${A}__table td{border-bottom:1px solid ${N.border};padding:2px 6px;text-align:left;font-weight:400;vertical-align:middle}
205
+ .${A}__table thead th{background:${N.surface};color:${N.muted};font-weight:600;font-size:11px}
194
206
  .${A}__table tr{break-inside:avoid;page-break-inside:avoid}
195
207
  .${A}__bandtitle{font-size:12px;font-weight:600;margin:10px 0 4px 0}
196
208
  svg{display:block}
197
- `.trim()}function Se(t,u,f,z,v,E){const N=t?`<p class="${A}__title">${J(t)}</p>`:"",K=T(z.from,z.to,f,E,O,u.zoomLevel),i=u.columns.map((_,n)=>`<th style="width:${u.columnWidths[n]}px">${J(_.title||_.id||_.key)}</th>`).join("");return`${N}<table class="${A}__table"><thead><tr>${i}<th style="width:${E}px;padding:0"><svg width="${E}" height="${O}" viewBox="0 0 ${E} ${O}">${K}</svg></th></tr></thead><tbody>`}function G(t,u,f,z){const v=t.columns.map((N,K)=>{const i=t.cellTexts?t.cellTexts[u.rowIndex][K]:g(N,u.rec,t.rawById.get(String(u.id)));return`<td style="padding-left:${6+(N.kind==="name"?u.depth*14:0)}px;font-weight:${u.rec.isSummary?600:400}">${J(i)}</td>`}).join(""),E=y(u.rec,f,0,u.height);return`<tr style="height:${u.height}px">${v}<td style="padding:0;width:${z}px"><svg width="${z}" height="${u.height}" viewBox="0 0 ${z} ${u.height}">${E}</svg></td></tr>`}function U(t,u,f,z){return t===!1?null:typeof t=="function"?String(t(u,f)):typeof t=="string"?t:z}function D(t,u={}){const f=x(u.paper||"A4",u.orientation||"landscape"),z=f.w-b*2,v=f.h-b*2,E=Math.min(z-80,t.columnWidths.reduce(($,w)=>$+w,0)),N=Math.max(40,z-E),K=Math.max(1,t.domainMax-t.domainMin),i=u.fitToWidth!==!1?N/K:u.scale||t.pxPerDay,_=le({min:t.domainMin,max:t.domainMax},[0,i*K]),n=$=>Math.round(_.of($)),d=u.fitToWidth!==!1?N:Math.round(i*K),L=typeof u.t=="function"?u.t:($=>$),j=u.title===!1?null:u.title||t.title||null,he=u.locale||"en-GB",ce=u.printDate instanceof Date?u.printDate:new Date;let q="";try{q=new Intl.DateTimeFormat(he).format(ce)}catch{q=ce.toISOString().slice(0,10)}const Pe=O,Ae=j?S:0,Ee=u.footer!==!1,k=Ee?Y:0,m=Math.max(t.rowHeight||24,v-Ae-Pe-k-8),o=t.rowHeight||24,ie=be(t.rows.map(($,w)=>({...$,height:Math.max(o,$.height),rowIndex:w})),m),F=[];for(const[$,w,p]of[[t.workload,C.workload,"gantt.workload.title"],[t.histogram,C.histogram,"gantt.histogram.title"]]){if(!$||!$.data)continue;const h=$.data.grid?$.data.grid.rows:$.data.rows;if(!h.length)continue;const V=h.map(X=>({...X,height:$.cfg.rowHeight})),P=be(V,m);F.push({title:L(p),rows:P,color:w,band:$,grid:!!$.data.grid})}const ee=[];for(const $ of Array.isArray(t.dataBands)?t.dataBands:[]){if(!$.rows.length)continue;const w=$.rows.map(p=>({...p,height:$.rowHeight}));ee.push({band:$,rows:be(w,m)})}const s=ie.length+F.reduce(($,w)=>$+w.rows.length,0)+ee.reduce(($,w)=>$+w.rows.length,0);let M=0,I="";for(const $ of ie)M+=1,I+=c({title:j,header:Se(j,t,n,{from:t.domainMin,to:t.domainMax},E,d),body:$.map(w=>G(t,w,n,d)).join(""),pageIndex:M,totalPages:s,opts:u,t:L,locale:he,dateText:q,footerOn:Ee});for(const $ of F)for(const w of $.rows){if(M+=1,$.grid){const X=$.band.data.grid,$e=X.columns,Me=X.columnWidths,we=Me.reduce((Q,ue)=>Q+ue,0),xe=Math.max(40,z-we),Te=Q=>Math.round((Q-t.domainMin)/K*xe),e=$e.map((Q,ue)=>`<th style="width:${Me[ue]}px">${J(Q.title||Q.id)}</th>`).join(""),R=w.map(Q=>{const ue=$e.map((re,de)=>`<td style="padding-left:${6+(de===0&&Q.taskId!=null?14:0)}px">${J(Q.texts?Q.texts[de]:"")}</td>`).join(""),l=ne(w,Q,Te,0,Q.height,0,$.color,$.band.data.buckets);return`<tr style="height:${Q.height}px">${ue}<td style="padding:0;width:${xe}px"><svg width="${xe}" height="${Q.height}" viewBox="0 0 ${xe} ${Q.height}">${l}</svg></td></tr>`}).join("");I+=c({title:j?`${j} — ${$.title}`:$.title,header:`<p class="${A}__title">${J(j?`${j} — ${$.title}`:$.title)}</p><table class="${A}__table"><thead><tr>${e}<th style="width:${xe}px"></th></tr></thead><tbody>`,body:R,pageIndex:M,totalPages:s,opts:u,t:L,locale:he,dateText:q,footerOn:Ee});continue}const p=140,h=z-p,V=X=>Math.round((X-t.domainMin)/K*h),P=w.map(X=>{const $e=oe({rows:[X],buckets:$.band.data.buckets},V,0,X.height,0,$.color);return`<tr style="height:${X.height}px"><td style="width:${p}px"></td><td style="padding:0;width:${h}px"><svg width="${h}" height="${X.height}" viewBox="0 0 ${h} ${X.height}">${$e}</svg></td></tr>`}).join("");I+=c({title:j?`${j} — ${$.title}`:$.title,header:`<p class="${A}__title">${J(j?`${j} — ${$.title}`:$.title)}</p><table class="${A}__table"><thead><tr><th style="width:${p}px"></th><th style="width:${h}px"></th></tr></thead><tbody>`,body:P,pageIndex:M,totalPages:s,opts:u,t:L,locale:he,dateText:q,footerOn:Ee})}for(const $ of ee){const w=$.band,p=w.buckets.map((P,X)=>({b:P,i:X})).filter(({b:P})=>P.end>t.domainMin&&P.start<t.domainMax),h=j?`${j} — ${w.title}`:w.title,V=`<th></th>${w.totalsColumn?"<th></th>":""}${p.map(({b:P})=>`<th>${J(fe(P.start))}</th>`).join("")}`;for(const P of $.rows){M+=1;const X=P.map($e=>{const Me=$e.isTotal||$e.isSummary?"font-weight:600;":"";return`<tr style="height:${$e.height}px;${Me}"><td style="padding-left:${6+($e.depth||0)*14}px">${J($e.label)}</td>${w.totalsColumn?`<td style="text-align:right">${J($e.totalText)}</td>`:""}${p.map(({i:we})=>`<td style="text-align:right">${J($e.texts[we]||"")}</td>`).join("")}</tr>`}).join("");I+=c({title:h,header:`<p class="${A}__title">${J(h)}</p><table class="${A}__table" data-band="${J(w.id)}"><thead><tr>${V}</tr></thead><tbody>`,body:X,pageIndex:M,totalPages:s,opts:u,t:L,locale:he,dateText:q,footerOn:Ee})}}return`<!DOCTYPE html><html><head><meta charset="utf-8"><title>${J(j||"Gantt")}</title><style>${ve(f)}</style></head><body>${I}</body></html>`}function c(t){const u=t.footerOn?U(t.opts.footer,t.pageIndex,t.totalPages,`${t.t("gantt.print.page",{page:t.pageIndex,pages:t.totalPages})} · ${t.t("gantt.print.printed",{date:t.dateText})}`):null,f=t.opts.header===!1?null:typeof t.opts.header=="function"||typeof t.opts.header=="string"?U(t.opts.header,t.pageIndex,t.totalPages,null):null,z=f?`<p class="${A}__title">${J(f)}</p>`:"";return`<div class="${A}__page">${z}${t.header}${t.body}</tbody></table>`+(u?`<div class="${A}__foot"><span>${J(u)}</span></div>`:"")+"</div>"}function H(t,u){const f=t&&t.defaultView||globalThis;if(typeof f.open!="function")return!1;const z=f.open("","_blank");if(!z||!z.document)return!1;z.document.open(),z.document.write(u),z.document.close();const v=()=>{try{z.focus(),z.print()}catch{}};return z.document.readyState==="complete"?v():z.addEventListener("load",v,{once:!0}),!0}}),Le("packages/modules/scheduler/export.js",function(r,ae){"use strict";Object.defineProperty(r,"exportModel",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"buildSchedulerSVG",{enumerable:!0,get:function(){return me}}),Object.defineProperty(r,"buildSchedulerPrintDocument",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(r,"toSVG",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(r,"toPNG",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"print",{enumerable:!0,get:function(){return U}});const le=ae("packages/modules/charts/scale.js").linearScale,fe=ae("packages/modules/gantt/time.js").toDayNumber,se=ae("packages/modules/gantt/export.js"),A=se.PALETTE,te=se.esc,b=se.paperPx,S=se.PAGE_MARGIN,Y=se.resolveRange,B=se.timeHeadMarkup,O=se.rasterizePNG,C=se.openPrintWindow,x=ae("packages/modules/scheduler/model.js").accessorFor,g=ae("packages/modules/scheduler/messages.js").t,y=28,T=26,ne=20,oe="lat-sched-print";function W(D){const c=D.ctx,H=(c.columns||[]).map((f,z)=>{const v=String(f&&(f.id||f.field)||`column-${z}`),E=String(f&&(f.title||f.id||f.field)||`Column ${z+1}`),N=f&&(f.field||f.id),K=f&&f.layout&&Number.isFinite(f.layout.width)&&f.layout.width>0?f.layout.width:100;return{id:v,title:E,field:N,width:K}}),t=x(c.resourceKey),u=D.resources.map((f,z)=>{const v=t(f),E=H.map(N=>{const K=N.field?x(N.field)(f):void 0;return K==null?"":String(K)});return{id:v,key:v,top:z*c.rowHeight,height:c.rowHeight,texts:E,events:D.placement.byResource.get(v)||[]}});return{columns:H,columnWidths:H.map(f=>f.width),rows:u,totalHeight:D.resources.length*c.rowHeight,domainMin:D.span?D.span.startDay:null,domainMax:D.span?D.span.endDay:null,pxPerDay:D.pxPerDay,zoomLevel:c.zoom.level,today:c.todayLine?fe(new Date):null,rowHeight:c.rowHeight,title:null}}function ge(D,c,H){const t=Math.max(1,...D.map(z=>z.lanes||1)),u=Math.max(4,(H-4)/t);let f="";for(const z of D){if(!Number.isFinite(z.startDay)||!Number.isFinite(z.endDay))continue;const v=c(z.startDay),E=c(z.endDay),N=Math.max(2,E-v),K=z.color&&!String(z.color).startsWith("var(")?z.color:A.bar;f+=`<rect x="${v}" y="${2+(z.lane||0)*u}" width="${N}" height="${Math.max(2,u-3)}" rx="3" fill="${K}"/>`}return f}function me(D,c={}){if(!D||!Number.isFinite(D.domainMin)||!Number.isFinite(D.domainMax))return"";const H=Y(D,c.range),t=Math.max(1,Math.round(D.pxPerDay*(H.to-H.from))),u=le({min:H.from,max:H.to},[0,t]),f=n=>Math.round(u.of(n)),z=D.columnWidths.reduce((n,d)=>n+d,0),v=z+t,E=y,N=E,K=N+D.totalHeight;let i="",_=0;for(let n=0;n<D.columns.length;n++)i+=`<text x="${_+6}" y="${Math.round(E*.65)}" font-size="11" font-weight="600" fill="${A.muted}">${te(D.columns[n].title)}</text>`,_+=D.columnWidths[n];i+=`<line x1="0" y1="${E}" x2="${z}" y2="${E}" stroke="${A.border}"/>`,i+=`<g transform="translate(${z},0)">${B(H.from,H.to,f,t,E,D.zoomLevel)}</g>`;for(const n of D.rows){const d=N+n.top;let L=0;for(let j=0;j<D.columns.length;j++)i+=`<text x="${L+6}" y="${d+n.height/2+4}" font-size="12" fill="${A.text}">${te(n.texts[j]||"")}</text>`,L+=D.columnWidths[j];i+=`<line x1="0" y1="${d+n.height}" x2="${v}" y2="${d+n.height}" stroke="${A.border}"/>`,i+=`<g transform="translate(${z},${d})">${ge(n.events,f,n.height)}</g>`}if(D.today!=null&&D.today>=H.from&&D.today<=H.to){const n=z+f(D.today);i+=`<line x1="${n}" y1="0" x2="${n}" y2="${N+D.totalHeight}" stroke="${A.today}" stroke-width="1.5" stroke-dasharray="4 3"/>`}return`<svg xmlns="http://www.w3.org/2000/svg" width="${v}" height="${K}" viewBox="0 0 ${v} ${K}" font-family="system-ui,sans-serif"><rect x="0" y="0" width="${v}" height="${K}" fill="${A.pageBg}"/>${i}</svg>`}function ye(D,c){const H=[];let t=[],u=0;for(const f of D){const z=Math.max(1,f.height);t.length&&u+z>c&&(H.push(t),t=[],u=0),t.push(f),u+=z}return(t.length||!H.length)&&H.push(t),H}function ke(D,c,H,t){const u=D.columns.map((z,v)=>`<td>${te(c.texts[v]||"")}</td>`).join(""),f=ge(c.events,H,c.height);return`<tr style="height:${c.height}px">${u}<td style="padding:0;width:${t}px"><svg width="${t}" height="${c.height}" viewBox="0 0 ${t} ${c.height}">${f}</svg></td></tr>`}function be(D){return`
198
- @page { size: ${D.w}px ${D.h}px; margin: 0; }
209
+ `.trim()}function ve(n,f,y,z,D,T){const F=n?`<p class="${A}__title">${V(n)}</p>`:"",J=O(z.from,z.to,y,T,x,f.zoomLevel),c=f.columns.map((R,s)=>`<th style="width:${f.columnWidths[s]}px">${V(R.title||R.id||R.key)}</th>`).join("");return`${F}<table class="${A}__table"><thead><tr>${c}<th style="width:${T}px;padding:0"><svg width="${T}" height="${x}" viewBox="0 0 ${T} ${x}">${J}</svg></th></tr></thead><tbody>`}function G(n,f,y,z){const D=n.columns.map((F,J)=>{const c=n.cellTexts?n.cellTexts[f.rowIndex][J]:d(F,f.rec,n.rawById.get(String(f.id)));return`<td style="padding-left:${6+(F.kind==="name"?f.depth*14:0)}px;font-weight:${f.rec.isSummary?600:400}">${V(c)}</td>`}).join(""),T=u(f.rec,y,0,f.height);return`<tr style="height:${f.height}px">${D}<td style="padding:0;width:${z}px"><svg width="${z}" height="${f.height}" viewBox="0 0 ${z} ${f.height}">${T}</svg></td></tr>`}function U(n,f,y,z){return n===!1?null:typeof n=="function"?String(n(f,y)):typeof n=="string"?n:z}function M(n,f={}){const y=v(f.paper||"A4",f.orientation||"landscape"),z=y.w-p*2,D=y.h-p*2,T=Math.min(z-80,n.columnWidths.reduce((b,P)=>b+P,0)),F=Math.max(40,z-T),J=Math.max(1,n.domainMax-n.domainMin),c=f.fitToWidth!==!1?F/J:f.scale||n.pxPerDay,R=ie({min:n.domainMin,max:n.domainMax},[0,c*J]),s=b=>Math.round(R.of(b)),S=f.fitToWidth!==!1?F:Math.round(c*J),j=typeof f.t=="function"?f.t:(b=>b),_=f.title===!1?null:f.title||n.title||null,ge=f.locale||"en-GB",ae=f.printDate instanceof Date?f.printDate:new Date;let Z="";try{Z=new Intl.DateTimeFormat(ge).format(ae)}catch{Z=ae.toISOString().slice(0,10)}const Oe=x,Pe=_?$:0,Me=f.footer!==!1,$e=Me?H:0,Ee=Math.max(n.rowHeight||24,D-Pe-Oe-$e-8),C=n.rowHeight||24,w=fe(n.rows.map((b,P)=>({...b,height:Math.max(C,b.height),rowIndex:P})),Ee),i=[];for(const[b,P,m]of[[n.workload,N.workload,"gantt.workload.title"],[n.histogram,N.histogram,"gantt.histogram.title"]]){if(!b||!b.data)continue;const k=b.data.grid?b.data.grid.rows:b.data.rows;if(!k.length)continue;const Y=k.map(X=>({...X,height:b.cfg.rowHeight})),g=fe(Y,Ee);i.push({title:j(m),rows:g,color:P,band:b,grid:!!b.data.grid})}const de=[];for(const b of Array.isArray(n.dataBands)?n.dataBands:[]){if(!b.rows.length)continue;const P=b.rows.map(m=>({...m,height:b.rowHeight}));de.push({band:b,rows:fe(P,Ee)})}const t=w.length+i.reduce((b,P)=>b+P.rows.length,0)+de.reduce((b,P)=>b+P.rows.length,0);let l=0,E="";for(const b of w)l+=1,E+=h({title:_,header:ve(_,n,s,{from:n.domainMin,to:n.domainMax},T,S),body:b.map(P=>G(n,P,s,S)).join(""),pageIndex:l,totalPages:t,opts:f,t:j,locale:ge,dateText:Z,footerOn:Me});for(const b of i)for(const P of b.rows){if(l+=1,b.grid){const X=b.band.data.grid,me=X.columns,je=X.columnWidths,pe=je.reduce((Ne,e)=>Ne+e,0),De=Math.max(40,z-pe),Ce=Ne=>Math.round((Ne-n.domainMin)/J*De),Ie=me.map((Ne,e)=>`<th style="width:${je[e]}px">${V(Ne.title||Ne.id)}</th>`).join(""),Ue=P.map(Ne=>{const e=me.map((ee,q)=>`<td style="padding-left:${6+(q===0&&Ne.taskId!=null?14:0)}px">${V(Ne.texts?Ne.texts[q]:"")}</td>`).join(""),a=te(P,Ne,Ce,0,Ne.height,0,b.color,b.band.data.buckets);return`<tr style="height:${Ne.height}px">${e}<td style="padding:0;width:${De}px"><svg width="${De}" height="${Ne.height}" viewBox="0 0 ${De} ${Ne.height}">${a}</svg></td></tr>`}).join("");E+=h({title:_?`${_} — ${b.title}`:b.title,header:`<p class="${A}__title">${V(_?`${_} — ${b.title}`:b.title)}</p><table class="${A}__table"><thead><tr>${Ie}<th style="width:${De}px"></th></tr></thead><tbody>`,body:Ue,pageIndex:l,totalPages:t,opts:f,t:j,locale:ge,dateText:Z,footerOn:Me});continue}const m=140,k=z-m,Y=X=>Math.round((X-n.domainMin)/J*k),g=P.map(X=>{const me=ne({rows:[X],buckets:b.band.data.buckets},Y,0,X.height,0,b.color);return`<tr style="height:${X.height}px"><td style="width:${m}px"></td><td style="padding:0;width:${k}px"><svg width="${k}" height="${X.height}" viewBox="0 0 ${k} ${X.height}">${me}</svg></td></tr>`}).join("");E+=h({title:_?`${_} — ${b.title}`:b.title,header:`<p class="${A}__title">${V(_?`${_} — ${b.title}`:b.title)}</p><table class="${A}__table"><thead><tr><th style="width:${m}px"></th><th style="width:${k}px"></th></tr></thead><tbody>`,body:g,pageIndex:l,totalPages:t,opts:f,t:j,locale:ge,dateText:Z,footerOn:Me})}for(const b of de){const P=b.band,m=P.buckets.map((g,X)=>({b:g,i:X})).filter(({b:g})=>g.end>n.domainMin&&g.start<n.domainMax),k=_?`${_} — ${P.title}`:P.title,Y=`<th></th>${P.totalsColumn?"<th></th>":""}${m.map(({b:g})=>`<th>${V(ue(g.start))}</th>`).join("")}`;for(const g of b.rows){l+=1;const X=g.map(me=>{const je=me.isTotal||me.isSummary?"font-weight:600;":"";return`<tr style="height:${me.height}px;${je}"><td style="padding-left:${6+(me.depth||0)*14}px">${V(me.label)}</td>${P.totalsColumn?`<td style="text-align:right">${V(me.totalText)}</td>`:""}${m.map(({i:pe})=>`<td style="text-align:right">${V(me.texts[pe]||"")}</td>`).join("")}</tr>`}).join("");E+=h({title:k,header:`<p class="${A}__title">${V(k)}</p><table class="${A}__table" data-band="${V(P.id)}"><thead><tr>${Y}</tr></thead><tbody>`,body:X,pageIndex:l,totalPages:t,opts:f,t:j,locale:ge,dateText:Z,footerOn:Me})}}return`<!DOCTYPE html><html><head><meta charset="utf-8"><title>${V(_||"Gantt")}</title><style>${ke(y)}</style></head><body>${E}</body></html>`}function h(n){const f=n.footerOn?U(n.opts.footer,n.pageIndex,n.totalPages,`${n.t("gantt.print.page",{page:n.pageIndex,pages:n.totalPages})} · ${n.t("gantt.print.printed",{date:n.dateText})}`):null,y=n.opts.header===!1?null:typeof n.opts.header=="function"||typeof n.opts.header=="string"?U(n.opts.header,n.pageIndex,n.totalPages,null):null,z=y?`<p class="${A}__title">${V(y)}</p>`:"";return`<div class="${A}__page">${z}${n.header}${n.body}</tbody></table>`+(f?`<div class="${A}__foot"><span>${V(f)}</span></div>`:"")+"</div>"}function B(n,f){const y=n&&n.defaultView||globalThis;if(typeof y.open!="function")return!1;const z=y.open("","_blank");if(!z||!z.document)return!1;z.document.open(),z.document.write(f),z.document.close();const D=()=>{try{z.focus(),z.print()}catch{}};return z.document.readyState==="complete"?D():z.addEventListener("load",D,{once:!0}),!0}}),Fe("packages/modules/scheduler/export.js",function(r,se){"use strict";Object.defineProperty(r,"exportModel",{enumerable:!0,get:function(){return W}}),Object.defineProperty(r,"buildSchedulerSVG",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(r,"buildSchedulerPrintDocument",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(r,"toSVG",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(r,"toPNG",{enumerable:!0,get:function(){return G}}),Object.defineProperty(r,"print",{enumerable:!0,get:function(){return U}});const ie=se("packages/modules/charts/scale.js").linearScale,ue=se("packages/modules/gantt/time.js").toDayNumber,re=se("packages/modules/gantt/export.js"),A=re.PALETTE,Q=re.esc,p=re.paperPx,$=re.PAGE_MARGIN,H=re.resolveRange,I=re.timeHeadMarkup,x=re.rasterizePNG,N=re.openPrintWindow,v=se("packages/modules/scheduler/model.js").accessorFor,d=se("packages/modules/scheduler/messages.js").t,u=28,O=26,te=20,ne="lat-sched-print";function W(M){const h=M.ctx,B=(h.columns||[]).map((y,z)=>{const D=String(y&&(y.id||y.field)||`column-${z}`),T=String(y&&(y.title||y.id||y.field)||`Column ${z+1}`),F=y&&(y.field||y.id),J=y&&y.layout&&Number.isFinite(y.layout.width)&&y.layout.width>0?y.layout.width:100;return{id:D,title:T,field:F,width:J}}),n=v(h.resourceKey),f=M.resources.map((y,z)=>{const D=n(y),T=B.map(F=>{const J=F.field?v(F.field)(y):void 0;return J==null?"":String(J)});return{id:D,key:D,top:z*h.rowHeight,height:h.rowHeight,texts:T,events:M.placement.byResource.get(D)||[]}});return{columns:B,columnWidths:B.map(y=>y.width),rows:f,totalHeight:M.resources.length*h.rowHeight,domainMin:M.span?M.span.startDay:null,domainMax:M.span?M.span.endDay:null,pxPerDay:M.pxPerDay,zoomLevel:h.zoom.level,today:h.todayLine?ue(new Date):null,rowHeight:h.rowHeight,title:null}}function oe(M,h,B){const n=Math.max(1,...M.map(z=>z.lanes||1)),f=Math.max(4,(B-4)/n);let y="";for(const z of M){if(!Number.isFinite(z.startDay)||!Number.isFinite(z.endDay))continue;const D=h(z.startDay),T=h(z.endDay),F=Math.max(2,T-D),J=z.color&&!String(z.color).startsWith("var(")?z.color:A.bar;y+=`<rect x="${D}" y="${2+(z.lane||0)*f}" width="${F}" height="${Math.max(2,f-3)}" rx="3" fill="${J}"/>`}return y}function ce(M,h={}){if(!M||!Number.isFinite(M.domainMin)||!Number.isFinite(M.domainMax))return"";const B=H(M,h.range),n=Math.max(1,Math.round(M.pxPerDay*(B.to-B.from))),f=ie({min:B.from,max:B.to},[0,n]),y=s=>Math.round(f.of(s)),z=M.columnWidths.reduce((s,S)=>s+S,0),D=z+n,T=u,F=T,J=F+M.totalHeight;let c="",R=0;for(let s=0;s<M.columns.length;s++)c+=`<text x="${R+6}" y="${Math.round(T*.65)}" font-size="11" font-weight="600" fill="${A.muted}">${Q(M.columns[s].title)}</text>`,R+=M.columnWidths[s];c+=`<line x1="0" y1="${T}" x2="${z}" y2="${T}" stroke="${A.border}"/>`,c+=`<g transform="translate(${z},0)">${I(B.from,B.to,y,n,T,M.zoomLevel)}</g>`;for(const s of M.rows){const S=F+s.top;let j=0;for(let _=0;_<M.columns.length;_++)c+=`<text x="${j+6}" y="${S+s.height/2+4}" font-size="12" fill="${A.text}">${Q(s.texts[_]||"")}</text>`,j+=M.columnWidths[_];c+=`<line x1="0" y1="${S+s.height}" x2="${D}" y2="${S+s.height}" stroke="${A.border}"/>`,c+=`<g transform="translate(${z},${S})">${oe(s.events,y,s.height)}</g>`}if(M.today!=null&&M.today>=B.from&&M.today<=B.to){const s=z+y(M.today);c+=`<line x1="${s}" y1="0" x2="${s}" y2="${F+M.totalHeight}" stroke="${A.today}" stroke-width="1.5" stroke-dasharray="4 3"/>`}return`<svg xmlns="http://www.w3.org/2000/svg" width="${D}" height="${J}" viewBox="0 0 ${D} ${J}" font-family="system-ui,sans-serif"><rect x="0" y="0" width="${D}" height="${J}" fill="${A.pageBg}"/>${c}</svg>`}function ye(M,h){const B=[];let n=[],f=0;for(const y of M){const z=Math.max(1,y.height);n.length&&f+z>h&&(B.push(n),n=[],f=0),n.push(y),f+=z}return(n.length||!B.length)&&B.push(n),B}function he(M,h,B,n){const f=M.columns.map((z,D)=>`<td>${Q(h.texts[D]||"")}</td>`).join(""),y=oe(h.events,B,h.height);return`<tr style="height:${h.height}px">${f}<td style="padding:0;width:${n}px"><svg width="${n}" height="${h.height}" viewBox="0 0 ${n} ${h.height}">${y}</svg></td></tr>`}function fe(M){return`
210
+ @page { size: ${M.w}px ${M.h}px; margin: 0; }
199
211
  *{box-sizing:border-box}
200
212
  body{margin:0;font:12px/1.4 system-ui,sans-serif;color:${A.text};background:${A.pageBg}}
201
- .${oe}__page{width:${D.w}px;height:${D.h}px;padding:${S}px;break-after:page;page-break-after:always;overflow:hidden;position:relative}
202
- .${oe}__page:last-child{break-after:auto;page-break-after:auto}
203
- .${oe}__title{font-size:14px;font-weight:600;margin:0 0 6px 0}
204
- .${oe}__foot{position:absolute;left:${S}px;right:${S}px;bottom:${S-ne}px;height:${ne}px;font-size:10px;color:${A.muted};display:flex;justify-content:space-between}
205
- table.${oe}__table{border-collapse:collapse;width:100%}
206
- .${oe}__table th,.${oe}__table td{border-bottom:1px solid ${A.border};padding:2px 6px;text-align:left;font-weight:400;vertical-align:middle}
207
- .${oe}__table thead th{background:${A.surface};color:${A.muted};font-weight:600;font-size:11px}
208
- .${oe}__table tr{break-inside:avoid;page-break-inside:avoid}
213
+ .${ne}__page{width:${M.w}px;height:${M.h}px;padding:${$}px;break-after:page;page-break-after:always;overflow:hidden;position:relative}
214
+ .${ne}__page:last-child{break-after:auto;page-break-after:auto}
215
+ .${ne}__title{font-size:14px;font-weight:600;margin:0 0 6px 0}
216
+ .${ne}__foot{position:absolute;left:${$}px;right:${$}px;bottom:${$-te}px;height:${te}px;font-size:10px;color:${A.muted};display:flex;justify-content:space-between}
217
+ table.${ne}__table{border-collapse:collapse;width:100%}
218
+ .${ne}__table th,.${ne}__table td{border-bottom:1px solid ${A.border};padding:2px 6px;text-align:left;font-weight:400;vertical-align:middle}
219
+ .${ne}__table thead th{background:${A.surface};color:${A.muted};font-weight:600;font-size:11px}
220
+ .${ne}__table tr{break-inside:avoid;page-break-inside:avoid}
209
221
  svg{display:block}
210
- `.trim()}function ve(D,c={}){const H=b(c.paper||"A4",c.orientation||"landscape"),t=H.w-S*2,u=H.h-S*2,f=Math.min(t-80,D.columnWidths.reduce((F,ee)=>F+ee,0)),z=Math.max(40,t-f),v=Math.max(1,D.domainMax-D.domainMin),E=c.fitToWidth!==!1?z/v:c.scale||D.pxPerDay,N=le({min:D.domainMin,max:D.domainMax},[0,E*v]),K=F=>Math.round(N.of(F)),i=c.fitToWidth!==!1?z:Math.round(E*v),_=typeof c.t=="function"?c.t:(F=>F),n=c.title===!1?null:c.title||D.title||null,d=c.locale||"en-GB",L=c.printDate instanceof Date?c.printDate:new Date;let j="";try{j=new Intl.DateTimeFormat(d).format(L)}catch{j=L.toISOString().slice(0,10)}const he=y,ce=n?T:0,q=c.footer!==!1,Pe=q?ne:0,Ae=Math.max(D.rowHeight||34,u-ce-he-Pe-8),Ee=ye(D.rows,Ae),k=Ee.length,m=D.columns.map((F,ee)=>`<th style="width:${D.columnWidths[ee]}px">${te(F.title)}</th>`).join("");let o="",ie=0;for(const F of Ee){ie+=1;const ee=n?`<p class="${oe}__title">${te(n)}</p>`:"",s=B(D.domainMin,D.domainMax,K,i,he,D.zoomLevel),M=`${ee}<table class="${oe}__table"><thead><tr>${m}<th style="width:${i}px;padding:0"><svg width="${i}" height="${he}" viewBox="0 0 ${i} ${he}">${s}</svg></th></tr></thead><tbody>`,I=F.map(w=>ke(D,w,K,i)).join(""),$=q?`${_("scheduler.print.page",{page:ie,pages:k})} · ${_("scheduler.print.printed",{date:j})}`:null;o+=`<div class="${oe}__page">${M}${I}</tbody></table>`+($?`<div class="${oe}__foot"><span>${te($)}</span></div>`:"")+"</div>"}return`<!DOCTYPE html><html><head><meta charset="utf-8"><title>${te(n||"Scheduler")}</title><style>${be(H)}</style></head><body>${o}</body></html>`}function Se(D,c={}){return me(W(D),c)}async function G(D,c={}){const H=Se(D,c);if(!H)return null;const t=/width="(\d+)" height="(\d+)"/.exec(H),u=t?Number(t[1]):0,f=t?Number(t[2]):0;if(!u||!f)return null;const z=D.doc;if(!z||typeof z.createElement!="function")return null;const v=z&&z.defaultView||globalThis,E=c.scale||v.devicePixelRatio||1,N="background"in c?c.background:"#ffffff";return O(z,H,u,f,E,N)}function U(D,c={}){if(!D.span)return!1;const H=W(D),t=ve(H,{...c,title:c.title===!1?!1:c.title||H.title||null,t:c.t||((u,f)=>g(D,u,f))});return C(D.doc,t)}}),Le("packages/modules/scheduler/edit.js",function(r,ae){"use strict";Object.defineProperty(r,"createSchedulerEdit",{enumerable:!0,get:function(){return C}});const le=ae("packages/core/src/internal/warn.js").warnOnce,fe=ae("packages/core/src/internal/predicates.js").isFunction,se=ae("packages/modules/scheduler/model.js"),A=se.accessorFor,te=se.eventSpan,b=se.formatFieldDate,S=se.formatFieldDateLike,Y=se.snapToStep,B=se.isEventReadOnly,O=se.isResourceReadOnly;function C(J){const x=J.ctx,a=x.fields.resourceId,g=x.fields.startDate,y=x.fields.endDate,T=A(a),ne=A(g),oe=A(y),W=A(x.eventKey),ge=[],me=[];let ye=!1;const ke=n=>n==null?null:J.rows.get(n)||null,be=n=>n==null?null:J.events.get(n)||null,ve=n=>(le("scheduler:read-only-refused",`scheduler: refused an edit to a read-only ${n}; nothing changed.`),{ok:!1,refused:n}),Se=n=>({[g]:ne(n),[y]:oe(n),[a]:T(n)}),G=(n,d)=>{J.events.apply({update:[{[x.eventKey]:n,...d}]})},U=n=>{if(!Object.keys(n.changes).length&&n.type!=="create"&&n.type!=="delete")return{ok:!1};const d={id:n.id,action:n.type,changes:n.changes,oldValues:n.oldValues,newValues:n.newValues,event:n.event||null},L=J.emitter.emitBefore("beforeEventChange",d,n.origin);return L===!1?(J.emitter.emit("eventChange:cancelled",{...d,reason:d.reason||"prevented"}),{ok:!1,cancelled:!0}):L&&fe(L.then)?L.then(j=>j?D(n):(J.emitter.emit("eventChange:cancelled",{...d,reason:d.reason||"prevented"}),{ok:!1,cancelled:!0})):D(n)},D=n=>(n.apply(),ye||(ge.push({...n}),me.length=0),J.fire("event:change",{id:n.id,action:n.type,changes:n.changes,oldValues:n.oldValues,newValues:n.newValues,event:n.event||null}),{ok:!0,change:n}),c=(n,d)=>{ye=!0;try{(d==="undo"?n.undo:n.apply)()}finally{ye=!1}J.fire("event:change",{id:n.id,action:n.type,changes:n.changes,oldValues:d==="undo"?n.newValues:n.oldValues,newValues:d==="undo"?n.oldValues:n.newValues,event:n.event||null,undo:d==="undo"})},H=(n,d,L={})=>{if(!x.editable)return{ok:!1};const j=be(n);if(!j)return{ok:!1};if(B(x,j))return ve("event");const he=T(j);if(O(x,ke(he)))return ve("resource");const ce=te(x,j);if(!ce.start||!ce.end)return{ok:!1};const q=Y(x.zoom.step,d),Pe=ce.start.day+ce.start.frac+q,Ae=ce.end.day+ce.end.frac+q,Ee=ne(j),k=oe(j),m=S(Ee,Pe),o=S(k,Ae),ie={};return m!==Ee&&(ie[g]={from:Ee,to:m}),o!==k&&(ie[y]={from:k,to:o}),U({type:"move",id:n,changes:ie,oldValues:Se(j),newValues:{...Se(j),[g]:m,[y]:o},apply:()=>G(n,{[g]:m,[y]:o}),undo:()=>G(n,{[g]:Ee,[y]:k}),origin:L.origin||"user",event:L.event||null})},t=(n,d,L={})=>{if(!x.editable)return{ok:!1};const j=be(n);if(!j)return{ok:!1};if(B(x,j))return ve("event");if(O(x,ke(d)))return ve("resource");const he=T(j),ce=String(he)===String(d)?{}:{[a]:{from:he,to:d}};return U({type:"reassign",id:n,changes:ce,oldValues:Se(j),newValues:{...Se(j),[a]:d},apply:()=>G(n,{[a]:d}),undo:()=>G(n,{[a]:he}),origin:L.origin||"user",event:L.event||null})},u=(n,d,L,j={})=>{if(!x.editable)return{ok:!1};const he=be(n);if(!he)return{ok:!1};if(B(x,he))return ve("event");const ce=T(he);if(O(x,ke(ce)))return ve("resource");const q=te(x,he);if(!q.start||!q.end)return{ok:!1};const Pe=Y(x.zoom.step,L),Ae=ne(he),Ee=oe(he),k={};let m=Ae,o=Ee;return d==="start"?(m=S(Ae,Pe),m!==Ae&&(k[g]={from:Ae,to:m})):(o=S(Ee,Pe),o!==Ee&&(k[y]={from:Ee,to:o})),U({type:"resize",id:n,changes:k,oldValues:Se(he),newValues:{...Se(he),[g]:m,[y]:o},apply:()=>G(n,{[g]:m,[y]:o}),undo:()=>G(n,{[g]:Ae,[y]:Ee}),origin:j.origin||"user",event:j.event||null})},f=(n,d,L,j={})=>{if(!x.editable)return{ok:!1};if(O(x,ke(n)))return ve("resource");const he=Y(x.zoom.step,d),ce=Y(x.zoom.step,L),q=b(he),Pe=b(Math.max(ce,he+x.zoom.step)),Ae=v(),Ee={[x.eventKey]:Ae,[a]:n,[g]:q,[y]:Pe};return U({type:"create",id:Ae,changes:{},oldValues:null,newValues:{[g]:q,[y]:Pe,[a]:n},apply:()=>J.events.apply({add:[Ee]}),undo:()=>J.events.apply({remove:[Ae]}),origin:j.origin||"user",event:j.event||null})},z=(n,d={})=>{if(!x.editable)return{ok:!1};const L=be(n);if(!L)return{ok:!1};if(B(x,L))return ve("event");const j=T(L);return O(x,ke(j))?ve("resource"):U({type:"delete",id:n,changes:{},oldValues:Se(L),newValues:null,apply:()=>J.events.apply({remove:[n]}),undo:()=>J.events.apply({add:[L]}),origin:d.origin||"user",event:d.event||null})},v=()=>{let n=J.events.count+1;for(;J.events.get(String(n))!=null;)n+=1;return String(n)};return{move:H,reassign:t,resize:u,create:f,remove:z,undo:(n={})=>{const d=ge.pop();return d?(c(d,"undo"),me.push(d),!0):!1},redo:(n={})=>{const d=me.pop();return d?(c(d,"redo"),ge.push(d),!0):!1},canUndo:()=>ge.length>0,canRedo:()=>me.length>0,clearHistory:()=>{ge.length=0,me.length=0},get undoSize(){return ge.length},get redoSize(){return me.length}}}}),Le("packages/modules/scheduler/data.js",function(r,ae){"use strict";Object.defineProperty(r,"ganttAssignments",{enumerable:!0,get:function(){return O}}),Object.defineProperty(r,"calendarAssignments",{enumerable:!0,get:function(){return C}}),Object.defineProperty(r,"makeSchedulerData",{enumerable:!0,get:function(){return J}}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return x}});const De=ae("packages/core/src/internal/predicates.js"),le=De.isObject,Z=De.isFunction,se=ae("packages/modules/gantt/assignments.js").parseAssignments,te=ae("packages/modules/gantt/time.js").fromDayNumber,b=864e5;function S(a){return te(a)?new Date(Math.round(a)*b).toISOString().slice(0,10):""}function Y(a,g,y,T){const ne=g[y],oe=g[T];if(ne!=null&&ne!=="")return{start:ne,end:oe};const W=a&&a.schedule,ge=W&&W.ok&&W.tasks?W.tasks.get(String(g.id)):null;return ge&&ge.es!=null?{start:S(ge.es),end:S(ge.ef)}:{start:null,end:null}}function B(a){return a&&typeof a.id=="string"?a.id:"id"}function O(a,g={}){const y=le(g.fields)?g.fields:{},T=B(y),ne=typeof y.start=="string"?y.start:"start",oe=typeof y.end=="string"?y.end:"end",W=typeof y.name=="string"?y.name:"name",ge=a&&Array.isArray(a.tasks)?a.tasks:[],me=a&&a.resourceSpecs instanceof Map?a.resourceSpecs:new Map,ye=new Map,ke=[];for(const be of ge){const ve=String(be[T]),Se=se(be),G=Y(a,be,ne,oe);for(const U of Se){if(!ye.has(U.resource)){const D=me.get(U.resource)||{};ye.set(U.resource,{id:U.resource,name:D.name||U.resource,...D})}ke.push({id:`${ve}::${U.resource}`,taskId:ve,resourceId:U.resource,name:be[W]??be.name??ve,start:G.start,end:G.end})}}return{resources:[...ye.values()],events:ke,fields:{resourceId:"resourceId",startDate:"start",endDate:"end",name:"name"}}}function C(a,g={}){const y=le(g)?g:{},T=typeof y.resourceId=="string"?y.resourceId:"resource",ne=typeof y.startDate=="string"?y.startDate:"start",oe=typeof y.endDate=="string"?y.endDate:"end",W=typeof y.name=="string"?y.name:"name",ge=new Map,me=[];return(a&&a.rows&&Z(a.rows.forEach)?ke=>a.rows.forEach(ke):()=>{})((ke,be)=>{const ve=ke&&ke[T]!=null?ke[T]:"Calendar";ge.has(String(ve))||ge.set(String(ve),{id:String(ve),name:String(ve)}),me.push({id:be,resourceId:ve,name:ke&&ke[W]!=null?ke[W]:String(be),start:ke&&ke[ne],end:ke&&ke[oe]})}),{resources:[...ge.values()],events:me}}function J(a){function g(ne,oe,W={}){const ge=le(W)?W:{},{resources:me,events:ye,fields:ke}=O(oe,ge),be=a(ne,{...ge,resources:Array.isArray(ge.resources)&&ge.resources.length?ge.resources:me,events:Array.isArray(ge.events)?ge.events:ye,fields:{...ke,...le(ge.fields)?ge.fields:{}}});if(oe&&Z(oe.applyEdit)){const ve=Se=>{if(Se.kind!=="reassign"||!Se.row||!Se.row.taskId)return;const G=Z(oe.taskById)?oe.taskById(Se.row.taskId):null;if(!G)return;const U=se(G).map(D=>String(D.resource)===String(Se.resource.from)?{resource:Se.resource.to,units:D.units}:D);U.some(D=>String(D.resource)===String(Se.resource.to))||U.push({resource:Se.resource.to,units:1}),oe.applyEdit({id:Se.row.taskId,assignments:U})};be.on("change",ve)}return be}function y(ne,oe,W={}){return a(ne,{...le(W)?W:{},events:Array.isArray(oe)?oe:[]})}function T(ne,oe,W={}){const ge=le(W)?W:{},{resources:me,events:ye}=C(oe,ge.fields);return a(ne,{...ge,resources:Array.isArray(ge.resources)&&ge.resources.length?ge.resources:me,events:ye,fields:{resourceId:"resourceId",startDate:"start",endDate:"end",name:"name",...le(ge.fields)?ge.fields:{}}})}return{schedulerFromGantt:g,schedulerFromRows:y,schedulerFromCalendar:T}}const x=J}),Le("packages/modules/scheduler/index.js",function(r,ae){"use strict";Object.defineProperty(r,"SCHEDULER_EVENTS",{enumerable:!0,get:function(){return u}}),Object.defineProperty(r,"createScheduler",{enumerable:!0,get:function(){return f}}),Object.defineProperty(r,"schedulerFromGantt",{enumerable:!0,get:function(){return z}}),Object.defineProperty(r,"schedulerFromRows",{enumerable:!0,get:function(){return v}}),Object.defineProperty(r,"schedulerFromCalendar",{enumerable:!0,get:function(){return E}}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return N}});const De=ae("packages/core/src/internal/predicates.js"),le=De.isObject,Z=De.isFunction,se=ae("packages/core/src/internal/warn.js").warnOnce,te=ae("packages/core/src/internal/merge.js").mergeRow,S=ae("packages/core/src/internal/paths.js").setPath,Y=ae("packages/modules/scheduler/model.js"),B=Y.resolveContext,O=Y.accessorFor,J=ae("packages/modules/gantt/zoom.js").resolveZoomPreset,a=ae("packages/modules/gantt/workload-groups.js").normalizeGroupBy,y=ae("packages/modules/shared/emitter.js").Emitter,ne=ae("packages/modules/scheduler/styles.js").NS,oe=ae("packages/modules/scheduler/view.js"),W=oe.render,ge=oe.layout,me=oe.syncGrid,ye=oe.mountGrid,ke=oe.toggleGroup,be=oe.renderTimeline,ve=ae("packages/modules/scheduler/export.js"),Se=ve.toSVG,G=ve.toPNG,U=ve.print,c=ae("packages/modules/scheduler/edit.js").createSchedulerEdit,t=ae("packages/modules/scheduler/data.js").makeSchedulerData,u=Object.freeze(["zoom:change","change","beforeEventChange","eventChange:cancelled","event:change"]);function f(K,i={}){const _=le(i)?i:{},n=B(_),d=new y("scheduler"),L=K&&K.ownerDocument||typeof globalThis<"u"&&globalThis.document||null,j=new Map,he=new Map;let ce=!1,q=!1;const Pe=O(n.resourceKey),Ae=O(n.eventKey),Ee=O(n.fields.resourceId),k=()=>{j.clear();for(const F of n.resources)j.set(Pe(F),F)},m=()=>{he.clear();for(const F of n.events)he.set(Ae(F),F)},o={el:K||null,doc:L,ctx:n,config:_,emitter:d,wired:!1,rowKey:n.resourceKey,eventKey:n.eventKey,resources:[],placement:{byResource:new Map,unscheduled:[],keys:new Map},span:null,ticks:[],totalWidth:0,totalHeight:0,pxPerDay:n.zoom.px,anchorDay:null,workload:null,grid:null,gridHost:null,timeline:null,canvas:null,headView:null,headInner:null,live:null,_listeners:null,_timelineScroll:null,_gridOff:null,_gridKeys:null,_gridGroupOff:null,_syncing:!1,groupColId:null,displayRows:null,collapsedGroups:new Set,focusKey:null,tip:null,tipArrow:null,model:{startDay:null,endDay:null,pxPerDay:n.zoom.px,ticks:[],unscheduled:[]},fire(F,ee){d.emit(F,ee)}},ie=()=>{if(o.resources=[...j.values()],o.resources.length===0&&n.events.length){const F=new Set;for(const ee of n.events){const s=Ee(ee);if(s==null||s===""||F.has(s))continue;F.add(s);const M={[n.resourceKey]:s,name:s};j.set(s,M),o.resources.push(M)}}return n.resources=o.resources,n.events=[...he.values()],me(o),ge(o),o.model.startDay=o.span?o.span.startDay:null,o.model.endDay=o.span?o.span.endDay:null,o.model.pxPerDay=o.pxPerDay,o.model.ticks=o.ticks,o.model.unscheduled=o.placement.unscheduled,o};return o.rows={apply(F={}){ce=!0;for(const ee of F.add||[])j.set(Pe(ee),ee);for(const ee of F.update||[]){const s=Pe(ee);j.set(s,te(j.get(s),ee))}for(const ee of F.remove||[])j.delete(ee);ie()},forEach(F){for(const[ee,s]of j)F(s,ee)},get(F){return j.get(F)},get count(){return j.size}},o.events={apply(F={}){q=!0;for(const ee of F.add||[])he.set(Ae(ee),ee);for(const ee of F.update||[]){const s=Ae(ee);he.set(s,te(he.get(s),ee))}for(const ee of F.remove||[])he.delete(ee);ie()},forEach(F){for(const[ee,s]of he)F(s,ee)},get(F){return he.get(F)},get count(){return he.size}},o.edit=c(o),o.undo=F=>o.edit.undo(F),o.redo=F=>o.edit.redo(F),o.canUndo=()=>o.edit.canUndo(),o.canRedo=()=>o.edit.canRedo(),o.refresh=()=>(ce||k(),q||m(),ie()),o.setEvents=F=>{q=!0,he.clear();for(const ee of Array.isArray(F)?F:[])he.set(Ae(ee),ee);return ie()},o.setZoom=F=>{const ee=o.span&&o.timeline?o.span.startDay+o.timeline.scrollLeft/o.pxPerDay:null;return n.zoom=J(F,n.zoom.level||"day"),n.zoomName=n.zoom.level,ge(o),ee!=null&&o.timeline&&(o.timeline.scrollLeft=Math.max(0,(ee-o.span.startDay)*o.pxPerDay)),o.model.startDay=o.span?o.span.startDay:null,o.model.endDay=o.span?o.span.endDay:null,o.model.pxPerDay=o.pxPerDay,o.model.ticks=o.ticks,o.fire("zoom:change",{level:n.zoom.level,px:n.zoom.px}),o},o.getZoom=()=>({level:o.ctx.zoom.level,px:o.ctx.zoom.px}),o.toSVG=F=>Se(o,F||{}),o.toPNG=F=>G(o,F||{}),o.print=F=>U(o,F||{}),o.reassign=(F,ee)=>{const s=he.get(F);if(!s)return!1;const M=Ee(s);if(String(M)===String(ee))return!1;const I={...s};return S(I,n.fields.resourceId,ee),he.set(F,I),ie(),o.fire("change",{id:F,kind:"reassign",resource:{from:M,to:ee},row:I}),!0},o.getState=()=>({version:1,zoom:o.ctx.zoom.level,scroll:{left:o.timeline?o.timeline.scrollLeft:0,top:o.timeline?o.timeline.scrollTop:0}}),o.setState=F=>{const ee=le(F)?F:{};return(typeof ee.zoom=="string"||typeof ee.zoom=="number")&&o.setZoom(ee.zoom),ee.scroll&&o.timeline&&(Number.isFinite(ee.scroll.left)&&(o.timeline.scrollLeft=ee.scroll.left),Number.isFinite(ee.scroll.top)&&(o.timeline.scrollTop=ee.scroll.top),be(o)),o},o.setGroupBy=F=>{if(n.groupBy=a(F),o.collapsedGroups.clear(),o.el){if(o.grid&&Z(o.grid.destroy))try{o.grid.destroy()}catch{}o.grid=null,o.groupColId=null,ye(o)}return ie()},o.setSearch=F=>(n.search=String(F||"").trim(),ie()),o.setResourceFilter=F=>(n.resourceFilter=Z(F)?F:null,ie()),o.setEventFilter=F=>(n.eventFilter=Z(F)?F:null,ie()),o.toggleGroup=F=>{const ee=(o.displayRows||[]).find(s=>s.type==="group"&&s.value===F);return ee&&ke(o,ee),o},o.on=(F,ee)=>(u.includes(F)||se(`scheduler:event:${F}`,`"${F}" is not a scheduler event; expected one of ${u.join(", ")}.`),d.on(F,ee)),o.off=(F,ee)=>d.off(F,ee),o.destroy=()=>{if(o._editDetach){try{o._editDetach()}catch{}o._editDetach=null}if(o._gridOff){try{o._gridOff()}catch{}o._gridOff=null}if(o._gridGroupOff){try{o._gridGroupOff()}catch{}o._gridGroupOff=null}if(o.grid&&Z(o.grid.destroy))try{o.grid.destroy()}catch{}o.grid=null,o._timelineScroll&&o._timelineScroll.target&&(o._timelineScroll.target.removeEventListener("scroll",o._timelineScroll.fn),o._timelineScroll=null);const F=o.el;if(F){for(;F.firstChild;)F.removeChild(F.firstChild);if(F.classList.remove(ne),F.removeAttribute("role"),F.removeAttribute("aria-label"),F.__latticeScheduler===o&&(F.__latticeScheduler=null),o._listeners){for(const ee of o._listeners)F.removeEventListener(ee.type,ee.fn);o._listeners=null}}o.wired=!1,o.edit&&o.edit.clearHistory(),j.clear(),he.clear(),o.resources=[],n.resources=[],n.events=[],o.placement={byResource:new Map,unscheduled:[],keys:new Map},o.span=null,o.ticks=[],o.totalWidth=0,o.totalHeight=0,o.displayRows=null,o.groupColId=null,o.collapsedGroups.clear(),o.focusKey=null,o.tip=null,o.tipArrow=null,o.workload=null,o.model={startDay:null,endDay:null,pxPerDay:n.zoom.px,ticks:[],unscheduled:[]},d.clear()},K&&(K.__latticeScheduler=o),k(),m(),ie(),K&&W(o),o}const{schedulerFromGantt:z,schedulerFromRows:v,schedulerFromCalendar:E}=t(f),N=f});const rt=ft("packages/modules/scheduler/index.js"),dt=rt.SCHEDULER_EVENTS,gt=rt.createScheduler,ht=rt.schedulerFromGantt,mt=rt.schedulerFromRows,pt=rt.schedulerFromCalendar;var yt=rt.default;export{dt as SCHEDULER_EVENTS,gt as createScheduler,yt as default,pt as schedulerFromCalendar,ht as schedulerFromGantt,mt as schedulerFromRows};
222
+ `.trim()}function ke(M,h={}){const B=p(h.paper||"A4",h.orientation||"landscape"),n=B.w-$*2,f=B.h-$*2,y=Math.min(n-80,M.columnWidths.reduce((i,de)=>i+de,0)),z=Math.max(40,n-y),D=Math.max(1,M.domainMax-M.domainMin),T=h.fitToWidth!==!1?z/D:h.scale||M.pxPerDay,F=ie({min:M.domainMin,max:M.domainMax},[0,T*D]),J=i=>Math.round(F.of(i)),c=h.fitToWidth!==!1?z:Math.round(T*D),R=typeof h.t=="function"?h.t:(i=>i),s=h.title===!1?null:h.title||M.title||null,S=h.locale||"en-GB",j=h.printDate instanceof Date?h.printDate:new Date;let _="";try{_=new Intl.DateTimeFormat(S).format(j)}catch{_=j.toISOString().slice(0,10)}const ge=u,ae=s?O:0,Z=h.footer!==!1,Oe=Z?te:0,Pe=Math.max(M.rowHeight||34,f-ae-ge-Oe-8),Me=ye(M.rows,Pe),$e=Me.length,Ee=M.columns.map((i,de)=>`<th style="width:${M.columnWidths[de]}px">${Q(i.title)}</th>`).join("");let C="",w=0;for(const i of Me){w+=1;const de=s?`<p class="${ne}__title">${Q(s)}</p>`:"",t=I(M.domainMin,M.domainMax,J,c,ge,M.zoomLevel),l=`${de}<table class="${ne}__table"><thead><tr>${Ee}<th style="width:${c}px;padding:0"><svg width="${c}" height="${ge}" viewBox="0 0 ${c} ${ge}">${t}</svg></th></tr></thead><tbody>`,E=i.map(P=>he(M,P,J,c)).join(""),b=Z?`${R("scheduler.print.page",{page:w,pages:$e})} · ${R("scheduler.print.printed",{date:_})}`:null;C+=`<div class="${ne}__page">${l}${E}</tbody></table>`+(b?`<div class="${ne}__foot"><span>${Q(b)}</span></div>`:"")+"</div>"}return`<!DOCTYPE html><html><head><meta charset="utf-8"><title>${Q(s||"Scheduler")}</title><style>${fe(B)}</style></head><body>${C}</body></html>`}function ve(M,h={}){return ce(W(M),h)}async function G(M,h={}){const B=ve(M,h);if(!B)return null;const n=/width="(\d+)" height="(\d+)"/.exec(B),f=n?Number(n[1]):0,y=n?Number(n[2]):0;if(!f||!y)return null;const z=M.doc;if(!z||typeof z.createElement!="function")return null;const D=z&&z.defaultView||globalThis,T=h.scale||D.devicePixelRatio||1,F="background"in h?h.background:"#ffffff";return x(z,B,f,y,T,F)}function U(M,h={}){if(!M.span)return!1;const B=W(M),n=ke(B,{...h,title:h.title===!1?!1:h.title||B.title||null,t:h.t||((f,y)=>d(M,f,y))});return N(M.doc,n)}}),Fe("packages/modules/scheduler/edit.js",function(r,se){"use strict";Object.defineProperty(r,"createSchedulerEdit",{enumerable:!0,get:function(){return N}});const ie=se("packages/core/src/internal/warn.js").warnOnce,ue=se("packages/core/src/internal/predicates.js").isFunction,re=se("packages/modules/scheduler/model.js"),A=re.accessorFor,Q=re.eventSpan,p=re.formatFieldDate,$=re.formatFieldDateLike,H=re.snapToStep,I=re.isEventReadOnly,x=re.isResourceReadOnly;function N(V){const v=V.ctx,o=v.fields.resourceId,d=v.fields.startDate,u=v.fields.endDate,O=A(o),te=A(d),ne=A(u),W=A(v.eventKey),oe=[],ce=[];let ye=!1;const he=s=>s==null?null:V.rows.get(s)||null,fe=s=>s==null?null:V.events.get(s)||null,ke=s=>(ie("scheduler:read-only-refused",`scheduler: refused an edit to a read-only ${s}; nothing changed.`),{ok:!1,refused:s}),ve=s=>({[d]:te(s),[u]:ne(s),[o]:O(s)}),G=(s,S)=>{V.events.apply({update:[{[v.eventKey]:s,...S}]})},U=s=>{if(!Object.keys(s.changes).length&&s.type!=="create"&&s.type!=="delete")return{ok:!1};const S={id:s.id,action:s.type,changes:s.changes,oldValues:s.oldValues,newValues:s.newValues,event:s.event||null},j=V.emitter.emitBefore("beforeEventChange",S,s.origin);return j===!1?(V.emitter.emit("eventChange:cancelled",{...S,reason:S.reason||"prevented"}),{ok:!1,cancelled:!0}):j&&ue(j.then)?j.then(_=>_?M(s):(V.emitter.emit("eventChange:cancelled",{...S,reason:S.reason||"prevented"}),{ok:!1,cancelled:!0})):M(s)},M=s=>(s.apply(),ye||(oe.push({...s}),ce.length=0),V.fire("event:change",{id:s.id,action:s.type,changes:s.changes,oldValues:s.oldValues,newValues:s.newValues,event:s.event||null}),{ok:!0,change:s}),h=(s,S)=>{ye=!0;try{(S==="undo"?s.undo:s.apply)()}finally{ye=!1}V.fire("event:change",{id:s.id,action:s.type,changes:s.changes,oldValues:S==="undo"?s.newValues:s.oldValues,newValues:S==="undo"?s.oldValues:s.newValues,event:s.event||null,undo:S==="undo"})},B=(s,S,j={})=>{if(!v.editable)return{ok:!1};const _=fe(s);if(!_)return{ok:!1};if(I(v,_))return ke("event");const ge=O(_);if(x(v,he(ge)))return ke("resource");const ae=Q(v,_);if(!ae.start||!ae.end)return{ok:!1};const Z=H(v.zoom.step,S),Oe=ae.start.day+ae.start.frac+Z,Pe=ae.end.day+ae.end.frac+Z,Me=te(_),$e=ne(_),Ee=$(Me,Oe),C=$($e,Pe),w={};return Ee!==Me&&(w[d]={from:Me,to:Ee}),C!==$e&&(w[u]={from:$e,to:C}),U({type:"move",id:s,changes:w,oldValues:ve(_),newValues:{...ve(_),[d]:Ee,[u]:C},apply:()=>G(s,{[d]:Ee,[u]:C}),undo:()=>G(s,{[d]:Me,[u]:$e}),origin:j.origin||"user",event:j.event||null})},n=(s,S,j={})=>{if(!v.editable)return{ok:!1};const _=fe(s);if(!_)return{ok:!1};if(I(v,_))return ke("event");if(x(v,he(S)))return ke("resource");const ge=O(_),ae=String(ge)===String(S)?{}:{[o]:{from:ge,to:S}};return U({type:"reassign",id:s,changes:ae,oldValues:ve(_),newValues:{...ve(_),[o]:S},apply:()=>G(s,{[o]:S}),undo:()=>G(s,{[o]:ge}),origin:j.origin||"user",event:j.event||null})},f=(s,S,j,_={})=>{if(!v.editable)return{ok:!1};const ge=fe(s);if(!ge)return{ok:!1};if(I(v,ge))return ke("event");const ae=O(ge);if(x(v,he(ae)))return ke("resource");const Z=Q(v,ge);if(!Z.start||!Z.end)return{ok:!1};const Oe=H(v.zoom.step,j),Pe=te(ge),Me=ne(ge),$e={};let Ee=Pe,C=Me;return S==="start"?(Ee=$(Pe,Oe),Ee!==Pe&&($e[d]={from:Pe,to:Ee})):(C=$(Me,Oe),C!==Me&&($e[u]={from:Me,to:C})),U({type:"resize",id:s,changes:$e,oldValues:ve(ge),newValues:{...ve(ge),[d]:Ee,[u]:C},apply:()=>G(s,{[d]:Ee,[u]:C}),undo:()=>G(s,{[d]:Pe,[u]:Me}),origin:_.origin||"user",event:_.event||null})},y=(s,S,j,_={})=>{if(!v.editable)return{ok:!1};if(x(v,he(s)))return ke("resource");const ge=H(v.zoom.step,S),ae=H(v.zoom.step,j),Z=p(ge),Oe=p(Math.max(ae,ge+v.zoom.step)),Pe=D(),Me={[v.eventKey]:Pe,[o]:s,[d]:Z,[u]:Oe};return U({type:"create",id:Pe,changes:{},oldValues:null,newValues:{[d]:Z,[u]:Oe,[o]:s},apply:()=>V.events.apply({add:[Me]}),undo:()=>V.events.apply({remove:[Pe]}),origin:_.origin||"user",event:_.event||null})},z=(s,S={})=>{if(!v.editable)return{ok:!1};const j=fe(s);if(!j)return{ok:!1};if(I(v,j))return ke("event");const _=O(j);return x(v,he(_))?ke("resource"):U({type:"delete",id:s,changes:{},oldValues:ve(j),newValues:null,apply:()=>V.events.apply({remove:[s]}),undo:()=>V.events.apply({add:[j]}),origin:S.origin||"user",event:S.event||null})},D=()=>{let s=V.events.count+1;for(;V.events.get(String(s))!=null;)s+=1;return String(s)};return{move:B,reassign:n,resize:f,create:y,remove:z,undo:(s={})=>{const S=oe.pop();return S?(h(S,"undo"),ce.push(S),!0):!1},redo:(s={})=>{const S=ce.pop();return S?(h(S,"redo"),oe.push(S),!0):!1},canUndo:()=>oe.length>0,canRedo:()=>ce.length>0,clearHistory:()=>{oe.length=0,ce.length=0},get undoSize(){return oe.length},get redoSize(){return ce.length}}}}),Fe("packages/modules/scheduler/data.js",function(r,se){"use strict";Object.defineProperty(r,"ganttAssignments",{enumerable:!0,get:function(){return x}}),Object.defineProperty(r,"calendarAssignments",{enumerable:!0,get:function(){return N}}),Object.defineProperty(r,"makeSchedulerData",{enumerable:!0,get:function(){return V}}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return v}});const we=se("packages/core/src/internal/predicates.js"),ie=we.isObject,K=we.isFunction,re=se("packages/modules/gantt/assignments.js").parseAssignments,Q=se("packages/modules/gantt/time.js").fromDayNumber,p=864e5;function $(o){return Q(o)?new Date(Math.round(o)*p).toISOString().slice(0,10):""}function H(o,d,u,O){const te=d[u],ne=d[O];if(te!=null&&te!=="")return{start:te,end:ne};const W=o&&o.schedule,oe=W&&W.ok&&W.tasks?W.tasks.get(String(d.id)):null;return oe&&oe.es!=null?{start:$(oe.es),end:$(oe.ef)}:{start:null,end:null}}function I(o){return o&&typeof o.id=="string"?o.id:"id"}function x(o,d={}){const u=ie(d.fields)?d.fields:{},O=I(u),te=typeof u.start=="string"?u.start:"start",ne=typeof u.end=="string"?u.end:"end",W=typeof u.name=="string"?u.name:"name",oe=o&&Array.isArray(o.tasks)?o.tasks:[],ce=o&&o.resourceSpecs instanceof Map?o.resourceSpecs:new Map,ye=new Map,he=[];for(const fe of oe){const ke=String(fe[O]),ve=re(fe),G=H(o,fe,te,ne);for(const U of ve){if(!ye.has(U.resource)){const M=ce.get(U.resource)||{};ye.set(U.resource,{id:U.resource,name:M.name||U.resource,...M})}he.push({id:`${ke}::${U.resource}`,taskId:ke,resourceId:U.resource,name:fe[W]??fe.name??ke,start:G.start,end:G.end})}}return{resources:[...ye.values()],events:he,fields:{resourceId:"resourceId",startDate:"start",endDate:"end",name:"name"}}}function N(o,d={}){const u=ie(d)?d:{},O=typeof u.resourceId=="string"?u.resourceId:"resource",te=typeof u.startDate=="string"?u.startDate:"start",ne=typeof u.endDate=="string"?u.endDate:"end",W=typeof u.name=="string"?u.name:"name",oe=new Map,ce=[];return(o&&o.rows&&K(o.rows.forEach)?he=>o.rows.forEach(he):()=>{})((he,fe)=>{const ke=he&&he[O]!=null?he[O]:"Calendar";oe.has(String(ke))||oe.set(String(ke),{id:String(ke),name:String(ke)}),ce.push({id:fe,resourceId:ke,name:he&&he[W]!=null?he[W]:String(fe),start:he&&he[te],end:he&&he[ne]})}),{resources:[...oe.values()],events:ce}}function V(o){function d(te,ne,W={}){const oe=ie(W)?W:{},{resources:ce,events:ye,fields:he}=x(ne,oe),fe=o(te,{...oe,resources:Array.isArray(oe.resources)&&oe.resources.length?oe.resources:ce,events:Array.isArray(oe.events)?oe.events:ye,fields:{...he,...ie(oe.fields)?oe.fields:{}}});if(ne&&K(ne.applyEdit)){const ke=ve=>{if(ve.kind!=="reassign"||!ve.row||!ve.row.taskId)return;const G=K(ne.taskById)?ne.taskById(ve.row.taskId):null;if(!G)return;const U=re(G).map(M=>String(M.resource)===String(ve.resource.from)?{resource:ve.resource.to,units:M.units}:M);U.some(M=>String(M.resource)===String(ve.resource.to))||U.push({resource:ve.resource.to,units:1}),ne.applyEdit({id:ve.row.taskId,assignments:U})};fe.on("change",ke)}return fe}function u(te,ne,W={}){return o(te,{...ie(W)?W:{},events:Array.isArray(ne)?ne:[]})}function O(te,ne,W={}){const oe=ie(W)?W:{},{resources:ce,events:ye}=N(ne,oe.fields);return o(te,{...oe,resources:Array.isArray(oe.resources)&&oe.resources.length?oe.resources:ce,events:ye,fields:{resourceId:"resourceId",startDate:"start",endDate:"end",name:"name",...ie(oe.fields)?oe.fields:{}}})}return{schedulerFromGantt:d,schedulerFromRows:u,schedulerFromCalendar:O}}const v=V}),Fe("packages/modules/scheduler/index.js",function(r,se){"use strict";Object.defineProperty(r,"SCHEDULER_EVENTS",{enumerable:!0,get:function(){return z}}),Object.defineProperty(r,"createScheduler",{enumerable:!0,get:function(){return D}}),Object.defineProperty(r,"schedulerFromGantt",{enumerable:!0,get:function(){return T}}),Object.defineProperty(r,"schedulerFromRows",{enumerable:!0,get:function(){return F}}),Object.defineProperty(r,"schedulerFromCalendar",{enumerable:!0,get:function(){return J}}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return c}});const we=se("packages/core/src/internal/predicates.js"),ie=we.isObject,K=we.isFunction,re=se("packages/core/src/internal/warn.js").warnOnce,Q=se("packages/core/src/internal/merge.js").mergeRow,$=se("packages/core/src/internal/paths.js").setPath,H=se("packages/modules/scheduler/model.js"),I=H.resolveContext,x=H.accessorFor,V=se("packages/modules/gantt/zoom.js").resolveZoomPreset,o=se("packages/modules/gantt/workload-groups.js").normalizeGroupBy,u=se("packages/modules/shared/emitter.js").Emitter,te=se("packages/modules/scheduler/styles.js").NS,ne=se("packages/modules/scheduler/view.js"),W=ne.render,oe=ne.layout,ce=ne.syncGrid,ye=ne.mountGrid,he=ne.toggleGroup,fe=ne.renderTimeline,ke=se("packages/modules/scheduler/export.js"),ve=ke.toSVG,G=ke.toPNG,U=ke.print,h=se("packages/modules/scheduler/edit.js").createSchedulerEdit,n=se("packages/modules/scheduler/data.js").makeSchedulerData,y=se("packages/modules/scheduler/divider.js").applyResourceWidth,z=Object.freeze(["zoom:change","change","beforeEventChange","eventChange:cancelled","event:change"]);function D(R,s={}){const S=ie(s)?s:{},j=I(S),_=new u("scheduler"),ge=R&&R.ownerDocument||typeof globalThis<"u"&&globalThis.document||null,ae=new Map,Z=new Map;let Oe=!1,Pe=!1;const Me=x(j.resourceKey),$e=x(j.eventKey),Ee=x(j.fields.resourceId),C=()=>{ae.clear();for(const t of j.resources)ae.set(Me(t),t)},w=()=>{Z.clear();for(const t of j.events)Z.set($e(t),t)},i={el:R||null,doc:ge,ctx:j,config:S,emitter:_,wired:!1,rowKey:j.resourceKey,eventKey:j.eventKey,resources:[],placement:{byResource:new Map,unscheduled:[],keys:new Map},span:null,ticks:[],totalWidth:0,totalHeight:0,pxPerDay:j.zoom.px,anchorDay:null,workload:null,grid:null,gridHost:null,timeline:null,canvas:null,headView:null,headInner:null,live:null,_listeners:null,_timelineScroll:null,_gridOff:null,_gridKeys:null,_gridGroupOff:null,_syncing:!1,groupColId:null,displayRows:null,collapsedGroups:new Set,focusKey:null,tip:null,tipArrow:null,model:{startDay:null,endDay:null,pxPerDay:j.zoom.px,ticks:[],unscheduled:[]},fire(t,l){_.emit(t,l)}},de=()=>{if(i.resources=[...ae.values()],i.resources.length===0&&j.events.length){const t=new Set;for(const l of j.events){const E=Ee(l);if(E==null||E===""||t.has(E))continue;t.add(E);const b={[j.resourceKey]:E,name:E};ae.set(E,b),i.resources.push(b)}}return j.resources=i.resources,j.events=[...Z.values()],ce(i),oe(i),i.model.startDay=i.span?i.span.startDay:null,i.model.endDay=i.span?i.span.endDay:null,i.model.pxPerDay=i.pxPerDay,i.model.ticks=i.ticks,i.model.unscheduled=i.placement.unscheduled,i};return i.rows={apply(t={}){Oe=!0;for(const l of t.add||[])ae.set(Me(l),l);for(const l of t.update||[]){const E=Me(l);ae.set(E,Q(ae.get(E),l))}for(const l of t.remove||[])ae.delete(l);de()},forEach(t){for(const[l,E]of ae)t(E,l)},get(t){return ae.get(t)},get count(){return ae.size}},i.events={apply(t={}){Pe=!0;for(const l of t.add||[])Z.set($e(l),l);for(const l of t.update||[]){const E=$e(l);Z.set(E,Q(Z.get(E),l))}for(const l of t.remove||[])Z.delete(l);de()},forEach(t){for(const[l,E]of Z)t(E,l)},get(t){return Z.get(t)},get count(){return Z.size}},i.edit=h(i),i.undo=t=>i.edit.undo(t),i.redo=t=>i.edit.redo(t),i.canUndo=()=>i.edit.canUndo(),i.canRedo=()=>i.edit.canRedo(),i.refresh=()=>(Oe||C(),Pe||w(),de()),i.setEvents=t=>{Pe=!0,Z.clear();for(const l of Array.isArray(t)?t:[])Z.set($e(l),l);return de()},i.setZoom=t=>{const l=i.span&&i.timeline?i.span.startDay+i.timeline.scrollLeft/i.pxPerDay:null;return j.fit=t==="fit",j.zoom=V(j.fit?"day":t,j.zoom.level||"day"),j.zoomName=j.fit?"fit":j.zoom.level,oe(i),l!=null&&i.timeline&&(i.timeline.scrollLeft=Math.max(0,(l-i.span.startDay)*i.pxPerDay)),i.model.startDay=i.span?i.span.startDay:null,i.model.endDay=i.span?i.span.endDay:null,i.model.pxPerDay=i.pxPerDay,i.model.ticks=i.ticks,i.fire("zoom:change",{level:j.fit?"fit":j.zoom.level,px:j.zoom.px}),i},i.getZoom=()=>({level:i.ctx.fit?"fit":i.ctx.zoom.level,px:i.ctx.zoom.px}),i.toSVG=t=>ve(i,t||{}),i.toPNG=t=>G(i,t||{}),i.print=t=>U(i,t||{}),i.reassign=(t,l)=>{const E=Z.get(t);if(!E)return!1;const b=Ee(E);if(String(b)===String(l))return!1;const P={...E};return $(P,j.fields.resourceId,l),Z.set(t,P),de(),i.fire("change",{id:t,kind:"reassign",resource:{from:b,to:l},row:P}),!0},i.getState=()=>({version:1,zoom:i.ctx.fit?"fit":i.ctx.zoom.level,scroll:{left:i.timeline?i.timeline.scrollLeft:0,top:i.timeline?i.timeline.scrollTop:0},resourceWidth:i.ctx.resourceWidth}),i.setState=t=>{const l=ie(t)?t:{};return(typeof l.zoom=="string"||typeof l.zoom=="number")&&i.setZoom(l.zoom),l.scroll&&i.timeline&&(Number.isFinite(l.scroll.left)&&(i.timeline.scrollLeft=l.scroll.left),Number.isFinite(l.scroll.top)&&(i.timeline.scrollTop=l.scroll.top),fe(i)),typeof l.resourceWidth=="number"&&Number.isFinite(l.resourceWidth)&&l.resourceWidth>0&&y(i,l.resourceWidth),i},i.setResourceWidth=t=>(typeof t!="number"||!Number.isFinite(t)||t<=0||y(i,t),i),i.setGroupBy=t=>{if(j.groupBy=o(t),i.collapsedGroups.clear(),i.el){if(i.grid&&K(i.grid.destroy))try{i.grid.destroy()}catch{}i.grid=null,i.groupColId=null,ye(i)}return de()},i.setSearch=t=>(j.search=String(t||"").trim(),de()),i.setResourceFilter=t=>(j.resourceFilter=K(t)?t:null,de()),i.setEventFilter=t=>(j.eventFilter=K(t)?t:null,de()),i.toggleGroup=t=>{const l=(i.displayRows||[]).find(E=>E.type==="group"&&E.value===t);return l&&he(i,l),i},i.on=(t,l)=>(z.includes(t)||re(`scheduler:event:${t}`,`"${t}" is not a scheduler event; expected one of ${z.join(", ")}.`),_.on(t,l)),i.off=(t,l)=>_.off(t,l),i.destroy=()=>{if(i._editDetach){try{i._editDetach()}catch{}i._editDetach=null}if(i._gridOff){try{i._gridOff()}catch{}i._gridOff=null}if(i._gridGroupOff){try{i._gridGroupOff()}catch{}i._gridGroupOff=null}if(i._dividerOff){try{i._dividerOff()}catch{}i._dividerOff=null}if(i.divider=null,i.grid&&K(i.grid.destroy))try{i.grid.destroy()}catch{}i.grid=null,i._timelineScroll&&i._timelineScroll.target&&(i._timelineScroll.target.removeEventListener("scroll",i._timelineScroll.fn),i._timelineScroll=null);const t=i.el;if(t){for(;t.firstChild;)t.removeChild(t.firstChild);if(t.classList.remove(te),t.removeAttribute("role"),t.removeAttribute("aria-label"),t.__latticeScheduler===i&&(t.__latticeScheduler=null),i._listeners){for(const l of i._listeners)t.removeEventListener(l.type,l.fn);i._listeners=null}}i.wired=!1,i.edit&&i.edit.clearHistory(),ae.clear(),Z.clear(),i.resources=[],j.resources=[],j.events=[],i.placement={byResource:new Map,unscheduled:[],keys:new Map},i.span=null,i.ticks=[],i.totalWidth=0,i.totalHeight=0,i.displayRows=null,i.groupColId=null,i.collapsedGroups.clear(),i.focusKey=null,i.tip=null,i.tipArrow=null,i.workload=null,i.model={startDay:null,endDay:null,pxPerDay:j.zoom.px,ticks:[],unscheduled:[]},_.clear()},R&&(R.__latticeScheduler=i),C(),w(),de(),R&&W(i),i}const{schedulerFromGantt:T,schedulerFromRows:F,schedulerFromCalendar:J}=n(D),c=D});const st=ht("packages/modules/scheduler/index.js"),gt=st.SCHEDULER_EVENTS,pt=st.createScheduler,yt=st.schedulerFromGantt,bt=st.schedulerFromRows,kt=st.schedulerFromCalendar;var wt=st.default;export{gt as SCHEDULER_EVENTS,pt as createScheduler,wt as default,kt as schedulerFromCalendar,yt as schedulerFromGantt,bt as schedulerFromRows};
211
223
 
212
224
  //# sourceMappingURL=scheduler.esm.min.js.map