@levelcaptech/gantt-task-react-custom 0.1.0 → 0.4.1

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.
@@ -1,63 +1,49 @@
1
- import React, { useMemo, useRef, useState, useEffect } from 'react';
2
-
3
- function _extends() {
4
- _extends = Object.assign || function (target) {
5
- for (var i = 1; i < arguments.length; i++) {
6
- var source = arguments[i];
7
-
8
- for (var key in source) {
9
- if (Object.prototype.hasOwnProperty.call(source, key)) {
10
- target[key] = source[key];
11
- }
12
- }
13
- }
14
-
15
- return target;
16
- };
17
-
18
- return _extends.apply(this, arguments);
19
- }
20
-
21
- function _unsupportedIterableToArray(o, minLen) {
22
- if (!o) return;
23
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
24
- var n = Object.prototype.toString.call(o).slice(8, -1);
25
- if (n === "Object" && o.constructor) n = o.constructor.name;
26
- if (n === "Map" || n === "Set") return Array.from(o);
27
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
1
+ import React, { useState, useRef, useMemo, useCallback, useEffect } from 'react';
2
+ import { createPortal } from 'react-dom';
3
+ import { useSensors, useSensor, PointerSensor, DndContext } from '@dnd-kit/core';
4
+ import { SortableContext, horizontalListSortingStrategy, useSortable, arrayMove } from '@dnd-kit/sortable';
5
+ import { CSS as CSS$1 } from '@dnd-kit/utilities';
6
+
7
+ function _arrayLikeToArray(r, a) {
8
+ (null == a || a > r.length) && (a = r.length);
9
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
10
+ return n;
28
11
  }
29
-
30
- function _arrayLikeToArray(arr, len) {
31
- if (len == null || len > arr.length) len = arr.length;
32
-
33
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
34
-
35
- return arr2;
36
- }
37
-
38
- function _createForOfIteratorHelperLoose(o, allowArrayLike) {
39
- var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
40
- if (it) return (it = it.call(o)).next.bind(it);
41
-
42
- if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
43
- if (it) o = it;
44
- var i = 0;
12
+ function _createForOfIteratorHelperLoose(r, e) {
13
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
14
+ if (t) return (t = t.call(r)).next.bind(t);
15
+ if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
16
+ t && (r = t);
17
+ var o = 0;
45
18
  return function () {
46
- if (i >= o.length) return {
47
- done: true
48
- };
49
- return {
50
- done: false,
51
- value: o[i++]
19
+ return o >= r.length ? {
20
+ done: !0
21
+ } : {
22
+ done: !1,
23
+ value: r[o++]
52
24
  };
53
25
  };
54
26
  }
55
-
56
27
  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
57
28
  }
29
+ function _extends() {
30
+ return _extends = Object.assign ? Object.assign.bind() : function (n) {
31
+ for (var e = 1; e < arguments.length; e++) {
32
+ var t = arguments[e];
33
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
34
+ }
35
+ return n;
36
+ }, _extends.apply(null, arguments);
37
+ }
38
+ function _unsupportedIterableToArray(r, a) {
39
+ if (r) {
40
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
41
+ var t = {}.toString.call(r).slice(8, -1);
42
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
43
+ }
44
+ }
58
45
 
59
46
  var ViewMode;
60
-
61
47
  (function (ViewMode) {
62
48
  ViewMode["Hour"] = "Hour";
63
49
  ViewMode["QuarterDay"] = "Quarter Day";
@@ -74,15 +60,12 @@ var getCachedDateTimeFormat = function getCachedDateTimeFormat(locString, opts)
74
60
  if (opts === void 0) {
75
61
  opts = {};
76
62
  }
77
-
78
63
  var key = JSON.stringify([locString, opts]);
79
64
  var dtf = intlDTCache[key];
80
-
81
65
  if (!dtf) {
82
66
  dtf = new Intl.DateTimeFormat(locString, opts);
83
67
  intlDTCache[key] = dtf;
84
68
  }
85
-
86
69
  return dtf;
87
70
  };
88
71
  var addToDate = function addToDate(date, quantity, scale) {
@@ -91,31 +74,25 @@ var addToDate = function addToDate(date, quantity, scale) {
91
74
  };
92
75
  var startOfDate = function startOfDate(date, scale) {
93
76
  var scores = ["millisecond", "second", "minute", "hour", "day", "month", "year"];
94
-
95
77
  var shouldReset = function shouldReset(_scale) {
96
78
  var maxScore = scores.indexOf(scale);
97
79
  return scores.indexOf(_scale) <= maxScore;
98
80
  };
99
-
100
81
  var newDate = new Date(date.getFullYear(), shouldReset("year") ? 0 : date.getMonth(), shouldReset("month") ? 1 : date.getDate(), shouldReset("day") ? 0 : date.getHours(), shouldReset("hour") ? 0 : date.getMinutes(), shouldReset("minute") ? 0 : date.getSeconds(), shouldReset("second") ? 0 : date.getMilliseconds());
101
82
  return newDate;
102
83
  };
103
84
  var ganttDateRange = function ganttDateRange(tasks, viewMode, preStepsCount) {
104
85
  var newStartDate = tasks[0].start;
105
86
  var newEndDate = tasks[0].start;
106
-
107
87
  for (var _iterator = _createForOfIteratorHelperLoose(tasks), _step; !(_step = _iterator()).done;) {
108
88
  var task = _step.value;
109
-
110
89
  if (task.start < newStartDate) {
111
90
  newStartDate = task.start;
112
91
  }
113
-
114
92
  if (task.end > newEndDate) {
115
93
  newEndDate = task.end;
116
94
  }
117
95
  }
118
-
119
96
  switch (viewMode) {
120
97
  case ViewMode.Year:
121
98
  newStartDate = addToDate(newStartDate, -1, "year");
@@ -123,49 +100,42 @@ var ganttDateRange = function ganttDateRange(tasks, viewMode, preStepsCount) {
123
100
  newEndDate = addToDate(newEndDate, 1, "year");
124
101
  newEndDate = startOfDate(newEndDate, "year");
125
102
  break;
126
-
127
103
  case ViewMode.QuarterYear:
128
104
  newStartDate = addToDate(newStartDate, -3, "month");
129
105
  newStartDate = startOfDate(newStartDate, "month");
130
106
  newEndDate = addToDate(newEndDate, 3, "year");
131
107
  newEndDate = startOfDate(newEndDate, "year");
132
108
  break;
133
-
134
109
  case ViewMode.Month:
135
110
  newStartDate = addToDate(newStartDate, -1 * preStepsCount, "month");
136
111
  newStartDate = startOfDate(newStartDate, "month");
137
112
  newEndDate = addToDate(newEndDate, 1, "year");
138
113
  newEndDate = startOfDate(newEndDate, "year");
139
114
  break;
140
-
141
115
  case ViewMode.Week:
142
116
  newStartDate = startOfDate(newStartDate, "day");
143
117
  newStartDate = addToDate(getMonday(newStartDate), -7 * preStepsCount, "day");
144
118
  newEndDate = startOfDate(newEndDate, "day");
145
119
  newEndDate = addToDate(newEndDate, 1.5, "month");
146
120
  break;
147
-
148
121
  case ViewMode.Day:
149
122
  newStartDate = startOfDate(newStartDate, "day");
150
123
  newStartDate = addToDate(newStartDate, -1 * preStepsCount, "day");
151
124
  newEndDate = startOfDate(newEndDate, "day");
152
125
  newEndDate = addToDate(newEndDate, 19, "day");
153
126
  break;
154
-
155
127
  case ViewMode.QuarterDay:
156
128
  newStartDate = startOfDate(newStartDate, "day");
157
129
  newStartDate = addToDate(newStartDate, -1 * preStepsCount, "day");
158
130
  newEndDate = startOfDate(newEndDate, "day");
159
131
  newEndDate = addToDate(newEndDate, 66, "hour");
160
132
  break;
161
-
162
133
  case ViewMode.HalfDay:
163
134
  newStartDate = startOfDate(newStartDate, "day");
164
135
  newStartDate = addToDate(newStartDate, -1 * preStepsCount, "day");
165
136
  newEndDate = startOfDate(newEndDate, "day");
166
137
  newEndDate = addToDate(newEndDate, 108, "hour");
167
138
  break;
168
-
169
139
  case ViewMode.Hour:
170
140
  newStartDate = startOfDate(newStartDate, "hour");
171
141
  newStartDate = addToDate(newStartDate, -1 * preStepsCount, "hour");
@@ -173,51 +143,40 @@ var ganttDateRange = function ganttDateRange(tasks, viewMode, preStepsCount) {
173
143
  newEndDate = addToDate(newEndDate, 1, "day");
174
144
  break;
175
145
  }
176
-
177
146
  return [newStartDate, newEndDate];
178
147
  };
179
148
  var seedDates = function seedDates(startDate, endDate, viewMode) {
180
149
  var currentDate = new Date(startDate);
181
150
  var dates = [currentDate];
182
-
183
151
  while (currentDate < endDate) {
184
152
  switch (viewMode) {
185
153
  case ViewMode.Year:
186
154
  currentDate = addToDate(currentDate, 1, "year");
187
155
  break;
188
-
189
156
  case ViewMode.QuarterYear:
190
157
  currentDate = addToDate(currentDate, 3, "month");
191
158
  break;
192
-
193
159
  case ViewMode.Month:
194
160
  currentDate = addToDate(currentDate, 1, "month");
195
161
  break;
196
-
197
162
  case ViewMode.Week:
198
163
  currentDate = addToDate(currentDate, 7, "day");
199
164
  break;
200
-
201
165
  case ViewMode.Day:
202
166
  currentDate = addToDate(currentDate, 1, "day");
203
167
  break;
204
-
205
168
  case ViewMode.HalfDay:
206
169
  currentDate = addToDate(currentDate, 12, "hour");
207
170
  break;
208
-
209
171
  case ViewMode.QuarterDay:
210
172
  currentDate = addToDate(currentDate, 6, "hour");
211
173
  break;
212
-
213
174
  case ViewMode.Hour:
214
175
  currentDate = addToDate(currentDate, 1, "hour");
215
176
  break;
216
177
  }
217
-
218
178
  dates.push(currentDate);
219
179
  }
220
-
221
180
  return dates;
222
181
  };
223
182
  var getLocaleMonth = function getLocaleMonth(date, locale) {
@@ -234,26 +193,21 @@ var getLocalDayOfWeek = function getLocalDayOfWeek(date, locale, format) {
234
193
  bottomValue = bottomValue.replace(bottomValue[0], bottomValue[0].toLocaleUpperCase());
235
194
  return bottomValue;
236
195
  };
237
-
238
196
  var getMonday = function getMonday(date) {
239
197
  var day = date.getDay();
240
198
  var diff = date.getDate() - day + (day === 0 ? -6 : 1);
241
199
  return new Date(date.setDate(diff));
242
200
  };
243
-
244
201
  var getWeekNumberISO8601 = function getWeekNumberISO8601(date) {
245
202
  var tmpDate = new Date(date.valueOf());
246
203
  var dayNumber = (tmpDate.getDay() + 6) % 7;
247
204
  tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);
248
205
  var firstThursday = tmpDate.valueOf();
249
206
  tmpDate.setMonth(0, 1);
250
-
251
207
  if (tmpDate.getDay() !== 4) {
252
208
  tmpDate.setMonth(0, 1 + (4 - tmpDate.getDay() + 7) % 7);
253
209
  }
254
-
255
210
  var weekNumber = (1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 604800000)).toString();
256
-
257
211
  if (weekNumber.length === 1) {
258
212
  return "0" + weekNumber;
259
213
  } else {
@@ -264,209 +218,1449 @@ var getDaysInMonth = function getDaysInMonth(month, year) {
264
218
  return new Date(year, month + 1, 0).getDate();
265
219
  };
266
220
 
267
- var styles = {"ganttTable":"_3_ygE","ganttTable_Header":"_1nBOt","ganttTable_HeaderSeparator":"_2eZzQ","ganttTable_HeaderItem":"_WuQ0f"};
221
+ var TASK_PROCESS_OPTIONS = ["設計", "開発", "テスト", "レビュー", "リリース", "その他"];
222
+ var TASK_STATUS_OPTIONS = ["未着手", "進行中", "完了", "保留"];
223
+ var TASK_STATUS_COLORS = {
224
+ 未着手: "#9e9e9e",
225
+ 進行中: "#2196f3",
226
+ 完了: "#4caf50",
227
+ 保留: "#ff9800"
228
+ };
229
+ var TASK_STATUS_BADGE_TEXT = {
230
+ 未着手: "未",
231
+ 進行中: "進",
232
+ 完了: "完",
233
+ 保留: "保"
234
+ };
235
+
236
+ var DEFAULT_VISIBLE_FIELDS = ["name", "start", "end", "process", "assignee", "plannedStart", "plannedEnd", "plannedEffort", "actualEffort", "status"];
237
+ var padTwo = function padTwo(value) {
238
+ return value.toString().padStart(2, "0");
239
+ };
240
+ var formatDate = function formatDate(date) {
241
+ if (!date) return "";
242
+ return date.getFullYear() + "-" + padTwo(date.getMonth() + 1) + "-" + padTwo(date.getDate());
243
+ };
244
+ var parseDateFromInput = function parseDateFromInput(value) {
245
+ if (!value) return undefined;
246
+ var _value$split$map = value.split("-").map(function (v) {
247
+ return parseInt(v, 10);
248
+ }),
249
+ year = _value$split$map[0],
250
+ month = _value$split$map[1],
251
+ day = _value$split$map[2];
252
+ if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(day) || month < 1 || month > 12 || day < 1 || day > 31) {
253
+ return undefined;
254
+ }
255
+ var date = new Date(year, month - 1, day);
256
+ if (Number.isNaN(date.getTime()) || date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {
257
+ return undefined;
258
+ }
259
+ return date;
260
+ };
261
+ var formatEffort = function formatEffort(effort, unit) {
262
+ if (unit === void 0) {
263
+ unit = "MH";
264
+ }
265
+ if (effort === undefined || effort === null || !Number.isFinite(effort) || effort < 0) {
266
+ return "";
267
+ }
268
+ var base = unit === "MD" ? 8 : unit === "MM" ? 160 : 1;
269
+ var converted = effort / base;
270
+ var rounded = unit === "MH" ? effort : Math.round(converted * 10) / 10;
271
+ return "" + rounded + unit;
272
+ };
273
+ var sanitizeEffortInput = function sanitizeEffortInput(value) {
274
+ if (value === "") return undefined;
275
+ var parsed = Number(value);
276
+ if (!Number.isFinite(parsed) || parsed < 0) return undefined;
277
+ return parsed;
278
+ };
279
+ var DEFAULT_TASK_PROCESS = TASK_PROCESS_OPTIONS.includes("その他") ? "その他" : TASK_PROCESS_OPTIONS[0];
280
+ var normalizeProcess = function normalizeProcess(process) {
281
+ return TASK_PROCESS_OPTIONS.includes(process) ? process : DEFAULT_TASK_PROCESS;
282
+ };
283
+ var normalizeStatus = function normalizeStatus(status) {
284
+ return TASK_STATUS_OPTIONS.includes(status) ? status : TASK_STATUS_OPTIONS[0];
285
+ };
286
+ var getStatusColor = function getStatusColor(status) {
287
+ return TASK_STATUS_COLORS[normalizeStatus(status)];
288
+ };
289
+ var getStatusBadgeText = function getStatusBadgeText(status) {
290
+ return TASK_STATUS_BADGE_TEXT[normalizeStatus(status)];
291
+ };
292
+ var resolveVisibleFields = function resolveVisibleFields(visibleFields) {
293
+ return visibleFields && visibleFields.length > 0 ? visibleFields : DEFAULT_VISIBLE_FIELDS;
294
+ };
295
+
296
+ var styles = {"ganttTable":"_3_ygE","ganttTable_Header":"_1nBOt","ganttTable_HeaderSeparator":"_2eZzQ","ganttTable_HeaderItem":"_WuQ0f","ganttTable_HeaderItemDragging":"_Fc5Tl","ganttTable_DragHandle":"_b6dPy","ganttTable_DragHandleDisabled":"_3ZMNU","ganttTable_DragIcon":"_QZHO8","ganttTable_HeaderLabel":"_2ANS-","ganttTable_ResizeHandle":"_OJ-Vg","ganttTable_ResizeHandleActive":"_21P28"};
297
+
298
+ function createCommonjsModule(fn, module) {
299
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
300
+ }
301
+
302
+ var classnames = createCommonjsModule(function (module) {
303
+ /*!
304
+ Copyright (c) 2018 Jed Watson.
305
+ Licensed under the MIT License (MIT), see
306
+ http://jedwatson.github.io/classnames
307
+ */
308
+ /* global define */
309
+
310
+ (function () {
311
+
312
+ var hasOwn = {}.hasOwnProperty;
313
+
314
+ function classNames () {
315
+ var classes = '';
316
+
317
+ for (var i = 0; i < arguments.length; i++) {
318
+ var arg = arguments[i];
319
+ if (arg) {
320
+ classes = appendClass(classes, parseValue(arg));
321
+ }
322
+ }
323
+
324
+ return classes;
325
+ }
326
+
327
+ function parseValue (arg) {
328
+ if (typeof arg === 'string' || typeof arg === 'number') {
329
+ return arg;
330
+ }
331
+
332
+ if (typeof arg !== 'object') {
333
+ return '';
334
+ }
335
+
336
+ if (Array.isArray(arg)) {
337
+ return classNames.apply(null, arg);
338
+ }
339
+
340
+ if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
341
+ return arg.toString();
342
+ }
343
+
344
+ var classes = '';
345
+
346
+ for (var key in arg) {
347
+ if (hasOwn.call(arg, key) && arg[key]) {
348
+ classes = appendClass(classes, key);
349
+ }
350
+ }
351
+
352
+ return classes;
353
+ }
354
+
355
+ function appendClass (value, newClass) {
356
+ if (!newClass) {
357
+ return value;
358
+ }
359
+
360
+ if (value) {
361
+ return value + ' ' + newClass;
362
+ }
363
+
364
+ return value + newClass;
365
+ }
366
+
367
+ if ( module.exports) {
368
+ classNames.default = classNames;
369
+ module.exports = classNames;
370
+ } else {
371
+ window.classNames = classNames;
372
+ }
373
+ }());
374
+ });
375
+
376
+ // A type of promise-like that resolves synchronously and supports only one observer
377
+
378
+ const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator";
379
+
380
+ const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator";
381
+
382
+ // Asynchronously call a function and send errors to recovery continuation
383
+ function _catch(body, recover) {
384
+ try {
385
+ var result = body();
386
+ } catch(e) {
387
+ return recover(e);
388
+ }
389
+ if (result && result.then) {
390
+ return result.then(void 0, recover);
391
+ }
392
+ return result;
393
+ }
394
+
395
+ var styles$1 = {"taskListWrapper":"_3ZbQT","taskListTableRow":"_34SS0","taskListCell":"_3lLk3","overlayEditor":"_3Nu1y","overlayEditorPending":"_2jEdG","overlayEditorError":"_2TWaP","taskListNameWrapper":"_nI1Xw","taskListExpander":"_2QjE6","taskListEmptyExpander":"_2TfEi","taskListInput":"_1bdaa","taskListSelect":"_1u3fW","statusWrapper":"_dRJfs","statusBadge":"_33mea","statusText":"_vpQEz"};
396
+
397
+ var NULL_CHAR_REGEX = new RegExp(String.fromCharCode(0), "g");
398
+ var ALPHANUMERIC_REGEX = /[a-zA-Z0-9]/;
399
+ var resolveOverlayInputType = function resolveOverlayInputType(columnId) {
400
+ switch (columnId) {
401
+ case "start":
402
+ case "end":
403
+ case "plannedStart":
404
+ case "plannedEnd":
405
+ return "date";
406
+ case "plannedEffort":
407
+ case "actualEffort":
408
+ return "number";
409
+ case "process":
410
+ case "status":
411
+ return "select";
412
+ case "name":
413
+ case "assignee":
414
+ default:
415
+ return "text";
416
+ }
417
+ };
418
+ var escapeSelectorValue = function escapeSelectorValue(value) {
419
+ if (typeof CSS !== "undefined" && typeof CSS.escape === "function") {
420
+ return CSS.escape(value);
421
+ }
422
+ var sanitized = value.replace(NULL_CHAR_REGEX, "\uFFFD");
423
+ return Array.from(sanitized).map(function (_char, index) {
424
+ var codePoint = _char.codePointAt(0);
425
+ if (codePoint === undefined) {
426
+ return "";
427
+ }
428
+ if (codePoint >= 0x1 && codePoint <= 0x1f || codePoint === 0x7f || index === 0 && codePoint >= 0x30 && codePoint <= 0x39 || index === 1 && codePoint >= 0x30 && codePoint <= 0x39 && sanitized.charCodeAt(0) === 0x2d) {
429
+ return "\\" + codePoint.toString(16) + " ";
430
+ }
431
+ if (_char === "-" || _char === "_" || ALPHANUMERIC_REGEX.test(_char)) {
432
+ return _char;
433
+ }
434
+ return "\\" + _char;
435
+ }).join("");
436
+ };
437
+ var OverlayEditor = function OverlayEditor(_ref) {
438
+ var editingState = _ref.editingState,
439
+ taskListRef = _ref.taskListRef,
440
+ headerContainerRef = _ref.headerContainerRef,
441
+ bodyContainerRef = _ref.bodyContainerRef,
442
+ onCommit = _ref.onCommit,
443
+ onCancel = _ref.onCancel;
444
+ var _useState = useState(null),
445
+ rect = _useState[0],
446
+ setRect = _useState[1];
447
+ var _useState2 = useState(null),
448
+ targetElement = _useState2[0],
449
+ setTargetElement = _useState2[1];
450
+ var inputRef = useRef(null);
451
+ var defaultValueRef = useRef("");
452
+ var compositionRef = useRef(false);
453
+ var rafIdRef = useRef(null);
454
+ var inputType = useMemo(function () {
455
+ return resolveOverlayInputType(editingState.columnId);
456
+ }, [editingState.columnId]);
457
+ var selectOptions = useMemo(function () {
458
+ if (editingState.columnId === "process") {
459
+ return TASK_PROCESS_OPTIONS;
460
+ }
461
+ if (editingState.columnId === "status") {
462
+ return TASK_STATUS_OPTIONS;
463
+ }
464
+ return [];
465
+ }, [editingState.columnId]);
466
+ var portalRoot = useMemo(function () {
467
+ if (typeof document === "undefined") {
468
+ return null;
469
+ }
470
+ return document.body;
471
+ }, []);
472
+ var resolveDefaultValue = useCallback(function (target) {
473
+ var _target$textContent;
474
+ var input = target.querySelector("input, textarea, select");
475
+ if (input instanceof HTMLInputElement || input instanceof HTMLTextAreaElement) {
476
+ return input.value;
477
+ }
478
+ if (input instanceof HTMLSelectElement) {
479
+ return input.value;
480
+ }
481
+ return ((_target$textContent = target.textContent) != null ? _target$textContent : "").trim();
482
+ }, []);
483
+ var findTargetElement = useCallback(function () {
484
+ if (!taskListRef.current || !editingState.rowId || !editingState.columnId) {
485
+ return null;
486
+ }
487
+ var rowId = escapeSelectorValue(editingState.rowId);
488
+ var columnId = escapeSelectorValue(editingState.columnId);
489
+ return taskListRef.current.querySelector("[data-row-id=\"" + rowId + "\"][data-column-id=\"" + columnId + "\"]");
490
+ }, [editingState.columnId, editingState.rowId, taskListRef]);
491
+ var updateRect = useCallback(function () {
492
+ if (editingState.mode !== "editing") {
493
+ setRect(null);
494
+ setTargetElement(null);
495
+ return;
496
+ }
497
+ var target = findTargetElement();
498
+ if (!target) {
499
+ setRect(null);
500
+ setTargetElement(null);
501
+ onCancel("unmounted");
502
+ return;
503
+ }
504
+ if (targetElement !== target) {
505
+ var nextDefaultValue = resolveDefaultValue(target);
506
+ defaultValueRef.current = nextDefaultValue;
507
+ if (inputRef.current) {
508
+ inputRef.current.value = nextDefaultValue;
509
+ }
510
+ setTargetElement(target);
511
+ }
512
+ var nextRect = target.getBoundingClientRect();
513
+ setRect({
514
+ top: Math.round(nextRect.top),
515
+ left: Math.round(nextRect.left),
516
+ width: Math.round(nextRect.width),
517
+ height: Math.round(nextRect.height)
518
+ });
519
+ }, [editingState.mode, findTargetElement, onCancel, resolveDefaultValue, targetElement]);
520
+ var scheduleRectUpdate = useCallback(function () {
521
+ if (rafIdRef.current !== null) {
522
+ return;
523
+ }
524
+ rafIdRef.current = window.requestAnimationFrame(function () {
525
+ rafIdRef.current = null;
526
+ updateRect();
527
+ });
528
+ }, [updateRect]);
529
+ useEffect(function () {
530
+ if (editingState.mode !== "editing") {
531
+ defaultValueRef.current = "";
532
+ compositionRef.current = false;
533
+ setRect(null);
534
+ setTargetElement(null);
535
+ return;
536
+ }
537
+ scheduleRectUpdate();
538
+ }, [editingState.mode, scheduleRectUpdate]);
539
+ useEffect(function () {
540
+ if (editingState.mode !== "editing") {
541
+ return undefined;
542
+ }
543
+ var handleScroll = function handleScroll() {
544
+ return scheduleRectUpdate();
545
+ };
546
+ var handleResize = function handleResize() {
547
+ return scheduleRectUpdate();
548
+ };
549
+ window.addEventListener("scroll", handleScroll, {
550
+ capture: true,
551
+ passive: true
552
+ });
553
+ window.addEventListener("resize", handleResize, {
554
+ capture: true
555
+ });
556
+ document.addEventListener("scroll", handleScroll, {
557
+ capture: true,
558
+ passive: true
559
+ });
560
+ var scrollTargets = [taskListRef.current, bodyContainerRef === null || bodyContainerRef === void 0 ? void 0 : bodyContainerRef.current, headerContainerRef === null || headerContainerRef === void 0 ? void 0 : headerContainerRef.current].filter(Boolean);
561
+ scrollTargets.forEach(function (element) {
562
+ return element.addEventListener("scroll", handleScroll, {
563
+ capture: true,
564
+ passive: true
565
+ });
566
+ });
567
+ var ResizeObserverConstructor = typeof window !== "undefined" ? window.ResizeObserver : undefined;
568
+ var resizeObserver = ResizeObserverConstructor ? new ResizeObserverConstructor(function () {
569
+ return scheduleRectUpdate();
570
+ }) : null;
571
+ var observedElements = [targetElement, taskListRef.current, bodyContainerRef === null || bodyContainerRef === void 0 ? void 0 : bodyContainerRef.current, headerContainerRef === null || headerContainerRef === void 0 ? void 0 : headerContainerRef.current].filter(Boolean);
572
+ observedElements.forEach(function (element) {
573
+ return resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.observe(element);
574
+ });
575
+ return function () {
576
+ window.removeEventListener("scroll", handleScroll, {
577
+ capture: true
578
+ });
579
+ window.removeEventListener("resize", handleResize, {
580
+ capture: true
581
+ });
582
+ document.removeEventListener("scroll", handleScroll, {
583
+ capture: true
584
+ });
585
+ scrollTargets.forEach(function (element) {
586
+ return element.removeEventListener("scroll", handleScroll, {
587
+ capture: true
588
+ });
589
+ });
590
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
591
+ };
592
+ }, [bodyContainerRef, editingState.mode, headerContainerRef, scheduleRectUpdate, targetElement, taskListRef]);
593
+ useEffect(function () {
594
+ return function () {
595
+ if (rafIdRef.current !== null) {
596
+ window.cancelAnimationFrame(rafIdRef.current);
597
+ rafIdRef.current = null;
598
+ }
599
+ };
600
+ }, []);
601
+ useEffect(function () {
602
+ if (editingState.mode !== "editing") {
603
+ return;
604
+ }
605
+ var input = inputRef.current;
606
+ if (!input) {
607
+ return;
608
+ }
609
+ if (editingState.pending) {
610
+ input.focus();
611
+ return;
612
+ }
613
+ input.focus();
614
+ if (input instanceof HTMLInputElement) {
615
+ input.select();
616
+ }
617
+ }, [editingState.mode, editingState.pending, targetElement]);
618
+ var handleCommit = useCallback(function () {
619
+ try {
620
+ if (editingState.pending) {
621
+ return Promise.resolve();
622
+ }
623
+ var input = inputRef.current;
624
+ if (!input) {
625
+ return Promise.resolve();
626
+ }
627
+ return Promise.resolve(onCommit(input.value, "enter")).then(function () {});
628
+ } catch (e) {
629
+ return Promise.reject(e);
630
+ }
631
+ }, [editingState.pending, onCommit]);
632
+ var handleKeyDown = useCallback(function (event) {
633
+ if (editingState.pending) {
634
+ if (event.key === "Escape" || event.key === "Enter") {
635
+ event.preventDefault();
636
+ }
637
+ return;
638
+ }
639
+ if (event.key === "Enter") {
640
+ event.preventDefault();
641
+ void handleCommit();
642
+ return;
643
+ }
644
+ if (event.key === "Escape") {
645
+ event.preventDefault();
646
+ onCancel("escape");
647
+ }
648
+ }, [editingState.pending, handleCommit, onCancel]);
649
+ var handleBlur = useCallback(function () {
650
+ if (editingState.pending || compositionRef.current) {
651
+ return;
652
+ }
653
+ var input = inputRef.current;
654
+ if (!input) {
655
+ return;
656
+ }
657
+ if (input.value === defaultValueRef.current) {
658
+ onCancel("nochange-blur");
659
+ }
660
+ }, [editingState.pending, onCancel]);
661
+ var handleInput = useCallback(function (event) {
662
+ if (!editingState.pending) {
663
+ return;
664
+ }
665
+ var input = event.currentTarget;
666
+ input.value = defaultValueRef.current;
667
+ }, [editingState.pending]);
668
+ var handleCompositionStart = function handleCompositionStart() {
669
+ compositionRef.current = true;
670
+ };
671
+ var handleCompositionEnd = function handleCompositionEnd() {
672
+ compositionRef.current = false;
673
+ };
674
+ var handleInputElementRef = useCallback(function (element) {
675
+ inputRef.current = element;
676
+ }, []);
677
+ if (editingState.mode !== "editing" || !rect || !portalRoot) {
678
+ return null;
679
+ }
680
+ return createPortal(React.createElement("div", {
681
+ className: styles$1.overlayEditor + " " + (editingState.pending ? styles$1.overlayEditorPending : ""),
682
+ "data-testid": "overlay-editor",
683
+ style: {
684
+ top: rect.top,
685
+ left: rect.left,
686
+ width: rect.width,
687
+ height: rect.height
688
+ }
689
+ }, inputType === "select" ? React.createElement("select", {
690
+ className: styles$1.taskListSelect,
691
+ "data-testid": "overlay-editor-input",
692
+ "aria-label": "\u30BB\u30EB\u7DE8\u96C6",
693
+ defaultValue: defaultValueRef.current,
694
+ style: {
695
+ height: "100%"
696
+ },
697
+ ref: handleInputElementRef,
698
+ disabled: editingState.pending,
699
+ onKeyDown: handleKeyDown,
700
+ onBlur: handleBlur,
701
+ onInput: handleInput,
702
+ onChange: handleInput
703
+ }, selectOptions.map(function (option) {
704
+ return React.createElement("option", {
705
+ key: option,
706
+ value: option
707
+ }, option);
708
+ })) : React.createElement("input", {
709
+ className: styles$1.taskListInput,
710
+ "data-testid": "overlay-editor-input",
711
+ type: inputType,
712
+ "aria-label": "\u30BB\u30EB\u7DE8\u96C6",
713
+ defaultValue: defaultValueRef.current,
714
+ style: {
715
+ height: "100%"
716
+ },
717
+ ref: handleInputElementRef,
718
+ readOnly: editingState.pending,
719
+ onKeyDown: handleKeyDown,
720
+ onBlur: handleBlur,
721
+ onInput: handleInput,
722
+ onChange: handleInput,
723
+ onCompositionStart: handleCompositionStart,
724
+ onCompositionEnd: handleCompositionEnd
725
+ }), editingState.errorMessage && React.createElement("div", {
726
+ className: styles$1.overlayEditorError,
727
+ role: "alert"
728
+ }, editingState.errorMessage)), portalRoot);
729
+ };
730
+
731
+ var TaskListEditingStateContext = React.createContext(null);
732
+ var DEFAULT_MIN_WIDTH = 32;
733
+ var getDefaultWidth = function getDefaultWidth(field, rowWidth) {
734
+ return field === "name" ? 140 : Number.parseInt(rowWidth, 10) || 155;
735
+ };
736
+ var TaskList = function TaskList(_ref) {
737
+ var headerHeight = _ref.headerHeight,
738
+ fontFamily = _ref.fontFamily,
739
+ fontSize = _ref.fontSize,
740
+ rowWidth = _ref.rowWidth,
741
+ rowHeight = _ref.rowHeight,
742
+ scrollY = _ref.scrollY,
743
+ _ref$horizontalScroll = _ref.horizontalScroll,
744
+ horizontalScroll = _ref$horizontalScroll === void 0 ? 0 : _ref$horizontalScroll,
745
+ tasks = _ref.tasks,
746
+ selectedTask = _ref.selectedTask,
747
+ setSelectedTask = _ref.setSelectedTask,
748
+ onExpanderClick = _ref.onExpanderClick,
749
+ ganttHeight = _ref.ganttHeight,
750
+ taskListRef = _ref.taskListRef,
751
+ headerContainerRef = _ref.headerContainerRef,
752
+ bodyContainerRef = _ref.bodyContainerRef,
753
+ horizontalContainerClass = _ref.horizontalContainerClass,
754
+ TaskListHeader = _ref.TaskListHeader,
755
+ TaskListTable = _ref.TaskListTable,
756
+ visibleFields = _ref.visibleFields,
757
+ onUpdateTask = _ref.onUpdateTask,
758
+ onCellCommit = _ref.onCellCommit,
759
+ effortDisplayUnit = _ref.effortDisplayUnit,
760
+ _ref$enableColumnDrag = _ref.enableColumnDrag,
761
+ enableColumnDrag = _ref$enableColumnDrag === void 0 ? true : _ref$enableColumnDrag,
762
+ onHorizontalScroll = _ref.onHorizontalScroll;
763
+ var internalHorizontalRef = useRef(null);
764
+ var internalHeaderRef = useRef(null);
765
+ var horizontalContainerRef = bodyContainerRef != null ? bodyContainerRef : internalHorizontalRef;
766
+ var headerRef = headerContainerRef != null ? headerContainerRef : internalHeaderRef;
767
+ useEffect(function () {
768
+ if (horizontalContainerRef.current) {
769
+ horizontalContainerRef.current.scrollTop = scrollY;
770
+ }
771
+ }, [scrollY, horizontalContainerRef]);
772
+ useEffect(function () {
773
+ if (horizontalContainerRef.current) {
774
+ horizontalContainerRef.current.scrollLeft = horizontalScroll;
775
+ }
776
+ if (headerRef.current) {
777
+ headerRef.current.scrollLeft = horizontalScroll;
778
+ }
779
+ }, [horizontalScroll, horizontalContainerRef, headerRef]);
780
+ var initialColumns = useMemo(function () {
781
+ return visibleFields.map(function (field) {
782
+ return {
783
+ id: field,
784
+ label: field,
785
+ width: getDefaultWidth(field, rowWidth),
786
+ minWidth: DEFAULT_MIN_WIDTH,
787
+ visible: true
788
+ };
789
+ });
790
+ }, [visibleFields, rowWidth]);
791
+ var _useState = useState(initialColumns),
792
+ columnsState = _useState[0],
793
+ setColumnsState = _useState[1];
794
+ useEffect(function () {
795
+ setColumnsState(function (prev) {
796
+ var existingMap = new Map(prev.map(function (column) {
797
+ return [column.id, column];
798
+ }));
799
+ var nextColumns = visibleFields.map(function (field) {
800
+ var existing = existingMap.get(field);
801
+ if (existing) {
802
+ return existing;
803
+ }
804
+ return {
805
+ id: field,
806
+ label: field,
807
+ width: getDefaultWidth(field, rowWidth),
808
+ minWidth: DEFAULT_MIN_WIDTH,
809
+ visible: true
810
+ };
811
+ });
812
+ return nextColumns;
813
+ });
814
+ }, [visibleFields, rowWidth]);
815
+ var visibleColumns = useMemo(function () {
816
+ return columnsState.filter(function (column) {
817
+ return column.visible;
818
+ });
819
+ }, [columnsState]);
820
+ var headerProps = {
821
+ headerHeight: headerHeight,
822
+ fontFamily: fontFamily,
823
+ fontSize: fontSize,
824
+ rowWidth: rowWidth,
825
+ visibleFields: visibleFields,
826
+ columnsState: columnsState,
827
+ setColumnsState: setColumnsState,
828
+ enableColumnDrag: enableColumnDrag
829
+ };
830
+ var selectedTaskId = selectedTask ? selectedTask.id : "";
831
+ var tableProps = {
832
+ rowHeight: rowHeight,
833
+ rowWidth: rowWidth,
834
+ fontFamily: fontFamily,
835
+ fontSize: fontSize,
836
+ tasks: tasks,
837
+ selectedTaskId: selectedTaskId,
838
+ setSelectedTask: setSelectedTask,
839
+ onExpanderClick: onExpanderClick,
840
+ visibleFields: visibleFields,
841
+ onUpdateTask: onUpdateTask,
842
+ onCellCommit: onCellCommit,
843
+ effortDisplayUnit: effortDisplayUnit,
844
+ columnsState: visibleColumns
845
+ };
846
+ var _useState2 = useState({
847
+ mode: "viewing",
848
+ rowId: null,
849
+ columnId: null,
850
+ trigger: null,
851
+ pending: false,
852
+ errorMessage: null
853
+ }),
854
+ editingState = _useState2[0],
855
+ setEditingState = _useState2[1];
856
+ var previousEditingStateRef = useRef(null);
857
+ var closeEditing = useCallback(function () {
858
+ setEditingState(function (prev) {
859
+ if (prev.mode === "viewing") {
860
+ return prev;
861
+ }
862
+ return {
863
+ mode: "viewing",
864
+ rowId: null,
865
+ columnId: null,
866
+ trigger: null,
867
+ pending: false,
868
+ errorMessage: null
869
+ };
870
+ });
871
+ }, []);
872
+ var mountedRef = useRef(true);
873
+ useEffect(function () {
874
+ return function () {
875
+ mountedRef.current = false;
876
+ };
877
+ }, []);
878
+ var cancelEditing = useCallback(function (reason) {
879
+ if (editingState.mode !== "editing") {
880
+ return;
881
+ }
882
+ console.debug("[edit:cancel]", {
883
+ rowId: editingState.rowId,
884
+ columnId: editingState.columnId,
885
+ reason: reason
886
+ });
887
+ closeEditing();
888
+ }, [closeEditing, editingState.columnId, editingState.mode, editingState.rowId]);
889
+ var commitEditing = useCallback(function (value, trigger) {
890
+ try {
891
+ if (!onCellCommit) {
892
+ return Promise.resolve();
893
+ }
894
+ if (editingState.mode !== "editing" || editingState.pending) {
895
+ return Promise.resolve();
896
+ }
897
+ if (!editingState.rowId || !editingState.columnId) {
898
+ return Promise.resolve();
899
+ }
900
+ var rowId = editingState.rowId;
901
+ var columnId = editingState.columnId;
902
+ setEditingState(function (prev) {
903
+ if (prev.mode !== "editing" || prev.pending || prev.rowId !== rowId || prev.columnId !== columnId) {
904
+ return prev;
905
+ }
906
+ return _extends({}, prev, {
907
+ pending: true,
908
+ errorMessage: null
909
+ });
910
+ });
911
+ return Promise.resolve(_catch(function () {
912
+ return Promise.resolve(onCellCommit({
913
+ rowId: rowId,
914
+ columnId: columnId,
915
+ value: value,
916
+ trigger: trigger
917
+ })).then(function () {
918
+ if (!mountedRef.current) {
919
+ return;
920
+ }
921
+ setEditingState(function (prev) {
922
+ if (prev.mode !== "editing" || prev.rowId !== rowId || prev.columnId !== columnId) {
923
+ return prev;
924
+ }
925
+ return {
926
+ mode: "viewing",
927
+ rowId: null,
928
+ columnId: null,
929
+ trigger: null,
930
+ pending: false,
931
+ errorMessage: null
932
+ };
933
+ });
934
+ });
935
+ }, function (error) {
936
+ console.error("[commit:error]", {
937
+ rowId: rowId,
938
+ columnId: columnId,
939
+ trigger: trigger,
940
+ message: error instanceof Error ? error.message : "unknown"
941
+ });
942
+ if (!mountedRef.current) {
943
+ return;
944
+ }
945
+ setEditingState(function (prev) {
946
+ if (prev.mode !== "editing" || prev.rowId !== rowId || prev.columnId !== columnId) {
947
+ return prev;
948
+ }
949
+ return _extends({}, prev, {
950
+ pending: false,
951
+ errorMessage: "Commit failed. Please retry."
952
+ });
953
+ });
954
+ }));
955
+ } catch (e) {
956
+ return Promise.reject(e);
957
+ }
958
+ }, [editingState, onCellCommit]);
959
+ var selectCell = useCallback(function (rowId, columnId) {
960
+ console.debug("[TaskList] select cell", {
961
+ rowId: rowId,
962
+ columnId: columnId
963
+ });
964
+ setEditingState({
965
+ mode: "selected",
966
+ rowId: rowId,
967
+ columnId: columnId,
968
+ trigger: null,
969
+ pending: false,
970
+ errorMessage: null
971
+ });
972
+ }, []);
973
+ var startEditing = useCallback(function (rowId, columnId, trigger) {
974
+ if (editingState.pending) {
975
+ console.debug("[TaskList] ignore enter editing", {
976
+ reason: "pending",
977
+ rowId: rowId,
978
+ columnId: columnId
979
+ });
980
+ return;
981
+ }
982
+ console.debug("[TaskList] enter editing", {
983
+ rowId: rowId,
984
+ columnId: columnId,
985
+ trigger: trigger
986
+ });
987
+ setEditingState({
988
+ mode: "editing",
989
+ rowId: rowId,
990
+ columnId: columnId,
991
+ trigger: trigger,
992
+ pending: false,
993
+ errorMessage: null
994
+ });
995
+ }, [editingState.pending]);
996
+ useEffect(function () {
997
+ var previous = previousEditingStateRef.current;
998
+ if (previous) {
999
+ var buildLogContext = function buildLogContext() {
1000
+ var _editingState$rowId, _editingState$columnI, _editingState$trigger;
1001
+ return {
1002
+ rowId: (_editingState$rowId = editingState.rowId) != null ? _editingState$rowId : previous.rowId,
1003
+ columnId: (_editingState$columnI = editingState.columnId) != null ? _editingState$columnI : previous.columnId,
1004
+ trigger: (_editingState$trigger = editingState.trigger) != null ? _editingState$trigger : previous.trigger
1005
+ };
1006
+ };
1007
+ if (previous.mode !== "editing" && editingState.mode === "editing") {
1008
+ console.log("[edit:start]", buildLogContext());
1009
+ }
1010
+ if (!previous.pending && editingState.pending) {
1011
+ console.log("[commit:start]", buildLogContext());
1012
+ }
1013
+ if (previous.pending && !editingState.pending) {
1014
+ var logContext = buildLogContext();
1015
+ if (editingState.mode === "editing") {
1016
+ console.log("[commit:reject]", logContext);
1017
+ } else {
1018
+ console.log("[commit:resolve]", logContext);
1019
+ }
1020
+ }
1021
+ if (previous.mode === "editing" && editingState.mode !== "editing") {
1022
+ console.log("[edit:end]", _extends({}, buildLogContext(), {
1023
+ to: editingState.mode
1024
+ }));
1025
+ }
1026
+ }
1027
+ previousEditingStateRef.current = editingState;
1028
+ }, [editingState]);
1029
+ var editingContextValue = useMemo(function () {
1030
+ return {
1031
+ editingState: editingState,
1032
+ selectCell: selectCell,
1033
+ startEditing: startEditing
1034
+ };
1035
+ }, [editingState, selectCell, startEditing]);
1036
+ return React.createElement("div", {
1037
+ ref: taskListRef
1038
+ }, React.createElement(OverlayEditor, {
1039
+ editingState: editingState,
1040
+ taskListRef: taskListRef,
1041
+ headerContainerRef: headerRef,
1042
+ bodyContainerRef: horizontalContainerRef,
1043
+ onCommit: commitEditing,
1044
+ onCancel: cancelEditing
1045
+ }), React.createElement("div", {
1046
+ ref: headerRef,
1047
+ onScroll: onHorizontalScroll,
1048
+ style: {
1049
+ width: "100%",
1050
+ overflowX: "hidden"
1051
+ }
1052
+ }, React.createElement(TaskListHeader, Object.assign({}, headerProps))), React.createElement("div", {
1053
+ ref: horizontalContainerRef,
1054
+ className: horizontalContainerClass,
1055
+ style: ganttHeight ? {
1056
+ height: ganttHeight
1057
+ } : {},
1058
+ onScroll: onHorizontalScroll
1059
+ }, React.createElement(TaskListEditingStateContext.Provider, {
1060
+ value: editingContextValue
1061
+ }, React.createElement(TaskListTable, Object.assign({}, tableProps)))));
1062
+ };
1063
+
1064
+ var TaskListHeaderDefault = function TaskListHeaderDefault(_ref) {
1065
+ var headerHeight = _ref.headerHeight,
1066
+ fontFamily = _ref.fontFamily,
1067
+ fontSize = _ref.fontSize,
1068
+ rowWidth = _ref.rowWidth,
1069
+ visibleFields = _ref.visibleFields,
1070
+ columnsState = _ref.columnsState,
1071
+ setColumnsState = _ref.setColumnsState,
1072
+ _ref$enableColumnDrag = _ref.enableColumnDrag,
1073
+ enableColumnDrag = _ref$enableColumnDrag === void 0 ? true : _ref$enableColumnDrag;
1074
+ var labels = {
1075
+ name: "タスク名",
1076
+ start: "開始日",
1077
+ end: "終了日",
1078
+ process: "工程",
1079
+ assignee: "担当者",
1080
+ plannedStart: "予定開始",
1081
+ plannedEnd: "予定終了",
1082
+ plannedEffort: "予定工数",
1083
+ actualEffort: "実績工数",
1084
+ status: "ステータス"
1085
+ };
1086
+ var fallbackColumns = resolveVisibleFields(visibleFields).map(function (field) {
1087
+ return {
1088
+ id: field,
1089
+ label: labels[field],
1090
+ width: getDefaultWidth(field, rowWidth),
1091
+ minWidth: DEFAULT_MIN_WIDTH,
1092
+ visible: true
1093
+ };
1094
+ });
1095
+ var resolvedColumns = useMemo(function () {
1096
+ return (columnsState || fallbackColumns).filter(function (column) {
1097
+ return column.visible !== false;
1098
+ });
1099
+ }, [columnsState, fallbackColumns]);
1100
+ var sensors = useSensors(useSensor(PointerSensor));
1101
+ var _useState = useState(null),
1102
+ resizingId = _useState[0],
1103
+ setResizingId = _useState[1];
1104
+ var onDragEnd = function onDragEnd(event) {
1105
+ if (!setColumnsState || !enableColumnDrag) return;
1106
+ var active = event.active,
1107
+ over = event.over;
1108
+ if (!over || active.id === over.id) return;
1109
+ setColumnsState(function (prev) {
1110
+ var visible = prev.filter(function (column) {
1111
+ return column.visible !== false;
1112
+ });
1113
+ var oldIndex = visible.findIndex(function (column) {
1114
+ return column.id === active.id;
1115
+ });
1116
+ var newIndex = visible.findIndex(function (column) {
1117
+ return column.id === over.id;
1118
+ });
1119
+ if (oldIndex < 0 || newIndex < 0) return prev;
1120
+ var moved = arrayMove(visible, oldIndex, newIndex);
1121
+ var idx = 0;
1122
+ return prev.map(function (column) {
1123
+ return column.visible !== false ? moved[idx++] : column;
1124
+ });
1125
+ });
1126
+ };
1127
+ var headerContent = React.createElement("div", {
1128
+ className: styles.ganttTable,
1129
+ style: {
1130
+ fontFamily: fontFamily,
1131
+ fontSize: fontSize
1132
+ }
1133
+ }, React.createElement("div", {
1134
+ className: styles.ganttTable_Header,
1135
+ style: {
1136
+ height: headerHeight - 2
1137
+ }
1138
+ }, resolvedColumns.map(function (column, index) {
1139
+ return React.createElement(React.Fragment, {
1140
+ key: column.id
1141
+ }, React.createElement(SortableHeaderItem, {
1142
+ column: column,
1143
+ labels: labels,
1144
+ setColumnsState: setColumnsState,
1145
+ enableDrag: enableColumnDrag && !!setColumnsState,
1146
+ setResizingId: setResizingId,
1147
+ isResizing: resizingId === column.id
1148
+ }), index !== resolvedColumns.length - 1 && React.createElement("div", {
1149
+ className: styles.ganttTable_HeaderSeparator,
1150
+ style: {
1151
+ height: headerHeight * 0.5,
1152
+ marginTop: headerHeight * 0.2
1153
+ }
1154
+ }));
1155
+ })));
1156
+ return React.createElement(DndContext, {
1157
+ sensors: sensors,
1158
+ onDragEnd: enableColumnDrag ? onDragEnd : undefined
1159
+ }, React.createElement(SortableContext, {
1160
+ items: resolvedColumns.map(function (column) {
1161
+ return column.id;
1162
+ }),
1163
+ strategy: horizontalListSortingStrategy
1164
+ }, headerContent));
1165
+ };
1166
+ var SortableHeaderItem = function SortableHeaderItem(_ref2) {
1167
+ var _classNames, _classNames2, _classNames3;
1168
+ var column = _ref2.column,
1169
+ labels = _ref2.labels,
1170
+ setColumnsState = _ref2.setColumnsState,
1171
+ enableDrag = _ref2.enableDrag,
1172
+ setResizingId = _ref2.setResizingId,
1173
+ isResizing = _ref2.isResizing;
1174
+ var _useSortable = useSortable({
1175
+ id: column.id,
1176
+ disabled: !enableDrag
1177
+ }),
1178
+ attributes = _useSortable.attributes,
1179
+ listeners = _useSortable.listeners,
1180
+ setNodeRef = _useSortable.setNodeRef,
1181
+ transform = _useSortable.transform,
1182
+ transition = _useSortable.transition,
1183
+ isDragging = _useSortable.isDragging;
1184
+ var startXRef = useRef(null);
1185
+ var startWidthRef = useRef(null);
1186
+ var moveHandlerRef = useRef(null);
1187
+ var upHandlerRef = useRef(null);
1188
+ useEffect(function () {
1189
+ return function () {
1190
+ if (moveHandlerRef.current) {
1191
+ document.removeEventListener("mousemove", moveHandlerRef.current);
1192
+ moveHandlerRef.current = null;
1193
+ }
1194
+ if (upHandlerRef.current) {
1195
+ document.removeEventListener("mouseup", upHandlerRef.current);
1196
+ upHandlerRef.current = null;
1197
+ }
1198
+ };
1199
+ }, []);
1200
+ var style = {
1201
+ minWidth: column.width,
1202
+ maxWidth: column.width,
1203
+ transform: CSS$1.Transform.toString(transform),
1204
+ transition: transition
1205
+ };
1206
+ var onMouseDownResize = function onMouseDownResize(event) {
1207
+ event.stopPropagation();
1208
+ event.preventDefault();
1209
+ startXRef.current = event.clientX;
1210
+ startWidthRef.current = column.width;
1211
+ setResizingId(column.id);
1212
+ var handleMouseMove = function handleMouseMove(moveEvent) {
1213
+ if (startXRef.current == null || startWidthRef.current == null) return;
1214
+ var delta = moveEvent.clientX - startXRef.current;
1215
+ var nextWidth = Math.max(column.minWidth, startWidthRef.current + delta);
1216
+ setColumnsState === null || setColumnsState === void 0 ? void 0 : setColumnsState(function (prev) {
1217
+ return prev.map(function (item) {
1218
+ return item.id === column.id ? _extends({}, item, {
1219
+ width: nextWidth
1220
+ }) : item;
1221
+ });
1222
+ });
1223
+ };
1224
+ var handleMouseUp = function handleMouseUp() {
1225
+ startXRef.current = null;
1226
+ startWidthRef.current = null;
1227
+ setResizingId(null);
1228
+ if (moveHandlerRef.current) {
1229
+ document.removeEventListener("mousemove", moveHandlerRef.current);
1230
+ moveHandlerRef.current = null;
1231
+ }
1232
+ if (upHandlerRef.current) {
1233
+ document.removeEventListener("mouseup", upHandlerRef.current);
1234
+ upHandlerRef.current = null;
1235
+ }
1236
+ };
1237
+ moveHandlerRef.current = handleMouseMove;
1238
+ upHandlerRef.current = handleMouseUp;
1239
+ document.addEventListener("mousemove", handleMouseMove);
1240
+ document.addEventListener("mouseup", handleMouseUp);
1241
+ };
1242
+ return React.createElement("div", {
1243
+ ref: setNodeRef,
1244
+ className: classnames(styles.ganttTable_HeaderItem, (_classNames = {}, _classNames[styles.ganttTable_HeaderItemDragging] = isDragging, _classNames)),
1245
+ style: style
1246
+ }, React.createElement("div", Object.assign({
1247
+ className: classnames(styles.ganttTable_DragHandle, (_classNames2 = {}, _classNames2[styles.ganttTable_DragHandleDisabled] = !enableDrag, _classNames2))
1248
+ }, attributes, listeners, {
1249
+ "aria-label": "Drag column",
1250
+ onMouseDown: function onMouseDown(event) {
1251
+ return event.stopPropagation();
1252
+ }
1253
+ }), React.createElement("span", {
1254
+ className: styles.ganttTable_DragIcon,
1255
+ "aria-hidden": "true"
1256
+ }, "\u22EE\u22EE")), React.createElement("div", {
1257
+ className: styles.ganttTable_HeaderLabel
1258
+ }, labels[column.id]), React.createElement("div", {
1259
+ className: classnames(styles.ganttTable_ResizeHandle, (_classNames3 = {}, _classNames3[styles.ganttTable_ResizeHandleActive] = isResizing, _classNames3)),
1260
+ onMouseDown: onMouseDownResize,
1261
+ "aria-label": "Resize column",
1262
+ role: "separator",
1263
+ "aria-orientation": "vertical"
1264
+ }));
1265
+ };
268
1266
 
269
- var TaskListHeaderDefault = function TaskListHeaderDefault(_ref) {
270
- var headerHeight = _ref.headerHeight,
271
- fontFamily = _ref.fontFamily,
272
- fontSize = _ref.fontSize,
273
- rowWidth = _ref.rowWidth;
274
- return React.createElement("div", {
275
- className: styles.ganttTable,
276
- style: {
277
- fontFamily: fontFamily,
278
- fontSize: fontSize
1267
+ var TaskListTableDefault = function TaskListTableDefault(_ref) {
1268
+ var _columnsState$filter;
1269
+ var rowHeight = _ref.rowHeight,
1270
+ rowWidth = _ref.rowWidth,
1271
+ tasks = _ref.tasks,
1272
+ fontFamily = _ref.fontFamily,
1273
+ fontSize = _ref.fontSize,
1274
+ onExpanderClick = _ref.onExpanderClick,
1275
+ visibleFields = _ref.visibleFields,
1276
+ onCellCommit = _ref.onCellCommit,
1277
+ effortDisplayUnit = _ref.effortDisplayUnit,
1278
+ columnsState = _ref.columnsState;
1279
+ var columns = (_columnsState$filter = columnsState === null || columnsState === void 0 ? void 0 : columnsState.filter(function (column) {
1280
+ return column.visible !== false;
1281
+ })) != null ? _columnsState$filter : resolveVisibleFields(visibleFields).map(function (field) {
1282
+ return {
1283
+ id: field,
1284
+ width: getDefaultWidth(field, rowWidth)
1285
+ };
1286
+ });
1287
+ var isCommitEnabled = !!onCellCommit;
1288
+ var allowEditing = isCommitEnabled;
1289
+ var editingContext = React.useContext(TaskListEditingStateContext);
1290
+ var editingState = editingContext === null || editingContext === void 0 ? void 0 : editingContext.editingState;
1291
+ var editableFields = new Set(["name", "start", "end", "process", "assignee", "plannedStart", "plannedEnd", "plannedEffort", "actualEffort", "status"]);
1292
+ var columnIds = columns.map(function (column) {
1293
+ return typeof column === "string" ? column : column.id;
1294
+ });
1295
+ var resolveColumnId = function resolveColumnId(column) {
1296
+ return typeof column === "string" ? column : column.id;
1297
+ };
1298
+ var isCellEditable = function isCellEditable(task, columnId) {
1299
+ var tableEditable = allowEditing;
1300
+ var columnEditable = editableFields.has(columnId);
1301
+ var rowEditable = task.isDisabled !== true;
1302
+ var cellEditableByRule = true;
1303
+ return tableEditable && columnEditable && rowEditable && cellEditableByRule;
1304
+ };
1305
+ var selectCell = editingContext === null || editingContext === void 0 ? void 0 : editingContext.selectCell;
1306
+ var startEditing = editingContext === null || editingContext === void 0 ? void 0 : editingContext.startEditing;
1307
+ var findCellPosition = function findCellPosition() {
1308
+ if (!editingState || editingState.mode === "viewing") {
1309
+ return null;
1310
+ }
1311
+ var rowIndex = tasks.findIndex(function (task) {
1312
+ return task.id === editingState.rowId;
1313
+ });
1314
+ var columnIndex = columnIds.indexOf(editingState.columnId);
1315
+ if (rowIndex < 0 || columnIndex < 0) {
1316
+ return null;
279
1317
  }
280
- }, React.createElement("div", {
281
- className: styles.ganttTable_Header,
282
- style: {
283
- height: headerHeight - 2
1318
+ return {
1319
+ rowIndex: rowIndex,
1320
+ columnIndex: columnIndex
1321
+ };
1322
+ };
1323
+ var resolveSelectedCell = function resolveSelectedCell() {
1324
+ if (!editingState || editingState.mode !== "selected") {
1325
+ return null;
284
1326
  }
285
- }, React.createElement("div", {
286
- className: styles.ganttTable_HeaderItem,
287
- style: {
288
- minWidth: rowWidth
1327
+ var columnId = editingState.columnId;
1328
+ if (!columnId || !columnIds.includes(columnId)) {
1329
+ return null;
289
1330
  }
290
- }, "\xA0Name"), React.createElement("div", {
291
- className: styles.ganttTable_HeaderSeparator,
292
- style: {
293
- height: headerHeight * 0.5,
294
- marginTop: headerHeight * 0.2
1331
+ var task = tasks.find(function (row) {
1332
+ return row.id === editingState.rowId;
1333
+ });
1334
+ if (!task) {
1335
+ return null;
295
1336
  }
296
- }), React.createElement("div", {
297
- className: styles.ganttTable_HeaderItem,
298
- style: {
299
- minWidth: rowWidth
1337
+ return {
1338
+ task: task,
1339
+ columnId: columnId
1340
+ };
1341
+ };
1342
+ var moveSelection = function moveSelection(direction) {
1343
+ if (!selectCell || tasks.length === 0 || columnIds.length === 0) {
1344
+ return;
1345
+ }
1346
+ var position = findCellPosition();
1347
+ if (!position) {
1348
+ var firstColumn = columnIds[0];
1349
+ selectCell(tasks[0].id, firstColumn);
1350
+ return;
1351
+ }
1352
+ var rowIndex = position.rowIndex,
1353
+ columnIndex = position.columnIndex;
1354
+ switch (direction) {
1355
+ case "up":
1356
+ rowIndex = Math.max(0, rowIndex - 1);
1357
+ break;
1358
+ case "down":
1359
+ rowIndex = Math.min(tasks.length - 1, rowIndex + 1);
1360
+ break;
1361
+ case "left":
1362
+ columnIndex = Math.max(0, columnIndex - 1);
1363
+ break;
1364
+ case "right":
1365
+ columnIndex = Math.min(columnIds.length - 1, columnIndex + 1);
1366
+ break;
300
1367
  }
301
- }, "\xA0From"), React.createElement("div", {
302
- className: styles.ganttTable_HeaderSeparator,
303
- style: {
304
- height: headerHeight * 0.5,
305
- marginTop: headerHeight * 0.25
1368
+ selectCell(tasks[rowIndex].id, columnIds[columnIndex]);
1369
+ };
1370
+ var shouldIgnoreKeyEvent = function shouldIgnoreKeyEvent(target) {
1371
+ if (!(target instanceof HTMLElement)) {
1372
+ return false;
306
1373
  }
307
- }), React.createElement("div", {
308
- className: styles.ganttTable_HeaderItem,
309
- style: {
310
- minWidth: rowWidth
1374
+ if (target.isContentEditable) {
1375
+ return true;
311
1376
  }
312
- }, "\xA0To")));
313
- };
314
-
315
- var styles$1 = {"taskListWrapper":"_3ZbQT","taskListTableRow":"_34SS0","taskListCell":"_3lLk3","taskListNameWrapper":"_nI1Xw","taskListExpander":"_2QjE6","taskListEmptyExpander":"_2TfEi"};
316
-
317
- var localeDateStringCache = {};
318
-
319
- var toLocaleDateStringFactory = function toLocaleDateStringFactory(locale) {
320
- return function (date, dateTimeOptions) {
321
- var key = date.toString();
322
- var lds = localeDateStringCache[key];
323
-
324
- if (!lds) {
325
- lds = date.toLocaleDateString(locale, dateTimeOptions);
326
- localeDateStringCache[key] = lds;
1377
+ var tagName = target.tagName;
1378
+ return tagName === "INPUT" || tagName === "TEXTAREA" || tagName === "SELECT";
1379
+ };
1380
+ var handleWrapperKeyDown = function handleWrapperKeyDown(event) {
1381
+ if (event.defaultPrevented) {
1382
+ return;
1383
+ }
1384
+ if (shouldIgnoreKeyEvent(event.target)) {
1385
+ return;
1386
+ }
1387
+ if ((editingState === null || editingState === void 0 ? void 0 : editingState.mode) === "editing") {
1388
+ return;
1389
+ }
1390
+ switch (event.key) {
1391
+ case "ArrowUp":
1392
+ event.preventDefault();
1393
+ moveSelection("up");
1394
+ return;
1395
+ case "ArrowDown":
1396
+ event.preventDefault();
1397
+ moveSelection("down");
1398
+ return;
1399
+ case "ArrowLeft":
1400
+ event.preventDefault();
1401
+ moveSelection("left");
1402
+ return;
1403
+ case "ArrowRight":
1404
+ event.preventDefault();
1405
+ moveSelection("right");
1406
+ return;
1407
+ }
1408
+ if ((editingState === null || editingState === void 0 ? void 0 : editingState.mode) !== "selected") {
1409
+ return;
1410
+ }
1411
+ var selectedCell = resolveSelectedCell();
1412
+ if (!selectedCell || !startEditing) {
1413
+ return;
1414
+ }
1415
+ if (event.key === "Enter") {
1416
+ if (!isCellEditable(selectedCell.task, selectedCell.columnId)) {
1417
+ console.debug("[TaskList] ignore enter editing", {
1418
+ reason: "not-editable",
1419
+ rowId: selectedCell.task.id,
1420
+ columnId: selectedCell.columnId
1421
+ });
1422
+ return;
1423
+ }
1424
+ event.preventDefault();
1425
+ startEditing(selectedCell.task.id, selectedCell.columnId, "enter");
1426
+ return;
1427
+ }
1428
+ if (event.key === "Escape") {
1429
+ return;
1430
+ }
1431
+ var isPrintableKey = event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey;
1432
+ if (isPrintableKey) {
1433
+ if (!isCellEditable(selectedCell.task, selectedCell.columnId)) {
1434
+ console.debug("[TaskList] ignore enter editing", {
1435
+ reason: "not-editable",
1436
+ rowId: selectedCell.task.id,
1437
+ columnId: selectedCell.columnId
1438
+ });
1439
+ return;
1440
+ }
1441
+ event.preventDefault();
1442
+ startEditing(selectedCell.task.id, selectedCell.columnId, "key");
327
1443
  }
328
-
329
- return lds;
330
1444
  };
331
- };
332
-
333
- var dateTimeOptions = {
334
- weekday: "short",
335
- year: "numeric",
336
- month: "long",
337
- day: "numeric"
338
- };
339
- var TaskListTableDefault = function TaskListTableDefault(_ref) {
340
- var rowHeight = _ref.rowHeight,
341
- rowWidth = _ref.rowWidth,
342
- tasks = _ref.tasks,
343
- fontFamily = _ref.fontFamily,
344
- fontSize = _ref.fontSize,
345
- locale = _ref.locale,
346
- onExpanderClick = _ref.onExpanderClick;
347
- var toLocaleDateString = useMemo(function () {
348
- return toLocaleDateStringFactory(locale);
349
- }, [locale]);
350
1445
  return React.createElement("div", {
351
1446
  className: styles$1.taskListWrapper,
1447
+ tabIndex: 0,
1448
+ onKeyDown: handleWrapperKeyDown,
352
1449
  style: {
353
1450
  fontFamily: fontFamily,
354
1451
  fontSize: fontSize
355
1452
  }
356
1453
  }, tasks.map(function (t) {
357
1454
  var expanderSymbol = "";
358
-
359
1455
  if (t.hideChildren === false) {
360
1456
  expanderSymbol = "▼";
361
1457
  } else if (t.hideChildren === true) {
362
1458
  expanderSymbol = "▶";
363
1459
  }
364
-
1460
+ var renderCell = function renderCell(field) {
1461
+ switch (field) {
1462
+ case "name":
1463
+ return React.createElement("div", {
1464
+ className: styles$1.taskListNameWrapper
1465
+ }, React.createElement("div", {
1466
+ className: expanderSymbol ? styles$1.taskListExpander : styles$1.taskListEmptyExpander,
1467
+ onClick: function onClick() {
1468
+ return onExpanderClick(t);
1469
+ }
1470
+ }, expanderSymbol), React.createElement("div", null, t.name));
1471
+ case "start":
1472
+ return React.createElement("span", null, formatDate(t.start));
1473
+ case "end":
1474
+ return React.createElement("span", null, formatDate(t.end));
1475
+ case "process":
1476
+ return React.createElement("span", null, normalizeProcess(t.process));
1477
+ case "assignee":
1478
+ return React.createElement("span", null, t.assignee || "");
1479
+ case "plannedStart":
1480
+ return React.createElement("span", null, formatDate(t.plannedStart));
1481
+ case "plannedEnd":
1482
+ return React.createElement("span", null, formatDate(t.plannedEnd));
1483
+ case "plannedEffort":
1484
+ return React.createElement("span", null, formatEffort(t.plannedEffort, effortDisplayUnit));
1485
+ case "actualEffort":
1486
+ return React.createElement("span", null, formatEffort(t.actualEffort, effortDisplayUnit));
1487
+ case "status":
1488
+ {
1489
+ var statusValue = normalizeStatus(t.status);
1490
+ return React.createElement("div", {
1491
+ className: styles$1.statusWrapper
1492
+ }, React.createElement("span", {
1493
+ className: styles$1.statusBadge,
1494
+ style: {
1495
+ backgroundColor: getStatusColor(statusValue)
1496
+ }
1497
+ }, getStatusBadgeText(statusValue)), React.createElement("span", {
1498
+ className: styles$1.statusText
1499
+ }, statusValue));
1500
+ }
1501
+ default:
1502
+ return null;
1503
+ }
1504
+ };
365
1505
  return React.createElement("div", {
366
1506
  className: styles$1.taskListTableRow,
367
1507
  style: {
368
1508
  height: rowHeight
369
1509
  },
370
1510
  key: t.id + "row"
371
- }, React.createElement("div", {
372
- className: styles$1.taskListCell,
373
- style: {
374
- minWidth: rowWidth,
375
- maxWidth: rowWidth
376
- },
377
- title: t.name
378
- }, React.createElement("div", {
379
- className: styles$1.taskListNameWrapper
380
- }, React.createElement("div", {
381
- className: expanderSymbol ? styles$1.taskListExpander : styles$1.taskListEmptyExpander,
382
- onClick: function onClick() {
383
- return onExpanderClick(t);
384
- }
385
- }, expanderSymbol), React.createElement("div", null, t.name))), React.createElement("div", {
386
- className: styles$1.taskListCell,
387
- style: {
388
- minWidth: rowWidth,
389
- maxWidth: rowWidth
390
- }
391
- }, "\xA0", toLocaleDateString(t.start, dateTimeOptions)), React.createElement("div", {
392
- className: styles$1.taskListCell,
393
- style: {
394
- minWidth: rowWidth,
395
- maxWidth: rowWidth
396
- }
397
- }, "\xA0", toLocaleDateString(t.end, dateTimeOptions)));
1511
+ }, columns.map(function (column) {
1512
+ var columnId = resolveColumnId(column);
1513
+ var isSelected = (editingState === null || editingState === void 0 ? void 0 : editingState.mode) !== "viewing" && (editingState === null || editingState === void 0 ? void 0 : editingState.rowId) === t.id && (editingState === null || editingState === void 0 ? void 0 : editingState.columnId) === columnId;
1514
+ var handleCellClick = function handleCellClick(event) {
1515
+ if ((editingState === null || editingState === void 0 ? void 0 : editingState.mode) === "editing") {
1516
+ var pending = editingState.pending;
1517
+ console.log("[edit:select]", {
1518
+ rowId: t.id,
1519
+ columnId: columnId,
1520
+ pending: pending
1521
+ });
1522
+ if (pending) {
1523
+ return;
1524
+ }
1525
+ }
1526
+ if (selectCell) {
1527
+ selectCell(t.id, columnId);
1528
+ }
1529
+ event.currentTarget.focus();
1530
+ };
1531
+ var handleCellDoubleClick = function handleCellDoubleClick() {
1532
+ if (!startEditing) {
1533
+ return;
1534
+ }
1535
+ if (!isCellEditable(t, columnId)) {
1536
+ console.debug("[TaskList] ignore enter editing", {
1537
+ reason: "not-editable",
1538
+ rowId: t.id,
1539
+ columnId: columnId
1540
+ });
1541
+ return;
1542
+ }
1543
+ startEditing(t.id, columnId, "dblclick");
1544
+ };
1545
+ var handleCellKeyDown = function handleCellKeyDown(event) {
1546
+ if (shouldIgnoreKeyEvent(event.target)) {
1547
+ return;
1548
+ }
1549
+ if (!isSelected || (editingState === null || editingState === void 0 ? void 0 : editingState.mode) !== "selected") {
1550
+ return;
1551
+ }
1552
+ if (event.key === "Enter") {
1553
+ if (!startEditing) {
1554
+ return;
1555
+ }
1556
+ if (!isCellEditable(t, columnId)) {
1557
+ console.debug("[TaskList] ignore enter editing", {
1558
+ reason: "not-editable",
1559
+ rowId: t.id,
1560
+ columnId: columnId
1561
+ });
1562
+ return;
1563
+ }
1564
+ event.preventDefault();
1565
+ startEditing(t.id, columnId, "enter");
1566
+ return;
1567
+ }
1568
+ if (event.key === "Escape") {
1569
+ return;
1570
+ }
1571
+ var isPrintableKey = event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey;
1572
+ if (isPrintableKey) {
1573
+ if (!startEditing) {
1574
+ return;
1575
+ }
1576
+ if (!isCellEditable(t, columnId)) {
1577
+ console.debug("[TaskList] ignore enter editing", {
1578
+ reason: "not-editable",
1579
+ rowId: t.id,
1580
+ columnId: columnId
1581
+ });
1582
+ return;
1583
+ }
1584
+ event.preventDefault();
1585
+ startEditing(t.id, columnId, "key");
1586
+ }
1587
+ };
1588
+ return React.createElement("div", {
1589
+ key: t.id + "-" + columnId,
1590
+ className: styles$1.taskListCell,
1591
+ "data-row-id": t.id,
1592
+ "data-column-id": columnId,
1593
+ "aria-selected": isSelected || undefined,
1594
+ tabIndex: isSelected ? 0 : -1,
1595
+ onClick: handleCellClick,
1596
+ onDoubleClick: handleCellDoubleClick,
1597
+ onKeyDown: handleCellKeyDown,
1598
+ style: {
1599
+ minWidth: typeof column === "string" ? rowWidth : column.width + "px",
1600
+ maxWidth: typeof column === "string" ? rowWidth : column.width + "px"
1601
+ },
1602
+ title: columnId === "name" ? t.name : undefined
1603
+ }, renderCell(columnId));
1604
+ }));
398
1605
  }));
399
1606
  };
400
1607
 
401
- var styles$2 = {"tooltipDefaultContainer":"_3T42e","tooltipDefaultContainerParagraph":"_29NTg","tooltipDetailsContainer":"_25P-K","tooltipDetailsContainerHidden":"_3gVAq"};
1608
+ var styles$2 = {"tooltipDefaultContainer":"_3T42e","tooltipDefaultContainerParagraph":"_29NTg","tooltipTitle":"_OlR7X","tooltipName":"_1LUF2","tooltipDate":"_18-nf","tooltipRow":"_2rDF0","tooltipLabel":"_2vh4d","tooltipValue":"_2HKiU","tooltipStatus":"_2Vw2t","tooltipStatusText":"_33_nk","tooltipDetailsContainer":"_25P-K","tooltipDetailsContainerHidden":"_3gVAq"};
402
1609
 
403
1610
  var Tooltip = function Tooltip(_ref) {
404
1611
  var task = _ref.task,
405
- rowHeight = _ref.rowHeight,
406
- rtl = _ref.rtl,
407
- svgContainerHeight = _ref.svgContainerHeight,
408
- svgContainerWidth = _ref.svgContainerWidth,
409
- scrollX = _ref.scrollX,
410
- scrollY = _ref.scrollY,
411
- arrowIndent = _ref.arrowIndent,
412
- fontSize = _ref.fontSize,
413
- fontFamily = _ref.fontFamily,
414
- headerHeight = _ref.headerHeight,
415
- taskListWidth = _ref.taskListWidth,
416
- TooltipContent = _ref.TooltipContent;
1612
+ rowHeight = _ref.rowHeight,
1613
+ rtl = _ref.rtl,
1614
+ svgContainerHeight = _ref.svgContainerHeight,
1615
+ svgContainerWidth = _ref.svgContainerWidth,
1616
+ scrollX = _ref.scrollX,
1617
+ scrollY = _ref.scrollY,
1618
+ arrowIndent = _ref.arrowIndent,
1619
+ fontSize = _ref.fontSize,
1620
+ fontFamily = _ref.fontFamily,
1621
+ headerHeight = _ref.headerHeight,
1622
+ taskListWidth = _ref.taskListWidth,
1623
+ TooltipContent = _ref.TooltipContent,
1624
+ effortDisplayUnit = _ref.effortDisplayUnit;
417
1625
  var tooltipRef = useRef(null);
418
-
419
1626
  var _useState = useState(0),
420
- relatedY = _useState[0],
421
- setRelatedY = _useState[1];
422
-
1627
+ relatedY = _useState[0],
1628
+ setRelatedY = _useState[1];
423
1629
  var _useState2 = useState(0),
424
- relatedX = _useState2[0],
425
- setRelatedX = _useState2[1];
426
-
1630
+ relatedX = _useState2[0],
1631
+ setRelatedX = _useState2[1];
427
1632
  useEffect(function () {
428
1633
  if (tooltipRef.current) {
429
1634
  var tooltipHeight = tooltipRef.current.offsetHeight * 1.1;
430
1635
  var tooltipWidth = tooltipRef.current.offsetWidth * 1.1;
431
1636
  var newRelatedY = task.index * rowHeight - scrollY + headerHeight;
432
1637
  var newRelatedX;
433
-
434
1638
  if (rtl) {
435
1639
  newRelatedX = task.x1 - arrowIndent * 1.5 - tooltipWidth - scrollX;
436
-
437
1640
  if (newRelatedX < 0) {
438
1641
  newRelatedX = task.x2 + arrowIndent * 1.5 - scrollX;
439
1642
  }
440
-
441
1643
  var tooltipLeftmostPoint = tooltipWidth + newRelatedX;
442
-
443
1644
  if (tooltipLeftmostPoint > svgContainerWidth) {
444
1645
  newRelatedX = svgContainerWidth - tooltipWidth;
445
1646
  newRelatedY += rowHeight;
446
1647
  }
447
1648
  } else {
448
1649
  newRelatedX = task.x2 + arrowIndent * 1.5 + taskListWidth - scrollX;
449
-
450
1650
  var _tooltipLeftmostPoint = tooltipWidth + newRelatedX;
451
-
452
1651
  var fullChartWidth = taskListWidth + svgContainerWidth;
453
-
454
1652
  if (_tooltipLeftmostPoint > fullChartWidth) {
455
1653
  newRelatedX = task.x1 + taskListWidth - arrowIndent * 1.5 - scrollX - tooltipWidth;
456
1654
  }
457
-
458
1655
  if (newRelatedX < taskListWidth) {
459
1656
  newRelatedX = svgContainerWidth + taskListWidth - tooltipWidth;
460
1657
  newRelatedY += rowHeight;
461
1658
  }
462
1659
  }
463
-
464
1660
  var tooltipLowerPoint = tooltipHeight + newRelatedY - scrollY;
465
-
466
1661
  if (tooltipLowerPoint > svgContainerHeight - scrollY) {
467
1662
  newRelatedY = svgContainerHeight - tooltipHeight;
468
1663
  }
469
-
470
1664
  setRelatedY(newRelatedY);
471
1665
  setRelatedX(newRelatedX);
472
1666
  }
@@ -481,40 +1675,92 @@ var Tooltip = function Tooltip(_ref) {
481
1675
  }, React.createElement(TooltipContent, {
482
1676
  task: task,
483
1677
  fontSize: fontSize,
484
- fontFamily: fontFamily
1678
+ fontFamily: fontFamily,
1679
+ effortDisplayUnit: effortDisplayUnit
485
1680
  }));
486
1681
  };
487
1682
  var StandardTooltipContent = function StandardTooltipContent(_ref2) {
488
1683
  var task = _ref2.task,
489
- fontSize = _ref2.fontSize,
490
- fontFamily = _ref2.fontFamily;
1684
+ fontSize = _ref2.fontSize,
1685
+ fontFamily = _ref2.fontFamily,
1686
+ _ref2$effortDisplayUn = _ref2.effortDisplayUnit,
1687
+ effortDisplayUnit = _ref2$effortDisplayUn === void 0 ? "MH" : _ref2$effortDisplayUn;
491
1688
  var style = {
492
1689
  fontSize: fontSize,
493
1690
  fontFamily: fontFamily
494
1691
  };
1692
+ var normalizedStatus = normalizeStatus(task.status);
1693
+ var normalizedProcess = normalizeProcess(task.process);
1694
+ var dateRange = formatDate(task.start) + " \u301C " + formatDate(task.end);
1695
+ var plannedRange = task.plannedStart || task.plannedEnd ? formatDate(task.plannedStart) + " \u301C " + formatDate(task.plannedEnd) : "";
1696
+ var plannedEffort = formatEffort(task.plannedEffort, effortDisplayUnit);
1697
+ var actualEffort = formatEffort(task.actualEffort, effortDisplayUnit);
495
1698
  return React.createElement("div", {
496
1699
  className: styles$2.tooltipDefaultContainer,
497
1700
  style: style
1701
+ }, React.createElement("div", {
1702
+ className: styles$2.tooltipTitle
498
1703
  }, React.createElement("b", {
1704
+ className: styles$2.tooltipName
1705
+ }, task.name), React.createElement("span", {
1706
+ className: styles$2.tooltipDate
1707
+ }, dateRange)), React.createElement("div", {
1708
+ className: styles$2.tooltipRow
1709
+ }, React.createElement("span", {
1710
+ className: styles$2.tooltipLabel
1711
+ }, "\u5DE5\u7A0B"), React.createElement("span", {
1712
+ className: styles$2.tooltipValue
1713
+ }, normalizedProcess)), React.createElement("div", {
1714
+ className: styles$2.tooltipRow
1715
+ }, React.createElement("span", {
1716
+ className: styles$2.tooltipLabel
1717
+ }, "\u62C5\u5F53"), React.createElement("span", {
1718
+ className: styles$2.tooltipValue
1719
+ }, task.assignee || "-")), plannedRange && React.createElement("div", {
1720
+ className: styles$2.tooltipRow
1721
+ }, React.createElement("span", {
1722
+ className: styles$2.tooltipLabel
1723
+ }, "\u4E88\u5B9A"), React.createElement("span", {
1724
+ className: styles$2.tooltipValue
1725
+ }, plannedRange)), plannedEffort && React.createElement("div", {
1726
+ className: styles$2.tooltipRow
1727
+ }, React.createElement("span", {
1728
+ className: styles$2.tooltipLabel
1729
+ }, "\u4E88\u5B9A\u5DE5\u6570"), React.createElement("span", {
1730
+ className: styles$2.tooltipValue
1731
+ }, plannedEffort)), actualEffort && React.createElement("div", {
1732
+ className: styles$2.tooltipRow
1733
+ }, React.createElement("span", {
1734
+ className: styles$2.tooltipLabel
1735
+ }, "\u5B9F\u7E3E\u5DE5\u6570"), React.createElement("span", {
1736
+ className: styles$2.tooltipValue
1737
+ }, actualEffort)), React.createElement("div", {
1738
+ className: styles$2.tooltipRow
1739
+ }, React.createElement("span", {
1740
+ className: styles$2.tooltipLabel
1741
+ }, "\u30B9\u30C6\u30FC\u30BF\u30B9"), React.createElement("span", {
1742
+ className: styles$2.tooltipValue
1743
+ }, React.createElement("span", {
1744
+ className: styles$2.tooltipStatus,
499
1745
  style: {
500
- fontSize: fontSize + 6
1746
+ backgroundColor: getStatusColor(normalizedStatus)
501
1747
  }
502
- }, task.name + ": " + task.start.getDate() + "-" + (task.start.getMonth() + 1) + "-" + task.start.getFullYear() + " - " + task.end.getDate() + "-" + (task.end.getMonth() + 1) + "-" + task.end.getFullYear()), task.end.getTime() - task.start.getTime() !== 0 && React.createElement("p", {
503
- className: styles$2.tooltipDefaultContainerParagraph
504
- }, "Duration: " + ~~((task.end.getTime() - task.start.getTime()) / (1000 * 60 * 60 * 24)) + " day(s)"), React.createElement("p", {
1748
+ }, getStatusBadgeText(normalizedStatus)), React.createElement("span", {
1749
+ className: styles$2.tooltipStatusText
1750
+ }, normalizedStatus))), !!task.progress && React.createElement("p", {
505
1751
  className: styles$2.tooltipDefaultContainerParagraph
506
- }, !!task.progress && "Progress: " + task.progress + " %"));
1752
+ }, "\u9032\u6357\u7387: ", task.progress, " %"));
507
1753
  };
508
1754
 
509
1755
  var styles$3 = {"scroll":"_1eT-t"};
510
1756
 
511
1757
  var VerticalScroll = function VerticalScroll(_ref) {
512
1758
  var scroll = _ref.scroll,
513
- ganttHeight = _ref.ganttHeight,
514
- ganttFullHeight = _ref.ganttFullHeight,
515
- headerHeight = _ref.headerHeight,
516
- rtl = _ref.rtl,
517
- onScroll = _ref.onScroll;
1759
+ ganttHeight = _ref.ganttHeight,
1760
+ ganttFullHeight = _ref.ganttFullHeight,
1761
+ headerHeight = _ref.headerHeight,
1762
+ rtl = _ref.rtl,
1763
+ onScroll = _ref.onScroll;
518
1764
  var scrollRef = useRef(null);
519
1765
  useEffect(function () {
520
1766
  if (scrollRef.current) {
@@ -523,9 +1769,11 @@ var VerticalScroll = function VerticalScroll(_ref) {
523
1769
  }, [scroll]);
524
1770
  return React.createElement("div", {
525
1771
  style: {
1772
+ position: "absolute",
1773
+ top: headerHeight,
526
1774
  height: ganttHeight,
527
- marginTop: headerHeight,
528
- marginLeft: rtl ? "" : "-1rem"
1775
+ right: rtl ? undefined : 0,
1776
+ left: rtl ? 0 : undefined
529
1777
  },
530
1778
  className: styles$3.scroll,
531
1779
  onScroll: onScroll,
@@ -538,68 +1786,16 @@ var VerticalScroll = function VerticalScroll(_ref) {
538
1786
  }));
539
1787
  };
540
1788
 
541
- var TaskList = function TaskList(_ref) {
542
- var headerHeight = _ref.headerHeight,
543
- fontFamily = _ref.fontFamily,
544
- fontSize = _ref.fontSize,
545
- rowWidth = _ref.rowWidth,
546
- rowHeight = _ref.rowHeight,
547
- scrollY = _ref.scrollY,
548
- tasks = _ref.tasks,
549
- selectedTask = _ref.selectedTask,
550
- setSelectedTask = _ref.setSelectedTask,
551
- onExpanderClick = _ref.onExpanderClick,
552
- locale = _ref.locale,
553
- ganttHeight = _ref.ganttHeight,
554
- taskListRef = _ref.taskListRef,
555
- horizontalContainerClass = _ref.horizontalContainerClass,
556
- TaskListHeader = _ref.TaskListHeader,
557
- TaskListTable = _ref.TaskListTable;
558
- var horizontalContainerRef = useRef(null);
559
- useEffect(function () {
560
- if (horizontalContainerRef.current) {
561
- horizontalContainerRef.current.scrollTop = scrollY;
562
- }
563
- }, [scrollY]);
564
- var headerProps = {
565
- headerHeight: headerHeight,
566
- fontFamily: fontFamily,
567
- fontSize: fontSize,
568
- rowWidth: rowWidth
569
- };
570
- var selectedTaskId = selectedTask ? selectedTask.id : "";
571
- var tableProps = {
572
- rowHeight: rowHeight,
573
- rowWidth: rowWidth,
574
- fontFamily: fontFamily,
575
- fontSize: fontSize,
576
- tasks: tasks,
577
- locale: locale,
578
- selectedTaskId: selectedTaskId,
579
- setSelectedTask: setSelectedTask,
580
- onExpanderClick: onExpanderClick
581
- };
582
- return React.createElement("div", {
583
- ref: taskListRef
584
- }, React.createElement(TaskListHeader, Object.assign({}, headerProps)), React.createElement("div", {
585
- ref: horizontalContainerRef,
586
- className: horizontalContainerClass,
587
- style: ganttHeight ? {
588
- height: ganttHeight
589
- } : {}
590
- }, React.createElement(TaskListTable, Object.assign({}, tableProps))));
591
- };
592
-
593
1789
  var styles$4 = {"gridRow":"_2dZTy","gridRowLine":"_3rUKi","gridTick":"_RuwuK"};
594
1790
 
595
1791
  var GridBody = function GridBody(_ref) {
596
1792
  var tasks = _ref.tasks,
597
- dates = _ref.dates,
598
- rowHeight = _ref.rowHeight,
599
- svgWidth = _ref.svgWidth,
600
- columnWidth = _ref.columnWidth,
601
- todayColor = _ref.todayColor,
602
- rtl = _ref.rtl;
1793
+ dates = _ref.dates,
1794
+ rowHeight = _ref.rowHeight,
1795
+ svgWidth = _ref.svgWidth,
1796
+ columnWidth = _ref.columnWidth,
1797
+ todayColor = _ref.todayColor,
1798
+ rtl = _ref.rtl;
603
1799
  var y = 0;
604
1800
  var gridRows = [];
605
1801
  var rowLines = [React.createElement("line", {
@@ -610,7 +1806,6 @@ var GridBody = function GridBody(_ref) {
610
1806
  y2: 0,
611
1807
  className: styles$4.gridRowLine
612
1808
  })];
613
-
614
1809
  for (var _iterator = _createForOfIteratorHelperLoose(tasks), _step; !(_step = _iterator()).done;) {
615
1810
  var task = _step.value;
616
1811
  gridRows.push(React.createElement("rect", {
@@ -631,12 +1826,10 @@ var GridBody = function GridBody(_ref) {
631
1826
  }));
632
1827
  y += rowHeight;
633
1828
  }
634
-
635
1829
  var now = new Date();
636
1830
  var tickX = 0;
637
1831
  var ticks = [];
638
1832
  var today = React.createElement("rect", null);
639
-
640
1833
  for (var i = 0; i < dates.length; i++) {
641
1834
  var date = dates[i];
642
1835
  ticks.push(React.createElement("line", {
@@ -647,7 +1840,6 @@ var GridBody = function GridBody(_ref) {
647
1840
  y2: y,
648
1841
  className: styles$4.gridTick
649
1842
  }));
650
-
651
1843
  if (i + 1 !== dates.length && date.getTime() < now.getTime() && dates[i + 1].getTime() >= now.getTime() || i !== 0 && i + 1 === dates.length && date.getTime() < now.getTime() && addToDate(date, date.getTime() - dates[i - 1].getTime(), "millisecond").getTime() >= now.getTime()) {
652
1844
  today = React.createElement("rect", {
653
1845
  x: tickX,
@@ -657,7 +1849,6 @@ var GridBody = function GridBody(_ref) {
657
1849
  fill: todayColor
658
1850
  });
659
1851
  }
660
-
661
1852
  if (rtl && i + 1 !== dates.length && date.getTime() >= now.getTime() && dates[i + 1].getTime() < now.getTime()) {
662
1853
  today = React.createElement("rect", {
663
1854
  x: tickX + columnWidth,
@@ -667,10 +1858,8 @@ var GridBody = function GridBody(_ref) {
667
1858
  fill: todayColor
668
1859
  });
669
1860
  }
670
-
671
1861
  tickX += columnWidth;
672
1862
  }
673
-
674
1863
  return React.createElement("g", {
675
1864
  className: "gridBody"
676
1865
  }, React.createElement("g", {
@@ -694,11 +1883,11 @@ var styles$5 = {"calendarBottomText":"_9w8d5","calendarTopTick":"_1rLuZ","calend
694
1883
 
695
1884
  var TopPartOfCalendar = function TopPartOfCalendar(_ref) {
696
1885
  var value = _ref.value,
697
- x1Line = _ref.x1Line,
698
- y1Line = _ref.y1Line,
699
- y2Line = _ref.y2Line,
700
- xText = _ref.xText,
701
- yText = _ref.yText;
1886
+ x1Line = _ref.x1Line,
1887
+ y1Line = _ref.y1Line,
1888
+ y2Line = _ref.y2Line,
1889
+ xText = _ref.xText,
1890
+ yText = _ref.yText;
702
1891
  return React.createElement("g", {
703
1892
  className: "calendarTop"
704
1893
  }, React.createElement("line", {
@@ -718,19 +1907,17 @@ var TopPartOfCalendar = function TopPartOfCalendar(_ref) {
718
1907
 
719
1908
  var Calendar = function Calendar(_ref) {
720
1909
  var dateSetup = _ref.dateSetup,
721
- locale = _ref.locale,
722
- viewMode = _ref.viewMode,
723
- rtl = _ref.rtl,
724
- headerHeight = _ref.headerHeight,
725
- columnWidth = _ref.columnWidth,
726
- fontFamily = _ref.fontFamily,
727
- fontSize = _ref.fontSize;
728
-
1910
+ locale = _ref.locale,
1911
+ viewMode = _ref.viewMode,
1912
+ rtl = _ref.rtl,
1913
+ headerHeight = _ref.headerHeight,
1914
+ columnWidth = _ref.columnWidth,
1915
+ fontFamily = _ref.fontFamily,
1916
+ fontSize = _ref.fontSize;
729
1917
  var getCalendarValuesForYear = function getCalendarValuesForYear() {
730
1918
  var topValues = [];
731
1919
  var bottomValues = [];
732
1920
  var topDefaultHeight = headerHeight * 0.5;
733
-
734
1921
  for (var i = 0; i < dateSetup.dates.length; i++) {
735
1922
  var date = dateSetup.dates[i];
736
1923
  var bottomValue = date.getFullYear();
@@ -740,17 +1927,14 @@ var Calendar = function Calendar(_ref) {
740
1927
  x: columnWidth * i + columnWidth * 0.5,
741
1928
  className: styles$5.calendarBottomText
742
1929
  }, bottomValue));
743
-
744
1930
  if (i === 0 || date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()) {
745
1931
  var topValue = date.getFullYear().toString();
746
1932
  var xText = void 0;
747
-
748
1933
  if (rtl) {
749
1934
  xText = (6 + i + date.getFullYear() + 1) * columnWidth;
750
1935
  } else {
751
1936
  xText = (6 + i - date.getFullYear()) * columnWidth;
752
1937
  }
753
-
754
1938
  topValues.push(React.createElement(TopPartOfCalendar, {
755
1939
  key: topValue,
756
1940
  value: topValue,
@@ -762,15 +1946,12 @@ var Calendar = function Calendar(_ref) {
762
1946
  }));
763
1947
  }
764
1948
  }
765
-
766
1949
  return [topValues, bottomValues];
767
1950
  };
768
-
769
1951
  var getCalendarValuesForQuarterYear = function getCalendarValuesForQuarterYear() {
770
1952
  var topValues = [];
771
1953
  var bottomValues = [];
772
1954
  var topDefaultHeight = headerHeight * 0.5;
773
-
774
1955
  for (var i = 0; i < dateSetup.dates.length; i++) {
775
1956
  var date = dateSetup.dates[i];
776
1957
  var quarter = "Q" + Math.floor((date.getMonth() + 3) / 3);
@@ -780,17 +1961,14 @@ var Calendar = function Calendar(_ref) {
780
1961
  x: columnWidth * i + columnWidth * 0.5,
781
1962
  className: styles$5.calendarBottomText
782
1963
  }, quarter));
783
-
784
1964
  if (i === 0 || date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()) {
785
1965
  var topValue = date.getFullYear().toString();
786
1966
  var xText = void 0;
787
-
788
1967
  if (rtl) {
789
1968
  xText = (6 + i + date.getMonth() + 1) * columnWidth;
790
1969
  } else {
791
1970
  xText = (6 + i - date.getMonth()) * columnWidth;
792
1971
  }
793
-
794
1972
  topValues.push(React.createElement(TopPartOfCalendar, {
795
1973
  key: topValue,
796
1974
  value: topValue,
@@ -802,15 +1980,12 @@ var Calendar = function Calendar(_ref) {
802
1980
  }));
803
1981
  }
804
1982
  }
805
-
806
1983
  return [topValues, bottomValues];
807
1984
  };
808
-
809
1985
  var getCalendarValuesForMonth = function getCalendarValuesForMonth() {
810
1986
  var topValues = [];
811
1987
  var bottomValues = [];
812
1988
  var topDefaultHeight = headerHeight * 0.5;
813
-
814
1989
  for (var i = 0; i < dateSetup.dates.length; i++) {
815
1990
  var date = dateSetup.dates[i];
816
1991
  var bottomValue = getLocaleMonth(date, locale);
@@ -820,17 +1995,14 @@ var Calendar = function Calendar(_ref) {
820
1995
  x: columnWidth * i + columnWidth * 0.5,
821
1996
  className: styles$5.calendarBottomText
822
1997
  }, bottomValue));
823
-
824
1998
  if (i === 0 || date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()) {
825
1999
  var topValue = date.getFullYear().toString();
826
2000
  var xText = void 0;
827
-
828
2001
  if (rtl) {
829
2002
  xText = (6 + i + date.getMonth() + 1) * columnWidth;
830
2003
  } else {
831
2004
  xText = (6 + i - date.getMonth()) * columnWidth;
832
2005
  }
833
-
834
2006
  topValues.push(React.createElement(TopPartOfCalendar, {
835
2007
  key: topValue,
836
2008
  value: topValue,
@@ -842,25 +2014,20 @@ var Calendar = function Calendar(_ref) {
842
2014
  }));
843
2015
  }
844
2016
  }
845
-
846
2017
  return [topValues, bottomValues];
847
2018
  };
848
-
849
2019
  var getCalendarValuesForWeek = function getCalendarValuesForWeek() {
850
2020
  var topValues = [];
851
2021
  var bottomValues = [];
852
2022
  var weeksCount = 1;
853
2023
  var topDefaultHeight = headerHeight * 0.5;
854
2024
  var dates = dateSetup.dates;
855
-
856
2025
  for (var i = dates.length - 1; i >= 0; i--) {
857
2026
  var date = dates[i];
858
2027
  var topValue = "";
859
-
860
2028
  if (i === 0 || date.getMonth() !== dates[i - 1].getMonth()) {
861
2029
  topValue = getLocaleMonth(date, locale) + ", " + date.getFullYear();
862
2030
  }
863
-
864
2031
  var bottomValue = "W" + getWeekNumberISO8601(date);
865
2032
  bottomValues.push(React.createElement("text", {
866
2033
  key: date.getTime(),
@@ -868,7 +2035,6 @@ var Calendar = function Calendar(_ref) {
868
2035
  x: columnWidth * (i + +rtl),
869
2036
  className: styles$5.calendarBottomText
870
2037
  }, bottomValue));
871
-
872
2038
  if (topValue) {
873
2039
  if (i !== dates.length - 1) {
874
2040
  topValues.push(React.createElement(TopPartOfCalendar, {
@@ -881,22 +2047,17 @@ var Calendar = function Calendar(_ref) {
881
2047
  yText: topDefaultHeight * 0.9
882
2048
  }));
883
2049
  }
884
-
885
2050
  weeksCount = 0;
886
2051
  }
887
-
888
2052
  weeksCount++;
889
2053
  }
890
-
891
2054
  return [topValues, bottomValues];
892
2055
  };
893
-
894
2056
  var getCalendarValuesForDay = function getCalendarValuesForDay() {
895
2057
  var topValues = [];
896
2058
  var bottomValues = [];
897
2059
  var topDefaultHeight = headerHeight * 0.5;
898
2060
  var dates = dateSetup.dates;
899
-
900
2061
  for (var i = 0; i < dates.length; i++) {
901
2062
  var date = dates[i];
902
2063
  var bottomValue = getLocalDayOfWeek(date, locale, "short") + ", " + date.getDate().toString();
@@ -906,7 +2067,6 @@ var Calendar = function Calendar(_ref) {
906
2067
  x: columnWidth * i + columnWidth * 0.5,
907
2068
  className: styles$5.calendarBottomText
908
2069
  }, bottomValue));
909
-
910
2070
  if (i + 1 !== dates.length && date.getMonth() !== dates[i + 1].getMonth()) {
911
2071
  var topValue = getLocaleMonth(date, locale);
912
2072
  topValues.push(React.createElement(TopPartOfCalendar, {
@@ -920,17 +2080,14 @@ var Calendar = function Calendar(_ref) {
920
2080
  }));
921
2081
  }
922
2082
  }
923
-
924
2083
  return [topValues, bottomValues];
925
2084
  };
926
-
927
2085
  var getCalendarValuesForPartOfDay = function getCalendarValuesForPartOfDay() {
928
2086
  var topValues = [];
929
2087
  var bottomValues = [];
930
2088
  var ticks = viewMode === ViewMode.HalfDay ? 2 : 4;
931
2089
  var topDefaultHeight = headerHeight * 0.5;
932
2090
  var dates = dateSetup.dates;
933
-
934
2091
  for (var i = 0; i < dates.length; i++) {
935
2092
  var date = dates[i];
936
2093
  var bottomValue = getCachedDateTimeFormat(locale, {
@@ -943,7 +2100,6 @@ var Calendar = function Calendar(_ref) {
943
2100
  className: styles$5.calendarBottomText,
944
2101
  fontFamily: fontFamily
945
2102
  }, bottomValue));
946
-
947
2103
  if (i === 0 || date.getDate() !== dates[i - 1].getDate()) {
948
2104
  var topValue = getLocalDayOfWeek(date, locale, "short") + ", " + date.getDate() + " " + getLocaleMonth(date, locale);
949
2105
  topValues.push(React.createElement(TopPartOfCalendar, {
@@ -957,16 +2113,13 @@ var Calendar = function Calendar(_ref) {
957
2113
  }));
958
2114
  }
959
2115
  }
960
-
961
2116
  return [topValues, bottomValues];
962
2117
  };
963
-
964
2118
  var getCalendarValuesForHour = function getCalendarValuesForHour() {
965
2119
  var topValues = [];
966
2120
  var bottomValues = [];
967
2121
  var topDefaultHeight = headerHeight * 0.5;
968
2122
  var dates = dateSetup.dates;
969
-
970
2123
  for (var i = 0; i < dates.length; i++) {
971
2124
  var date = dates[i];
972
2125
  var bottomValue = getCachedDateTimeFormat(locale, {
@@ -979,7 +2132,6 @@ var Calendar = function Calendar(_ref) {
979
2132
  className: styles$5.calendarBottomText,
980
2133
  fontFamily: fontFamily
981
2134
  }, bottomValue));
982
-
983
2135
  if (i !== 0 && date.getDate() !== dates[i - 1].getDate()) {
984
2136
  var displayDate = dates[i - 1];
985
2137
  var topValue = getLocalDayOfWeek(displayDate, locale, "long") + ", " + displayDate.getDate() + " " + getLocaleMonth(displayDate, locale);
@@ -995,64 +2147,47 @@ var Calendar = function Calendar(_ref) {
995
2147
  }));
996
2148
  }
997
2149
  }
998
-
999
2150
  return [topValues, bottomValues];
1000
2151
  };
1001
-
1002
2152
  var topValues = [];
1003
2153
  var bottomValues = [];
1004
-
1005
2154
  switch (dateSetup.viewMode) {
1006
2155
  case ViewMode.Year:
1007
2156
  var _getCalendarValuesFor = getCalendarValuesForYear();
1008
-
1009
2157
  topValues = _getCalendarValuesFor[0];
1010
2158
  bottomValues = _getCalendarValuesFor[1];
1011
2159
  break;
1012
-
1013
2160
  case ViewMode.QuarterYear:
1014
2161
  var _getCalendarValuesFor2 = getCalendarValuesForQuarterYear();
1015
-
1016
2162
  topValues = _getCalendarValuesFor2[0];
1017
2163
  bottomValues = _getCalendarValuesFor2[1];
1018
2164
  break;
1019
-
1020
2165
  case ViewMode.Month:
1021
2166
  var _getCalendarValuesFor3 = getCalendarValuesForMonth();
1022
-
1023
2167
  topValues = _getCalendarValuesFor3[0];
1024
2168
  bottomValues = _getCalendarValuesFor3[1];
1025
2169
  break;
1026
-
1027
2170
  case ViewMode.Week:
1028
2171
  var _getCalendarValuesFor4 = getCalendarValuesForWeek();
1029
-
1030
2172
  topValues = _getCalendarValuesFor4[0];
1031
2173
  bottomValues = _getCalendarValuesFor4[1];
1032
2174
  break;
1033
-
1034
2175
  case ViewMode.Day:
1035
2176
  var _getCalendarValuesFor5 = getCalendarValuesForDay();
1036
-
1037
2177
  topValues = _getCalendarValuesFor5[0];
1038
2178
  bottomValues = _getCalendarValuesFor5[1];
1039
2179
  break;
1040
-
1041
2180
  case ViewMode.QuarterDay:
1042
2181
  case ViewMode.HalfDay:
1043
2182
  var _getCalendarValuesFor6 = getCalendarValuesForPartOfDay();
1044
-
1045
2183
  topValues = _getCalendarValuesFor6[0];
1046
2184
  bottomValues = _getCalendarValuesFor6[1];
1047
2185
  break;
1048
-
1049
2186
  case ViewMode.Hour:
1050
2187
  var _getCalendarValuesFor7 = getCalendarValuesForHour();
1051
-
1052
2188
  topValues = _getCalendarValuesFor7[0];
1053
2189
  bottomValues = _getCalendarValuesFor7[1];
1054
2190
  }
1055
-
1056
2191
  return React.createElement("g", {
1057
2192
  className: "calendar",
1058
2193
  fontSize: fontSize,
@@ -1066,47 +2201,24 @@ var Calendar = function Calendar(_ref) {
1066
2201
  }), bottomValues, " ", topValues);
1067
2202
  };
1068
2203
 
1069
- // A type of promise-like that resolves synchronously and supports only one observer
1070
-
1071
- const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator";
1072
-
1073
- const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator";
1074
-
1075
- // Asynchronously call a function and send errors to recovery continuation
1076
- function _catch(body, recover) {
1077
- try {
1078
- var result = body();
1079
- } catch(e) {
1080
- return recover(e);
1081
- }
1082
- if (result && result.then) {
1083
- return result.then(void 0, recover);
1084
- }
1085
- return result;
1086
- }
1087
-
1088
2204
  var Arrow = function Arrow(_ref) {
1089
2205
  var taskFrom = _ref.taskFrom,
1090
- taskTo = _ref.taskTo,
1091
- rowHeight = _ref.rowHeight,
1092
- taskHeight = _ref.taskHeight,
1093
- arrowIndent = _ref.arrowIndent,
1094
- rtl = _ref.rtl;
2206
+ taskTo = _ref.taskTo,
2207
+ rowHeight = _ref.rowHeight,
2208
+ taskHeight = _ref.taskHeight,
2209
+ arrowIndent = _ref.arrowIndent,
2210
+ rtl = _ref.rtl;
1095
2211
  var path;
1096
2212
  var trianglePoints;
1097
-
1098
2213
  if (rtl) {
1099
2214
  var _drownPathAndTriangle = drownPathAndTriangleRTL(taskFrom, taskTo, rowHeight, taskHeight, arrowIndent);
1100
-
1101
2215
  path = _drownPathAndTriangle[0];
1102
2216
  trianglePoints = _drownPathAndTriangle[1];
1103
2217
  } else {
1104
2218
  var _drownPathAndTriangle2 = drownPathAndTriangle(taskFrom, taskTo, rowHeight, taskHeight, arrowIndent);
1105
-
1106
2219
  path = _drownPathAndTriangle2[0];
1107
2220
  trianglePoints = _drownPathAndTriangle2[1];
1108
2221
  }
1109
-
1110
2222
  return React.createElement("g", {
1111
2223
  className: "arrow"
1112
2224
  }, React.createElement("path", {
@@ -1117,7 +2229,6 @@ var Arrow = function Arrow(_ref) {
1117
2229
  points: trianglePoints
1118
2230
  }));
1119
2231
  };
1120
-
1121
2232
  var drownPathAndTriangle = function drownPathAndTriangle(taskFrom, taskTo, rowHeight, taskHeight, arrowIndent) {
1122
2233
  var indexCompare = taskFrom.index > taskTo.index ? -1 : 1;
1123
2234
  var taskToEndPosition = taskTo.y + taskHeight / 2;
@@ -1128,7 +2239,6 @@ var drownPathAndTriangle = function drownPathAndTriangle(taskFrom, taskTo, rowHe
1128
2239
  var trianglePoints = taskTo.x1 + "," + taskToEndPosition + " \n " + (taskTo.x1 - 5) + "," + (taskToEndPosition - 5) + " \n " + (taskTo.x1 - 5) + "," + (taskToEndPosition + 5);
1129
2240
  return [path, trianglePoints];
1130
2241
  };
1131
-
1132
2242
  var drownPathAndTriangleRTL = function drownPathAndTriangleRTL(taskFrom, taskTo, rowHeight, taskHeight, arrowIndent) {
1133
2243
  var indexCompare = taskFrom.index > taskTo.index ? -1 : 1;
1134
2244
  var taskToEndPosition = taskTo.y + taskHeight / 2;
@@ -1146,47 +2256,37 @@ var convertToBarTasks = function convertToBarTasks(tasks, dates, columnWidth, ro
1146
2256
  });
1147
2257
  barTasks = barTasks.map(function (task) {
1148
2258
  var dependencies = task.dependencies || [];
1149
-
1150
2259
  var _loop = function _loop(j) {
1151
2260
  var dependence = barTasks.findIndex(function (value) {
1152
2261
  return value.id === dependencies[j];
1153
2262
  });
1154
2263
  if (dependence !== -1) barTasks[dependence].barChildren.push(task);
1155
2264
  };
1156
-
1157
2265
  for (var j = 0; j < dependencies.length; j++) {
1158
2266
  _loop(j);
1159
2267
  }
1160
-
1161
2268
  return task;
1162
2269
  });
1163
2270
  return barTasks;
1164
2271
  };
1165
-
1166
2272
  var convertToBarTask = function convertToBarTask(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor) {
1167
2273
  var barTask;
1168
-
1169
2274
  switch (task.type) {
1170
2275
  case "milestone":
1171
2276
  barTask = convertToMilestone(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, milestoneBackgroundColor, milestoneBackgroundSelectedColor);
1172
2277
  break;
1173
-
1174
2278
  case "project":
1175
2279
  barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor);
1176
2280
  break;
1177
-
1178
2281
  default:
1179
2282
  barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor);
1180
2283
  break;
1181
2284
  }
1182
-
1183
2285
  return barTask;
1184
2286
  };
1185
-
1186
2287
  var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor) {
1187
2288
  var x1;
1188
2289
  var x2;
1189
-
1190
2290
  if (rtl) {
1191
2291
  x2 = taskXCoordinateRTL(task.start, dates, columnWidth);
1192
2292
  x1 = taskXCoordinateRTL(task.end, dates, columnWidth);
@@ -1194,28 +2294,22 @@ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHei
1194
2294
  x1 = taskXCoordinate(task.start, dates, columnWidth);
1195
2295
  x2 = taskXCoordinate(task.end, dates, columnWidth);
1196
2296
  }
1197
-
1198
2297
  var typeInternal = task.type;
1199
-
1200
2298
  if (typeInternal === "task" && x2 - x1 < handleWidth * 2) {
1201
2299
  typeInternal = "smalltask";
1202
2300
  x2 = x1 + handleWidth * 2;
1203
2301
  }
1204
-
1205
2302
  var _progressWithByParams = progressWithByParams(x1, x2, task.progress, rtl),
1206
- progressWidth = _progressWithByParams[0],
1207
- progressX = _progressWithByParams[1];
1208
-
2303
+ progressWidth = _progressWithByParams[0],
2304
+ progressX = _progressWithByParams[1];
1209
2305
  var y = taskYCoordinate(index, rowHeight, taskHeight);
1210
2306
  var hideChildren = task.type === "project" ? task.hideChildren : undefined;
1211
-
1212
2307
  var styles = _extends({
1213
2308
  backgroundColor: barBackgroundColor,
1214
2309
  backgroundSelectedColor: barBackgroundSelectedColor,
1215
2310
  progressColor: barProgressColor,
1216
2311
  progressSelectedColor: barProgressSelectedColor
1217
2312
  }, task.styles);
1218
-
1219
2313
  return _extends({}, task, {
1220
2314
  typeInternal: typeInternal,
1221
2315
  x1: x1,
@@ -1232,21 +2326,18 @@ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHei
1232
2326
  styles: styles
1233
2327
  });
1234
2328
  };
1235
-
1236
2329
  var convertToMilestone = function convertToMilestone(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, milestoneBackgroundColor, milestoneBackgroundSelectedColor) {
1237
2330
  var x = taskXCoordinate(task.start, dates, columnWidth);
1238
2331
  var y = taskYCoordinate(index, rowHeight, taskHeight);
1239
2332
  var x1 = x - taskHeight * 0.5;
1240
2333
  var x2 = x + taskHeight * 0.5;
1241
2334
  var rotatedHeight = taskHeight / 1.414;
1242
-
1243
2335
  var styles = _extends({
1244
2336
  backgroundColor: milestoneBackgroundColor,
1245
2337
  backgroundSelectedColor: milestoneBackgroundSelectedColor,
1246
2338
  progressColor: "",
1247
2339
  progressSelectedColor: ""
1248
2340
  }, task.styles);
1249
-
1250
2341
  return _extends({}, task, {
1251
2342
  end: task.start,
1252
2343
  x1: x1,
@@ -1265,7 +2356,6 @@ var convertToMilestone = function convertToMilestone(task, index, dates, columnW
1265
2356
  styles: styles
1266
2357
  });
1267
2358
  };
1268
-
1269
2359
  var taskXCoordinate = function taskXCoordinate(xDate, dates, columnWidth) {
1270
2360
  var index = dates.findIndex(function (d) {
1271
2361
  return d.getTime() >= xDate.getTime();
@@ -1275,31 +2365,25 @@ var taskXCoordinate = function taskXCoordinate(xDate, dates, columnWidth) {
1275
2365
  var x = index * columnWidth + percentOfInterval * columnWidth;
1276
2366
  return x;
1277
2367
  };
1278
-
1279
2368
  var taskXCoordinateRTL = function taskXCoordinateRTL(xDate, dates, columnWidth) {
1280
2369
  var x = taskXCoordinate(xDate, dates, columnWidth);
1281
2370
  x += columnWidth;
1282
2371
  return x;
1283
2372
  };
1284
-
1285
2373
  var taskYCoordinate = function taskYCoordinate(index, rowHeight, taskHeight) {
1286
2374
  var y = index * rowHeight + (rowHeight - taskHeight) / 2;
1287
2375
  return y;
1288
2376
  };
1289
-
1290
2377
  var progressWithByParams = function progressWithByParams(taskX1, taskX2, progress, rtl) {
1291
2378
  var progressWidth = (taskX2 - taskX1) * progress * 0.01;
1292
2379
  var progressX;
1293
-
1294
2380
  if (rtl) {
1295
2381
  progressX = taskX2 - progressWidth;
1296
2382
  } else {
1297
2383
  progressX = taskX1;
1298
2384
  }
1299
-
1300
2385
  return [progressWidth, progressX];
1301
2386
  };
1302
-
1303
2387
  var progressByX = function progressByX(x, task) {
1304
2388
  if (x >= task.x2) return 100;else if (x <= task.x1) return 0;else {
1305
2389
  var barWidth = task.x2 - task.x1;
@@ -1307,7 +2391,6 @@ var progressByX = function progressByX(x, task) {
1307
2391
  return progressPercent;
1308
2392
  }
1309
2393
  };
1310
-
1311
2394
  var progressByXRTL = function progressByXRTL(x, task) {
1312
2395
  if (x >= task.x2) return 0;else if (x <= task.x1) return 100;else {
1313
2396
  var barWidth = task.x2 - task.x1;
@@ -1315,34 +2398,28 @@ var progressByXRTL = function progressByXRTL(x, task) {
1315
2398
  return progressPercent;
1316
2399
  }
1317
2400
  };
1318
-
1319
2401
  var getProgressPoint = function getProgressPoint(progressX, taskY, taskHeight) {
1320
2402
  var point = [progressX - 5, taskY + taskHeight, progressX + 5, taskY + taskHeight, progressX, taskY + taskHeight - 8.66];
1321
2403
  return point.join(",");
1322
2404
  };
1323
-
1324
2405
  var startByX = function startByX(x, xStep, task) {
1325
2406
  if (x >= task.x2 - task.handleWidth * 2) {
1326
2407
  x = task.x2 - task.handleWidth * 2;
1327
2408
  }
1328
-
1329
2409
  var steps = Math.round((x - task.x1) / xStep);
1330
2410
  var additionalXValue = steps * xStep;
1331
2411
  var newX = task.x1 + additionalXValue;
1332
2412
  return newX;
1333
2413
  };
1334
-
1335
2414
  var endByX = function endByX(x, xStep, task) {
1336
2415
  if (x <= task.x1 + task.handleWidth * 2) {
1337
2416
  x = task.x1 + task.handleWidth * 2;
1338
2417
  }
1339
-
1340
2418
  var steps = Math.round((x - task.x2) / xStep);
1341
2419
  var additionalXValue = steps * xStep;
1342
2420
  var newX = task.x2 + additionalXValue;
1343
2421
  return newX;
1344
2422
  };
1345
-
1346
2423
  var moveByX = function moveByX(x, xStep, task) {
1347
2424
  var steps = Math.round((x - task.x1) / xStep);
1348
2425
  var additionalXValue = steps * xStep;
@@ -1350,34 +2427,26 @@ var moveByX = function moveByX(x, xStep, task) {
1350
2427
  var newX2 = newX1 + task.x2 - task.x1;
1351
2428
  return [newX1, newX2];
1352
2429
  };
1353
-
1354
2430
  var dateByX = function dateByX(x, taskX, taskDate, xStep, timeStep) {
1355
2431
  var newDate = new Date((x - taskX) / xStep * timeStep + taskDate.getTime());
1356
2432
  newDate = new Date(newDate.getTime() + (newDate.getTimezoneOffset() - taskDate.getTimezoneOffset()) * 60000);
1357
2433
  return newDate;
1358
2434
  };
1359
-
1360
2435
  var handleTaskBySVGMouseEvent = function handleTaskBySVGMouseEvent(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta, rtl) {
1361
2436
  var result;
1362
-
1363
2437
  switch (selectedTask.type) {
1364
2438
  case "milestone":
1365
2439
  result = handleTaskBySVGMouseEventForMilestone(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta);
1366
2440
  break;
1367
-
1368
2441
  default:
1369
2442
  result = handleTaskBySVGMouseEventForBar(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta, rtl);
1370
2443
  break;
1371
2444
  }
1372
-
1373
2445
  return result;
1374
2446
  };
1375
-
1376
2447
  var handleTaskBySVGMouseEventForBar = function handleTaskBySVGMouseEventForBar(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta, rtl) {
1377
2448
  var changedTask = _extends({}, selectedTask);
1378
-
1379
2449
  var isChanged = false;
1380
-
1381
2450
  switch (action) {
1382
2451
  case "progress":
1383
2452
  if (rtl) {
@@ -1385,125 +2454,97 @@ var handleTaskBySVGMouseEventForBar = function handleTaskBySVGMouseEventForBar(s
1385
2454
  } else {
1386
2455
  changedTask.progress = progressByX(svgX, selectedTask);
1387
2456
  }
1388
-
1389
2457
  isChanged = changedTask.progress !== selectedTask.progress;
1390
-
1391
2458
  if (isChanged) {
1392
2459
  var _progressWithByParams2 = progressWithByParams(changedTask.x1, changedTask.x2, changedTask.progress, rtl),
1393
- progressWidth = _progressWithByParams2[0],
1394
- progressX = _progressWithByParams2[1];
1395
-
2460
+ progressWidth = _progressWithByParams2[0],
2461
+ progressX = _progressWithByParams2[1];
1396
2462
  changedTask.progressWidth = progressWidth;
1397
2463
  changedTask.progressX = progressX;
1398
2464
  }
1399
-
1400
2465
  break;
1401
-
1402
2466
  case "start":
1403
2467
  {
1404
2468
  var newX1 = startByX(svgX, xStep, selectedTask);
1405
2469
  changedTask.x1 = newX1;
1406
2470
  isChanged = changedTask.x1 !== selectedTask.x1;
1407
-
1408
2471
  if (isChanged) {
1409
2472
  if (rtl) {
1410
2473
  changedTask.end = dateByX(newX1, selectedTask.x1, selectedTask.end, xStep, timeStep);
1411
2474
  } else {
1412
2475
  changedTask.start = dateByX(newX1, selectedTask.x1, selectedTask.start, xStep, timeStep);
1413
2476
  }
1414
-
1415
2477
  var _progressWithByParams3 = progressWithByParams(changedTask.x1, changedTask.x2, changedTask.progress, rtl),
1416
- _progressWidth = _progressWithByParams3[0],
1417
- _progressX = _progressWithByParams3[1];
1418
-
2478
+ _progressWidth = _progressWithByParams3[0],
2479
+ _progressX = _progressWithByParams3[1];
1419
2480
  changedTask.progressWidth = _progressWidth;
1420
2481
  changedTask.progressX = _progressX;
1421
2482
  }
1422
-
1423
2483
  break;
1424
2484
  }
1425
-
1426
2485
  case "end":
1427
2486
  {
1428
2487
  var newX2 = endByX(svgX, xStep, selectedTask);
1429
2488
  changedTask.x2 = newX2;
1430
2489
  isChanged = changedTask.x2 !== selectedTask.x2;
1431
-
1432
2490
  if (isChanged) {
1433
2491
  if (rtl) {
1434
2492
  changedTask.start = dateByX(newX2, selectedTask.x2, selectedTask.start, xStep, timeStep);
1435
2493
  } else {
1436
2494
  changedTask.end = dateByX(newX2, selectedTask.x2, selectedTask.end, xStep, timeStep);
1437
2495
  }
1438
-
1439
2496
  var _progressWithByParams4 = progressWithByParams(changedTask.x1, changedTask.x2, changedTask.progress, rtl),
1440
- _progressWidth2 = _progressWithByParams4[0],
1441
- _progressX2 = _progressWithByParams4[1];
1442
-
2497
+ _progressWidth2 = _progressWithByParams4[0],
2498
+ _progressX2 = _progressWithByParams4[1];
1443
2499
  changedTask.progressWidth = _progressWidth2;
1444
2500
  changedTask.progressX = _progressX2;
1445
2501
  }
1446
-
1447
2502
  break;
1448
2503
  }
1449
-
1450
2504
  case "move":
1451
2505
  {
1452
2506
  var _moveByX = moveByX(svgX - initEventX1Delta, xStep, selectedTask),
1453
- newMoveX1 = _moveByX[0],
1454
- newMoveX2 = _moveByX[1];
1455
-
2507
+ newMoveX1 = _moveByX[0],
2508
+ newMoveX2 = _moveByX[1];
1456
2509
  isChanged = newMoveX1 !== selectedTask.x1;
1457
-
1458
2510
  if (isChanged) {
1459
2511
  changedTask.start = dateByX(newMoveX1, selectedTask.x1, selectedTask.start, xStep, timeStep);
1460
2512
  changedTask.end = dateByX(newMoveX2, selectedTask.x2, selectedTask.end, xStep, timeStep);
1461
2513
  changedTask.x1 = newMoveX1;
1462
2514
  changedTask.x2 = newMoveX2;
1463
-
1464
2515
  var _progressWithByParams5 = progressWithByParams(changedTask.x1, changedTask.x2, changedTask.progress, rtl),
1465
- _progressWidth3 = _progressWithByParams5[0],
1466
- _progressX3 = _progressWithByParams5[1];
1467
-
2516
+ _progressWidth3 = _progressWithByParams5[0],
2517
+ _progressX3 = _progressWithByParams5[1];
1468
2518
  changedTask.progressWidth = _progressWidth3;
1469
2519
  changedTask.progressX = _progressX3;
1470
2520
  }
1471
-
1472
2521
  break;
1473
2522
  }
1474
2523
  }
1475
-
1476
2524
  return {
1477
2525
  isChanged: isChanged,
1478
2526
  changedTask: changedTask
1479
2527
  };
1480
2528
  };
1481
-
1482
2529
  var handleTaskBySVGMouseEventForMilestone = function handleTaskBySVGMouseEventForMilestone(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta) {
1483
2530
  var changedTask = _extends({}, selectedTask);
1484
-
1485
2531
  var isChanged = false;
1486
-
1487
2532
  switch (action) {
1488
2533
  case "move":
1489
2534
  {
1490
2535
  var _moveByX2 = moveByX(svgX - initEventX1Delta, xStep, selectedTask),
1491
- newMoveX1 = _moveByX2[0],
1492
- newMoveX2 = _moveByX2[1];
1493
-
2536
+ newMoveX1 = _moveByX2[0],
2537
+ newMoveX2 = _moveByX2[1];
1494
2538
  isChanged = newMoveX1 !== selectedTask.x1;
1495
-
1496
2539
  if (isChanged) {
1497
2540
  changedTask.start = dateByX(newMoveX1, selectedTask.x1, selectedTask.start, xStep, timeStep);
1498
2541
  changedTask.end = changedTask.start;
1499
2542
  changedTask.x1 = newMoveX1;
1500
2543
  changedTask.x2 = newMoveX2;
1501
2544
  }
1502
-
1503
2545
  break;
1504
2546
  }
1505
2547
  }
1506
-
1507
2548
  return {
1508
2549
  isChanged: isChanged,
1509
2550
  changedTask: changedTask
@@ -1517,27 +2558,22 @@ function removeHiddenTasks(tasks) {
1517
2558
  var groupedTasks = tasks.filter(function (t) {
1518
2559
  return t.hideChildren && t.type === "project";
1519
2560
  });
1520
-
1521
2561
  if (groupedTasks.length > 0) {
1522
- var _loop = function _loop(i) {
2562
+ var _loop = function _loop() {
1523
2563
  var groupedTask = groupedTasks[i];
1524
2564
  var children = getChildren(tasks, groupedTask);
1525
2565
  tasks = tasks.filter(function (t) {
1526
2566
  return children.indexOf(t) === -1;
1527
2567
  });
1528
2568
  };
1529
-
1530
2569
  for (var i = 0; groupedTasks.length > i; i++) {
1531
- _loop(i);
2570
+ _loop();
1532
2571
  }
1533
2572
  }
1534
-
1535
2573
  return tasks;
1536
2574
  }
1537
-
1538
2575
  function getChildren(taskList, task) {
1539
2576
  var tasks = [];
1540
-
1541
2577
  if (task.type !== "project") {
1542
2578
  tasks = taskList.filter(function (t) {
1543
2579
  return t.dependencies && t.dependencies.indexOf(task.id) !== -1;
@@ -1547,7 +2583,6 @@ function getChildren(taskList, task) {
1547
2583
  return t.project && t.project === task.id;
1548
2584
  });
1549
2585
  }
1550
-
1551
2586
  var taskChildren = [];
1552
2587
  tasks.forEach(function (t) {
1553
2588
  taskChildren.push.apply(taskChildren, getChildren(taskList, t));
@@ -1555,11 +2590,9 @@ function getChildren(taskList, task) {
1555
2590
  tasks = tasks.concat(tasks, taskChildren);
1556
2591
  return tasks;
1557
2592
  }
1558
-
1559
2593
  var sortTasks = function sortTasks(taskA, taskB) {
1560
2594
  var orderA = taskA.displayOrder || Number.MAX_VALUE;
1561
2595
  var orderB = taskB.displayOrder || Number.MAX_VALUE;
1562
-
1563
2596
  if (orderA > orderB) {
1564
2597
  return 1;
1565
2598
  } else if (orderA < orderB) {
@@ -1573,24 +2606,21 @@ var styles$6 = {"barWrapper":"_KxSXS","barHandle":"_3w_5u","barBackground":"_31E
1573
2606
 
1574
2607
  var BarDisplay = function BarDisplay(_ref) {
1575
2608
  var x = _ref.x,
1576
- y = _ref.y,
1577
- width = _ref.width,
1578
- height = _ref.height,
1579
- isSelected = _ref.isSelected,
1580
- progressX = _ref.progressX,
1581
- progressWidth = _ref.progressWidth,
1582
- barCornerRadius = _ref.barCornerRadius,
1583
- styles = _ref.styles,
1584
- onMouseDown = _ref.onMouseDown;
1585
-
2609
+ y = _ref.y,
2610
+ width = _ref.width,
2611
+ height = _ref.height,
2612
+ isSelected = _ref.isSelected,
2613
+ progressX = _ref.progressX,
2614
+ progressWidth = _ref.progressWidth,
2615
+ barCornerRadius = _ref.barCornerRadius,
2616
+ styles = _ref.styles,
2617
+ onMouseDown = _ref.onMouseDown;
1586
2618
  var getProcessColor = function getProcessColor() {
1587
2619
  return isSelected ? styles.progressSelectedColor : styles.progressColor;
1588
2620
  };
1589
-
1590
2621
  var getBarColor = function getBarColor() {
1591
2622
  return isSelected ? styles.backgroundSelectedColor : styles.backgroundColor;
1592
2623
  };
1593
-
1594
2624
  return React.createElement("g", {
1595
2625
  onMouseDown: onMouseDown
1596
2626
  }, React.createElement("rect", {
@@ -1615,11 +2645,11 @@ var BarDisplay = function BarDisplay(_ref) {
1615
2645
 
1616
2646
  var BarDateHandle = function BarDateHandle(_ref) {
1617
2647
  var x = _ref.x,
1618
- y = _ref.y,
1619
- width = _ref.width,
1620
- height = _ref.height,
1621
- barCornerRadius = _ref.barCornerRadius,
1622
- onMouseDown = _ref.onMouseDown;
2648
+ y = _ref.y,
2649
+ width = _ref.width,
2650
+ height = _ref.height,
2651
+ barCornerRadius = _ref.barCornerRadius,
2652
+ onMouseDown = _ref.onMouseDown;
1623
2653
  return React.createElement("rect", {
1624
2654
  x: x,
1625
2655
  y: y,
@@ -1634,7 +2664,7 @@ var BarDateHandle = function BarDateHandle(_ref) {
1634
2664
 
1635
2665
  var BarProgressHandle = function BarProgressHandle(_ref) {
1636
2666
  var progressPoint = _ref.progressPoint,
1637
- onMouseDown = _ref.onMouseDown;
2667
+ onMouseDown = _ref.onMouseDown;
1638
2668
  return React.createElement("polygon", {
1639
2669
  className: styles$6.barHandle,
1640
2670
  points: progressPoint,
@@ -1644,11 +2674,11 @@ var BarProgressHandle = function BarProgressHandle(_ref) {
1644
2674
 
1645
2675
  var Bar = function Bar(_ref) {
1646
2676
  var task = _ref.task,
1647
- isProgressChangeable = _ref.isProgressChangeable,
1648
- isDateChangeable = _ref.isDateChangeable,
1649
- rtl = _ref.rtl,
1650
- onEventStart = _ref.onEventStart,
1651
- isSelected = _ref.isSelected;
2677
+ isProgressChangeable = _ref.isProgressChangeable,
2678
+ isDateChangeable = _ref.isDateChangeable,
2679
+ rtl = _ref.rtl,
2680
+ onEventStart = _ref.onEventStart,
2681
+ isSelected = _ref.isSelected;
1652
2682
  var progressPoint = getProgressPoint(+!rtl * task.progressWidth + task.progressX, task.y, task.height);
1653
2683
  var handleHeight = task.height - 2;
1654
2684
  return React.createElement("g", {
@@ -1697,10 +2727,10 @@ var Bar = function Bar(_ref) {
1697
2727
 
1698
2728
  var BarSmall = function BarSmall(_ref) {
1699
2729
  var task = _ref.task,
1700
- isProgressChangeable = _ref.isProgressChangeable,
1701
- isDateChangeable = _ref.isDateChangeable,
1702
- onEventStart = _ref.onEventStart,
1703
- isSelected = _ref.isSelected;
2730
+ isProgressChangeable = _ref.isProgressChangeable,
2731
+ isDateChangeable = _ref.isDateChangeable,
2732
+ onEventStart = _ref.onEventStart,
2733
+ isSelected = _ref.isSelected;
1704
2734
  var progressPoint = getProgressPoint(task.progressWidth + task.x1, task.y, task.height);
1705
2735
  return React.createElement("g", {
1706
2736
  className: styles$6.barWrapper,
@@ -1732,15 +2762,13 @@ var styles$7 = {"milestoneWrapper":"_RRr13","milestoneBackground":"_2P2B1"};
1732
2762
 
1733
2763
  var Milestone = function Milestone(_ref) {
1734
2764
  var task = _ref.task,
1735
- isDateChangeable = _ref.isDateChangeable,
1736
- onEventStart = _ref.onEventStart,
1737
- isSelected = _ref.isSelected;
2765
+ isDateChangeable = _ref.isDateChangeable,
2766
+ onEventStart = _ref.onEventStart,
2767
+ isSelected = _ref.isSelected;
1738
2768
  var transform = "rotate(45 " + (task.x1 + task.height * 0.356) + " \n " + (task.y + task.height * 0.85) + ")";
1739
-
1740
2769
  var getBarColor = function getBarColor() {
1741
2770
  return isSelected ? task.styles.backgroundSelectedColor : task.styles.backgroundColor;
1742
2771
  };
1743
-
1744
2772
  return React.createElement("g", {
1745
2773
  tabIndex: 0,
1746
2774
  className: styles$7.milestoneWrapper
@@ -1764,7 +2792,7 @@ var styles$8 = {"projectWrapper":"_1KJ6x","projectBackground":"_2RbVy","projectT
1764
2792
 
1765
2793
  var Project = function Project(_ref) {
1766
2794
  var task = _ref.task,
1767
- isSelected = _ref.isSelected;
2795
+ isSelected = _ref.isSelected;
1768
2796
  var barColor = isSelected ? task.styles.backgroundSelectedColor : task.styles.backgroundColor;
1769
2797
  var processColor = isSelected ? task.styles.progressSelectedColor : task.styles.progressColor;
1770
2798
  var projectWith = task.x2 - task.x1;
@@ -1810,68 +2838,79 @@ var Project = function Project(_ref) {
1810
2838
  }));
1811
2839
  };
1812
2840
 
1813
- var style = {"barLabel":"_3zRJQ","barLabelOutside":"_3KcaM"};
2841
+ var style = {"barLabel":"_3zRJQ","barLabelOutside":"_3KcaM","statusDot":"_3ITgM"};
1814
2842
 
1815
2843
  var TaskItem = function TaskItem(props) {
1816
2844
  var _props = _extends({}, props),
1817
- task = _props.task,
1818
- arrowIndent = _props.arrowIndent,
1819
- isDelete = _props.isDelete,
1820
- taskHeight = _props.taskHeight,
1821
- isSelected = _props.isSelected,
1822
- rtl = _props.rtl,
1823
- onEventStart = _props.onEventStart;
1824
-
2845
+ task = _props.task,
2846
+ arrowIndent = _props.arrowIndent,
2847
+ isDelete = _props.isDelete,
2848
+ taskHeight = _props.taskHeight,
2849
+ isSelected = _props.isSelected,
2850
+ rtl = _props.rtl,
2851
+ onEventStart = _props.onEventStart,
2852
+ isProgressChangeable = _props.isProgressChangeable,
2853
+ isDateChangeable = _props.isDateChangeable;
1825
2854
  var textRef = useRef(null);
1826
-
1827
2855
  var _useState = useState(React.createElement("div", null)),
1828
- taskItem = _useState[0],
1829
- setTaskItem = _useState[1];
1830
-
2856
+ taskItem = _useState[0],
2857
+ setTaskItem = _useState[1];
1831
2858
  var _useState2 = useState(true),
1832
- isTextInside = _useState2[0],
1833
- setIsTextInside = _useState2[1];
1834
-
2859
+ isTextInside = _useState2[0],
2860
+ setIsTextInside = _useState2[1];
2861
+ var normalizedStatus = normalizeStatus(task.status);
2862
+ var statusColor = getStatusColor(normalizedStatus);
2863
+ var statusBadgeText = getStatusBadgeText(normalizedStatus);
2864
+ var taskItemProps = useMemo(function () {
2865
+ return {
2866
+ task: task,
2867
+ arrowIndent: arrowIndent,
2868
+ taskHeight: taskHeight,
2869
+ isProgressChangeable: isProgressChangeable,
2870
+ isDateChangeable: isDateChangeable,
2871
+ isDelete: isDelete,
2872
+ isSelected: isSelected,
2873
+ rtl: rtl,
2874
+ onEventStart: onEventStart
2875
+ };
2876
+ }, [task, arrowIndent, taskHeight, isProgressChangeable, isDateChangeable, isDelete, isSelected, rtl, onEventStart]);
1835
2877
  useEffect(function () {
1836
2878
  switch (task.typeInternal) {
1837
2879
  case "milestone":
1838
- setTaskItem(React.createElement(Milestone, Object.assign({}, props)));
2880
+ setTaskItem(React.createElement(Milestone, Object.assign({}, taskItemProps)));
1839
2881
  break;
1840
-
1841
2882
  case "project":
1842
- setTaskItem(React.createElement(Project, Object.assign({}, props)));
2883
+ setTaskItem(React.createElement(Project, Object.assign({}, taskItemProps)));
1843
2884
  break;
1844
-
1845
2885
  case "smalltask":
1846
- setTaskItem(React.createElement(BarSmall, Object.assign({}, props)));
2886
+ setTaskItem(React.createElement(BarSmall, Object.assign({}, taskItemProps)));
1847
2887
  break;
1848
-
1849
2888
  default:
1850
- setTaskItem(React.createElement(Bar, Object.assign({}, props)));
2889
+ setTaskItem(React.createElement(Bar, Object.assign({}, taskItemProps)));
1851
2890
  break;
1852
2891
  }
1853
- }, [task, isSelected]);
1854
- useEffect(function () {
1855
- if (textRef.current) {
1856
- setIsTextInside(textRef.current.getBBox().width < task.x2 - task.x1);
2892
+ }, [task, taskItemProps]);
2893
+ var getBBoxWidth = function getBBoxWidth() {
2894
+ if (!textRef.current || typeof textRef.current.getBBox !== "function") {
2895
+ return 0;
1857
2896
  }
2897
+ return textRef.current.getBBox().width;
2898
+ };
2899
+ useEffect(function () {
2900
+ setIsTextInside(getBBoxWidth() < task.x2 - task.x1);
1858
2901
  }, [textRef, task]);
1859
-
1860
2902
  var getX = function getX() {
1861
2903
  var width = task.x2 - task.x1;
1862
2904
  var hasChild = task.barChildren.length > 0;
1863
-
1864
2905
  if (isTextInside) {
1865
2906
  return task.x1 + width * 0.5;
1866
2907
  }
1867
-
1868
2908
  if (rtl && textRef.current) {
1869
- return task.x1 - textRef.current.getBBox().width - arrowIndent * +hasChild - arrowIndent * 0.2;
2909
+ return task.x1 - getBBoxWidth() - arrowIndent * +hasChild - arrowIndent * 0.2;
1870
2910
  } else {
1871
2911
  return task.x1 + width + arrowIndent * +hasChild + arrowIndent * 0.2;
1872
2912
  }
1873
2913
  };
1874
-
1875
2914
  return React.createElement("g", {
1876
2915
  onKeyDown: function onKeyDown(e) {
1877
2916
  switch (e.key) {
@@ -1881,7 +2920,6 @@ var TaskItem = function TaskItem(props) {
1881
2920
  break;
1882
2921
  }
1883
2922
  }
1884
-
1885
2923
  e.stopPropagation();
1886
2924
  },
1887
2925
  onMouseEnter: function onMouseEnter(e) {
@@ -1904,48 +2942,47 @@ var TaskItem = function TaskItem(props) {
1904
2942
  y: task.y + taskHeight * 0.5,
1905
2943
  className: isTextInside ? style.barLabel : style.barLabelOutside,
1906
2944
  ref: textRef
1907
- }, task.name));
2945
+ }, !!statusBadgeText && React.createElement("tspan", {
2946
+ className: style.statusDot,
2947
+ fill: statusColor
2948
+ }, "\u25CF"), React.createElement("tspan", {
2949
+ dx: statusBadgeText ? 4 : 0
2950
+ }, task.name)));
1908
2951
  };
1909
2952
 
1910
2953
  var TaskGanttContent = function TaskGanttContent(_ref) {
1911
- var _svg$current;
1912
-
1913
2954
  var tasks = _ref.tasks,
1914
- dates = _ref.dates,
1915
- ganttEvent = _ref.ganttEvent,
1916
- selectedTask = _ref.selectedTask,
1917
- rowHeight = _ref.rowHeight,
1918
- columnWidth = _ref.columnWidth,
1919
- timeStep = _ref.timeStep,
1920
- svg = _ref.svg,
1921
- taskHeight = _ref.taskHeight,
1922
- arrowColor = _ref.arrowColor,
1923
- arrowIndent = _ref.arrowIndent,
1924
- fontFamily = _ref.fontFamily,
1925
- fontSize = _ref.fontSize,
1926
- rtl = _ref.rtl,
1927
- setGanttEvent = _ref.setGanttEvent,
1928
- setFailedTask = _ref.setFailedTask,
1929
- setSelectedTask = _ref.setSelectedTask,
1930
- onDateChange = _ref.onDateChange,
1931
- onProgressChange = _ref.onProgressChange,
1932
- onDoubleClick = _ref.onDoubleClick,
1933
- onClick = _ref.onClick,
1934
- onDelete = _ref.onDelete;
1935
- var point = svg === null || svg === void 0 ? void 0 : (_svg$current = svg.current) === null || _svg$current === void 0 ? void 0 : _svg$current.createSVGPoint();
1936
-
2955
+ dates = _ref.dates,
2956
+ ganttEvent = _ref.ganttEvent,
2957
+ selectedTask = _ref.selectedTask,
2958
+ rowHeight = _ref.rowHeight,
2959
+ columnWidth = _ref.columnWidth,
2960
+ timeStep = _ref.timeStep,
2961
+ svg = _ref.svg,
2962
+ taskHeight = _ref.taskHeight,
2963
+ arrowColor = _ref.arrowColor,
2964
+ arrowIndent = _ref.arrowIndent,
2965
+ fontFamily = _ref.fontFamily,
2966
+ fontSize = _ref.fontSize,
2967
+ rtl = _ref.rtl,
2968
+ setGanttEvent = _ref.setGanttEvent,
2969
+ setFailedTask = _ref.setFailedTask,
2970
+ setSelectedTask = _ref.setSelectedTask,
2971
+ onDateChange = _ref.onDateChange,
2972
+ onProgressChange = _ref.onProgressChange,
2973
+ onDoubleClick = _ref.onDoubleClick,
2974
+ onClick = _ref.onClick,
2975
+ onDelete = _ref.onDelete;
2976
+ var point = svg !== null && svg !== void 0 && svg.current && "createSVGPoint" in svg.current ? svg.current.createSVGPoint() : undefined;
1937
2977
  var _useState = useState(0),
1938
- xStep = _useState[0],
1939
- setXStep = _useState[1];
1940
-
2978
+ xStep = _useState[0],
2979
+ setXStep = _useState[1];
1941
2980
  var _useState2 = useState(0),
1942
- initEventX1Delta = _useState2[0],
1943
- setInitEventX1Delta = _useState2[1];
1944
-
2981
+ initEventX1Delta = _useState2[0],
2982
+ setInitEventX1Delta = _useState2[1];
1945
2983
  var _useState3 = useState(false),
1946
- isMoving = _useState3[0],
1947
- setIsMoving = _useState3[1];
1948
-
2984
+ isMoving = _useState3[0],
2985
+ setIsMoving = _useState3[1];
1949
2986
  useEffect(function () {
1950
2987
  var dateDelta = dates[1].getTime() - dates[0].getTime() - dates[1].getTimezoneOffset() * 60 * 1000 + dates[0].getTimezoneOffset() * 60 * 1000;
1951
2988
  var newXStep = timeStep * columnWidth / dateDelta;
@@ -1955,62 +2992,52 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
1955
2992
  var handleMouseMove = function handleMouseMove(event) {
1956
2993
  try {
1957
2994
  var _svg$current$getScree;
1958
-
1959
2995
  if (!ganttEvent.changedTask || !point || !(svg !== null && svg !== void 0 && svg.current)) return Promise.resolve();
1960
2996
  event.preventDefault();
1961
2997
  point.x = event.clientX;
1962
2998
  var cursor = point.matrixTransform(svg === null || svg === void 0 ? void 0 : (_svg$current$getScree = svg.current.getScreenCTM()) === null || _svg$current$getScree === void 0 ? void 0 : _svg$current$getScree.inverse());
1963
-
1964
2999
  var _handleTaskBySVGMouse = handleTaskBySVGMouseEvent(cursor.x, ganttEvent.action, ganttEvent.changedTask, xStep, timeStep, initEventX1Delta, rtl),
1965
- isChanged = _handleTaskBySVGMouse.isChanged,
1966
- changedTask = _handleTaskBySVGMouse.changedTask;
1967
-
3000
+ isChanged = _handleTaskBySVGMouse.isChanged,
3001
+ changedTask = _handleTaskBySVGMouse.changedTask;
1968
3002
  if (isChanged) {
1969
3003
  setGanttEvent({
1970
3004
  action: ganttEvent.action,
1971
3005
  changedTask: changedTask
1972
3006
  });
1973
3007
  }
1974
-
1975
3008
  return Promise.resolve();
1976
3009
  } catch (e) {
1977
3010
  return Promise.reject(e);
1978
3011
  }
1979
3012
  };
1980
-
1981
- var handleMouseUp = function handleMouseUp(event) {
3013
+ var _handleMouseUp = function handleMouseUp(event) {
1982
3014
  try {
1983
3015
  var _svg$current$getScree2;
1984
-
1985
- var _temp6 = function _temp6() {
3016
+ var _temp5 = function _temp5() {
1986
3017
  if (!operationSuccess) {
1987
3018
  setFailedTask(originalSelectedTask);
1988
3019
  }
1989
3020
  };
1990
-
1991
3021
  var action = ganttEvent.action,
1992
- originalSelectedTask = ganttEvent.originalSelectedTask,
1993
- changedTask = ganttEvent.changedTask;
3022
+ originalSelectedTask = ganttEvent.originalSelectedTask,
3023
+ changedTask = ganttEvent.changedTask;
1994
3024
  if (!changedTask || !point || !(svg !== null && svg !== void 0 && svg.current) || !originalSelectedTask) return Promise.resolve();
1995
3025
  event.preventDefault();
1996
3026
  point.x = event.clientX;
1997
3027
  var cursor = point.matrixTransform(svg === null || svg === void 0 ? void 0 : (_svg$current$getScree2 = svg.current.getScreenCTM()) === null || _svg$current$getScree2 === void 0 ? void 0 : _svg$current$getScree2.inverse());
1998
-
1999
3028
  var _handleTaskBySVGMouse2 = handleTaskBySVGMouseEvent(cursor.x, action, changedTask, xStep, timeStep, initEventX1Delta, rtl),
2000
- newChangedTask = _handleTaskBySVGMouse2.changedTask;
2001
-
3029
+ newChangedTask = _handleTaskBySVGMouse2.changedTask;
2002
3030
  var isNotLikeOriginal = originalSelectedTask.start !== newChangedTask.start || originalSelectedTask.end !== newChangedTask.end || originalSelectedTask.progress !== newChangedTask.progress;
2003
3031
  svg.current.removeEventListener("mousemove", handleMouseMove);
2004
- svg.current.removeEventListener("mouseup", handleMouseUp);
3032
+ svg.current.removeEventListener("mouseup", _handleMouseUp);
2005
3033
  setGanttEvent({
2006
3034
  action: ""
2007
3035
  });
2008
3036
  setIsMoving(false);
2009
3037
  var operationSuccess = true;
2010
-
2011
- var _temp7 = function () {
3038
+ var _temp4 = function () {
2012
3039
  if ((action === "move" || action === "end" || action === "start") && onDateChange && isNotLikeOriginal) {
2013
- var _temp8 = _catch(function () {
3040
+ var _temp = _catch(function () {
2014
3041
  return Promise.resolve(onDateChange(newChangedTask, newChangedTask.barChildren)).then(function (result) {
2015
3042
  if (result !== undefined) {
2016
3043
  operationSuccess = result;
@@ -2019,12 +3046,11 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2019
3046
  }, function () {
2020
3047
  operationSuccess = false;
2021
3048
  });
2022
-
2023
- if (_temp8 && _temp8.then) return _temp8.then(function () {});
3049
+ if (_temp && _temp.then) return _temp.then(function () {});
2024
3050
  } else {
2025
- var _temp9 = function () {
3051
+ var _temp6 = function () {
2026
3052
  if (onProgressChange && isNotLikeOriginal) {
2027
- var _temp10 = _catch(function () {
3053
+ var _temp2 = _catch(function () {
2028
3054
  return Promise.resolve(onProgressChange(newChangedTask, newChangedTask.barChildren)).then(function (result) {
2029
3055
  if (result !== undefined) {
2030
3056
  operationSuccess = result;
@@ -2033,28 +3059,23 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2033
3059
  }, function () {
2034
3060
  operationSuccess = false;
2035
3061
  });
2036
-
2037
- if (_temp10 && _temp10.then) return _temp10.then(function () {});
3062
+ if (_temp2 && _temp2.then) return _temp2.then(function () {});
2038
3063
  }
2039
3064
  }();
2040
-
2041
- if (_temp9 && _temp9.then) return _temp9.then(function () {});
3065
+ if (_temp6 && _temp6.then) return _temp6.then(function () {});
2042
3066
  }
2043
3067
  }();
2044
-
2045
- return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(_temp6) : _temp6(_temp7));
3068
+ return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp5) : _temp5(_temp4));
2046
3069
  } catch (e) {
2047
3070
  return Promise.reject(e);
2048
3071
  }
2049
3072
  };
2050
-
2051
3073
  if (!isMoving && (ganttEvent.action === "move" || ganttEvent.action === "end" || ganttEvent.action === "start" || ganttEvent.action === "progress") && svg !== null && svg !== void 0 && svg.current) {
2052
3074
  svg.current.addEventListener("mousemove", handleMouseMove);
2053
- svg.current.addEventListener("mouseup", handleMouseUp);
3075
+ svg.current.addEventListener("mouseup", _handleMouseUp);
2054
3076
  setIsMoving(true);
2055
3077
  }
2056
3078
  }, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, svg, isMoving, point, rtl, setFailedTask, setGanttEvent]);
2057
-
2058
3079
  var handleBarEventStart = function handleBarEventStart(action, task, event) {
2059
3080
  try {
2060
3081
  return Promise.resolve(function () {
@@ -2064,11 +3085,11 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2064
3085
  }
2065
3086
  } else return function () {
2066
3087
  if (isKeyboardEvent(event)) {
2067
- var _temp14 = function () {
3088
+ var _temp9 = function () {
2068
3089
  if (action === "delete") {
2069
- var _temp15 = function () {
3090
+ var _temp8 = function () {
2070
3091
  if (onDelete) {
2071
- var _temp16 = _catch(function () {
3092
+ var _temp7 = _catch(function () {
2072
3093
  return Promise.resolve(onDelete(task)).then(function (result) {
2073
3094
  if (result !== undefined && result) {
2074
3095
  setGanttEvent({
@@ -2080,16 +3101,13 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2080
3101
  }, function (error) {
2081
3102
  console.error("Error on Delete. " + error);
2082
3103
  });
2083
-
2084
- if (_temp16 && _temp16.then) return _temp16.then(function () {});
3104
+ if (_temp7 && _temp7.then) return _temp7.then(function () {});
2085
3105
  }
2086
3106
  }();
2087
-
2088
- if (_temp15 && _temp15.then) return _temp15.then(function () {});
3107
+ if (_temp8 && _temp8.then) return _temp8.then(function () {});
2089
3108
  }
2090
3109
  }();
2091
-
2092
- if (_temp14 && _temp14.then) return _temp14.then(function () {});
3110
+ if (_temp9 && _temp9.then) return _temp9.then(function () {});
2093
3111
  } else if (action === "mouseenter") {
2094
3112
  if (!ganttEvent.action) {
2095
3113
  setGanttEvent({
@@ -2110,7 +3128,6 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2110
3128
  !!onClick && onClick(task);
2111
3129
  } else if (action === "move") {
2112
3130
  var _svg$current$getScree3;
2113
-
2114
3131
  if (!(svg !== null && svg !== void 0 && svg.current) || !point) return;
2115
3132
  point.x = event.clientX;
2116
3133
  var cursor = point.matrixTransform((_svg$current$getScree3 = svg.current.getScreenCTM()) === null || _svg$current$getScree3 === void 0 ? void 0 : _svg$current$getScree3.inverse());
@@ -2133,7 +3150,6 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2133
3150
  return Promise.reject(e);
2134
3151
  }
2135
3152
  };
2136
-
2137
3153
  return React.createElement("g", {
2138
3154
  className: "content"
2139
3155
  }, React.createElement("g", {
@@ -2172,36 +3188,36 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2172
3188
  })));
2173
3189
  };
2174
3190
 
2175
- var styles$9 = {"ganttVerticalContainer":"_CZjuD","horizontalContainer":"_2B2zv","wrapper":"_3eULf"};
3191
+ var styles$9 = {"ganttVerticalContainer":"_CZjuD","horizontalContainer":"_2B2zv","wrapper":"_3eULf","taskListPanel":"_3eX5j","splitHandle":"_1YST3","splitHandleActive":"_3cO1L","ganttPanel":"_1G4xA","scrollRow":"_2VUKJ","scrollCellLeft":"_1vvPx","scrollCellRight":"_3sIUT","scrollSplitter":"_3gMam"};
2176
3192
 
2177
3193
  var TaskGantt = function TaskGantt(_ref) {
2178
3194
  var gridProps = _ref.gridProps,
2179
- calendarProps = _ref.calendarProps,
2180
- barProps = _ref.barProps,
2181
- ganttHeight = _ref.ganttHeight,
2182
- scrollY = _ref.scrollY,
2183
- scrollX = _ref.scrollX;
3195
+ calendarProps = _ref.calendarProps,
3196
+ barProps = _ref.barProps,
3197
+ ganttHeight = _ref.ganttHeight,
3198
+ scrollY = _ref.scrollY,
3199
+ scrollX = _ref.scrollX,
3200
+ verticalGanttContainerRef = _ref.verticalGanttContainerRef;
2184
3201
  var ganttSVGRef = useRef(null);
2185
3202
  var horizontalContainerRef = useRef(null);
2186
- var verticalGanttContainerRef = useRef(null);
2187
-
3203
+ var internalVerticalRef = useRef(null);
3204
+ var ganttContainerRef = verticalGanttContainerRef || internalVerticalRef;
2188
3205
  var newBarProps = _extends({}, barProps, {
2189
3206
  svg: ganttSVGRef
2190
3207
  });
2191
-
2192
3208
  useEffect(function () {
2193
3209
  if (horizontalContainerRef.current) {
2194
3210
  horizontalContainerRef.current.scrollTop = scrollY;
2195
3211
  }
2196
3212
  }, [scrollY]);
2197
3213
  useEffect(function () {
2198
- if (verticalGanttContainerRef.current) {
2199
- verticalGanttContainerRef.current.scrollLeft = scrollX;
3214
+ if (ganttContainerRef.current) {
3215
+ ganttContainerRef.current.scrollLeft = scrollX;
2200
3216
  }
2201
- }, [scrollX]);
3217
+ }, [scrollX, ganttContainerRef]);
2202
3218
  return React.createElement("div", {
2203
3219
  className: styles$9.ganttVerticalContainer,
2204
- ref: verticalGanttContainerRef,
3220
+ ref: ganttContainerRef,
2205
3221
  dir: "ltr"
2206
3222
  }, React.createElement("svg", {
2207
3223
  xmlns: "http://www.w3.org/2000/svg",
@@ -2230,223 +3246,237 @@ var styles$a = {"scrollWrapper":"_2k9Ys","scroll":"_19jgW"};
2230
3246
 
2231
3247
  var HorizontalScroll = function HorizontalScroll(_ref) {
2232
3248
  var scroll = _ref.scroll,
2233
- svgWidth = _ref.svgWidth,
2234
- taskListWidth = _ref.taskListWidth,
2235
- rtl = _ref.rtl,
2236
- onScroll = _ref.onScroll;
3249
+ svgWidth = _ref.svgWidth,
3250
+ scrollerWidth = _ref.scrollerWidth,
3251
+ rtl = _ref.rtl,
3252
+ onScroll = _ref.onScroll,
3253
+ dataTestId = _ref["data-testid"],
3254
+ containerRef = _ref.containerRef,
3255
+ hidden = _ref.hidden;
2237
3256
  var scrollRef = useRef(null);
3257
+ var wrapperRef = containerRef != null ? containerRef : scrollRef;
2238
3258
  useEffect(function () {
2239
- if (scrollRef.current) {
2240
- scrollRef.current.scrollLeft = scroll;
3259
+ if (wrapperRef.current) {
3260
+ wrapperRef.current.scrollLeft = scroll;
2241
3261
  }
2242
- }, [scroll]);
3262
+ }, [scroll, wrapperRef]);
2243
3263
  return React.createElement("div", {
2244
- dir: "ltr",
2245
- style: {
2246
- margin: rtl ? "0px " + taskListWidth + "px 0px 0px" : "0px 0px 0px " + taskListWidth + "px"
2247
- },
3264
+ dir: rtl ? "rtl" : "ltr",
2248
3265
  className: styles$a.scrollWrapper,
2249
3266
  onScroll: onScroll,
2250
- ref: scrollRef
3267
+ ref: wrapperRef,
3268
+ "data-testid": dataTestId,
3269
+ style: hidden ? {
3270
+ display: "none"
3271
+ } : {
3272
+ width: svgWidth
3273
+ }
2251
3274
  }, React.createElement("div", {
2252
3275
  style: {
2253
- width: svgWidth
3276
+ width: scrollerWidth != null ? scrollerWidth : svgWidth
2254
3277
  },
2255
3278
  className: styles$a.scroll
2256
3279
  }));
2257
3280
  };
2258
3281
 
3282
+ var DEFAULT_TASK_LIST_WIDTH = 450;
3283
+ var MIN_PANE_WIDTH = 150;
3284
+ var SPLIT_HANDLE_WIDTH = 8;
3285
+ var clampTaskListWidth = function clampTaskListWidth(width, containerWidth) {
3286
+ var maxWidth = Math.max(MIN_PANE_WIDTH, containerWidth - MIN_PANE_WIDTH - SPLIT_HANDLE_WIDTH);
3287
+ return Math.min(Math.max(width, MIN_PANE_WIDTH), maxWidth);
3288
+ };
2259
3289
  var Gantt = function Gantt(_ref) {
2260
3290
  var tasks = _ref.tasks,
2261
- _ref$headerHeight = _ref.headerHeight,
2262
- headerHeight = _ref$headerHeight === void 0 ? 50 : _ref$headerHeight,
2263
- _ref$columnWidth = _ref.columnWidth,
2264
- columnWidth = _ref$columnWidth === void 0 ? 60 : _ref$columnWidth,
2265
- _ref$listCellWidth = _ref.listCellWidth,
2266
- listCellWidth = _ref$listCellWidth === void 0 ? "155px" : _ref$listCellWidth,
2267
- _ref$rowHeight = _ref.rowHeight,
2268
- rowHeight = _ref$rowHeight === void 0 ? 50 : _ref$rowHeight,
2269
- _ref$ganttHeight = _ref.ganttHeight,
2270
- ganttHeight = _ref$ganttHeight === void 0 ? 0 : _ref$ganttHeight,
2271
- _ref$viewMode = _ref.viewMode,
2272
- viewMode = _ref$viewMode === void 0 ? ViewMode.Day : _ref$viewMode,
2273
- _ref$preStepsCount = _ref.preStepsCount,
2274
- preStepsCount = _ref$preStepsCount === void 0 ? 1 : _ref$preStepsCount,
2275
- _ref$locale = _ref.locale,
2276
- locale = _ref$locale === void 0 ? "en-GB" : _ref$locale,
2277
- _ref$barFill = _ref.barFill,
2278
- barFill = _ref$barFill === void 0 ? 60 : _ref$barFill,
2279
- _ref$barCornerRadius = _ref.barCornerRadius,
2280
- barCornerRadius = _ref$barCornerRadius === void 0 ? 3 : _ref$barCornerRadius,
2281
- _ref$barProgressColor = _ref.barProgressColor,
2282
- barProgressColor = _ref$barProgressColor === void 0 ? "#a3a3ff" : _ref$barProgressColor,
2283
- _ref$barProgressSelec = _ref.barProgressSelectedColor,
2284
- barProgressSelectedColor = _ref$barProgressSelec === void 0 ? "#8282f5" : _ref$barProgressSelec,
2285
- _ref$barBackgroundCol = _ref.barBackgroundColor,
2286
- barBackgroundColor = _ref$barBackgroundCol === void 0 ? "#b8c2cc" : _ref$barBackgroundCol,
2287
- _ref$barBackgroundSel = _ref.barBackgroundSelectedColor,
2288
- barBackgroundSelectedColor = _ref$barBackgroundSel === void 0 ? "#aeb8c2" : _ref$barBackgroundSel,
2289
- _ref$projectProgressC = _ref.projectProgressColor,
2290
- projectProgressColor = _ref$projectProgressC === void 0 ? "#7db59a" : _ref$projectProgressC,
2291
- _ref$projectProgressS = _ref.projectProgressSelectedColor,
2292
- projectProgressSelectedColor = _ref$projectProgressS === void 0 ? "#59a985" : _ref$projectProgressS,
2293
- _ref$projectBackgroun = _ref.projectBackgroundColor,
2294
- projectBackgroundColor = _ref$projectBackgroun === void 0 ? "#fac465" : _ref$projectBackgroun,
2295
- _ref$projectBackgroun2 = _ref.projectBackgroundSelectedColor,
2296
- projectBackgroundSelectedColor = _ref$projectBackgroun2 === void 0 ? "#f7bb53" : _ref$projectBackgroun2,
2297
- _ref$milestoneBackgro = _ref.milestoneBackgroundColor,
2298
- milestoneBackgroundColor = _ref$milestoneBackgro === void 0 ? "#f1c453" : _ref$milestoneBackgro,
2299
- _ref$milestoneBackgro2 = _ref.milestoneBackgroundSelectedColor,
2300
- milestoneBackgroundSelectedColor = _ref$milestoneBackgro2 === void 0 ? "#f29e4c" : _ref$milestoneBackgro2,
2301
- _ref$rtl = _ref.rtl,
2302
- rtl = _ref$rtl === void 0 ? false : _ref$rtl,
2303
- _ref$handleWidth = _ref.handleWidth,
2304
- handleWidth = _ref$handleWidth === void 0 ? 8 : _ref$handleWidth,
2305
- _ref$timeStep = _ref.timeStep,
2306
- timeStep = _ref$timeStep === void 0 ? 300000 : _ref$timeStep,
2307
- _ref$arrowColor = _ref.arrowColor,
2308
- arrowColor = _ref$arrowColor === void 0 ? "grey" : _ref$arrowColor,
2309
- _ref$fontFamily = _ref.fontFamily,
2310
- fontFamily = _ref$fontFamily === void 0 ? "Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue" : _ref$fontFamily,
2311
- _ref$fontSize = _ref.fontSize,
2312
- fontSize = _ref$fontSize === void 0 ? "14px" : _ref$fontSize,
2313
- _ref$arrowIndent = _ref.arrowIndent,
2314
- arrowIndent = _ref$arrowIndent === void 0 ? 20 : _ref$arrowIndent,
2315
- _ref$todayColor = _ref.todayColor,
2316
- todayColor = _ref$todayColor === void 0 ? "rgba(252, 248, 227, 0.5)" : _ref$todayColor,
2317
- viewDate = _ref.viewDate,
2318
- _ref$TooltipContent = _ref.TooltipContent,
2319
- TooltipContent = _ref$TooltipContent === void 0 ? StandardTooltipContent : _ref$TooltipContent,
2320
- _ref$TaskListHeader = _ref.TaskListHeader,
2321
- TaskListHeader = _ref$TaskListHeader === void 0 ? TaskListHeaderDefault : _ref$TaskListHeader,
2322
- _ref$TaskListTable = _ref.TaskListTable,
2323
- TaskListTable = _ref$TaskListTable === void 0 ? TaskListTableDefault : _ref$TaskListTable,
2324
- onDateChange = _ref.onDateChange,
2325
- onProgressChange = _ref.onProgressChange,
2326
- onDoubleClick = _ref.onDoubleClick,
2327
- onClick = _ref.onClick,
2328
- onDelete = _ref.onDelete,
2329
- onSelect = _ref.onSelect,
2330
- onExpanderClick = _ref.onExpanderClick;
3291
+ _ref$headerHeight = _ref.headerHeight,
3292
+ headerHeight = _ref$headerHeight === void 0 ? 50 : _ref$headerHeight,
3293
+ _ref$columnWidth = _ref.columnWidth,
3294
+ columnWidth = _ref$columnWidth === void 0 ? 60 : _ref$columnWidth,
3295
+ _ref$listCellWidth = _ref.listCellWidth,
3296
+ listCellWidth = _ref$listCellWidth === void 0 ? "155px" : _ref$listCellWidth,
3297
+ _ref$rowHeight = _ref.rowHeight,
3298
+ rowHeight = _ref$rowHeight === void 0 ? 50 : _ref$rowHeight,
3299
+ _ref$ganttHeight = _ref.ganttHeight,
3300
+ ganttHeight = _ref$ganttHeight === void 0 ? 0 : _ref$ganttHeight,
3301
+ _ref$viewMode = _ref.viewMode,
3302
+ viewMode = _ref$viewMode === void 0 ? ViewMode.Day : _ref$viewMode,
3303
+ _ref$preStepsCount = _ref.preStepsCount,
3304
+ preStepsCount = _ref$preStepsCount === void 0 ? 1 : _ref$preStepsCount,
3305
+ _ref$locale = _ref.locale,
3306
+ locale = _ref$locale === void 0 ? "en-GB" : _ref$locale,
3307
+ _ref$barFill = _ref.barFill,
3308
+ barFill = _ref$barFill === void 0 ? 60 : _ref$barFill,
3309
+ _ref$barCornerRadius = _ref.barCornerRadius,
3310
+ barCornerRadius = _ref$barCornerRadius === void 0 ? 3 : _ref$barCornerRadius,
3311
+ _ref$barProgressColor = _ref.barProgressColor,
3312
+ barProgressColor = _ref$barProgressColor === void 0 ? "#a3a3ff" : _ref$barProgressColor,
3313
+ _ref$barProgressSelec = _ref.barProgressSelectedColor,
3314
+ barProgressSelectedColor = _ref$barProgressSelec === void 0 ? "#8282f5" : _ref$barProgressSelec,
3315
+ _ref$barBackgroundCol = _ref.barBackgroundColor,
3316
+ barBackgroundColor = _ref$barBackgroundCol === void 0 ? "#b8c2cc" : _ref$barBackgroundCol,
3317
+ _ref$barBackgroundSel = _ref.barBackgroundSelectedColor,
3318
+ barBackgroundSelectedColor = _ref$barBackgroundSel === void 0 ? "#aeb8c2" : _ref$barBackgroundSel,
3319
+ _ref$projectProgressC = _ref.projectProgressColor,
3320
+ projectProgressColor = _ref$projectProgressC === void 0 ? "#7db59a" : _ref$projectProgressC,
3321
+ _ref$projectProgressS = _ref.projectProgressSelectedColor,
3322
+ projectProgressSelectedColor = _ref$projectProgressS === void 0 ? "#59a985" : _ref$projectProgressS,
3323
+ _ref$projectBackgroun = _ref.projectBackgroundColor,
3324
+ projectBackgroundColor = _ref$projectBackgroun === void 0 ? "#fac465" : _ref$projectBackgroun,
3325
+ _ref$projectBackgroun2 = _ref.projectBackgroundSelectedColor,
3326
+ projectBackgroundSelectedColor = _ref$projectBackgroun2 === void 0 ? "#f7bb53" : _ref$projectBackgroun2,
3327
+ _ref$milestoneBackgro = _ref.milestoneBackgroundColor,
3328
+ milestoneBackgroundColor = _ref$milestoneBackgro === void 0 ? "#f1c453" : _ref$milestoneBackgro,
3329
+ _ref$milestoneBackgro2 = _ref.milestoneBackgroundSelectedColor,
3330
+ milestoneBackgroundSelectedColor = _ref$milestoneBackgro2 === void 0 ? "#f29e4c" : _ref$milestoneBackgro2,
3331
+ _ref$rtl = _ref.rtl,
3332
+ rtl = _ref$rtl === void 0 ? false : _ref$rtl,
3333
+ _ref$handleWidth = _ref.handleWidth,
3334
+ handleWidth = _ref$handleWidth === void 0 ? 8 : _ref$handleWidth,
3335
+ _ref$timeStep = _ref.timeStep,
3336
+ timeStep = _ref$timeStep === void 0 ? 300000 : _ref$timeStep,
3337
+ _ref$arrowColor = _ref.arrowColor,
3338
+ arrowColor = _ref$arrowColor === void 0 ? "grey" : _ref$arrowColor,
3339
+ _ref$fontFamily = _ref.fontFamily,
3340
+ fontFamily = _ref$fontFamily === void 0 ? "Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue" : _ref$fontFamily,
3341
+ _ref$fontSize = _ref.fontSize,
3342
+ fontSize = _ref$fontSize === void 0 ? "14px" : _ref$fontSize,
3343
+ _ref$arrowIndent = _ref.arrowIndent,
3344
+ arrowIndent = _ref$arrowIndent === void 0 ? 20 : _ref$arrowIndent,
3345
+ _ref$todayColor = _ref.todayColor,
3346
+ todayColor = _ref$todayColor === void 0 ? "rgba(252, 248, 227, 0.5)" : _ref$todayColor,
3347
+ viewDate = _ref.viewDate,
3348
+ _ref$TooltipContent = _ref.TooltipContent,
3349
+ TooltipContent = _ref$TooltipContent === void 0 ? StandardTooltipContent : _ref$TooltipContent,
3350
+ _ref$TaskListHeader = _ref.TaskListHeader,
3351
+ TaskListHeader = _ref$TaskListHeader === void 0 ? TaskListHeaderDefault : _ref$TaskListHeader,
3352
+ _ref$TaskListTable = _ref.TaskListTable,
3353
+ TaskListTable = _ref$TaskListTable === void 0 ? TaskListTableDefault : _ref$TaskListTable,
3354
+ _ref$visibleFields = _ref.visibleFields,
3355
+ visibleFields = _ref$visibleFields === void 0 ? DEFAULT_VISIBLE_FIELDS : _ref$visibleFields,
3356
+ _ref$effortDisplayUni = _ref.effortDisplayUnit,
3357
+ effortDisplayUnit = _ref$effortDisplayUni === void 0 ? "MH" : _ref$effortDisplayUni,
3358
+ enableColumnDrag = _ref.enableColumnDrag,
3359
+ onDateChange = _ref.onDateChange,
3360
+ onProgressChange = _ref.onProgressChange,
3361
+ onDoubleClick = _ref.onDoubleClick,
3362
+ onClick = _ref.onClick,
3363
+ onDelete = _ref.onDelete,
3364
+ onSelect = _ref.onSelect,
3365
+ onExpanderClick = _ref.onExpanderClick,
3366
+ onTaskUpdate = _ref.onTaskUpdate,
3367
+ onCellCommit = _ref.onCellCommit;
2331
3368
  var wrapperRef = useRef(null);
2332
3369
  var taskListRef = useRef(null);
2333
-
3370
+ var taskListHeaderRef = useRef(null);
3371
+ var taskListBodyRef = useRef(null);
3372
+ var ganttContainerRef = useRef(null);
3373
+ var splitStartXRef = useRef(null);
3374
+ var splitStartWidthRef = useRef(null);
3375
+ var splitMoveHandlerRef = useRef(null);
3376
+ var splitUpHandlerRef = useRef(null);
3377
+ var supportsPointerEvents = typeof window !== "undefined" && "PointerEvent" in window;
2334
3378
  var _useState = useState(function () {
2335
- var _ganttDateRange = ganttDateRange(tasks, viewMode, preStepsCount),
3379
+ var _ganttDateRange = ganttDateRange(tasks, viewMode, preStepsCount),
2336
3380
  startDate = _ganttDateRange[0],
2337
3381
  endDate = _ganttDateRange[1];
2338
-
2339
- return {
2340
- viewMode: viewMode,
2341
- dates: seedDates(startDate, endDate, viewMode)
2342
- };
2343
- }),
2344
- dateSetup = _useState[0],
2345
- setDateSetup = _useState[1];
2346
-
3382
+ return {
3383
+ viewMode: viewMode,
3384
+ dates: seedDates(startDate, endDate, viewMode)
3385
+ };
3386
+ }),
3387
+ dateSetup = _useState[0],
3388
+ setDateSetup = _useState[1];
2347
3389
  var _useState2 = useState(undefined),
2348
- currentViewDate = _useState2[0],
2349
- setCurrentViewDate = _useState2[1];
2350
-
2351
- var _useState3 = useState(0),
2352
- taskListWidth = _useState3[0],
2353
- setTaskListWidth = _useState3[1];
2354
-
3390
+ currentViewDate = _useState2[0],
3391
+ setCurrentViewDate = _useState2[1];
3392
+ var _useState3 = useState(DEFAULT_TASK_LIST_WIDTH),
3393
+ taskListWidth = _useState3[0],
3394
+ setTaskListWidth = _useState3[1];
2355
3395
  var _useState4 = useState(0),
2356
- svgContainerWidth = _useState4[0],
2357
- setSvgContainerWidth = _useState4[1];
2358
-
2359
- var _useState5 = useState(ganttHeight),
2360
- svgContainerHeight = _useState5[0],
2361
- setSvgContainerHeight = _useState5[1];
2362
-
2363
- var _useState6 = useState([]),
2364
- barTasks = _useState6[0],
2365
- setBarTasks = _useState6[1];
2366
-
2367
- var _useState7 = useState({
2368
- action: ""
2369
- }),
2370
- ganttEvent = _useState7[0],
2371
- setGanttEvent = _useState7[1];
2372
-
3396
+ wrapperWidth = _useState4[0],
3397
+ setWrapperWidth = _useState4[1];
3398
+ var _useState5 = useState(false),
3399
+ isResizing = _useState5[0],
3400
+ setIsResizing = _useState5[1];
3401
+ var _useState6 = useState(0),
3402
+ svgContainerWidth = _useState6[0],
3403
+ setSvgContainerWidth = _useState6[1];
3404
+ var _useState7 = useState(ganttHeight),
3405
+ svgContainerHeight = _useState7[0],
3406
+ setSvgContainerHeight = _useState7[1];
3407
+ var _useState8 = useState([]),
3408
+ barTasks = _useState8[0],
3409
+ setBarTasks = _useState8[1];
3410
+ var _useState9 = useState({
3411
+ action: ""
3412
+ }),
3413
+ ganttEvent = _useState9[0],
3414
+ setGanttEvent = _useState9[1];
2373
3415
  var taskHeight = useMemo(function () {
2374
3416
  return rowHeight * barFill / 100;
2375
3417
  }, [rowHeight, barFill]);
2376
-
2377
- var _useState8 = useState(),
2378
- selectedTask = _useState8[0],
2379
- setSelectedTask = _useState8[1];
2380
-
2381
- var _useState9 = useState(null),
2382
- failedTask = _useState9[0],
2383
- setFailedTask = _useState9[1];
2384
-
3418
+ var _useState0 = useState(),
3419
+ selectedTask = _useState0[0],
3420
+ setSelectedTask = _useState0[1];
3421
+ var _useState1 = useState(null),
3422
+ failedTask = _useState1[0],
3423
+ setFailedTask = _useState1[1];
2385
3424
  var svgWidth = dateSetup.dates.length * columnWidth;
2386
3425
  var ganttFullHeight = barTasks.length * rowHeight;
2387
-
2388
3426
  var _useState10 = useState(0),
2389
- scrollY = _useState10[0],
2390
- setScrollY = _useState10[1];
2391
-
2392
- var _useState11 = useState(-1),
2393
- scrollX = _useState11[0],
2394
- setScrollX = _useState11[1];
2395
-
2396
- var _useState12 = useState(false),
2397
- ignoreScrollEvent = _useState12[0],
2398
- setIgnoreScrollEvent = _useState12[1];
2399
-
3427
+ scrollY = _useState10[0],
3428
+ setScrollY = _useState10[1];
3429
+ var _useState11 = useState(0),
3430
+ scrollXLeft = _useState11[0],
3431
+ setScrollXLeft = _useState11[1];
3432
+ var _useState12 = useState(-1),
3433
+ scrollXRight = _useState12[0],
3434
+ setScrollXRight = _useState12[1];
3435
+ var _useState13 = useState(1430),
3436
+ leftScrollerWidth = _useState13[0],
3437
+ setLeftScrollerWidth = _useState13[1];
3438
+ var ignoreScrollLeftRef = useRef(false);
3439
+ var ignoreScrollRightRef = useRef(false);
2400
3440
  useEffect(function () {
2401
3441
  var filteredTasks;
2402
-
2403
3442
  if (onExpanderClick) {
2404
3443
  filteredTasks = removeHiddenTasks(tasks);
2405
3444
  } else {
2406
3445
  filteredTasks = tasks;
2407
3446
  }
2408
-
2409
3447
  filteredTasks = filteredTasks.sort(sortTasks);
2410
-
2411
3448
  var _ganttDateRange2 = ganttDateRange(filteredTasks, viewMode, preStepsCount),
2412
- startDate = _ganttDateRange2[0],
2413
- endDate = _ganttDateRange2[1];
2414
-
3449
+ startDate = _ganttDateRange2[0],
3450
+ endDate = _ganttDateRange2[1];
2415
3451
  var newDates = seedDates(startDate, endDate, viewMode);
2416
-
2417
3452
  if (rtl) {
2418
3453
  newDates = newDates.reverse();
2419
-
2420
- if (scrollX === -1) {
2421
- setScrollX(newDates.length * columnWidth);
3454
+ if (scrollXRight === -1) {
3455
+ setScrollXRight(newDates.length * columnWidth);
2422
3456
  }
2423
3457
  }
2424
-
2425
3458
  setDateSetup({
2426
3459
  dates: newDates,
2427
3460
  viewMode: viewMode
2428
3461
  });
2429
3462
  setBarTasks(convertToBarTasks(filteredTasks, newDates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor));
2430
- }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, columnWidth, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, scrollX, onExpanderClick]);
3463
+ }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, columnWidth, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, scrollXRight, onExpanderClick]);
2431
3464
  useEffect(function () {
2432
3465
  if (viewMode === dateSetup.viewMode && (viewDate && !currentViewDate || viewDate && (currentViewDate === null || currentViewDate === void 0 ? void 0 : currentViewDate.valueOf()) !== viewDate.valueOf())) {
2433
3466
  var dates = dateSetup.dates;
2434
3467
  var index = dates.findIndex(function (d, i) {
2435
3468
  return viewDate.valueOf() >= d.valueOf() && i + 1 !== dates.length && viewDate.valueOf() < dates[i + 1].valueOf();
2436
3469
  });
2437
-
2438
3470
  if (index === -1) {
2439
3471
  return;
2440
3472
  }
2441
-
2442
3473
  setCurrentViewDate(viewDate);
2443
- setScrollX(columnWidth * index);
3474
+ setScrollXRight(columnWidth * index);
2444
3475
  }
2445
3476
  }, [viewDate, columnWidth, dateSetup.dates, dateSetup.viewMode, viewMode, currentViewDate, setCurrentViewDate]);
2446
3477
  useEffect(function () {
2447
3478
  var changedTask = ganttEvent.changedTask,
2448
- action = ganttEvent.action;
2449
-
3479
+ action = ganttEvent.action;
2450
3480
  if (changedTask) {
2451
3481
  if (action === "delete") {
2452
3482
  setGanttEvent({
@@ -2459,7 +3489,6 @@ var Gantt = function Gantt(_ref) {
2459
3489
  var prevStateTask = barTasks.find(function (t) {
2460
3490
  return t.id === changedTask.id;
2461
3491
  });
2462
-
2463
3492
  if (prevStateTask && (prevStateTask.start.getTime() !== changedTask.start.getTime() || prevStateTask.end.getTime() !== changedTask.end.getTime() || prevStateTask.progress !== changedTask.progress)) {
2464
3493
  var newTaskList = barTasks.map(function (t) {
2465
3494
  return t.id === changedTask.id ? changedTask : t;
@@ -2477,20 +3506,35 @@ var Gantt = function Gantt(_ref) {
2477
3506
  setFailedTask(null);
2478
3507
  }
2479
3508
  }, [failedTask, barTasks]);
3509
+ useEffect(function () {
3510
+ var updateWrapperWidth = function updateWrapperWidth() {
3511
+ if (wrapperRef.current) {
3512
+ setWrapperWidth(wrapperRef.current.offsetWidth);
3513
+ }
3514
+ };
3515
+ updateWrapperWidth();
3516
+ window.addEventListener("resize", updateWrapperWidth);
3517
+ return function () {
3518
+ return window.removeEventListener("resize", updateWrapperWidth);
3519
+ };
3520
+ }, []);
2480
3521
  useEffect(function () {
2481
3522
  if (!listCellWidth) {
2482
3523
  setTaskListWidth(0);
3524
+ return;
2483
3525
  }
2484
-
2485
- if (taskListRef.current) {
2486
- setTaskListWidth(taskListRef.current.offsetWidth);
3526
+ if (wrapperWidth) {
3527
+ setTaskListWidth(function (prev) {
3528
+ return clampTaskListWidth(prev, wrapperWidth);
3529
+ });
2487
3530
  }
2488
- }, [taskListRef, listCellWidth]);
3531
+ }, [listCellWidth, wrapperWidth]);
3532
+ var taskListOffset = listCellWidth ? taskListWidth + SPLIT_HANDLE_WIDTH : 0;
2489
3533
  useEffect(function () {
2490
- if (wrapperRef.current) {
2491
- setSvgContainerWidth(wrapperRef.current.offsetWidth - taskListWidth);
3534
+ if (wrapperWidth) {
3535
+ setSvgContainerWidth(Math.max(wrapperWidth - taskListOffset, 0));
2492
3536
  }
2493
- }, [wrapperRef, taskListWidth]);
3537
+ }, [wrapperWidth, taskListOffset]);
2494
3538
  useEffect(function () {
2495
3539
  if (ganttHeight) {
2496
3540
  setSvgContainerHeight(ganttHeight + headerHeight);
@@ -2499,118 +3543,147 @@ var Gantt = function Gantt(_ref) {
2499
3543
  }
2500
3544
  }, [ganttHeight, tasks, headerHeight, rowHeight]);
2501
3545
  useEffect(function () {
2502
- var _wrapperRef$current;
2503
-
3546
+ return function () {
3547
+ if (splitMoveHandlerRef.current) {
3548
+ document.removeEventListener("mousemove", splitMoveHandlerRef.current);
3549
+ splitMoveHandlerRef.current = null;
3550
+ }
3551
+ if (splitUpHandlerRef.current) {
3552
+ document.removeEventListener("mouseup", splitUpHandlerRef.current);
3553
+ splitUpHandlerRef.current = null;
3554
+ }
3555
+ };
3556
+ }, []);
3557
+ useEffect(function () {
2504
3558
  var handleWheel = function handleWheel(event) {
2505
3559
  if (event.shiftKey || event.deltaX) {
2506
3560
  var scrollMove = event.deltaX ? event.deltaX : event.deltaY;
2507
- var newScrollX = scrollX + scrollMove;
2508
-
3561
+ var newScrollX = scrollXRight + scrollMove;
2509
3562
  if (newScrollX < 0) {
2510
3563
  newScrollX = 0;
2511
3564
  } else if (newScrollX > svgWidth) {
2512
3565
  newScrollX = svgWidth;
2513
3566
  }
2514
-
2515
- setScrollX(newScrollX);
3567
+ ignoreScrollRightRef.current = true;
3568
+ setScrollXRight(newScrollX);
2516
3569
  event.preventDefault();
2517
3570
  } else if (ganttHeight) {
2518
3571
  var newScrollY = scrollY + event.deltaY;
2519
-
2520
3572
  if (newScrollY < 0) {
2521
3573
  newScrollY = 0;
2522
3574
  } else if (newScrollY > ganttFullHeight - ganttHeight) {
2523
3575
  newScrollY = ganttFullHeight - ganttHeight;
2524
3576
  }
2525
-
2526
3577
  if (newScrollY !== scrollY) {
2527
3578
  setScrollY(newScrollY);
2528
3579
  event.preventDefault();
2529
3580
  }
2530
3581
  }
2531
-
2532
- setIgnoreScrollEvent(true);
2533
3582
  };
2534
-
2535
- (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.addEventListener("wheel", handleWheel, {
3583
+ var wrapperEl = wrapperRef.current;
3584
+ wrapperEl === null || wrapperEl === void 0 ? void 0 : wrapperEl.addEventListener("wheel", handleWheel, {
2536
3585
  passive: false
2537
3586
  });
2538
3587
  return function () {
2539
- var _wrapperRef$current2;
2540
-
2541
- (_wrapperRef$current2 = wrapperRef.current) === null || _wrapperRef$current2 === void 0 ? void 0 : _wrapperRef$current2.removeEventListener("wheel", handleWheel);
3588
+ wrapperEl === null || wrapperEl === void 0 ? void 0 : wrapperEl.removeEventListener("wheel", handleWheel);
2542
3589
  };
2543
- }, [wrapperRef, scrollY, scrollX, ganttHeight, svgWidth, rtl, ganttFullHeight]);
2544
-
3590
+ }, [scrollY, scrollXRight, ganttHeight, svgWidth, rtl, ganttFullHeight]);
3591
+ useEffect(function () {
3592
+ var updateLeftScroller = function updateLeftScroller() {
3593
+ var el = taskListBodyRef.current;
3594
+ if (el) {
3595
+ setLeftScrollerWidth(el.scrollWidth || 0);
3596
+ }
3597
+ };
3598
+ updateLeftScroller();
3599
+ var RO = window.ResizeObserver;
3600
+ var ro = RO ? new RO(updateLeftScroller) : null;
3601
+ if (ro && taskListBodyRef.current) {
3602
+ ro.observe(taskListBodyRef.current);
3603
+ }
3604
+ window.addEventListener("resize", updateLeftScroller);
3605
+ return function () {
3606
+ if (ro) {
3607
+ ro.disconnect();
3608
+ }
3609
+ window.removeEventListener("resize", updateLeftScroller);
3610
+ };
3611
+ }, [tasks, fontFamily, fontSize, listCellWidth, taskListBodyRef, visibleFields]);
2545
3612
  var handleScrollY = function handleScrollY(event) {
2546
- if (scrollY !== event.currentTarget.scrollTop && !ignoreScrollEvent) {
3613
+ if (scrollY !== event.currentTarget.scrollTop && !ignoreScrollLeftRef.current) {
2547
3614
  setScrollY(event.currentTarget.scrollTop);
2548
- setIgnoreScrollEvent(true);
3615
+ ignoreScrollLeftRef.current = true;
2549
3616
  } else {
2550
- setIgnoreScrollEvent(false);
3617
+ ignoreScrollLeftRef.current = false;
2551
3618
  }
2552
3619
  };
2553
-
2554
- var handleScrollX = function handleScrollX(event) {
2555
- if (scrollX !== event.currentTarget.scrollLeft && !ignoreScrollEvent) {
2556
- setScrollX(event.currentTarget.scrollLeft);
2557
- setIgnoreScrollEvent(true);
3620
+ var handleScrollLeft = function handleScrollLeft(event) {
3621
+ if (scrollXLeft !== event.currentTarget.scrollLeft && !ignoreScrollLeftRef.current) {
3622
+ setScrollXLeft(event.currentTarget.scrollLeft);
3623
+ ignoreScrollLeftRef.current = true;
2558
3624
  } else {
2559
- setIgnoreScrollEvent(false);
3625
+ ignoreScrollLeftRef.current = false;
3626
+ }
3627
+ };
3628
+ var handleScrollRight = function handleScrollRight(event) {
3629
+ if (scrollXRight !== event.currentTarget.scrollLeft && !ignoreScrollRightRef.current) {
3630
+ setScrollXRight(event.currentTarget.scrollLeft);
3631
+ ignoreScrollRightRef.current = true;
3632
+ } else {
3633
+ ignoreScrollRightRef.current = false;
3634
+ }
3635
+ if (ganttContainerRef.current && ganttContainerRef.current.scrollLeft !== event.currentTarget.scrollLeft) {
3636
+ ganttContainerRef.current.scrollLeft = event.currentTarget.scrollLeft;
2560
3637
  }
2561
3638
  };
2562
-
2563
3639
  var handleKeyDown = function handleKeyDown(event) {
3640
+ var target = event.target;
3641
+ if (target instanceof HTMLElement) {
3642
+ if (target.isContentEditable || target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.tagName === "SELECT") {
3643
+ return;
3644
+ }
3645
+ }
2564
3646
  event.preventDefault();
2565
3647
  var newScrollY = scrollY;
2566
- var newScrollX = scrollX;
3648
+ var newScrollX = scrollXRight;
2567
3649
  var isX = true;
2568
-
2569
3650
  switch (event.key) {
2570
3651
  case "Down":
2571
3652
  case "ArrowDown":
2572
3653
  newScrollY += rowHeight;
2573
3654
  isX = false;
2574
3655
  break;
2575
-
2576
3656
  case "Up":
2577
3657
  case "ArrowUp":
2578
3658
  newScrollY -= rowHeight;
2579
3659
  isX = false;
2580
3660
  break;
2581
-
2582
3661
  case "Left":
2583
3662
  case "ArrowLeft":
2584
3663
  newScrollX -= columnWidth;
2585
3664
  break;
2586
-
2587
3665
  case "Right":
2588
3666
  case "ArrowRight":
2589
3667
  newScrollX += columnWidth;
2590
3668
  break;
2591
3669
  }
2592
-
2593
3670
  if (isX) {
2594
3671
  if (newScrollX < 0) {
2595
3672
  newScrollX = 0;
2596
3673
  } else if (newScrollX > svgWidth) {
2597
3674
  newScrollX = svgWidth;
2598
3675
  }
2599
-
2600
- setScrollX(newScrollX);
3676
+ ignoreScrollRightRef.current = true;
3677
+ setScrollXRight(newScrollX);
2601
3678
  } else {
2602
3679
  if (newScrollY < 0) {
2603
3680
  newScrollY = 0;
2604
3681
  } else if (newScrollY > ganttFullHeight - ganttHeight) {
2605
3682
  newScrollY = ganttFullHeight - ganttHeight;
2606
3683
  }
2607
-
2608
3684
  setScrollY(newScrollY);
2609
3685
  }
2610
-
2611
- setIgnoreScrollEvent(true);
2612
3686
  };
2613
-
2614
3687
  var handleSelectedTask = function handleSelectedTask(taskId) {
2615
3688
  var newSelectedTask = barTasks.find(function (t) {
2616
3689
  return t.id === taskId;
@@ -2618,20 +3691,16 @@ var Gantt = function Gantt(_ref) {
2618
3691
  var oldSelectedTask = barTasks.find(function (t) {
2619
3692
  return !!selectedTask && t.id === selectedTask.id;
2620
3693
  });
2621
-
2622
3694
  if (onSelect) {
2623
3695
  if (oldSelectedTask) {
2624
3696
  onSelect(oldSelectedTask, false);
2625
3697
  }
2626
-
2627
3698
  if (newSelectedTask) {
2628
3699
  onSelect(newSelectedTask, true);
2629
3700
  }
2630
3701
  }
2631
-
2632
3702
  setSelectedTask(newSelectedTask);
2633
3703
  };
2634
-
2635
3704
  var handleExpanderClick = function handleExpanderClick(task) {
2636
3705
  if (onExpanderClick && task.hideChildren !== undefined) {
2637
3706
  onExpanderClick(_extends({}, task, {
@@ -2639,7 +3708,69 @@ var Gantt = function Gantt(_ref) {
2639
3708
  }));
2640
3709
  }
2641
3710
  };
2642
-
3711
+ var updateTaskListWidth = function updateTaskListWidth(clientX) {
3712
+ if (splitStartXRef.current == null || splitStartWidthRef.current == null) {
3713
+ return;
3714
+ }
3715
+ if (!wrapperRef.current) {
3716
+ return;
3717
+ }
3718
+ var delta = clientX - splitStartXRef.current;
3719
+ var nextWidth = clampTaskListWidth(splitStartWidthRef.current + delta, wrapperRef.current.offsetWidth);
3720
+ setTaskListWidth(nextWidth);
3721
+ };
3722
+ var handleSplitPointerDown = function handleSplitPointerDown(event) {
3723
+ event.preventDefault();
3724
+ splitStartXRef.current = event.clientX;
3725
+ splitStartWidthRef.current = taskListWidth;
3726
+ setIsResizing(true);
3727
+ if (event.currentTarget.setPointerCapture) {
3728
+ event.currentTarget.setPointerCapture(event.pointerId);
3729
+ }
3730
+ };
3731
+ var handleSplitPointerMove = function handleSplitPointerMove(event) {
3732
+ updateTaskListWidth(event.clientX);
3733
+ };
3734
+ var handleSplitPointerUp = function handleSplitPointerUp(event) {
3735
+ splitStartXRef.current = null;
3736
+ splitStartWidthRef.current = null;
3737
+ setIsResizing(false);
3738
+ if (event.currentTarget.releasePointerCapture) {
3739
+ event.currentTarget.releasePointerCapture(event.pointerId);
3740
+ }
3741
+ };
3742
+ var handleSplitMouseDown = function handleSplitMouseDown(event) {
3743
+ event.preventDefault();
3744
+ splitStartXRef.current = event.clientX;
3745
+ splitStartWidthRef.current = taskListWidth;
3746
+ setIsResizing(true);
3747
+ if (splitMoveHandlerRef.current) {
3748
+ document.removeEventListener("mousemove", splitMoveHandlerRef.current);
3749
+ }
3750
+ if (splitUpHandlerRef.current) {
3751
+ document.removeEventListener("mouseup", splitUpHandlerRef.current);
3752
+ }
3753
+ var handleMouseMove = function handleMouseMove(moveEvent) {
3754
+ updateTaskListWidth(moveEvent.clientX);
3755
+ };
3756
+ var handleMouseUp = function handleMouseUp() {
3757
+ splitStartXRef.current = null;
3758
+ splitStartWidthRef.current = null;
3759
+ setIsResizing(false);
3760
+ if (splitMoveHandlerRef.current) {
3761
+ document.removeEventListener("mousemove", splitMoveHandlerRef.current);
3762
+ splitMoveHandlerRef.current = null;
3763
+ }
3764
+ if (splitUpHandlerRef.current) {
3765
+ document.removeEventListener("mouseup", splitUpHandlerRef.current);
3766
+ splitUpHandlerRef.current = null;
3767
+ }
3768
+ };
3769
+ splitMoveHandlerRef.current = handleMouseMove;
3770
+ splitUpHandlerRef.current = handleMouseUp;
3771
+ document.addEventListener("mousemove", handleMouseMove);
3772
+ document.addEventListener("mouseup", handleMouseUp);
3773
+ };
2643
3774
  var gridProps = {
2644
3775
  columnWidth: columnWidth,
2645
3776
  svgWidth: svgWidth,
@@ -2689,45 +3820,78 @@ var Gantt = function Gantt(_ref) {
2689
3820
  fontFamily: fontFamily,
2690
3821
  fontSize: fontSize,
2691
3822
  tasks: barTasks,
2692
- locale: locale,
2693
3823
  headerHeight: headerHeight,
2694
3824
  scrollY: scrollY,
3825
+ horizontalScroll: scrollXLeft,
2695
3826
  ganttHeight: ganttHeight,
2696
3827
  horizontalContainerClass: styles$9.horizontalContainer,
3828
+ headerContainerRef: taskListHeaderRef,
3829
+ bodyContainerRef: taskListBodyRef,
3830
+ onHorizontalScroll: handleScrollLeft,
2697
3831
  selectedTask: selectedTask,
2698
3832
  taskListRef: taskListRef,
2699
3833
  setSelectedTask: handleSelectedTask,
2700
3834
  onExpanderClick: handleExpanderClick,
2701
3835
  TaskListHeader: TaskListHeader,
2702
- TaskListTable: TaskListTable
3836
+ TaskListTable: TaskListTable,
3837
+ visibleFields: visibleFields,
3838
+ onUpdateTask: onTaskUpdate,
3839
+ onCellCommit: onCellCommit,
3840
+ effortDisplayUnit: effortDisplayUnit,
3841
+ enableColumnDrag: enableColumnDrag
2703
3842
  };
2704
3843
  return React.createElement("div", null, React.createElement("div", {
2705
3844
  className: styles$9.wrapper,
2706
3845
  onKeyDown: handleKeyDown,
2707
3846
  tabIndex: 0,
2708
3847
  ref: wrapperRef
2709
- }, listCellWidth && React.createElement(TaskList, Object.assign({}, tableProps)), React.createElement(TaskGantt, {
3848
+ }, listCellWidth && React.createElement("div", {
3849
+ className: styles$9.taskListPanel,
3850
+ style: {
3851
+ width: taskListWidth
3852
+ },
3853
+ "data-testid": "task-list-panel"
3854
+ }, React.createElement(TaskList, Object.assign({}, tableProps))), listCellWidth && React.createElement("div", {
3855
+ className: styles$9.splitHandle + " " + (isResizing ? styles$9.splitHandleActive : ""),
3856
+ onPointerDown: supportsPointerEvents ? handleSplitPointerDown : undefined,
3857
+ onPointerMove: supportsPointerEvents ? handleSplitPointerMove : undefined,
3858
+ onPointerUp: supportsPointerEvents ? handleSplitPointerUp : undefined,
3859
+ onPointerCancel: supportsPointerEvents ? handleSplitPointerUp : undefined,
3860
+ onMouseDown: supportsPointerEvents ? undefined : handleSplitMouseDown,
3861
+ role: "separator",
3862
+ "aria-label": "Task/Schedule divider",
3863
+ "aria-orientation": "vertical",
3864
+ "data-testid": "pane-splitter"
3865
+ }), React.createElement("div", {
3866
+ className: styles$9.ganttPanel,
3867
+ style: {
3868
+ minWidth: MIN_PANE_WIDTH
3869
+ },
3870
+ "data-testid": "gantt-panel"
3871
+ }, React.createElement(TaskGantt, {
2710
3872
  gridProps: gridProps,
2711
3873
  calendarProps: calendarProps,
2712
3874
  barProps: barProps,
2713
3875
  ganttHeight: ganttHeight,
2714
3876
  scrollY: scrollY,
2715
- scrollX: scrollX
2716
- }), ganttEvent.changedTask && React.createElement(Tooltip, {
3877
+ scrollX: scrollXRight,
3878
+ verticalGanttContainerRef: ganttContainerRef
3879
+ })), ganttEvent.changedTask && React.createElement(Tooltip, {
2717
3880
  arrowIndent: arrowIndent,
2718
3881
  rowHeight: rowHeight,
2719
3882
  svgContainerHeight: svgContainerHeight,
2720
3883
  svgContainerWidth: svgContainerWidth,
2721
3884
  fontFamily: fontFamily,
2722
3885
  fontSize: fontSize,
2723
- scrollX: scrollX,
3886
+ scrollX: scrollXRight,
2724
3887
  scrollY: scrollY,
2725
3888
  task: ganttEvent.changedTask,
2726
3889
  headerHeight: headerHeight,
2727
- taskListWidth: taskListWidth,
3890
+ taskListWidth: taskListOffset,
2728
3891
  TooltipContent: TooltipContent,
2729
3892
  rtl: rtl,
2730
- svgWidth: svgWidth
3893
+ svgWidth: svgWidth,
3894
+ effortDisplayUnit: effortDisplayUnit
2731
3895
  }), React.createElement(VerticalScroll, {
2732
3896
  ganttFullHeight: ganttFullHeight,
2733
3897
  ganttHeight: ganttHeight,
@@ -2735,14 +3899,30 @@ var Gantt = function Gantt(_ref) {
2735
3899
  scroll: scrollY,
2736
3900
  onScroll: handleScrollY,
2737
3901
  rtl: rtl
2738
- })), React.createElement(HorizontalScroll, {
3902
+ })), React.createElement("div", {
3903
+ className: styles$9.scrollRow,
3904
+ style: {
3905
+ "--splitter-width": SPLIT_HANDLE_WIDTH + "px"
3906
+ }
3907
+ }, React.createElement("div", {
3908
+ className: styles$9.scrollCellLeft
3909
+ }, listCellWidth && React.createElement(HorizontalScroll, {
3910
+ svgWidth: taskListWidth,
3911
+ scrollerWidth: leftScrollerWidth,
3912
+ scroll: scrollXLeft,
3913
+ rtl: rtl,
3914
+ onScroll: handleScrollLeft
3915
+ })), listCellWidth && React.createElement("div", {
3916
+ className: styles$9.scrollSplitter
3917
+ }), React.createElement("div", {
3918
+ className: styles$9.scrollCellRight
3919
+ }, React.createElement(HorizontalScroll, {
2739
3920
  svgWidth: svgWidth,
2740
- taskListWidth: taskListWidth,
2741
- scroll: scrollX,
3921
+ scroll: scrollXRight,
2742
3922
  rtl: rtl,
2743
- onScroll: handleScrollX
2744
- }));
3923
+ onScroll: handleScrollRight
3924
+ }))));
2745
3925
  };
2746
3926
 
2747
- export { Gantt, ViewMode };
3927
+ export { DEFAULT_VISIBLE_FIELDS, Gantt, TASK_PROCESS_OPTIONS, TASK_STATUS_BADGE_TEXT, TASK_STATUS_COLORS, TASK_STATUS_OPTIONS, ViewMode, formatDate, formatEffort, getStatusBadgeText, getStatusColor, normalizeProcess, normalizeStatus, parseDateFromInput, resolveVisibleFields, sanitizeEffortInput };
2748
3928
  //# sourceMappingURL=index.modern.js.map