@sme.up/ketchup 10.1.2 → 10.1.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 (61) hide show
  1. package/dist/cjs/ketchup.cjs.js +1 -1
  2. package/dist/cjs/kup-custom-task-list-header_4.cjs.entry.js +195 -22
  3. package/dist/cjs/kup-gantt_10.cjs.entry.js +19 -17
  4. package/dist/cjs/{kup-planner-declarations-7291d01c.js → kup-planner-declarations-959110da.js} +1 -1
  5. package/dist/cjs/kup-planner-renderer.cjs.entry.js +3 -3
  6. package/dist/cjs/kup-planner.cjs.entry.js +112 -4
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/collection/assets/index.js +4 -0
  9. package/dist/collection/assets/planner-example-7.js +370 -0
  10. package/dist/collection/components/kup-planner/kup-planner-declarations.js +1 -1
  11. package/dist/collection/components/kup-planner/kup-planner.js +153 -3
  12. package/dist/collection/components/kup-planner/utils/custom-task-list-table.js +30 -12
  13. package/dist/collection/components/kup-planner/utils/kup-gantt/kup-gantt.js +31 -7
  14. package/dist/collection/components/kup-planner/utils/kup-grid-renderer/kup-grid-renderer.js +181 -4
  15. package/dist/collection/components/kup-planner/utils/kup-planner-renderer.js +2 -2
  16. package/dist/collection/components/kup-planner/utils/kup-task-gantt/kup-task-gantt.js +4 -4
  17. package/dist/collection/components/kup-planner/utils/kup-task-list/kup-task-list.css +1 -0
  18. package/dist/components/kup-custom-task-list-table.js +1 -1
  19. package/dist/components/kup-gantt.js +1 -1
  20. package/dist/components/kup-grid-renderer.js +1 -1
  21. package/dist/components/kup-planner-renderer.js +1 -1
  22. package/dist/components/kup-planner.js +122 -12
  23. package/dist/components/kup-task-gantt.js +1 -1
  24. package/dist/components/kup-task-list-header.js +1 -1
  25. package/dist/components/kup-task-list-table.js +1 -1
  26. package/dist/components/kup-task-list.js +1 -1
  27. package/dist/components/{p-76c4c708.js → p-26d3e5b2.js} +1 -1
  28. package/dist/components/{p-2fff7268.js → p-45cdd2a4.js} +10 -10
  29. package/dist/components/{p-a0eeacbd.js → p-4edc1bd0.js} +1 -1
  30. package/dist/components/{p-9da8cd93.js → p-5cbf86c3.js} +13 -10
  31. package/dist/components/{p-53e38c4a.js → p-90c212d2.js} +1 -1
  32. package/dist/components/{p-0e6c0355.js → p-9c8c4e2e.js} +30 -12
  33. package/dist/components/{p-5517e8e8.js → p-c2b9b4ba.js} +4 -4
  34. package/dist/components/{p-4efa19a7.js → p-c8302548.js} +3 -3
  35. package/dist/components/{p-c43d08ab.js → p-d72814f5.js} +161 -5
  36. package/dist/esm/ketchup.js +1 -1
  37. package/dist/esm/kup-custom-task-list-header_4.entry.js +191 -18
  38. package/dist/esm/kup-gantt_10.entry.js +14 -12
  39. package/dist/esm/{kup-planner-declarations-0704bc6c.js → kup-planner-declarations-5981474b.js} +1 -1
  40. package/dist/esm/kup-planner-renderer.entry.js +3 -3
  41. package/dist/esm/kup-planner.entry.js +112 -4
  42. package/dist/esm/loader.js +1 -1
  43. package/dist/ketchup/ketchup.esm.js +1 -1
  44. package/dist/ketchup/p-088e2f23.entry.js +1 -0
  45. package/dist/ketchup/p-58bc7c00.entry.js +1 -0
  46. package/dist/ketchup/{p-54ebe3bd.entry.js → p-6aec24be.entry.js} +1 -1
  47. package/dist/ketchup/p-78c0ff1b.js +1 -0
  48. package/dist/ketchup/p-ca9ec047.entry.js +16 -0
  49. package/dist/types/components/kup-planner/kup-planner-declarations.d.ts +19 -0
  50. package/dist/types/components/kup-planner/kup-planner.d.ts +12 -1
  51. package/dist/types/components/kup-planner/utils/kup-gantt/kup-gantt.d.ts +2 -1
  52. package/dist/types/components/kup-planner/utils/kup-grid-renderer/kup-grid-renderer.d.ts +7 -0
  53. package/dist/types/components.d.ts +24 -2
  54. package/package.json +1 -1
  55. package/dist/ketchup/p-008bdcdc.js +0 -1
  56. package/dist/ketchup/p-792e9244.entry.js +0 -1
  57. package/dist/ketchup/p-e8823224.entry.js +0 -1
  58. package/dist/ketchup/p-f38c2d0e.entry.js +0 -16
  59. package/dist/cjs/{bar.helpers-c481a535.js → other.helpers-8782a839.js} +46 -46
  60. package/dist/esm/{bar.helpers-23a51579.js → other.helpers-83e3225b.js} +46 -46
  61. /package/dist/ketchup/{p-cd3a7d53.js → p-17c9ef50.js} +0 -0
@@ -1,8 +1,8 @@
1
1
  import { r as registerInstance, h, F as Fragment } from './index-c9246a86.js';
2
2
  import { a as KupDates, c as commonjsGlobal } from './kup-dates-da19044e.js';
3
- import { d as createArrayFromNum, i as isKeyboardEvent, g as getProgressPoint, h as handleTaskBySVGMouseEvent } from './bar.helpers-23a51579.js';
3
+ import { d as createArrayFromNum, i as isKeyboardEvent, g as getProgressPoint, h as handleTaskBySVGMouseEvent } from './other.helpers-83e3225b.js';
4
4
  import { d as defaultDateTimeFormatters, a as getDaysInMonth, b as getCachedDateTimeFormat, c as getLocalDayOfWeek, e as getLocaleMonth } from './kup-planner-time-formatter-ddf84f9b.js';
5
- import { d as defaultStylingOptions } from './kup-planner-declarations-0704bc6c.js';
5
+ import { d as defaultStylingOptions } from './kup-planner-declarations-5981474b.js';
6
6
 
7
7
  const customTaskListHeaderModuleCss = ".kup-body-compact-01{font-family:var(--kup-font-family);font-size:var(--kup-body-compact-01-font-size, 14px);line-height:18px;font-weight:400;letter-spacing:0.16px}.kup-body-01{font-family:var(--kup-font-family);font-size:var(--kup-body-01-font-size, 14px);line-height:20px;font-weight:400;letter-spacing:0.16px}.kup-code-01{font-family:var(--kup-font-family-monospace);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-label-01{font-family:var(--kup-font-family);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-caption-02{font-family:var(--kup-font-family);font-size:12px;line-height:15px;font-weight:500;letter-spacing:1px}.kup-caption-01{font-family:var(--kup-font-family);font-size:10px;line-height:13px;font-weight:400;letter-spacing:1px}.kup-small-label-01{font-family:var(--kup-font-family);font-size:6px;line-height:9px;font-weight:400;letter-spacing:1px}.kup-heading-compact-01{font-family:var(--kup-font-family);font-size:14px;line-height:18px;font-weight:600;letter-spacing:0.16px}.kup-heading-01{font-family:var(--kup-font-family);font-size:14px;line-height:20px;font-weight:600;letter-spacing:0.16px}.kup-heading-02{font-family:var(--kup-font-family);font-size:16px;line-height:24px;font-weight:500;letter-spacing:0}.kup-heading-03{font-family:var(--kup-font-family);font-size:20px;line-height:28px;font-weight:400;letter-spacing:0}.kup-heading-04{font-family:var(--kup-font-family);font-size:28px;line-height:36px;font-weight:400;letter-spacing:0}.kup-heading-05{font-family:var(--kup-font-family);font-size:32px;line-height:40px;font-weight:300;letter-spacing:0}.kup-heading-06{font-family:var(--kup-font-family);font-size:42px;line-height:50px;font-weight:300;letter-spacing:0}.kup-heading-07{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:300;letter-spacing:0}.kup-heading-08{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:600;letter-spacing:0}.custom-task-list-wrapper{display:flex;justify-content:space-around;max-width:330px;place-items:\"center\";text-align:center;align-items:center}.title{font-weight:bold;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toggler{max-width:max-content;padding:0 4px;text-align:right}.switch{position:relative;display:inline-block;width:30px;height:17px}.input{opacity:0;width:0;height:0}.input:checked+.slider{background-color:#003b77}.input:checked+.slider:before{-webkit-transform:translateX(13px);-ms-transform:translateX(13px);transform:translateX(13px)}.input:focus+.slider{box-shadow:0 0 1px #003b77}.slider{-webkit-transition:0.4s;cursor:pointer;background-color:#ccc;bottom:0;border-radius:17px;left:0;position:absolute;right:0;top:0;transition:0.4s}.slider:before{-webkit-transition:0.1s;background-color:white;border-radius:50%;bottom:2px;content:\"\";height:13px;left:2px;position:absolute;transition:0.1s;width:13px}.label{font-size:12px;padding:6px}.filter{font-size:12px}";
