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