@sme.up/ketchup 9.6.4 → 9.6.5

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 (232) hide show
  1. package/dist/cjs/{bar.helpers-f46a5a83.js → bar.helpers-c481a535.js} +45 -13
  2. package/dist/cjs/{f-button-89de2403.js → f-button-23ec3db5.js} +1 -1
  3. package/dist/cjs/{f-cell-75dbd6eb.js → f-cell-bcc51c0f.js} +5 -5
  4. package/dist/cjs/{f-chip-08857345.js → f-chip-63363ecf.js} +2 -2
  5. package/dist/cjs/{f-image-a41d7f1e.js → f-image-f3944c01.js} +2 -5
  6. package/dist/cjs/{f-paginator-utils-ff07301e.js → f-paginator-utils-60e05759.js} +2 -2
  7. package/dist/cjs/{f-text-field-eb207a83.js → f-text-field-354b6c78.js} +1 -1
  8. package/dist/cjs/index.cjs.js +1 -1
  9. package/dist/cjs/ketchup.cjs.js +1 -1
  10. package/dist/cjs/kup-accordion.cjs.entry.js +2 -2
  11. package/dist/cjs/kup-autocomplete_27.cjs.entry.js +46 -46
  12. package/dist/cjs/kup-box.cjs.entry.js +7 -7
  13. package/dist/cjs/kup-calendar.cjs.entry.js +4 -4
  14. package/dist/cjs/kup-card-list.cjs.entry.js +1 -1
  15. package/dist/cjs/kup-cell.cjs.entry.js +6 -6
  16. package/dist/cjs/kup-custom-task-list-header_4.cjs.entry.js +253 -37
  17. package/dist/cjs/kup-dashboard.cjs.entry.js +4 -4
  18. package/dist/cjs/kup-drawer.cjs.entry.js +1 -1
  19. package/dist/cjs/kup-echart.cjs.entry.js +1 -1
  20. package/dist/cjs/kup-editor.cjs.entry.js +1 -1
  21. package/dist/cjs/kup-family-tree.cjs.entry.js +3 -3
  22. package/dist/cjs/kup-gantt_10.cjs.entry.js +104 -38
  23. package/dist/cjs/kup-grid.cjs.entry.js +1 -1
  24. package/dist/cjs/kup-iframe.cjs.entry.js +1 -1
  25. package/dist/cjs/kup-image-list.cjs.entry.js +20 -13
  26. package/dist/cjs/kup-input-panel.cjs.entry.js +199 -53
  27. package/dist/cjs/kup-lazy.cjs.entry.js +1 -1
  28. package/dist/cjs/kup-magic-box.cjs.entry.js +2 -2
  29. package/dist/cjs/{kup-manager-abfe4ddd.js → kup-manager-e1bfd4f8.js} +647 -120
  30. package/dist/cjs/kup-nav-bar.cjs.entry.js +1 -1
  31. package/dist/cjs/kup-numeric-picker.cjs.entry.js +2 -2
  32. package/dist/cjs/kup-pdf.cjs.entry.js +1 -1
  33. package/dist/cjs/kup-photo-frame.cjs.entry.js +1 -1
  34. package/dist/cjs/{kup-planner-declarations-d3dec885.js → kup-planner-declarations-cb33663d.js} +3 -0
  35. package/dist/cjs/{kup-planner-renderer-helper-9f776d6e.js → kup-planner-renderer-helper-f001fad7.js} +55 -7
  36. package/dist/cjs/kup-planner-renderer.cjs.entry.js +43 -10
  37. package/dist/cjs/{kup-planner-time-formatter-a74e70f0.js → kup-planner-time-formatter-b7dca3ea.js} +3 -0
  38. package/dist/cjs/kup-planner.cjs.entry.js +80 -8
  39. package/dist/cjs/kup-probe.cjs.entry.js +2 -2
  40. package/dist/cjs/kup-qlik.cjs.entry.js +2 -2
  41. package/dist/cjs/kup-snackbar.cjs.entry.js +4 -4
  42. package/dist/cjs/loader.cjs.js +1 -1
  43. package/dist/collection/assets/image-list.js +332 -2
  44. package/dist/collection/assets/input-panel.js +307 -76
  45. package/dist/collection/assets/planner-example-5.js +19 -7
  46. package/dist/collection/assets/planner-example-6.js +3 -0
  47. package/dist/collection/assets/planner.js +4 -3
  48. package/dist/collection/components/kup-badge/kup-badge.css +4 -4
  49. package/dist/collection/components/kup-image-list/kup-image-list.css +37 -4
  50. package/dist/collection/components/kup-image-list/kup-image-list.js +15 -8
  51. package/dist/collection/components/kup-input-panel/kup-input-panel-declarations.js +1 -1
  52. package/dist/collection/components/kup-input-panel/kup-input-panel.css +38 -1
  53. package/dist/collection/components/kup-input-panel/kup-input-panel.e2e.js +69 -28
  54. package/dist/collection/components/kup-input-panel/kup-input-panel.js +206 -59
  55. package/dist/collection/components/kup-planner/kup-planner-declarations.js +3 -0
  56. package/dist/collection/components/kup-planner/kup-planner-helper.js +42 -1
  57. package/dist/collection/components/kup-planner/kup-planner.js +191 -5
  58. package/dist/collection/components/kup-planner/utils/custom-task-list-table.js +103 -11
  59. package/dist/collection/components/kup-planner/utils/gantt-table.module.css +80 -2
  60. package/dist/collection/components/kup-planner/utils/helpers/bar.helpers.js +41 -13
  61. package/dist/collection/components/kup-planner/utils/helpers/other.helpers.js +3 -0
  62. package/dist/collection/components/kup-planner/utils/kup-gantt/kup-gantt.css +10 -0
  63. package/dist/collection/components/kup-planner/utils/kup-gantt/kup-gantt.js +61 -6
  64. package/dist/collection/components/kup-planner/utils/kup-gantt-calendar/kup-gantt-calendar.js +32 -2
  65. package/dist/collection/components/kup-planner/utils/kup-grid-renderer/kup-grid-renderer.css +4 -0
  66. package/dist/collection/components/kup-planner/utils/kup-grid-renderer/kup-grid-renderer.js +208 -24
  67. package/dist/collection/components/kup-planner/utils/kup-horizontal-scroll/kup-horizontal-scroll.css +4 -0
  68. package/dist/collection/components/kup-planner/utils/kup-horizontal-scroll/kup-horizontal-scroll.js +131 -7
  69. package/dist/collection/components/kup-planner/utils/kup-planner-renderer-helper.js +55 -6
  70. package/dist/collection/components/kup-planner/utils/kup-planner-renderer.js +40 -7
  71. package/dist/collection/components/kup-planner/utils/kup-switcher/kup-switcher.css +22 -15
  72. package/dist/collection/components/kup-planner/utils/kup-switcher/kup-switcher.js +21 -5
  73. package/dist/collection/components/kup-planner/utils/kup-task-gantt/kup-task-gantt.js +19 -3
  74. package/dist/collection/components/kup-planner/utils/kup-task-list/kup-task-list-header.js +7 -7
  75. package/dist/collection/components/kup-planner/utils/kup-task-list/kup-task-list-table.js +1 -1
  76. package/dist/collection/components/kup-planner/utils/kup-task-list/kup-task-list.js +76 -2
  77. package/dist/collection/components/kup-planner/utils/kup-tooltip/kup-standard-tooltip.js +1 -1
  78. package/dist/collection/components/kup-planner/utils/kup-tooltip/kup-tooltip.js +1 -1
  79. package/dist/collection/components/kup-planner/utils/kup-vertical-scroll/kup-vertical-scroll.js +2 -2
  80. package/dist/collection/components/kup-probe/kup-probe.js +1 -1
  81. package/dist/collection/components/kup-progress-bar/kup-progress-bar.js +1 -1
  82. package/dist/collection/components/kup-qlik/kup-qlik.js +1 -1
  83. package/dist/collection/components/kup-rating/kup-rating.js +1 -1
  84. package/dist/collection/components/kup-snackbar/kup-snackbar.js +1 -1
  85. package/dist/collection/components/kup-spinner/kup-spinner.js +34 -34
  86. package/dist/collection/components/kup-switch/kup-switch.js +1 -1
  87. package/dist/collection/components/kup-time-picker/kup-time-picker.js +1 -1
  88. package/dist/collection/f-components/f-image/f-image.js +2 -5
  89. package/dist/components/_commonjsHelpers.js +26 -0
  90. package/dist/components/custom-task-list-table.js +58 -13
  91. package/dist/components/kup-autocomplete2.js +43 -45
  92. package/dist/components/kup-calendar.js +1 -1
  93. package/dist/components/kup-dates.js +2 -25
  94. package/dist/components/kup-editor.js +1 -1
  95. package/dist/components/kup-gantt-calendar2.js +31 -1
  96. package/dist/components/kup-gantt2.js +26 -7
  97. package/dist/components/kup-grid-renderer2.js +219 -81
  98. package/dist/components/kup-horizontal-scroll2.js +48 -10
  99. package/dist/components/kup-image-list.js +14 -7
  100. package/dist/components/kup-input-panel.js +192 -46
  101. package/dist/components/kup-manager.js +649 -121
  102. package/dist/components/kup-pdf.js +1 -1
  103. package/dist/components/kup-planner-declarations.js +91 -0
  104. package/dist/components/kup-planner-renderer2.js +42 -9
  105. package/dist/components/kup-planner.js +86 -6
  106. package/dist/components/kup-probe.js +1 -1
  107. package/dist/components/kup-qlik.js +1 -1
  108. package/dist/components/kup-snackbar.js +1 -1
  109. package/dist/components/kup-standard-tooltip2.js +1 -1
  110. package/dist/components/kup-switcher2.js +19 -7
  111. package/dist/components/kup-task-gantt2.js +6 -4
  112. package/dist/components/kup-task-list-header2.js +7 -7
  113. package/dist/components/kup-task-list-table2.js +1 -1
  114. package/dist/components/kup-task-list2.js +434 -84
  115. package/dist/components/kup-tooltip2.js +1 -1
  116. package/dist/components/kup-vertical-scroll2.js +2 -2
  117. package/dist/components/other.helpers.js +47 -0
  118. package/dist/esm/{bar.helpers-0898efb9.js → bar.helpers-23a51579.js} +45 -14
  119. package/dist/esm/{f-button-1eebd42e.js → f-button-d6dbcfd6.js} +1 -1
  120. package/dist/esm/{f-cell-af19d5c7.js → f-cell-7b41415c.js} +5 -5
  121. package/dist/esm/{f-chip-9e5fdb25.js → f-chip-68d27d7a.js} +2 -2
  122. package/dist/esm/{f-image-1e1ed567.js → f-image-a67229e5.js} +2 -5
  123. package/dist/esm/{f-paginator-utils-dede029b.js → f-paginator-utils-8773e358.js} +2 -2
  124. package/dist/esm/{f-text-field-802b45fb.js → f-text-field-d364ffd2.js} +1 -1
  125. package/dist/esm/index.js +1 -1
  126. package/dist/esm/ketchup.js +1 -1
  127. package/dist/esm/kup-accordion.entry.js +2 -2
  128. package/dist/esm/kup-autocomplete_27.entry.js +46 -46
  129. package/dist/esm/kup-box.entry.js +7 -7
  130. package/dist/esm/kup-calendar.entry.js +4 -4
  131. package/dist/esm/kup-card-list.entry.js +1 -1
  132. package/dist/esm/kup-cell.entry.js +6 -6
  133. package/dist/esm/kup-custom-task-list-header_4.entry.js +253 -37
  134. package/dist/esm/kup-dashboard.entry.js +4 -4
  135. package/dist/esm/kup-drawer.entry.js +1 -1
  136. package/dist/esm/kup-echart.entry.js +1 -1
  137. package/dist/esm/kup-editor.entry.js +1 -1
  138. package/dist/esm/kup-family-tree.entry.js +3 -3
  139. package/dist/esm/kup-gantt_10.entry.js +105 -39
  140. package/dist/esm/kup-grid.entry.js +1 -1
  141. package/dist/esm/kup-iframe.entry.js +1 -1
  142. package/dist/esm/kup-image-list.entry.js +20 -13
  143. package/dist/esm/kup-input-panel.entry.js +199 -53
  144. package/dist/esm/kup-lazy.entry.js +1 -1
  145. package/dist/esm/kup-magic-box.entry.js +2 -2
  146. package/dist/esm/{kup-manager-dd24fb5a.js → kup-manager-a316a70e.js} +647 -120
  147. package/dist/esm/kup-nav-bar.entry.js +1 -1
  148. package/dist/esm/kup-numeric-picker.entry.js +2 -2
  149. package/dist/esm/kup-pdf.entry.js +1 -1
  150. package/dist/esm/kup-photo-frame.entry.js +1 -1
  151. package/dist/esm/{kup-planner-declarations-b9345758.js → kup-planner-declarations-398babf9.js} +3 -0
  152. package/dist/esm/{kup-planner-renderer-helper-b4727e44.js → kup-planner-renderer-helper-a2ec9a1c.js} +56 -7
  153. package/dist/esm/kup-planner-renderer.entry.js +43 -10
  154. package/dist/esm/{kup-planner-time-formatter-a68e05ba.js → kup-planner-time-formatter-ddf84f9b.js} +1 -1
  155. package/dist/esm/kup-planner.entry.js +80 -8
  156. package/dist/esm/kup-probe.entry.js +2 -2
  157. package/dist/esm/kup-qlik.entry.js +2 -2
  158. package/dist/esm/kup-snackbar.entry.js +4 -4
  159. package/dist/esm/loader.js +1 -1
  160. package/dist/ketchup/index.esm.js +1 -1
  161. package/dist/ketchup/ketchup.esm.js +1 -1
  162. package/dist/ketchup/p-008bdcdc.js +1 -0
  163. package/dist/ketchup/p-042e874a.entry.js +1 -0
  164. package/dist/ketchup/{p-b3b50bb5.entry.js → p-074ccd53.entry.js} +1 -1
  165. package/dist/ketchup/{p-26d42b88.entry.js → p-1088ab22.entry.js} +1 -1
  166. package/dist/ketchup/{p-201f8d7b.entry.js → p-1bcac01f.entry.js} +1 -1
  167. package/dist/ketchup/{p-3b544027.entry.js → p-1e028d95.entry.js} +1 -1
  168. package/dist/ketchup/p-25058baa.js +1 -0
  169. package/dist/ketchup/{p-dcf7e9b6.entry.js → p-2932e7e8.entry.js} +1 -1
  170. package/dist/ketchup/{p-b238cde7.entry.js → p-2b84db7b.entry.js} +1 -1
  171. package/dist/ketchup/{p-f998ff28.entry.js → p-2ef90f60.entry.js} +1 -1
  172. package/dist/ketchup/{p-8fcdf454.js → p-339bbeae.js} +1 -1
  173. package/dist/ketchup/{p-cd7fec02.entry.js → p-48e45ac0.entry.js} +1 -1
  174. package/dist/ketchup/p-53af4c87.js +1 -0
  175. package/dist/ketchup/{p-6972fa0c.entry.js → p-556f7ddc.entry.js} +1 -1
  176. package/dist/ketchup/{p-e7507dd6.entry.js → p-5f7d8c21.entry.js} +1 -1
  177. package/dist/ketchup/{p-e0e47ca9.entry.js → p-6362738c.entry.js} +1 -1
  178. package/dist/ketchup/{p-a2e14d8b.entry.js → p-65e363c6.entry.js} +1 -1
  179. package/dist/ketchup/p-6921bc81.entry.js +16 -0
  180. package/dist/ketchup/p-6961e0ce.entry.js +1 -0
  181. package/dist/ketchup/p-7123d2a4.entry.js +1 -0
  182. package/dist/ketchup/{p-6c888179.js → p-801776bc.js} +1 -1
  183. package/dist/ketchup/{p-4f69f6f9.entry.js → p-81645576.entry.js} +1 -1
  184. package/dist/ketchup/p-838dea62.js +1 -0
  185. package/dist/ketchup/{p-924b841b.js → p-84b511e1.js} +1 -1
  186. package/dist/ketchup/{p-8229b97a.js → p-8d4050ec.js} +4 -4
  187. package/dist/ketchup/{p-79f4dc5b.entry.js → p-9e2533e1.entry.js} +1 -1
  188. package/dist/ketchup/{p-158076de.entry.js → p-a06974a3.entry.js} +1 -1
  189. package/dist/ketchup/p-a6beb822.js +1 -0
  190. package/dist/ketchup/p-abe181d0.entry.js +1 -0
  191. package/dist/ketchup/{p-61e8d573.js → p-b3540f83.js} +1 -1
  192. package/dist/ketchup/{p-19a13672.entry.js → p-c702eb45.entry.js} +1 -1
  193. package/dist/ketchup/{p-2e04042b.entry.js → p-ccb6dbb0.entry.js} +1 -1
  194. package/dist/ketchup/{p-a2e691b8.entry.js → p-cf44485a.entry.js} +2 -2
  195. package/dist/ketchup/{p-8f3d400a.entry.js → p-d2001dec.entry.js} +1 -1
  196. package/dist/ketchup/{p-34d70475.entry.js → p-dbb6cd8d.entry.js} +1 -1
  197. package/dist/ketchup/{p-2d4a9235.js → p-f6c8f006.js} +1 -1
  198. package/dist/ketchup/{p-43ce397b.entry.js → p-f79ffe77.entry.js} +1 -1
  199. package/dist/ketchup/{p-489af77f.entry.js → p-fdcfaedd.entry.js} +1 -1
  200. package/dist/ketchup/p-fe75ede2.entry.js +1 -0
  201. package/dist/types/components/kup-image-list/kup-image-list.d.ts +1 -1
  202. package/dist/types/components/kup-input-panel/kup-input-panel-declarations.d.ts +9 -7
  203. package/dist/types/components/kup-input-panel/kup-input-panel.d.ts +4 -4
  204. package/dist/types/components/kup-planner/kup-planner-declarations.d.ts +29 -2
  205. package/dist/types/components/kup-planner/kup-planner-helper.d.ts +2 -1
  206. package/dist/types/components/kup-planner/kup-planner.d.ts +38 -0
  207. package/dist/types/components/kup-planner/utils/custom-task-list-table.d.ts +7 -0
  208. package/dist/types/components/kup-planner/utils/helpers/bar.helpers.d.ts +1 -1
  209. package/dist/types/components/kup-planner/utils/helpers/other.helpers.d.ts +1 -0
  210. package/dist/types/components/kup-planner/utils/kup-gantt/kup-gantt.d.ts +6 -0
  211. package/dist/types/components/kup-planner/utils/kup-gantt-calendar/kup-gantt-calendar.d.ts +1 -0
  212. package/dist/types/components/kup-planner/utils/kup-grid-renderer/kup-grid-renderer.d.ts +13 -1
  213. package/dist/types/components/kup-planner/utils/kup-horizontal-scroll/kup-horizontal-scroll.d.ts +7 -0
  214. package/dist/types/components/kup-planner/utils/kup-planner-renderer-helper.d.ts +6 -2
  215. package/dist/types/components/kup-planner/utils/kup-planner-renderer.d.ts +1 -0
  216. package/dist/types/components/kup-planner/utils/kup-switcher/kup-switcher.d.ts +3 -1
  217. package/dist/types/components/kup-planner/utils/kup-task-gantt/kup-task-gantt.d.ts +1 -0
  218. package/dist/types/components/kup-planner/utils/kup-task-list/kup-task-list.d.ts +4 -0
  219. package/dist/types/components.d.ts +122 -16
  220. package/package.json +1 -1
  221. package/dist/components/kup-planner-renderer-helper.js +0 -379
  222. package/dist/ketchup/p-14943de9.entry.js +0 -1
  223. package/dist/ketchup/p-180cd7ab.entry.js +0 -1
  224. package/dist/ketchup/p-636be6f1.entry.js +0 -16
  225. package/dist/ketchup/p-63c141d9.entry.js +0 -1
  226. package/dist/ketchup/p-818e61d5.entry.js +0 -1
  227. package/dist/ketchup/p-8e3b6de8.js +0 -1
  228. package/dist/ketchup/p-a46f99d4.js +0 -1
  229. package/dist/ketchup/p-c0f660d6.js +0 -1
  230. package/dist/ketchup/p-e4c63684.js +0 -1
  231. package/dist/ketchup/p-e841c2ae.js +0 -1
  232. package/dist/ketchup/p-f9a7c21c.entry.js +0 -1