8
8
  const KupCustomTaskListHeaderStyle0 = customTaskListHeaderModuleCss;
@@ -56,17 +56,25 @@ const KupCustomTaskListTable = class {
56
56
  }
57
57
  updateTaskListScroll() {
58
58
  this.projectWrapperRef &&
59
- (this.projectWrapperRef.parentElement.scrollLeft = this.taskListScrollX);
59
+ (this.projectWrapperRef.parentElement.scrollLeft =
60
+ this.taskListScrollX);
60
61
  }
61
62
  render() {
63
+ var _a;
62
64
  const kupDates = new KupDates();
63
65
  const scrollableStyle = {};
64
66
  if (this.scrollableTaskList) {
65
67
  scrollableStyle['width'] = this.rowWidth;
66
68
  }
67
- const spansToShow = this.tasks.reduce((prev, curr) => {
68
- return prev.valuesToShow.length > curr.valuesToShow.length ? prev : curr;
69
- }).valuesToShow.length + 1;
69
+ const spansToShow = this.tasks && this.tasks.length > 0
70
+ ? ((_a = this.tasks.reduce((prev, curr) => {
71
+ var _a, _b;
72
+ return ((_a = prev.valuesToShow) === null || _a === void 0 ? void 0 : _a.length) >
73
+ ((_b = curr.valuesToShow) === null || _b === void 0 ? void 0 : _b.length)
74
+ ? prev
75
+ : curr;
76
+ }).valuesToShow) === null || _a === void 0 ? void 0 : _a.length) + 1 || 1
77
+ : 1;
70
78
  return (h("div", { class: `container ${this.scrollableTaskList ? 'scrollable' : ''}`, style: scrollableStyle }, h("div", { class: "project-wrapper", ref: (el) => (this.projectWrapperRef = el) }, this.tasks.map((task) => {
71
79
  var _a, _b, _c, _d;
72
80
  return (h(Fragment, null, task.type === 'project' ? (h("div", { class: "project", style: {
@@ -90,10 +98,14 @@ const KupCustomTaskListTable = class {
90
98
  ? kupDates.formatToLocaleSimple(task.start)
91
99
  : v === '#END#'
92
100
  ? kupDates.formatToLocaleSimple(task.end)
93
- : v))), this.scrollableTaskList && spansToShow > task.valuesToShow.length && ((() => {
94
- const spansToIterate = createArrayFromNum(spansToShow - task.valuesToShow.length);
95
- return (spansToIterate.map((element) => (h("span", { key: element }))));
96
- })()))) : task.type === 'task' ? (h("div", { class: "subrow", style: {
101
+ : v))), this.scrollableTaskList &&
102
+ spansToShow >
103
+ task.valuesToShow.length &&
104
+ (() => {
105
+ const spansToIterate = createArrayFromNum(spansToShow -
106
+ task.valuesToShow.length);
107
+ return spansToIterate.map((element) => (h("span", { key: element })));
108
+ })())) : task.type === 'task' ? (h("div", { class: "subrow", style: {
97
109
  height: `${this.rowHeight}px`,
98
110
  width: this.rowWidth,
99
111
  fontFamily: this.fontFamily,
@@ -125,10 +137,16 @@ const KupCustomTaskListTable = class {
125
137
  ? kupDates.formatToLocaleSimple(task.start)
126
138
  : v === '#END#'
127
139
  ? kupDates.formatToLocaleSimple(task.end)
128
- : v))), this.scrollableTaskList && spansToShow > task.valuesToShow.length && ((() => {
129
- const spansToIterate = createArrayFromNum(spansToShow - task.valuesToShow.length - 1);
130
- return (spansToIterate.map((element) => (h("span", { key: element }))));
131
- })()))) : ((() => {
140
+ : v))), this.scrollableTaskList &&
141
+ spansToShow >
142
+ task.valuesToShow.length &&
143
+ (() => {
144
+ const spansToIterate = createArrayFromNum(spansToShow -
145
+ task.valuesToShow
146
+ .length -
147
+ 1);
148
+ return spansToIterate.map((element) => (h("span", { key: element })));
149
+ })())) : ((() => {
132
150
  var _a;
133
151
  let str = '';
134
152
  for (let i = 0; i < task.valuesToShow.length; i++) {
@@ -959,6 +977,7 @@ const KupGridRenderer = class {
959
977
  this.currentDateIndicator = undefined;
960
978
  this.projection = undefined;
961
979
  this.readOnly = false;
980
+ this.dependencies = [];
962
981
  this.gridProps = undefined;
963
982
  this.dateChange = undefined;
964
983
  this.progressChange = undefined;
@@ -1355,6 +1374,159 @@ const KupGridRenderer = class {
1355
1374
  : this.drownPathAndTriangle(task, this.tasks[child.index], this.rowHeight, this.taskHeight, this.arrowIndent);
1356
1375
  return (h("g", { class: "arrow" }, h("path", { "stroke-width": "1.5", d: path, fill: "none" }), h("polygon", { points: trianglePoints })));
1357
1376
  }
1377
+ /**
1378
+ * Render dependencies passed as structured data. Supports multiple dependencies
1379
+ * between the same pair by offsetting paths.
1380
+ */
1381
+ renderDependencies() {
1382
+ var _a, _b, _c;
1383
+ if (!this.dependencies || this.dependencies.length === 0)
1384
+ return null;
1385
+ // Build a map of task id -> KupPlannerBarTask for quick lookup
1386
+ const taskById = new Map();
1387
+ for (const t of this.tasks)
1388
+ taskById.set(t.id, t);
1389
+ // Group dependencies by pair key (source__target)
1390
+ const groups = new Map();
1391
+ for (const dep of this.dependencies) {
1392
+ const key = `${dep.sourceId}__${dep.targetId}`;
1393
+ const arr = (_a = groups.get(key)) !== null && _a !== void 0 ? _a : [];
1394
+ arr.push(dep);
1395
+ groups.set(key, arr);
1396
+ }
1397
+ // Also group by target to handle multiple different sources pointing to the same target.
1398
+ const byTarget = new Map(); // targetId -> array of pair keys
1399
+ for (const key of groups.keys()) {
1400
+ const [, targetId] = key.split('__');
1401
+ const arr = (_b = byTarget.get(targetId)) !== null && _b !== void 0 ? _b : [];
1402
+ arr.push(key);
1403
+ byTarget.set(targetId, arr);
1404
+ }
1405
+ const rendered = [];
1406
+ const OFFSET_STEP = 8; // px
1407
+ // For each target that has multiple source groups, compute a per-group vertical offset
1408
+ // so the groups themselves are arranged and then individual deps inside each group are
1409
+ // offset relative to their group's offset.
1410
+ const groupOffsets = new Map(); // pairKey -> base offset
1411
+ for (const [targetId, pairKeys] of byTarget.entries()) {
1412
+ if (pairKeys.length === 1)
1413
+ continue;
1414
+ // center the groups around 0
1415
+ const totalGroups = pairKeys.length;
1416
+ for (let i = 0; i < pairKeys.length; i++) {
1417
+ const pk = pairKeys[i];
1418
+ const baseOffset = (i - (totalGroups - 1) / 2) * (OFFSET_STEP * 3);
1419
+ groupOffsets.set(pk, baseOffset);
1420
+ }
1421
+ }
1422
+ for (const [key, deps] of groups.entries()) {
1423
+ const [sourceId, targetId] = key.split('__');
1424
+ // tolerate different id formats: exact, trimmed, and taskId_phaseId (with padded phase ids)
1425
+ let sourceTask = taskById.get(sourceId) ||
1426
+ this.tasks.find((t) => t.id && t.id.trim() === (sourceId + '').trim());
1427
+ // try exact match first
1428
+ let targetTask = taskById.get(targetId) ||
1429
+ this.tasks.find((t) => t.id && t.id.trim() === (targetId + '').trim());
1430
+ // if not found, try combined formats like <taskId>_<phaseId> (with possible padding)
1431
+ if (!targetTask && sourceTask) {
1432
+ const candidate1 = `${sourceTask.id}_${targetId}`;
1433
+ const candidate2 = `${sourceTask.id}_${(targetId + '').trim()}`;
1434
+ targetTask =
1435
+ taskById.get(candidate1) ||
1436
+ taskById.get(candidate2) ||
1437
+ this.tasks.find((t) => t.id &&
1438
+ (t.id === candidate1 ||
1439
+ t.id === candidate2 ||
1440
+ t.id.trim() === candidate2.trim()));
1441
+ }
1442
+ // as a last resort try matching by trimming both sides against all tasks
1443
+ if (!sourceTask || !targetTask) {
1444
+ const trimmedSource = (sourceId + '').trim();
1445
+ const trimmedTarget = (targetId + '').trim();
1446
+ if (!sourceTask) {
1447
+ sourceTask = this.tasks.find((t) => t.id && t.id.trim() === trimmedSource);
1448
+ }
1449
+ if (!targetTask) {
1450
+ targetTask = this.tasks.find((t) => t.id && t.id.trim() === trimmedTarget);
1451
+ }
1452
+ // Extra fallback: some dependency definitions use the original row id
1453
+ // (taskRowId) or row-based ids like '1_P410'. Try to resolve those to
1454
+ // the runtime task objects using taskRowId / phaseRowId mappings.
1455
+ try {
1456
+ // If source is still not found, try to match by taskRowId or taskRow.id
1457
+ if (!sourceTask) {
1458
+ sourceTask = this.tasks.find((t) => {
1459
+ var _a;
1460
+ return t.taskRowId == sourceId ||
1461
+ ((_a = t.taskRow) === null || _a === void 0 ? void 0 : _a.id) == sourceId ||
1462
+ t.phaseRowId == sourceId;
1463
+ });
1464
+ }
1465
+ // If target is not found, handle cases like '1_P410' where the left
1466
+ // part is the taskRowId and the right part is the phase code. We'll
1467
+ // try to find a phase whose taskRowId matches the left part and
1468
+ // whose id ends with the phase suffix.
1469
+ if (!targetTask) {
1470
+ const parts = trimmedTarget.split('_');
1471
+ if (parts.length > 1) {
1472
+ const left = parts[0];
1473
+ const right = parts.slice(1).join('_');
1474
+ targetTask = this.tasks.find((t) => {
1475
+ var _a;
1476
+ return (t.taskRowId == left &&
1477
+ t.id &&
1478
+ t.id.endsWith('_' + right)) ||
1479
+ (((_a = t.taskRow) === null || _a === void 0 ? void 0 : _a.id) == left &&
1480
+ t.id &&
1481
+ t.id.endsWith('_' + right));
1482
+ });
1483
+ }
1484
+ // also try matching target by row id directly
1485
+ if (!targetTask) {
1486
+ targetTask = this.tasks.find((t) => {
1487
+ var _a;
1488
+ return t.taskRowId == targetId ||
1489
+ ((_a = t.taskRow) === null || _a === void 0 ? void 0 : _a.id) == targetId ||
1490
+ t.phaseRowId == targetId;
1491
+ });
1492
+ }
1493
+ }
1494
+ }
1495
+ catch (e) {
1496
+ // ignore matching errors
1497
+ }
1498
+ }
1499
+ if (!sourceTask || !targetTask) {
1500
+ continue;
1501
+ }
1502
+ const total = deps.length;
1503
+ // base offset for this pair (if groups were arranged around the target)
1504
+ const base = (_c = groupOffsets.get(key)) !== null && _c !== void 0 ? _c : 0;
1505
+ deps.forEach((dep, idx) => {
1506
+ // compute offset: center the stack around 0 and add group base offset
1507
+ const intraOffset = (idx - (total - 1) / 2) * OFFSET_STEP;
1508
+ const offset = base + intraOffset;
1509
+ // we will re-use drownPathAndTriangle but need temporary synthetic tasks shifted by offset
1510
+ const shiftedFrom = Object.assign({}, sourceTask);
1511
+ const shiftedTo = Object.assign({}, targetTask);
1512
+ // shift vertically
1513
+ shiftedFrom.y = sourceTask.y + offset;
1514
+ shiftedTo.y = targetTask.y + offset;
1515
+ const [path, trianglePoints] = this.rtl
1516
+ ? this.drownPathAndTriangleRTL(shiftedFrom, shiftedTo, this.rowHeight, this.taskHeight, this.arrowIndent)
1517
+ : this.drownPathAndTriangle(shiftedFrom, shiftedTo, this.rowHeight, this.taskHeight, this.arrowIndent);
1518
+ // pick a color for the connector: prefer the source task's color,
1519
+ // then component arrowColor prop, and finally a neutral grey
1520
+ const sourceColor = (sourceTask &&
1521
+ sourceTask.styles &&
1522
+ sourceTask.styles.backgroundColor) ||
1523
+ this.arrowColor ||
1524
+ '#9e9e9e';
1525
+ rendered.push(h("g", { class: "arrow dependency", "data-dep-id": dep.id }, h("path", { stroke: sourceColor, "stroke-width": "2", d: path, fill: "none" }), h("polygon", { points: trianglePoints, fill: sourceColor, stroke: sourceColor })));
1526
+ });
1527
+ }
1528
+ return rendered;
1529
+ }
1358
1530
  drownPathAndTriangle(taskFrom, taskTo, rowHeight, taskHeight, arrowIndent) {
1359
1531
  const indexCompare = taskFrom.index > taskTo.index ? -1 : 1;
1360
1532
  const taskToEndPosition = taskTo.y + taskHeight / 2;
@@ -1445,13 +1617,14 @@ const KupGridRenderer = class {
1445
1617
  // }
1446
1618
  tickX += this.columnWidth;
1447
1619
  }
1448
- return (h("svg", { key: '55d4eb1097be961c627e667e1024cf47fb8638fa', xmlns: "http://www.w3.org/2000/svg", width: this.gridProps.svgWidth, height: `${this.rowHeight * this.tasks.length}px`, "font-family": this.fontFamily, ref: (el) => (this.svg = el) }, h("g", { key: '8e4e7083c1c4ddfd4fda90b35d9efb30ed8f9821', class: "grid" }, h("g", { key: '09d4491ce14b43c9851052d902feee615131d9e9', class: "rows" }, gridRows), h("g", { key: 'cad7d7a7d2aac967c4baf70af49c2ed5e40e6970', class: "rowLines" }, rowLines), h("g", { key: 'ccc47da84182fce20f54a4abab278388bfc79ab5', class: "ticks" }, ticks)), h("g", { key: '4627b926c7705b2ecf82aac0fb05c1a9f02013ca', class: "content" }, this.currentDateIndicator && (h("rect", { key: '975e35e5c3b7aea83c8e7406ed885ae25d819300', fill: this.currentDateIndicator.color, x: this.currentDateIndicator.x + 1.5, y: "0", width: "2", height: "100%" })), this.projection && (h("rect", { key: 'f971ab7a63ab6e4dd0f7ce50c8335402d08d9162', fill: this.projection.color, x: this.projection.x0, y: "0", width: this.projection.xf - this.projection.x0, height: "100%", "fill-opacity": "0.35" })), h("g", { key: '547376a8dc4ee5ff9c9f2d1f908f71ac2d229314', class: "arrows", fill: this.arrowColor, stroke: this.arrowColor }, this.tasks.map((task) => {
1620
+ return (h("svg", { key: '22b83f3b4155e51f56ff19c43e1e935e5b17bf46', xmlns: "http://www.w3.org/2000/svg", width: this.gridProps.svgWidth, height: `${this.rowHeight * this.tasks.length}px`, "font-family": this.fontFamily, ref: (el) => (this.svg = el) }, h("g", { key: '0dc7cb819de38e2defa4e676a3bdf0d9272d681e', class: "grid" }, h("g", { key: 'ec2bcc141732416498c70f20ab7f0ddba112ceeb', class: "rows" }, gridRows), h("g", { key: 'b73233f161cb1fe8289a37e5ab3354d7c8b4e1b3', class: "rowLines" }, rowLines), h("g", { key: '03770a3bebf0d3ba72e4a03b78765a2270cb6b00', class: "ticks" }, ticks)), h("g", { key: '49cc1fec67c34cef6c35ffb78b0485d7a28b021d', class: "content" }, this.currentDateIndicator && (h("rect", { key: '7fc33e726bf3e02336148501d70909093f596946', fill: this.currentDateIndicator.color, x: this.currentDateIndicator.x + 1.5, y: "0", width: "2", height: "100%" })), this.projection && (h("rect", { key: 'c4cb014710c018b196829c84963d10f4e1456dde', fill: this.projection.color, x: this.projection.x0, y: "0", width: this.projection.xf - this.projection.x0, height: "100%", "fill-opacity": "0.35" })), h("g", { key: '5afa927eb4fb8442c95651d0945ae10249ad962e', class: "arrows", fill: this.arrowColor, stroke: this.arrowColor }, this.renderDependencies(), this.tasks.map((task) => {
1449
1621
  return task.barChildren.map((child) => {
1450
1622
  if (task.type !== 'timeline') {
1451
- this.renderKupArrow(task, child);
1623
+ return this.renderKupArrow(task, child);
1452
1624
  }
1625
+ return null;
1453
1626
  });
1454
- })), h("g", { key: '2013b02ae78d1e0eacaea4b17b134e8b03efdf11', class: "bar", "font-family": this.fontFamily, "font-size": this.fontSize }, this.tasks.map((task) => {
1627
+ })), h("g", { key: '44f3505a327201ebd848dad424b36f9f2efabcde', class: "bar", "font-family": this.fontFamily, "font-size": this.fontSize }, this.tasks.map((task) => {
1455
1628
  const forbidResize = task.type === 'project';
1456
1629
  return (h("g", { onKeyDown: (e) => {
1457
1630
  switch (e.key) {
@@ -1511,7 +1684,7 @@ const KupGridRenderer = class {
1511
1684
  return this.renderKupBar(task, props.isSelected, isDateResizable, isProgressChangeable);
1512
1685
  }
1513
1686
  })()));
1514
- }), this.currentTarget && this.ganttEvent.changedTask && (h("g", { key: '1b89a87d8bae74bae83018b25ca741bf843f29a3', class: "task-wrapper" }, this.renderKupBar(this.ganttEvent.changedTask, false, false, false)))))));
1687
+ }), this.currentTarget && this.ganttEvent.changedTask && (h("g", { key: '91675894e3ba24a00fa9ef59e8c3af0dc03b3e4c', class: "task-wrapper" }, this.renderKupBar(this.ganttEvent.changedTask, false, false, false)))))));
1515
1688
  }
1516
1689
  static get watchers() { return {
1517
1690
  "columnWidth": ["updateXStep"],
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, h, f as forceUpdate, d as getElement, F as Fragment } from './index-c9246a86.js';
2
+ import { r as removeHiddenTasks, s as sortTasks, c as convertToBarTasks, a as calculateCurrentDateCalculator, b as calculateProjection } from './other.helpers-83e3225b.js';
2
3
  import { f as ganttDateRangeFromTask, s as seedDates, g as getPhaseById, b as getProjectById } from './kup-planner-renderer-helper-4952d0a1.js';
3
- import { r as removeHiddenTasks, s as sortTasks, c as convertToBarTasks, a as calculateCurrentDateCalculator, b as calculateProjection } from './bar.helpers-23a51579.js';
4
- import { e as KUP_PLANNER_MAIN_GANTT_ID } from './kup-planner-declarations-0704bc6c.js';
4
+ import { e as KUP_PLANNER_MAIN_GANTT_ID } from './kup-planner-declarations-5981474b.js';
5
5
  import './kup-dates-da19044e.js';
6
6
 
7
7
  const kupGanttCss = ".kup-body-compact-01{font-family:var(--kup-font-family);font-size:var(--kup-body-compact-01-font-size, 14px);line-height:18px;font-weight:400;letter-spacing:0.16px}.kup-body-01{font-family:var(--kup-font-family);font-size:var(--kup-body-01-font-size, 14px);line-height:20px;font-weight:400;letter-spacing:0.16px}.kup-code-01{font-family:var(--kup-font-family-monospace);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-label-01{font-family:var(--kup-font-family);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-caption-02{font-family:var(--kup-font-family);font-size:12px;line-height:15px;font-weight:500;letter-spacing:1px}.kup-caption-01{font-family:var(--kup-font-family);font-size:10px;line-height:13px;font-weight:400;letter-spacing:1px}.kup-small-label-01{font-family:var(--kup-font-family);font-size:6px;line-height:9px;font-weight:400;letter-spacing:1px}.kup-heading-compact-01{font-family:var(--kup-font-family);font-size:14px;line-height:18px;font-weight:600;letter-spacing:0.16px}.kup-heading-01{font-family:var(--kup-font-family);font-size:14px;line-height:20px;font-weight:600;letter-spacing:0.16px}.kup-heading-02{font-family:var(--kup-font-family);font-size:16px;line-height:24px;font-weight:500;letter-spacing:0}.kup-heading-03{font-family:var(--kup-font-family);font-size:20px;line-height:28px;font-weight:400;letter-spacing:0}.kup-heading-04{font-family:var(--kup-font-family);font-size:28px;line-height:36px;font-weight:400;letter-spacing:0}.kup-heading-05{font-family:var(--kup-font-family);font-size:32px;line-height:40px;font-weight:300;letter-spacing:0}.kup-heading-06{font-family:var(--kup-font-family);font-size:42px;line-height:50px;font-weight:300;letter-spacing:0}.kup-heading-07{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:300;letter-spacing:0}.kup-heading-08{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:600;letter-spacing:0}.wrapper{display:flex;padding:0;margin:0;list-style:none;outline:none;position:relative}.ganttContainer{background:var(--kup-layer-2);border-radius:var(--kup-radius-00);overflow:hidden;padding:var(--kup-space-05)}.ganttVerticalContainer{overflow:hidden;font-size:0;margin:0;padding:0}.horizontalContainer{margin:0;padding:0;overflow:hidden}.horizontalContainerScrollable{overflow:auto !important;scrollbar-width:0}.horizontalContainerScrollable::-webkit-scrollbar{width:0;height:0}.task-gantt{overflow:hidden}";
@@ -51,6 +51,7 @@ const KupGantt = class {
51
51
  this.hideLabel = false;
52
52
  this.showSecondaryDates = false;
53
53
  this.hideDependencies = false;
54
+ this.dependencies = [];
54
55
  this.projection = undefined;
55
56
  this.displayedStartDate = undefined;
56
57
  this.displayedEndDate = undefined;
@@ -538,6 +539,7 @@ const KupGantt = class {
538
539
  currentDateIndicator: this.currentDateIndicatorContent,
539
540
  projection: this.projectionContent,
540
541
  readOnly: this.readOnly,
542
+ dependencies: this.dependencies,
541
543
  setGanttEvent: this.setGanttEvent.bind(this),
542
544
  setFailedTask: this.setFailedTask.bind(this),
543
545
  setSelectedTask: this.handleSelectedTask.bind(this),
@@ -548,7 +550,7 @@ const KupGantt = class {
548
550
  barDblClick: this.barDblClick,
549
551
  barContextMenu: this.barContextMenu,
550
552
  delete: this.delete,
551
- phaseDrop: this.phaseDrop
553
+ phaseDrop: this.phaseDrop,
552
554
  };
553
555
  const tableProps = {
554
556
  rowHeight: this.rowHeight,
@@ -567,11 +569,11 @@ const KupGantt = class {
567
569
  setSelectedTask: this.handleSelectedTask.bind(this),
568
570
  expanderClick: this.handleExpanderClick.bind(this),
569
571
  TaskListHeader: this.TaskListHeader,
570
- TaskListTable: this.TaskListTable
572
+ TaskListTable: this.TaskListTable,
571
573
  };
572
- return (h("div", { key: '95eabbafe96bf8f67cfd5ed7d2b0598684cb23f3', class: "gannt-wrapper-main" }, h("div", { key: '55889af9cb5503f797fe68ec210c68af1374acc5', class: "wrapper", onKeyDown: this.handleKeyDown.bind(this), tabIndex: 0, ref: (el) => (this.wrapperRef = el) }, this.listCellWidth && (h("kup-task-list", Object.assign({ key: 'a4edfd9f6363f172bb31509ba37394b20cfdbd3d', currentTasks: this.currentTasks, handleClick: this.handleClick, handleDblClick: this.handleDblClick, handleContextMenu: this.handleContextMenu, ganttOnClick: this.ganttOnClick, ganttOnDblClick: this.ganttOnDblClick, ganttonOnContextMenu: this.ganttonOnContextMenu, label: this.label, doubleView: this.doubleView, setDoubleView: this.setDoubleView }, tableProps, { class: "tasks", scrollableTaskList: this.scrollableTaskList, updateTaskListScrollX: this.ignoreScrollEvent, ontaskListScrollWidth: (width) => {
574
+ return (h("div", { key: '121b1b2857d26033d74411289b05d0090556801b', class: "gannt-wrapper-main" }, h("div", { key: '7b775dcf04e33e317ff526186c2bc4905fcb4812', class: "wrapper", onKeyDown: this.handleKeyDown.bind(this), tabIndex: 0, ref: (el) => (this.wrapperRef = el) }, this.listCellWidth && (h("kup-task-list", Object.assign({ key: '898db18e0d258874ce7651c2925af28f35b04823', currentTasks: this.currentTasks, handleClick: this.handleClick, handleDblClick: this.handleDblClick, handleContextMenu: this.handleContextMenu, ganttOnClick: this.ganttOnClick, ganttOnDblClick: this.ganttOnDblClick, ganttonOnContextMenu: this.ganttonOnContextMenu, label: this.label, doubleView: this.doubleView, setDoubleView: this.setDoubleView }, tableProps, { class: "tasks", scrollableTaskList: this.scrollableTaskList, updateTaskListScrollX: this.ignoreScrollEvent, ontaskListScrollWidth: (width) => {
573
575
  this.taskListScrollWidth = width;
574
- }, taskListScrollX: this.taskListScrollX, ref: (el) => (this.taskListTrueRef = el) }))), h("kup-task-gantt", { key: '600b2af4dd6fd1dda0730f49d954282c898726ff', gridProps: gridProps, calendarProps: calendarProps, barProps: barProps, ganttHeight: this.ganttHeight, taskGanttRef: this.taskGanttRef, scrollY: this.scrollY, scrollX: this.scrollX, phaseDragScroll: this.handlePhaseDragScroll.bind(this), class: "ganttContainer" }), this.ganttEvent.changedTask && (h("kup-tooltip", { key: 'fa9b8855edcd4e95283cb65ec3429d3ec3756c18', arrowIndent: this.arrowIndent, rowHeight: this.rowHeight, svgContainerHeight: this.svgContainerHeight, svgContainerWidth: this.svgContainerWidth, fontFamily: this.fontFamily, fontSize: this.fontSize, scrollX: this.scrollX, scrollY: this.scrollY, task: this.ganttEvent.changedTask, headerHeight: this.headerHeight, taskListWidth: this.taskListWidth, TooltipContent: this.TooltipContent, rtl: this.rtl, svgWidth: this.svgWidth })), h("kup-vertical-scroll", { key: 'a8173cc05e5608dc797f01f314fa2ffdc21407f9', ganttFullHeight: this.ganttFullHeight, ganttHeight: this.ganttHeight, headerHeight: this.headerHeight, scrollNumber: this.scrollY, verticalScroll: this.handleScrollY.bind(this), rtl: this.rtl })), this.taskGanttRef && (h("kup-horizontal-scroll", { key: '0c50510e0abef51e326bc21a84b96520deac88c8', svgWidth: this.svgWidth, taskListTrueRef: this.taskListTrueRef, taskListWidth: this.taskListWidth, scrollNumber: this.scrollX, rtl: this.rtl, horizontalScroll: this.handleScrollX.bind(this), horizontalTaskListScroll: this.handleTaskListScrollX.bind(this), listCellWidth: this.listCellWidth, scrollableTaskList: this.scrollableTaskList, taskListScrollWidth: this.taskListScrollWidth, taskListScrollNumber: this.taskListScrollX }))));
576
+ }, taskListScrollX: this.taskListScrollX, ref: (el) => (this.taskListTrueRef = el) }))), h("kup-task-gantt", { key: '80670fd1bca1243258feab7fcda294ddb6b9e972', gridProps: gridProps, calendarProps: calendarProps, barProps: barProps, ganttHeight: this.ganttHeight, taskGanttRef: this.taskGanttRef, scrollY: this.scrollY, scrollX: this.scrollX, phaseDragScroll: this.handlePhaseDragScroll.bind(this), class: "ganttContainer" }), this.ganttEvent.changedTask && (h("kup-tooltip", { key: 'b81a3b3c980124ebdd668ead2bb81ba30fd1bedb', arrowIndent: this.arrowIndent, rowHeight: this.rowHeight, svgContainerHeight: this.svgContainerHeight, svgContainerWidth: this.svgContainerWidth, fontFamily: this.fontFamily, fontSize: this.fontSize, scrollX: this.scrollX, scrollY: this.scrollY, task: this.ganttEvent.changedTask, headerHeight: this.headerHeight, taskListWidth: this.taskListWidth, TooltipContent: this.TooltipContent, rtl: this.rtl, svgWidth: this.svgWidth })), h("kup-vertical-scroll", { key: '646408c0efc5eb955686c9ad4b45c12d61eb1db6', ganttFullHeight: this.ganttFullHeight, ganttHeight: this.ganttHeight, headerHeight: this.headerHeight, scrollNumber: this.scrollY, verticalScroll: this.handleScrollY.bind(this), rtl: this.rtl })), this.taskGanttRef && (h("kup-horizontal-scroll", { key: 'd8eb8d2ea2a7d3b9cbfa9c79aa608dfdac4786f7', svgWidth: this.svgWidth, taskListTrueRef: this.taskListTrueRef, taskListWidth: this.taskListWidth, scrollNumber: this.scrollX, rtl: this.rtl, horizontalScroll: this.handleScrollX.bind(this), horizontalTaskListScroll: this.handleTaskListScrollX.bind(this), listCellWidth: this.listCellWidth, scrollableTaskList: this.scrollableTaskList, taskListScrollWidth: this.taskListScrollWidth, taskListScrollNumber: this.taskListScrollX }))));
575
577
  }
576
578
  get rootElement() { return getElement(this); }
577
579
  static get watchers() { return {
@@ -785,13 +787,13 @@ const TaskGantt = class {
785
787
  }, 75);
786
788
  }
787
789
  render() {
788
- const newBarProps = Object.assign(Object.assign({}, this.barProps), { gridProps: this.gridProps, phaseDragScroll: this.phaseDragScroll });
789
- return (h("div", { key: 'e9b7f7f147fae5077c4b17232661030262170a76', class: "ganttVerticalContainer", ref: (el) => (this.verticalGanttContainerRef = el), dir: "ltr" }, h("kup-gantt-calendar", { key: '6575335f2a55573ad95089af45dc3dbf4292f37c', dateSetup: this.calendarProps.dateSetup, locale: this.calendarProps.locale, rtl: this.calendarProps.rtl, headerHeight: this.calendarProps.headerHeight, columnWidth: this.calendarProps.columnWidth, fontFamily: this.calendarProps.fontFamily, fontSize: this.calendarProps.fontSize, dateTimeFormatters: this.calendarProps.dateTimeFormatters, singleLineHeader: this.calendarProps.singleLineHeader, currentDateIndicator: this.calendarProps.currentDateIndicator, svgWidth: this.gridProps.svgWidth }), h("div", { key: 'ec7b2e3f28ada7ac48c92686888b2b17898e2252', ref: (el) => (this.horizontalContainerRef = el), class: "horizontalContainer", style: this.ganttHeight
790
+ const newBarProps = Object.assign(Object.assign({}, this.barProps), { gridProps: this.gridProps, phaseDragScroll: this.phaseDragScroll, dependencies: this.barProps.dependencies || [] });
791
+ return (h("div", { key: 'f171a1dc93bb1bee342dc2384c5eda5a0a1670a5', class: "ganttVerticalContainer", ref: (el) => (this.verticalGanttContainerRef = el), dir: "ltr" }, h("kup-gantt-calendar", { key: '8df97b74146bc84af4a20d704efeb5d17202bfee', dateSetup: this.calendarProps.dateSetup, locale: this.calendarProps.locale, rtl: this.calendarProps.rtl, headerHeight: this.calendarProps.headerHeight, columnWidth: this.calendarProps.columnWidth, fontFamily: this.calendarProps.fontFamily, fontSize: this.calendarProps.fontSize, dateTimeFormatters: this.calendarProps.dateTimeFormatters, singleLineHeader: this.calendarProps.singleLineHeader, currentDateIndicator: this.calendarProps.currentDateIndicator, svgWidth: this.gridProps.svgWidth }), h("div", { key: '1295b8511846e0de6f45d13f765124ec750ededb', ref: (el) => (this.horizontalContainerRef = el), class: "horizontalContainer", style: this.ganttHeight
790
792
  ? {
791
793
  height: `${this.ganttHeight}px`,
792
794
  width: `${this.gridProps.svgWidth}px`,
793
795
  }
794
- : { width: `${this.gridProps.svgWidth}px` } }, h("kup-grid-renderer", Object.assign({ key: '98ed84972a106b35ea7ba6a380d83e025a635ebd' }, newBarProps)))));
796
+ : { width: `${this.gridProps.svgWidth}px` } }, h("kup-grid-renderer", Object.assign({ key: '7a35e55a9dff2cef220055a55d71eccf6a1e0801' }, newBarProps)))));
795
797
  }
796
798
  get rootElement() { return getElement(this); }
797
799
  static get watchers() { return {
@@ -802,7 +804,7 @@ const TaskGantt = class {
802
804
  }; }
803
805
  };
804
806
 
805
- const kupTaskListCss$2 = ".kup-body-compact-01{font-family:var(--kup-font-family);font-size:var(--kup-body-compact-01-font-size, 14px);line-height:18px;font-weight:400;letter-spacing:0.16px}.kup-body-01{font-family:var(--kup-font-family);font-size:var(--kup-body-01-font-size, 14px);line-height:20px;font-weight:400;letter-spacing:0.16px}.kup-code-01{font-family:var(--kup-font-family-monospace);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-label-01{font-family:var(--kup-font-family);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-caption-02{font-family:var(--kup-font-family);font-size:12px;line-height:15px;font-weight:500;letter-spacing:1px}.kup-caption-01{font-family:var(--kup-font-family);font-size:10px;line-height:13px;font-weight:400;letter-spacing:1px}.kup-small-label-01{font-family:var(--kup-font-family);font-size:6px;line-height:9px;font-weight:400;letter-spacing:1px}.kup-heading-compact-01{font-family:var(--kup-font-family);font-size:14px;line-height:18px;font-weight:600;letter-spacing:0.16px}.kup-heading-01{font-family:var(--kup-font-family);font-size:14px;line-height:20px;font-weight:600;letter-spacing:0.16px}.kup-heading-02{font-family:var(--kup-font-family);font-size:16px;line-height:24px;font-weight:500;letter-spacing:0}.kup-heading-03{font-family:var(--kup-font-family);font-size:20px;line-height:28px;font-weight:400;letter-spacing:0}.kup-heading-04{font-family:var(--kup-font-family);font-size:28px;line-height:36px;font-weight:400;letter-spacing:0}.kup-heading-05{font-family:var(--kup-font-family);font-size:32px;line-height:40px;font-weight:300;letter-spacing:0}.kup-heading-06{font-family:var(--kup-font-family);font-size:42px;line-height:50px;font-weight:300;letter-spacing:0}.kup-heading-07{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:300;letter-spacing:0}.kup-heading-08{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:600;letter-spacing:0}.tasks{background:var(--kup-layer-2);border-radius:var(--kup-radius-00);padding:var(--kup-space-05);margin-right:var(--kup-space-05)}.taskListWrapper{display:table;border-bottom:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.taskListTableRow{display:table-row;text-overflow:ellipsis}.taskListCell{display:table-cell;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskListNameWrapper{display:flex}.taskListExpander{color:rgb(86, 86, 86);font-size:0.6rem;padding:0.15rem 0.2rem 0 0.2rem;user-select:none;cursor:pointer}.taskListEmptyExpander{font-size:0.6rem;padding-left:1rem;user-select:none}.ganttTable{display:table;border-bottom:#e6e4e4 1px solid;border-top:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.ganttTable_Header{display:table-row;list-style:none}.ganttTable_HeaderSeparator{border-right:1px solid rgb(196, 196, 196);opacity:1;margin-left:-2px}.ganttTable_HeaderItem{display:table-cell;vertical-align:-webkit-baseline-middle;vertical-align:middle}";
807
+ const kupTaskListCss$2 = ".kup-body-compact-01{font-family:var(--kup-font-family);font-size:var(--kup-body-compact-01-font-size, 14px);line-height:18px;font-weight:400;letter-spacing:0.16px}.kup-body-01{font-family:var(--kup-font-family);font-size:var(--kup-body-01-font-size, 14px);line-height:20px;font-weight:400;letter-spacing:0.16px}.kup-code-01{font-family:var(--kup-font-family-monospace);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-label-01{font-family:var(--kup-font-family);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-caption-02{font-family:var(--kup-font-family);font-size:12px;line-height:15px;font-weight:500;letter-spacing:1px}.kup-caption-01{font-family:var(--kup-font-family);font-size:10px;line-height:13px;font-weight:400;letter-spacing:1px}.kup-small-label-01{font-family:var(--kup-font-family);font-size:6px;line-height:9px;font-weight:400;letter-spacing:1px}.kup-heading-compact-01{font-family:var(--kup-font-family);font-size:14px;line-height:18px;font-weight:600;letter-spacing:0.16px}.kup-heading-01{font-family:var(--kup-font-family);font-size:14px;line-height:20px;font-weight:600;letter-spacing:0.16px}.kup-heading-02{font-family:var(--kup-font-family);font-size:16px;line-height:24px;font-weight:500;letter-spacing:0}.kup-heading-03{font-family:var(--kup-font-family);font-size:20px;line-height:28px;font-weight:400;letter-spacing:0}.kup-heading-04{font-family:var(--kup-font-family);font-size:28px;line-height:36px;font-weight:400;letter-spacing:0}.kup-heading-05{font-family:var(--kup-font-family);font-size:32px;line-height:40px;font-weight:300;letter-spacing:0}.kup-heading-06{font-family:var(--kup-font-family);font-size:42px;line-height:50px;font-weight:300;letter-spacing:0}.kup-heading-07{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:300;letter-spacing:0}.kup-heading-08{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:600;letter-spacing:0}.tasks{background:var(--kup-layer-2);border-radius:var(--kup-radius-00);padding:var(--kup-space-05);margin-right:var(--kup-space-05);min-width:25%}.taskListWrapper{display:table;border-bottom:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.taskListTableRow{display:table-row;text-overflow:ellipsis}.taskListCell{display:table-cell;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskListNameWrapper{display:flex}.taskListExpander{color:rgb(86, 86, 86);font-size:0.6rem;padding:0.15rem 0.2rem 0 0.2rem;user-select:none;cursor:pointer}.taskListEmptyExpander{font-size:0.6rem;padding-left:1rem;user-select:none}.ganttTable{display:table;border-bottom:#e6e4e4 1px solid;border-top:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.ganttTable_Header{display:table-row;list-style:none}.ganttTable_HeaderSeparator{border-right:1px solid rgb(196, 196, 196);opacity:1;margin-left:-2px}.ganttTable_HeaderItem{display:table-cell;vertical-align:-webkit-baseline-middle;vertical-align:middle}";
806
808
  const KupTaskListStyle0 = kupTaskListCss$2;
807
809
 
808
810
  const TaskList = class {
@@ -928,7 +930,7 @@ const TaskList = class {
928
930
  };
929
931
  TaskList.style = KupTaskListStyle0;
930
932
 
931
- const kupTaskListCss$1 = ".kup-body-compact-01{font-family:var(--kup-font-family);font-size:var(--kup-body-compact-01-font-size, 14px);line-height:18px;font-weight:400;letter-spacing:0.16px}.kup-body-01{font-family:var(--kup-font-family);font-size:var(--kup-body-01-font-size, 14px);line-height:20px;font-weight:400;letter-spacing:0.16px}.kup-code-01{font-family:var(--kup-font-family-monospace);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-label-01{font-family:var(--kup-font-family);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-caption-02{font-family:var(--kup-font-family);font-size:12px;line-height:15px;font-weight:500;letter-spacing:1px}.kup-caption-01{font-family:var(--kup-font-family);font-size:10px;line-height:13px;font-weight:400;letter-spacing:1px}.kup-small-label-01{font-family:var(--kup-font-family);font-size:6px;line-height:9px;font-weight:400;letter-spacing:1px}.kup-heading-compact-01{font-family:var(--kup-font-family);font-size:14px;line-height:18px;font-weight:600;letter-spacing:0.16px}.kup-heading-01{font-family:var(--kup-font-family);font-size:14px;line-height:20px;font-weight:600;letter-spacing:0.16px}.kup-heading-02{font-family:var(--kup-font-family);font-size:16px;line-height:24px;font-weight:500;letter-spacing:0}.kup-heading-03{font-family:var(--kup-font-family);font-size:20px;line-height:28px;font-weight:400;letter-spacing:0}.kup-heading-04{font-family:var(--kup-font-family);font-size:28px;line-height:36px;font-weight:400;letter-spacing:0}.kup-heading-05{font-family:var(--kup-font-family);font-size:32px;line-height:40px;font-weight:300;letter-spacing:0}.kup-heading-06{font-family:var(--kup-font-family);font-size:42px;line-height:50px;font-weight:300;letter-spacing:0}.kup-heading-07{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:300;letter-spacing:0}.kup-heading-08{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:600;letter-spacing:0}.tasks{background:var(--kup-layer-2);border-radius:var(--kup-radius-00);padding:var(--kup-space-05);margin-right:var(--kup-space-05)}.taskListWrapper{display:table;border-bottom:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.taskListTableRow{display:table-row;text-overflow:ellipsis}.taskListCell{display:table-cell;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskListNameWrapper{display:flex}.taskListExpander{color:rgb(86, 86, 86);font-size:0.6rem;padding:0.15rem 0.2rem 0 0.2rem;user-select:none;cursor:pointer}.taskListEmptyExpander{font-size:0.6rem;padding-left:1rem;user-select:none}.ganttTable{display:table;border-bottom:#e6e4e4 1px solid;border-top:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.ganttTable_Header{display:table-row;list-style:none}.ganttTable_HeaderSeparator{border-right:1px solid rgb(196, 196, 196);opacity:1;margin-left:-2px}.ganttTable_HeaderItem{display:table-cell;vertical-align:-webkit-baseline-middle;vertical-align:middle}";
933
+ const kupTaskListCss$1 = ".kup-body-compact-01{font-family:var(--kup-font-family);font-size:var(--kup-body-compact-01-font-size, 14px);line-height:18px;font-weight:400;letter-spacing:0.16px}.kup-body-01{font-family:var(--kup-font-family);font-size:var(--kup-body-01-font-size, 14px);line-height:20px;font-weight:400;letter-spacing:0.16px}.kup-code-01{font-family:var(--kup-font-family-monospace);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-label-01{font-family:var(--kup-font-family);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-caption-02{font-family:var(--kup-font-family);font-size:12px;line-height:15px;font-weight:500;letter-spacing:1px}.kup-caption-01{font-family:var(--kup-font-family);font-size:10px;line-height:13px;font-weight:400;letter-spacing:1px}.kup-small-label-01{font-family:var(--kup-font-family);font-size:6px;line-height:9px;font-weight:400;letter-spacing:1px}.kup-heading-compact-01{font-family:var(--kup-font-family);font-size:14px;line-height:18px;font-weight:600;letter-spacing:0.16px}.kup-heading-01{font-family:var(--kup-font-family);font-size:14px;line-height:20px;font-weight:600;letter-spacing:0.16px}.kup-heading-02{font-family:var(--kup-font-family);font-size:16px;line-height:24px;font-weight:500;letter-spacing:0}.kup-heading-03{font-family:var(--kup-font-family);font-size:20px;line-height:28px;font-weight:400;letter-spacing:0}.kup-heading-04{font-family:var(--kup-font-family);font-size:28px;line-height:36px;font-weight:400;letter-spacing:0}.kup-heading-05{font-family:var(--kup-font-family);font-size:32px;line-height:40px;font-weight:300;letter-spacing:0}.kup-heading-06{font-family:var(--kup-font-family);font-size:42px;line-height:50px;font-weight:300;letter-spacing:0}.kup-heading-07{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:300;letter-spacing:0}.kup-heading-08{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:600;letter-spacing:0}.tasks{background:var(--kup-layer-2);border-radius:var(--kup-radius-00);padding:var(--kup-space-05);margin-right:var(--kup-space-05);min-width:25%}.taskListWrapper{display:table;border-bottom:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.taskListTableRow{display:table-row;text-overflow:ellipsis}.taskListCell{display:table-cell;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskListNameWrapper{display:flex}.taskListExpander{color:rgb(86, 86, 86);font-size:0.6rem;padding:0.15rem 0.2rem 0 0.2rem;user-select:none;cursor:pointer}.taskListEmptyExpander{font-size:0.6rem;padding-left:1rem;user-select:none}.ganttTable{display:table;border-bottom:#e6e4e4 1px solid;border-top:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.ganttTable_Header{display:table-row;list-style:none}.ganttTable_HeaderSeparator{border-right:1px solid rgb(196, 196, 196);opacity:1;margin-left:-2px}.ganttTable_HeaderItem{display:table-cell;vertical-align:-webkit-baseline-middle;vertical-align:middle}";
932
934
  const KupTaskListHeaderStyle0 = kupTaskListCss$1;
933
935
 
934
936
  const KupTaskListHeader = class {
@@ -962,7 +964,7 @@ const KupTaskListHeader = class {
962
964
  };
963
965
  KupTaskListHeader.style = KupTaskListHeaderStyle0;
964
966
 
965
- const kupTaskListCss = ".kup-body-compact-01{font-family:var(--kup-font-family);font-size:var(--kup-body-compact-01-font-size, 14px);line-height:18px;font-weight:400;letter-spacing:0.16px}.kup-body-01{font-family:var(--kup-font-family);font-size:var(--kup-body-01-font-size, 14px);line-height:20px;font-weight:400;letter-spacing:0.16px}.kup-code-01{font-family:var(--kup-font-family-monospace);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-label-01{font-family:var(--kup-font-family);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-caption-02{font-family:var(--kup-font-family);font-size:12px;line-height:15px;font-weight:500;letter-spacing:1px}.kup-caption-01{font-family:var(--kup-font-family);font-size:10px;line-height:13px;font-weight:400;letter-spacing:1px}.kup-small-label-01{font-family:var(--kup-font-family);font-size:6px;line-height:9px;font-weight:400;letter-spacing:1px}.kup-heading-compact-01{font-family:var(--kup-font-family);font-size:14px;line-height:18px;font-weight:600;letter-spacing:0.16px}.kup-heading-01{font-family:var(--kup-font-family);font-size:14px;line-height:20px;font-weight:600;letter-spacing:0.16px}.kup-heading-02{font-family:var(--kup-font-family);font-size:16px;line-height:24px;font-weight:500;letter-spacing:0}.kup-heading-03{font-family:var(--kup-font-family);font-size:20px;line-height:28px;font-weight:400;letter-spacing:0}.kup-heading-04{font-family:var(--kup-font-family);font-size:28px;line-height:36px;font-weight:400;letter-spacing:0}.kup-heading-05{font-family:var(--kup-font-family);font-size:32px;line-height:40px;font-weight:300;letter-spacing:0}.kup-heading-06{font-family:var(--kup-font-family);font-size:42px;line-height:50px;font-weight:300;letter-spacing:0}.kup-heading-07{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:300;letter-spacing:0}.kup-heading-08{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:600;letter-spacing:0}.tasks{background:var(--kup-layer-2);border-radius:var(--kup-radius-00);padding:var(--kup-space-05);margin-right:var(--kup-space-05)}.taskListWrapper{display:table;border-bottom:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.taskListTableRow{display:table-row;text-overflow:ellipsis}.taskListCell{display:table-cell;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskListNameWrapper{display:flex}.taskListExpander{color:rgb(86, 86, 86);font-size:0.6rem;padding:0.15rem 0.2rem 0 0.2rem;user-select:none;cursor:pointer}.taskListEmptyExpander{font-size:0.6rem;padding-left:1rem;user-select:none}.ganttTable{display:table;border-bottom:#e6e4e4 1px solid;border-top:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.ganttTable_Header{display:table-row;list-style:none}.ganttTable_HeaderSeparator{border-right:1px solid rgb(196, 196, 196);opacity:1;margin-left:-2px}.ganttTable_HeaderItem{display:table-cell;vertical-align:-webkit-baseline-middle;vertical-align:middle}";
967
+ const kupTaskListCss = ".kup-body-compact-01{font-family:var(--kup-font-family);font-size:var(--kup-body-compact-01-font-size, 14px);line-height:18px;font-weight:400;letter-spacing:0.16px}.kup-body-01{font-family:var(--kup-font-family);font-size:var(--kup-body-01-font-size, 14px);line-height:20px;font-weight:400;letter-spacing:0.16px}.kup-code-01{font-family:var(--kup-font-family-monospace);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-label-01{font-family:var(--kup-font-family);font-size:12px;line-height:16px;font-weight:400;letter-spacing:0.32px}.kup-caption-02{font-family:var(--kup-font-family);font-size:12px;line-height:15px;font-weight:500;letter-spacing:1px}.kup-caption-01{font-family:var(--kup-font-family);font-size:10px;line-height:13px;font-weight:400;letter-spacing:1px}.kup-small-label-01{font-family:var(--kup-font-family);font-size:6px;line-height:9px;font-weight:400;letter-spacing:1px}.kup-heading-compact-01{font-family:var(--kup-font-family);font-size:14px;line-height:18px;font-weight:600;letter-spacing:0.16px}.kup-heading-01{font-family:var(--kup-font-family);font-size:14px;line-height:20px;font-weight:600;letter-spacing:0.16px}.kup-heading-02{font-family:var(--kup-font-family);font-size:16px;line-height:24px;font-weight:500;letter-spacing:0}.kup-heading-03{font-family:var(--kup-font-family);font-size:20px;line-height:28px;font-weight:400;letter-spacing:0}.kup-heading-04{font-family:var(--kup-font-family);font-size:28px;line-height:36px;font-weight:400;letter-spacing:0}.kup-heading-05{font-family:var(--kup-font-family);font-size:32px;line-height:40px;font-weight:300;letter-spacing:0}.kup-heading-06{font-family:var(--kup-font-family);font-size:42px;line-height:50px;font-weight:300;letter-spacing:0}.kup-heading-07{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:300;letter-spacing:0}.kup-heading-08{font-family:var(--kup-font-family);font-size:54px;line-height:64px;font-weight:600;letter-spacing:0}.tasks{background:var(--kup-layer-2);border-radius:var(--kup-radius-00);padding:var(--kup-space-05);margin-right:var(--kup-space-05);min-width:25%}.taskListWrapper{display:table;border-bottom:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.taskListTableRow{display:table-row;text-overflow:ellipsis}.taskListCell{display:table-cell;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.taskListNameWrapper{display:flex}.taskListExpander{color:rgb(86, 86, 86);font-size:0.6rem;padding:0.15rem 0.2rem 0 0.2rem;user-select:none;cursor:pointer}.taskListEmptyExpander{font-size:0.6rem;padding-left:1rem;user-select:none}.ganttTable{display:table;border-bottom:#e6e4e4 1px solid;border-top:#e6e4e4 1px solid;border-left:#e6e4e4 1px solid}.ganttTable_Header{display:table-row;list-style:none}.ganttTable_HeaderSeparator{border-right:1px solid rgb(196, 196, 196);opacity:1;margin-left:-2px}.ganttTable_HeaderItem{display:table-cell;vertical-align:-webkit-baseline-middle;vertical-align:middle}";
966
968
  const KupTaskListTableStyle0 = kupTaskListCss;
967
969
 
968
970
  const TaskListTableDefault = class {
@@ -83,7 +83,7 @@ const defaultStylingOptions = {
83
83
  barProgressSelectedColor: '#A2A415',
84
84
  barBackgroundColor: '#A2A415',
85
85
  barBackgroundSelectedColor: '#A2A415',
86
- barDropZoneColor: '#4d9f0240'
86
+ barDropZoneColor: '#4d9f0240',
87
87
  };
88
88
  const KUP_PLANNER_MAIN_GANTT_ID = 'main';
89
89
  const KUP_PLANNER_SECONDARY_GANTT_ID = 'secondary';
@@ -1,6 +1,6 @@
1
1
  import { h, r as registerInstance, d as getElement } from './index-c9246a86.js';
2
2
  import { c as calculateDisplayedDateRange, a as convertProjectToTasks, g as getPhaseById, m as mergeTaskIntoProjects, b as getProjectById, d as mergeTaskIntoPhases, e as columnWidthForTimeUnit } from './kup-planner-renderer-helper-4952d0a1.js';
3
- import { e as KUP_PLANNER_MAIN_GANTT_ID, f as KUP_PLANNER_SECONDARY_GANTT_ID } from './kup-planner-declarations-0704bc6c.js';
3
+ import { e as KUP_PLANNER_MAIN_GANTT_ID, f as KUP_PLANNER_SECONDARY_GANTT_ID } from './kup-planner-declarations-5981474b.js';
4
4
  import { a as KupDates } from './kup-dates-da19044e.js';
5
5
  import { g as ganttDateTimeFormatters } from './kup-planner-time-formatter-ddf84f9b.js';
6
6
 
@@ -235,7 +235,7 @@ const KupPlannerRenderer = class {
235
235
  } }), this.props && (h("div", { key: 'a07185cd6be444510aef8c07eef0a9afe72d9fd6', style: {
236
236
  display: 'flex',
237
237
  flexDirection: 'column',
238
- } }, h("kup-gantt", Object.assign({ ref: (el) => (this.mainGantt = el), ganttId: KUP_PLANNER_MAIN_GANTT_ID, key: KUP_PLANNER_MAIN_GANTT_ID, filter: this.props.mainGantt.filter, hideLabel: this.props.mainGantt.hideLabel, showSecondaryDates: this.mainGanttDoubleView, hideDependencies: this.props.mainGantt.hideDependencies, ganttHeight: this.props.mainGantt.ganttHeight, displayedStartDate: this.displayedDates.displayedStartDate, displayedEndDate: this.displayedDates.displayedEndDate, viewDate: this.viewDate, tasks: this.tasks, columnWidth: columnWidthForTimeUnit(this.timeUnit), viewMode: this.timeUnit }, this.props.mainGantt.stylingOptions, { TaskListHeader: this.props.mainGantt.taskListHeaderProject, TaskListTable: this.props.mainGantt.taskListTableProject, TooltipContent: (_a = this.props.mainGantt.tooltipContent) !== null && _a !== void 0 ? _a : CustomTooltipHOC(), barClick: (task) => {
238
+ } }, h("kup-gantt", Object.assign({ ref: (el) => (this.mainGantt = el), ganttId: KUP_PLANNER_MAIN_GANTT_ID, key: KUP_PLANNER_MAIN_GANTT_ID, filter: this.props.mainGantt.filter, hideLabel: this.props.mainGantt.hideLabel, showSecondaryDates: this.mainGanttDoubleView, hideDependencies: this.props.mainGantt.hideDependencies, ganttHeight: this.props.mainGantt.ganttHeight, displayedStartDate: this.displayedDates.displayedStartDate, displayedEndDate: this.displayedDates.displayedEndDate, viewDate: this.viewDate, tasks: this.tasks, columnWidth: columnWidthForTimeUnit(this.timeUnit), viewMode: this.timeUnit, dependencies: this.props.mainGantt.dependencies }, this.props.mainGantt.stylingOptions, { TaskListHeader: this.props.mainGantt.taskListHeaderProject, TaskListTable: this.props.mainGantt.taskListTableProject, TooltipContent: (_a = this.props.mainGantt.tooltipContent) !== null && _a !== void 0 ? _a : CustomTooltipHOC(), barClick: (task) => {
239
239
  let row = getProjectById(task.id, this.currentTasks);
240
240
  if (!row) {
241
241
  row = getPhaseById(task.id, this.currentTasks);
@@ -267,7 +267,7 @@ const KupPlannerRenderer = class {
267
267
  this.handlePhaseDrop(originalPhase,
268
268
  // originalTask,
269
269
  finalPhaseData, destinationTask, this.props.mainGantt.onPhaseDrop);
270
- } })), this.props.secondaryGantt && (h("kup-gantt", Object.assign({ ref: (el) => (this.secondaryGantt = el), ganttId: KUP_PLANNER_SECONDARY_GANTT_ID, key: KUP_PLANNER_SECONDARY_GANTT_ID, filter: this.props.secondaryGantt.filter, hideLabel: this.props.secondaryGantt.hideLabel, showSecondaryDates: this.mainGanttDoubleView, hideDependencies: this.props.secondaryGantt.hideDependencies, ganttHeight: this.props.secondaryGantt.ganttHeight, displayedStartDate: this.displayedDates.displayedStartDate, displayedEndDate: this.displayedDates.displayedEndDate, viewDate: this.viewDate, tasks: this.details, columnWidth: columnWidthForTimeUnit(this.timeUnit), viewMode: this.timeUnit }, this.props.secondaryGantt.stylingOptions, { TaskListHeader: this.props.secondaryGantt
270
+ } })), this.props.secondaryGantt && (h("kup-gantt", Object.assign({ ref: (el) => (this.secondaryGantt = el), ganttId: KUP_PLANNER_SECONDARY_GANTT_ID, key: KUP_PLANNER_SECONDARY_GANTT_ID, filter: this.props.secondaryGantt.filter, hideLabel: this.props.secondaryGantt.hideLabel, showSecondaryDates: this.mainGanttDoubleView, hideDependencies: this.props.secondaryGantt.hideDependencies, ganttHeight: this.props.secondaryGantt.ganttHeight, displayedStartDate: this.displayedDates.displayedStartDate, displayedEndDate: this.displayedDates.displayedEndDate, viewDate: this.viewDate, tasks: this.details, columnWidth: columnWidthForTimeUnit(this.timeUnit), viewMode: this.timeUnit, dependencies: this.props.secondaryGantt.dependencies }, this.props.secondaryGantt.stylingOptions, { TaskListHeader: this.props.secondaryGantt
271
271
  .taskListHeaderProject, TaskListTable: this.props.secondaryGantt
272
272
  .taskListTableProject, TooltipContent: (_c = this.props.secondaryGantt.tooltipContent) !== null && _c !== void 0 ? _c : CustomTooltipHOC(), projection: this.projection, barClick: (task) => {
273
273
  if (this.props.secondaryGantt) {