@@ -54,9 +54,11 @@ export class KupPlanner {
54
54
  this.detailDates = undefined;
55
55
  this.detailFilter = undefined;
56
56
  this.detailHeight = undefined;
57
+ this.detailHours = [];
57
58
  this.detailIconCol = undefined;
58
59
  this.detailIdCol = undefined;
59
60
  this.detailNameCol = undefined;
61
+ this.detailPrevHours = [];
60
62
  this.detailPrevDates = undefined;
61
63
  this.detailInitialScrollX = undefined;
62
64
  this.detailInitialScrollY = undefined;
@@ -66,9 +68,11 @@ export class KupPlanner {
66
68
  this.phaseColumns = undefined;
67
69
  this.phaseColParDep = undefined;
68
70
  this.phaseDates = undefined;
71
+ this.phaseHours = [];
69
72
  this.phaseIconCol = undefined;
70
73
  this.phaseIdCol = undefined;
71
74
  this.phaseNameCol = undefined;
75
+ this.phasePrevHours = [];
72
76
  this.phasePrevDates = undefined;
73
77
  this.readOnly = false;
74
78
  this.showSecondaryDates = false;
@@ -76,16 +80,19 @@ export class KupPlanner {
76
80
  this.taskDates = undefined;
77
81
  this.taskFilter = undefined;
78
82
  this.taskHeight = undefined;
83
+ this.taskHours = [];
79
84
  this.taskIconCol = undefined;
80
85
  this.taskIdCol = undefined;
81
86
  this.taskInitialScrollX = undefined;
82
87
  this.taskInitialScrollY = undefined;
83
88
  this.taskNameCol = undefined;
89
+ this.taskPrevHours = [];
84
90
  this.taskPrevDates = undefined;
85
91
  this.titleMess = undefined;
86
92
  this.viewMode = 'month';
87
93
  this.mainFilter = undefined;
88
94
  this.secondaryFilter = undefined;
95
+ this.scrollableTaskList = false;
89
96
  this.plannerProps = undefined;
90
97
  }
91
98
  initWithPersistedState() {
@@ -190,7 +197,7 @@ export class KupPlanner {
190
197
  if (task) {
191
198
  __classPrivateFieldGet(this, _KupPlanner_phases, "f")[taskId] = data;
192
199
  task.phases = (_a = data.rows) === null || _a === void 0 ? void 0 : _a.filter((row) => isAtLeastOneDateValid(row.cells[this.phaseDates[0]], row.cells[this.phaseDates[1]])).map((row) => {
193
- const datesSanitized = sanitizeAllDates(row.cells[this.phaseDates[0]], row.cells[this.phaseDates[1]], row.cells[this.phasePrevDates[0]], row.cells[this.phasePrevDates[1]]);
200
+ const datesSanitized = sanitizeAllDates(row.cells[this.phaseDates[0]], row.cells[this.phaseDates[1]], row.cells[this.phasePrevDates[0]], row.cells[this.phasePrevDates[1]], row.cells[this.phaseHours[0]], row.cells[this.phaseHours[1]], row.cells[this.phasePrevHours[0]], row.cells[this.phasePrevHours[1]]);
194
201
  const valuesToShow = getValuesToShow(row, this.phaseIdCol, this.phaseNameCol, data.columns, this.phaseColumns, () => this.phaseColumns.map((col) => col == this.phaseDates[0]
195
202
  ? '#START#'
196
203
  : col == this.phaseDates[1]
@@ -217,6 +224,10 @@ export class KupPlanner {
217
224
  icon: iconUrl
218
225
  ? { url: iconUrl, color: iconColor !== null && iconColor !== void 0 ? iconColor : '#595959' }
219
226
  : undefined,
227
+ startHour: datesSanitized.hourValues[0],
228
+ endHour: datesSanitized.hourValues[1],
229
+ secondaryStartHour: datesSanitized.secHourValues[0],
230
+ secondaryEndHour: datesSanitized.secHourValues[1],
220
231
  };
221
232
  return phase;
222
233
  });
@@ -284,6 +295,7 @@ export class KupPlanner {
284
295
  window.clearTimeout(taskScrollYTimeout);
285
296
  taskScrollYTimeout = window.setTimeout(() => this.handleTaskGanttScrollY(y), scrollDelay);
286
297
  },
298
+ onPhaseDrop: (nativeEvent) => this.handleOnPhaseDrop(nativeEvent),
287
299
  },
288
300
  secondaryGantt: details
289
301
  ? {
@@ -308,6 +320,7 @@ export class KupPlanner {
308
320
  onSetDoubleView: (checked) => this.handleOnSetDoubleView(checked),
309
321
  onSetViewMode: (value) => this.handleOnSetViewMode(value),
310
322
  viewMode: this.viewMode,
323
+ scrollableTaskList: this.scrollableTaskList,
311
324
  onScrollX: (x) => {
312
325
  window.clearTimeout(scrollXTimeout);
313
326
  scrollXTimeout = window.setTimeout(() => this.handleOnScrollX(x), scrollDelay);
@@ -391,6 +404,14 @@ export class KupPlanner {
391
404
  taskAction: taskAction,
392
405
  });
393
406
  }
407
+ onKupPhaseDrop(event, taskAction) {
408
+ this.kupPhaseDrop.emit({
409
+ comp: this,
410
+ id: this.rootElement.id,
411
+ value: event,
412
+ taskAction: taskAction,
413
+ });
414
+ }
394
415
  handleOnDblClick(nativeEvent) {
395
416
  switch (nativeEvent.rowType) {
396
417
  case KupPlannerGanttRowType.TASK:
@@ -492,6 +513,9 @@ export class KupPlanner {
492
513
  }
493
514
  }
494
515
  }
516
+ handleOnPhaseDrop(nativeEvent) {
517
+ this.onKupPhaseDrop(nativeEvent, KupPlannerTaskAction.onTask);
518
+ }
495
519
  render() {
496
520
  var _a, _b, _c;
497
521
  const plannerProps = this.plannerProps
@@ -499,7 +523,7 @@ export class KupPlanner {
499
523
  if ((_b = this.plannerProps) === null || _b === void 0 ? void 0 : _b.secondaryGantt) {
500
524
  plannerProps.secondaryGantt = Object.assign(Object.assign({}, this.plannerProps.secondaryGantt), { onScrollY: this.handleDetailGanttScrollY.bind(this) });
501
525
  }
502
- return (h(Host, { key: '48097981722a6754c764f640323df8db967a8965' }, h("style", { key: '4e707ee5c473822a3d8f57c54d49e79df72094ba' }, __classPrivateFieldGet(this, _KupPlanner_kupManager, "f").theme.setKupStyle(this.rootElement)), h("div", { key: 'ed811811c76bd8e36487018607af8d72125bce3a', id: componentWrapperId, style: { maxWidth: this.maxWidth } }, this.plannerProps && (h("kup-planner-renderer", { props: plannerProps, ref: (el) => (this.plannerRenderer = el) }))), h("div", { key: 'd337aadbee5d6e101c2ed0084b85fddb51602c93', style: { display: this.plannerProps ? 'none' : '' } }, h(FTextField, { key: 'c1ae374b1041d4e273a5e6eac20b72d2a4011374', icon: KupThemeIconValues.SEARCH, id: "main-filter", label: __classPrivateFieldGet(this, _KupPlanner_kupManager, "f").language.translate(KupLanguageSearch.SEARCH), onKeyDown: (e) => {
526
+ return (h(Host, { key: 'cce744fe8b14527039c6a39116da3ebbb79b5593' }, h("style", { key: '3ac43e5c414360d07ba8a745c000bbc7e545545f' }, __classPrivateFieldGet(this, _KupPlanner_kupManager, "f").theme.setKupStyle(this.rootElement)), h("div", { key: '3a9fb6211d0fc2b554bf4265350c567fc1108adb', id: componentWrapperId, style: { maxWidth: this.maxWidth } }, this.plannerProps && (h("kup-planner-renderer", { props: plannerProps, ref: (el) => (this.plannerRenderer = el) }))), h("div", { key: '9dda490b90dc263b1e42496c7c602ee0c09d081f', style: { display: this.plannerProps ? 'none' : '' } }, h(FTextField, { key: 'b569efffbce491b845d813d913545bbb1efc3d08', icon: KupThemeIconValues.SEARCH, id: "main-filter", label: __classPrivateFieldGet(this, _KupPlanner_kupManager, "f").language.translate(KupLanguageSearch.SEARCH), onKeyDown: (e) => {
503
527
  if (e.key === 'Enter') {
504
528
  __classPrivateFieldGet(this, _KupPlanner_instances, "m", _KupPlanner_onFilter).call(this, e.target.value);
505
529
  }
@@ -739,6 +763,25 @@ export class KupPlanner {
739
763
  "attribute": "detail-height",
740
764
  "reflect": false
741
765
  },
766
+ "detailHours": {
767
+ "type": "unknown",
768
+ "mutable": false,
769
+ "complexType": {
770
+ "original": "string[]",
771
+ "resolved": "string[]",
772
+ "references": {}
773
+ },
774
+ "required": false,
775
+ "optional": false,
776
+ "docs": {
777
+ "tags": [{
778
+ "name": "default",
779
+ "text": "null"
780
+ }],
781
+ "text": "Columns containing detail hour duration, from (firstDate) to (secondDate)"
782
+ },
783
+ "defaultValue": "[]"
784
+ },
742
785
  "detailIconCol": {
743
786
  "type": "string",
744
787
  "mutable": false,
@@ -799,6 +842,25 @@ export class KupPlanner {
799
842
  "attribute": "detail-name-col",
800
843
  "reflect": false
801
844
  },
845
+ "detailPrevHours": {
846
+ "type": "unknown",
847
+ "mutable": false,
848
+ "complexType": {
849
+ "original": "string[]",
850
+ "resolved": "string[]",
851
+ "references": {}
852
+ },
853
+ "required": false,
854
+ "optional": false,
855
+ "docs": {
856
+ "tags": [{
857
+ "name": "default",
858
+ "text": "null"
859
+ }],
860
+ "text": "Columns containing forecast detail duration, from (firstHour) to (secondHour)"
861
+ },
862
+ "defaultValue": "[]"
863
+ },
802
864
  "detailPrevDates": {
803
865
  "type": "unknown",
804
866
  "mutable": false,
@@ -975,6 +1037,25 @@ export class KupPlanner {
975
1037
  "text": "Columns containing phase duration, from (firstDate) to (secondDate)"
976
1038
  }
977
1039
  },
1040
+ "phaseHours": {
1041
+ "type": "unknown",
1042
+ "mutable": false,
1043
+ "complexType": {
1044
+ "original": "string[]",
1045
+ "resolved": "string[]",
1046
+ "references": {}
1047
+ },
1048
+ "required": false,
1049
+ "optional": false,
1050
+ "docs": {
1051
+ "tags": [{
1052
+ "name": "default",
1053
+ "text": "null"
1054
+ }],
1055
+ "text": "Columns containing phase hour duration, from (firstDate) to (secondDate)"
1056
+ },
1057
+ "defaultValue": "[]"
1058
+ },
978
1059
  "phaseIconCol": {
979
1060
  "type": "string",
980
1061
  "mutable": false,
@@ -1035,6 +1116,25 @@ export class KupPlanner {
1035
1116
  "attribute": "phase-name-col",
1036
1117
  "reflect": false
1037
1118
  },
1119
+ "phasePrevHours": {
1120
+ "type": "unknown",
1121
+ "mutable": false,
1122
+ "complexType": {
1123
+ "original": "string[]",
1124
+ "resolved": "string[]",
1125
+ "references": {}
1126
+ },
1127
+ "required": false,
1128
+ "optional": false,
1129
+ "docs": {
1130
+ "tags": [{
1131
+ "name": "default",
1132
+ "text": "null"
1133
+ }],
1134
+ "text": "Columns containing forecast phase duration, from (firstHour) to (secondHour)"
1135
+ },
1136
+ "defaultValue": "[]"
1137
+ },
1038
1138
  "phasePrevDates": {
1039
1139
  "type": "unknown",
1040
1140
  "mutable": false,
@@ -1171,6 +1271,25 @@ export class KupPlanner {
1171
1271
  "attribute": "task-height",
1172
1272
  "reflect": false
1173
1273
  },
1274
+ "taskHours": {
1275
+ "type": "unknown",
1276
+ "mutable": false,
1277
+ "complexType": {
1278
+ "original": "string[]",
1279
+ "resolved": "string[]",
1280
+ "references": {}
1281
+ },
1282
+ "required": false,
1283
+ "optional": false,
1284
+ "docs": {
1285
+ "tags": [{
1286
+ "name": "default",
1287
+ "text": "null"
1288
+ }],
1289
+ "text": "Columns containing task hours duration, from (firstDate) to (secondDate)"
1290
+ },
1291
+ "defaultValue": "[]"
1292
+ },
1174
1293
  "taskIconCol": {
1175
1294
  "type": "string",
1176
1295
  "mutable": false,
@@ -1271,6 +1390,25 @@ export class KupPlanner {
1271
1390
  "attribute": "task-name-col",
1272
1391
  "reflect": false
1273
1392
  },
1393
+ "taskPrevHours": {
1394
+ "type": "unknown",
1395
+ "mutable": false,
1396
+ "complexType": {
1397
+ "original": "string[]",
1398
+ "resolved": "string[]",
1399
+ "references": {}
1400
+ },
1401
+ "required": false,
1402
+ "optional": false,
1403
+ "docs": {
1404
+ "tags": [{
1405
+ "name": "default",
1406
+ "text": "null"
1407
+ }],
1408
+ "text": "Columns containing forecast task duration, from (firstHour) to (secondHour)"
1409
+ },
1410
+ "defaultValue": "[]"
1411
+ },
1274
1412
  "taskPrevDates": {
1275
1413
  "type": "unknown",
1276
1414
  "mutable": false,
@@ -1314,7 +1452,7 @@ export class KupPlanner {
1314
1452
  "mutable": false,
1315
1453
  "complexType": {
1316
1454
  "original": "KupPlannerViewMode",
1317
- "resolved": "\"day\" | \"month\" | \"week\" | \"year\"",
1455
+ "resolved": "\"day\" | \"hour\" | \"month\" | \"week\" | \"year\"",
1318
1456
  "references": {
1319
1457
  "KupPlannerViewMode": {
1320
1458
  "location": "import",
@@ -1381,6 +1519,27 @@ export class KupPlanner {
1381
1519
  }],
1382
1520
  "text": "Sets the filter for secondary gantt."
1383
1521
  }
1522
+ },
1523
+ "scrollableTaskList": {
1524
+ "type": "boolean",
1525
+ "mutable": false,
1526
+ "complexType": {
1527
+ "original": "boolean",
1528
+ "resolved": "boolean",
1529
+ "references": {}
1530
+ },
1531
+ "required": false,
1532
+ "optional": false,
1533
+ "docs": {
1534
+ "tags": [{
1535
+ "name": "default",
1536
+ "text": "false"
1537
+ }],
1538
+ "text": "Sets the scroll bar for task list."
1539
+ },
1540
+ "attribute": "scrollable-task-list",
1541
+ "reflect": false,
1542
+ "defaultValue": "false"
1384
1543
  }
1385
1544
  };
1386
1545
  }
@@ -1453,6 +1612,27 @@ export class KupPlanner {
1453
1612
  }
1454
1613
  }
1455
1614
  }
1615
+ }, {
1616
+ "method": "kupPhaseDrop",
1617
+ "name": "kup-planner-phasedrop",
1618
+ "bubbles": true,
1619
+ "cancelable": false,
1620
+ "composed": true,
1621
+ "docs": {
1622
+ "tags": [],
1623
+ "text": ""
1624
+ },
1625
+ "complexType": {
1626
+ "original": "KupPlannerEventPayload",
1627
+ "resolved": "KupPlannerEventPayload",
1628
+ "references": {
1629
+ "KupPlannerEventPayload": {
1630
+ "location": "import",
1631
+ "path": "./kup-planner-declarations",
1632
+ "id": "src/components/kup-planner/kup-planner-declarations.ts::KupPlannerEventPayload"
1633
+ }
1634
+ }
1635
+ }
1456
1636
  }, {
1457
1637
  "method": "kupReady",
1458
1638
  "name": "kup-planner-ready",
@@ -1660,7 +1840,7 @@ _KupPlanner_kupManager = new WeakMap(), _KupPlanner_lastOnChangeReceived = new W
1660
1840
  return [];
1661
1841
  }
1662
1842
  let tasks = (_a = data.rows) === null || _a === void 0 ? void 0 : _a.filter((row) => isAtLeastOneDateValid(row.cells[this.taskDates[0]], row.cells[this.taskDates[1]])).map((row) => {
1663
- const datesSanitized = sanitizeAllDates(row.cells[this.taskDates[0]], row.cells[this.taskDates[1]], row.cells[this.taskPrevDates[0]], row.cells[this.taskPrevDates[1]]);
1843
+ const datesSanitized = sanitizeAllDates(row.cells[this.taskDates[0]], row.cells[this.taskDates[1]], row.cells[this.taskPrevDates[0]], row.cells[this.taskPrevDates[1]], row.cells[this.taskHours[0]], row.cells[this.taskHours[1]], row.cells[this.taskPrevHours[0]], row.cells[this.taskPrevHours[1]]);
1664
1844
  const valuesToShow = getValuesToShow(row, this.taskIdCol, this.taskNameCol, data.columns, this.taskColumns, () => this.taskColumns.map((col) => col == this.taskDates[0]
1665
1845
  ? '#START#'
1666
1846
  : col == this.taskDates[1]
@@ -1683,6 +1863,10 @@ _KupPlanner_kupManager = new WeakMap(), _KupPlanner_lastOnChangeReceived = new W
1683
1863
  icon: iconUrl
1684
1864
  ? { url: iconUrl, color: iconColor !== null && iconColor !== void 0 ? iconColor : '#595959' }
1685
1865
  : undefined,
1866
+ startHour: datesSanitized.hourValues[0],
1867
+ endHour: datesSanitized.hourValues[1],
1868
+ secondaryStartHour: datesSanitized.secHourValues[0],
1869
+ secondaryEndHour: datesSanitized.secHourValues[1]
1686
1870
  };
1687
1871
  return task;
1688
1872
  });
@@ -1698,7 +1882,7 @@ _KupPlanner_kupManager = new WeakMap(), _KupPlanner_lastOnChangeReceived = new W
1698
1882
  var _a, _b;
1699
1883
  const detailId = row.cells[this.detailIdCol].value;
1700
1884
  const detailNameId = row.cells[this.detailNameCol].value;
1701
- const datesSanitized = sanitizeAllDates(row.cells[this.detailDates[0]], row.cells[this.detailDates[1]]);
1885
+ const datesSanitized = sanitizeAllDates(row.cells[this.detailDates[0]], row.cells[this.detailDates[1]], undefined, undefined, row.cells[this.detailHours[0]], row.cells[this.detailHours[1]]);
1702
1886
  const valuesToShow = getValuesToShow(row, this.detailIdCol, this.detailNameCol, data.columns, this.detailColumns);
1703
1887
  let detail = details.find((det) => det.id == detailId);
1704
1888
  if (!detail) {
@@ -1727,6 +1911,8 @@ _KupPlanner_kupManager = new WeakMap(), _KupPlanner_lastOnChangeReceived = new W
1727
1911
  icon: iconUrl
1728
1912
  ? { url: iconUrl, color: iconColor !== null && iconColor !== void 0 ? iconColor : '#595959' }
1729
1913
  : undefined,
1914
+ startHour: datesSanitized.hourValues[0],
1915
+ endHour: datesSanitized.hourValues[1]
1730
1916
  });
1731
1917
  });
1732
1918
  return details;
@@ -1,5 +1,6 @@
1
1
  import { Fragment, h } from "@stencil/core";
2
2
  import { KupDates } from "../../../managers/kup-dates/kup-dates";
3
+ import { createArrayFromNum } from "./helpers/other.helpers";
3
4
  export class KupCustomTaskListTable {
4
5
  constructor() {
5
6
  this.ganttId = undefined;
@@ -8,15 +9,37 @@ export class KupCustomTaskListTable {
8
9
  this.rowWidth = '';
9
10
  this.fontFamily = '';
10
11
  this.fontSize = '';
12
+ this.scrollableTaskList = undefined;
13
+ this.taskListScrollX = undefined;
11
14
  this.setSelectedTask = undefined;
12
15
  this.onclickTaskList = undefined;
13
16
  this.ondblclickTaskList = undefined;
14
17
  this.oncontextmenuTaskList = undefined;
18
+ this.ontaskListScrollWidth = undefined;
19
+ }
20
+ componentDidLoad() {
21
+ var _a;
22
+ this.ontaskListScrollWidth((_a = this.projectWrapperRef) === null || _a === void 0 ? void 0 : _a.clientWidth);
23
+ }
24
+ componentDidUpdate() {
25
+ var _a;
26
+ this.ontaskListScrollWidth((_a = this.projectWrapperRef) === null || _a === void 0 ? void 0 : _a.clientWidth);
27
+ }
28
+ updateTaskListScroll() {
29
+ this.projectWrapperRef &&
30
+ (this.projectWrapperRef.parentElement.scrollLeft = this.taskListScrollX);
15
31
  }
16
32
  render() {
17
33
  const kupDates = new KupDates();
18
- return (h("div", { key: '6f208e493d948891975d12cfa398634ead8f7631', class: "container" }, this.tasks.map((task) => {
19
- var _a, _b, _c;
34
+ const scrollableStyle = {};
35
+ if (this.scrollableTaskList) {
36
+ scrollableStyle['width'] = this.rowWidth;
37
+ }
38
+ const spansToShow = this.tasks.reduce((prev, curr) => {
39
+ return prev.valuesToShow.length > curr.valuesToShow.length ? prev : curr;
40
+ }).valuesToShow.length + 1;
41
+ return (h("div", { class: `container ${this.scrollableTaskList ? 'scrollable' : ''}`, style: scrollableStyle }, h("div", { class: "project-wrapper", ref: (el) => (this.projectWrapperRef = el) }, this.tasks.map((task) => {
42
+ var _a, _b, _c, _d;
20
43
  return (h(Fragment, null, task.type === 'project' ? (h("div", { class: "project", style: {
21
44
  height: `${this.rowHeight}px`,
22
45
  width: this.rowWidth,
@@ -33,11 +56,15 @@ export class KupCustomTaskListTable {
33
56
  e.preventDefault();
34
57
  this.setSelectedTask(task.id);
35
58
  this.oncontextmenuTaskList(e, task.id);
36
- } }, (_a = task.valuesToShow) === null || _a === void 0 ? void 0 : _a.map((v, index) => (h("span", { class: index === 0 ? 'main' : undefined, title: v.length > 10 ? v : undefined, key: `task_${task.id}_valuesToShow_${index}` }, v === '#START#'
37
- ? kupDates.formatToLocaleSimple(task.start)
38
- : v === '#END#'
39
- ? kupDates.formatToLocaleSimple(task.end)
40
- : v))))) : task.type === 'task' ? (h("div", { class: "subrow", style: {
59
+ } }, (_a = task.valuesToShow) === null || _a === void 0 ? void 0 :
60
+ _a.map((v, index) => (h("span", { class: index === 0 ? 'main' : undefined, title: v.length > 10 ? v : undefined, key: `task_${task.id}_valuesToShow_${index}` }, v === '#START#'
61
+ ? kupDates.formatToLocaleSimple(task.start)
62
+ : v === '#END#'
63
+ ? kupDates.formatToLocaleSimple(task.end)
64
+ : v))), this.scrollableTaskList && spansToShow > task.valuesToShow.length && ((() => {
65
+ const spansToIterate = createArrayFromNum(spansToShow - task.valuesToShow.length);
66
+ return (spansToIterate.map((element) => (h("span", { key: element }))));
67
+ })()))) : task.type === 'task' ? (h("div", { class: "subrow", style: {
41
68
  height: `${this.rowHeight}px`,
42
69
  width: this.rowWidth,
43
70
  fontFamily: this.fontFamily,
@@ -53,16 +80,26 @@ export class KupCustomTaskListTable {
53
80
  e.preventDefault();
54
81
  this.setSelectedTask(task.id);
55
82
  this.oncontextmenuTaskList(e, task.id);
83
+ } }, this.scrollableTaskList ? (h("div", { style: {
84
+ textAlign: 'end',
56
85
  } }, h("span", { key: `phase_${task.id}_valuesToShow_color`, style: {
57
86
  height: '16px',
58
87
  width: '16px',
88
+ display: 'inline-block',
59
89
  backgroundColor: (_b = task.styles) === null || _b === void 0 ? void 0 : _b.backgroundColor,
60
- } }), (_c = task.valuesToShow) === null || _c === void 0 ? void 0 :
61
- _c.map((v, index) => (h("span", { class: index === 0 ? 'main' : undefined, title: v.length > 10 ? v : undefined, key: `phase_${task.id}_valuesToShow_${index}` }, v === '#START#'
90
+ } }))) : (h("span", { key: `phase_${task.id}_valuesToShow_color`, style: {
91
+ height: '16px',
92
+ width: '16px',
93
+ backgroundColor: (_c = task.styles) === null || _c === void 0 ? void 0 : _c.backgroundColor,
94
+ } })), (_d = task.valuesToShow) === null || _d === void 0 ? void 0 :
95
+ _d.map((v, index) => (h("span", { class: index === 0 ? 'main' : undefined, title: v.length > 10 ? v : undefined, key: `phase_${task.id}_valuesToShow_${index}` }, v === '#START#'
62
96
  ? kupDates.formatToLocaleSimple(task.start)
63
97
  : v === '#END#'
64
98
  ? kupDates.formatToLocaleSimple(task.end)
65
- : v))))) : ((() => {
99
+ : v))), this.scrollableTaskList && spansToShow > task.valuesToShow.length && ((() => {
100
+ const spansToIterate = createArrayFromNum(spansToShow - task.valuesToShow.length - 1);
101
+ return (spansToIterate.map((element) => (h("span", { key: element }))));
102
+ })()))) : ((() => {
66
103
  var _a;
67
104
  let str = '';
68
105
  for (let i = 0; i < task.valuesToShow.length; i++) {
@@ -84,7 +121,7 @@ export class KupCustomTaskListTable {
84
121
  ? v
85
122
  : undefined, key: `detail_${task.id}_valuesToShow_${index}` }, v)))));
86
123
  })())));
87
- })));
124
+ }))));
88
125
  }
89
126
  static get is() { return "kup-custom-task-list-table"; }
90
127
  static get originalStyleUrls() {
@@ -210,6 +247,40 @@ export class KupCustomTaskListTable {
210
247
  "reflect": false,
211
248
  "defaultValue": "''"
212
249
  },
250
+ "scrollableTaskList": {
251
+ "type": "boolean",
252
+ "mutable": false,
253
+ "complexType": {
254
+ "original": "boolean",
255
+ "resolved": "boolean",
256
+ "references": {}
257
+ },
258
+ "required": false,
259
+ "optional": false,
260
+ "docs": {
261
+ "tags": [],
262
+ "text": ""
263
+ },
264
+ "attribute": "scrollable-task-list",
265
+ "reflect": false
266
+ },
267
+ "taskListScrollX": {
268
+ "type": "number",
269
+ "mutable": false,
270
+ "complexType": {
271
+ "original": "number",
272
+ "resolved": "number",
273
+ "references": {}
274
+ },
275
+ "required": false,
276
+ "optional": false,
277
+ "docs": {
278
+ "tags": [],
279
+ "text": ""
280
+ },
281
+ "attribute": "task-list-scroll-x",
282
+ "reflect": false
283
+ },
213
284
  "setSelectedTask": {
214
285
  "type": "unknown",
215
286
  "mutable": false,
@@ -274,7 +345,28 @@ export class KupCustomTaskListTable {
274
345
  "tags": [],
275
346
  "text": ""
276
347
  }
348
+ },
349
+ "ontaskListScrollWidth": {
350
+ "type": "unknown",
351
+ "mutable": false,
352
+ "complexType": {
353
+ "original": "(width: number) => void",
354
+ "resolved": "(width: number) => void",
355
+ "references": {}
356
+ },
357
+ "required": false,
358
+ "optional": false,
359
+ "docs": {
360
+ "tags": [],
361
+ "text": ""
362
+ }
277
363
  }
278
364
  };
279
365
  }
366
+ static get watchers() {
367
+ return [{
368
+ "propName": "taskListScrollX",
369
+ "methodName": "updateTaskListScroll"
370
+ }];
371
+ }
280
372
  }
@@ -131,6 +131,84 @@
131
131
  margin-right: 10px;
132
132
  }
133
133
 
134
+ .scrollable {
135
+ overflow-x: auto;
136
+ scrollbar-width: 0;
137
+ }
138
+ .scrollable .project-wrapper {
139
+ display: table;
140
+ }
141
+ .scrollable .project {
142
+ width: 100% !important;
143
+ display: table-row;
144
+ }
145
+ .scrollable .project > * {
146
+ overflow: unset;
147
+ padding-right: 10px;
148
+ display: table-cell;
149
+ vertical-align: middle;
150
+ border-bottom: 1px solid var(--kup-border-color, #acacac);
151
+ border-top: 1px solid var(--kup-border-color, #acacac);
152
+ padding-left: 12px;
153
+ }
154
+ .scrollable .project > *:first-child {
155
+ border-left: 1px solid var(--kup-border-color, #acacac);
156
+ border-bottom-left-radius: 4px;
157
+ border-top-left-radius: 4px;
158
+ }
159
+ .scrollable .project > *:last-child {
160
+ border-right: 1px solid var(--kup-border-color, #acacac);
161
+ border-bottom-right-radius: 4px;
162
+ border-top-right-radius: 4px;
163
+ }
164
+ .scrollable .subrow {
165
+ width: 100% !important;
166
+ display: table-row;
167
+ }
168
+ .scrollable .subrow > * {
169
+ overflow: unset;
170
+ padding-right: 10px;
171
+ display: table-cell;
172
+ vertical-align: middle;
173
+ border-bottom: 1px solid #acacac;
174
+ border-top: 1px solid #acacac;
175
+ padding-left: 12px;
176
+ }
177
+ .scrollable .subrow > *:first-child {
178
+ border-left: 1px solid #acacac;
179
+ }
180
+ .scrollable .subrow > *:last-child {
181
+ border-right: 1px solid #acacac;
182
+ }
183
+ .scrollable .timeline {
184
+ width: 100% !important;
185
+ display: table-row;
186
+ }
187
+ .scrollable .timeline > * {
188
+ overflow: unset;
189
+ padding-right: 10px;
190
+ display: table-cell;
191
+ vertical-align: middle;
192
+ border-bottom: 1px solid #acacac;
193
+ border-top: 1px solid #acacac;
194
+ padding-left: 12px;
195
+ }
196
+ .scrollable .timeline > *:first-child {
197
+ border-left: 1px solid #acacac;
198
+ }
199
+ .scrollable .timeline > *:last-child {
200
+ border-right: 1px solid #acacac;
201
+ }
202
+ .scrollable .project:has(+ .subrow) > * {
203
+ border-bottom-left-radius: 0;
204
+ border-bottom-right-radius: 0;
205
+ }
206
+
207
+ .scrollable::-webkit-scrollbar {
208
+ width: 0;
209
+ height: 0;
210
+ }
211
+
134
212
  .project {
135
213
  background: var(--kup-background-color, #ffffff);
136
214
  border: 1px solid var(--kup-border-color, #acacac);
@@ -183,8 +261,8 @@
183
261
 
184
262
  .subrow:has(+ .subrow),
185
263
  .project:has(+ .subrow) {
186
- border-bottom-left-radius: 0;
187
- border-bottom-right-radius: 0;
264
+ border-bottom-left-radius: 0 !important;
265
+ border-bottom-right-radius: 0 !important;
188
266
  }
189
267
 
190
268
  .timeline {