gantt-task-react-v 1.4.5 → 1.4.7
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/components/gantt/task-gantt-content.d.ts +2 -0
- package/dist/components/other/arrow.d.ts +2 -0
- package/dist/components/other/gantt-drawer.d.ts +10 -0
- package/dist/gantt-task-react.es.js +256 -161
- package/dist/gantt-task-react.umd.js +256 -161
- package/dist/style.css +89 -6
- package/dist/types/public-types.d.ts +31 -0
- package/package.json +1 -1
|
@@ -4589,7 +4589,7 @@ const tooltipDefaultContainerTexts = "_tooltipDefaultContainerTexts_16o9s_17";
|
|
|
4589
4589
|
const tooltipDefaultContainerParagraph = "_tooltipDefaultContainerParagraph_16o9s_31";
|
|
4590
4590
|
const tooltipDetailsContainer = "_tooltipDetailsContainer_16o9s_47";
|
|
4591
4591
|
const tooltipDetailsContainerHidden = "_tooltipDetailsContainerHidden_16o9s_71";
|
|
4592
|
-
const styles$
|
|
4592
|
+
const styles$m = {
|
|
4593
4593
|
tooltipDefaultContainer,
|
|
4594
4594
|
tooltipDefaultContainerTexts,
|
|
4595
4595
|
tooltipDefaultContainerParagraph,
|
|
@@ -4632,26 +4632,26 @@ const StandardTooltipContent = ({ task }) => {
|
|
|
4632
4632
|
return /* @__PURE__ */ jsxs(
|
|
4633
4633
|
"div",
|
|
4634
4634
|
{
|
|
4635
|
-
className: styles$
|
|
4635
|
+
className: styles$m.tooltipDefaultContainer,
|
|
4636
4636
|
style: { fontSize: "var(--gantt-font-size)" },
|
|
4637
4637
|
children: [
|
|
4638
4638
|
/* @__PURE__ */ jsx("b", { style: { fontSize: "var(--gantt-font-size)" }, children: `${task.name}: ${task.start.getDate()}-${task.start.getMonth() + 1}-${task.start.getFullYear()} - ${task.end.getDate()}-${task.end.getMonth() + 1}-${task.end.getFullYear()}` }),
|
|
4639
|
-
/* @__PURE__ */ jsxs("div", { className: styles$
|
|
4639
|
+
/* @__PURE__ */ jsxs("div", { className: styles$m.tooltipDefaultContainerTexts, children: [
|
|
4640
4640
|
task.end.getTime() - task.start.getTime() !== 0 && /* @__PURE__ */ jsx(
|
|
4641
4641
|
"p",
|
|
4642
4642
|
{
|
|
4643
|
-
className: styles$
|
|
4643
|
+
className: styles$m.tooltipDefaultContainerParagraph,
|
|
4644
4644
|
children: `${locale.tooltip.duration},: ${~~((task.end.getTime() - task.start.getTime()) / (1e3 * 60 * 60 * 24))} ${locale.suffix.days}`
|
|
4645
4645
|
}
|
|
4646
4646
|
),
|
|
4647
|
-
!!locale.tooltip.progress && /* @__PURE__ */ jsx("p", { className: styles$
|
|
4647
|
+
!!locale.tooltip.progress && /* @__PURE__ */ jsx("p", { className: styles$m.tooltipDefaultContainerParagraph, children: !!task.progress && `${locale.tooltip.progress}: ${task.progress} %` })
|
|
4648
4648
|
] })
|
|
4649
4649
|
]
|
|
4650
4650
|
}
|
|
4651
4651
|
);
|
|
4652
4652
|
};
|
|
4653
4653
|
const scroll = "_scroll_hp3qb_1";
|
|
4654
|
-
const styles$
|
|
4654
|
+
const styles$l = {
|
|
4655
4655
|
scroll
|
|
4656
4656
|
};
|
|
4657
4657
|
const VerticalScroll = ({
|
|
@@ -4672,7 +4672,7 @@ const VerticalScroll = ({
|
|
|
4672
4672
|
marginLeft: rtl ? void 0 : "-1rem",
|
|
4673
4673
|
pointerEvents: isChangeInProgress ? "none" : void 0
|
|
4674
4674
|
},
|
|
4675
|
-
className: styles$
|
|
4675
|
+
className: styles$l.scroll,
|
|
4676
4676
|
onScroll,
|
|
4677
4677
|
ref: verticalScrollbarRef,
|
|
4678
4678
|
children: /* @__PURE__ */ jsx("div", { style: { height: ganttFullHeight, width: 1 } })
|
|
@@ -4750,7 +4750,7 @@ const dragging = "_dragging_16z6n_15";
|
|
|
4750
4750
|
const taskListExpander = "_taskListExpander_16z6n_23";
|
|
4751
4751
|
const taskListEmptyExpander = "_taskListEmptyExpander_16z6n_45";
|
|
4752
4752
|
const taskName = "_taskName_16z6n_55";
|
|
4753
|
-
const styles$
|
|
4753
|
+
const styles$k = {
|
|
4754
4754
|
taskListNameWrapper,
|
|
4755
4755
|
dragging,
|
|
4756
4756
|
taskListExpander,
|
|
@@ -4817,7 +4817,7 @@ const TitleColumn = ({
|
|
|
4817
4817
|
() => getExpanderSymbol(hasChildren, isClosed, expandIconWidth, icons),
|
|
4818
4818
|
[hasChildren, isClosed, expandIconWidth, icons]
|
|
4819
4819
|
);
|
|
4820
|
-
const
|
|
4820
|
+
const title2 = isShowTaskNumbers ? `${indexStr} ${name}` : name;
|
|
4821
4821
|
const onClick = useCallback(() => {
|
|
4822
4822
|
if (task.type !== "empty") {
|
|
4823
4823
|
onExpanderClick(task);
|
|
@@ -4827,16 +4827,16 @@ const TitleColumn = ({
|
|
|
4827
4827
|
"div",
|
|
4828
4828
|
{
|
|
4829
4829
|
"data-testid": `title-table-cell-${name}`,
|
|
4830
|
-
className: `${styles$
|
|
4830
|
+
className: `${styles$k.taskListNameWrapper}`,
|
|
4831
4831
|
style: {
|
|
4832
4832
|
paddingLeft: depth * nestedTaskNameOffset
|
|
4833
4833
|
},
|
|
4834
|
-
title,
|
|
4834
|
+
title: title2,
|
|
4835
4835
|
children: [
|
|
4836
4836
|
/* @__PURE__ */ jsx(
|
|
4837
4837
|
"div",
|
|
4838
4838
|
{
|
|
4839
|
-
className: `gantt-expander ${styles$
|
|
4839
|
+
className: `gantt-expander ${styles$k.taskListExpander} ${!hasChildren ? styles$k.taskListEmptyExpander : ""}`,
|
|
4840
4840
|
style: {
|
|
4841
4841
|
left: depth * nestedTaskNameOffset
|
|
4842
4842
|
},
|
|
@@ -4847,7 +4847,7 @@ const TitleColumn = ({
|
|
|
4847
4847
|
/* @__PURE__ */ jsxs(
|
|
4848
4848
|
"div",
|
|
4849
4849
|
{
|
|
4850
|
-
className: styles$
|
|
4850
|
+
className: styles$k.taskName,
|
|
4851
4851
|
style: { fontWeight: isProject ? "bold" : "regular" },
|
|
4852
4852
|
children: [
|
|
4853
4853
|
isShowTaskNumbers && /* @__PURE__ */ jsxs("b", { children: [
|
|
@@ -4902,7 +4902,7 @@ const DependenciesColumn = ({
|
|
|
4902
4902
|
return /* @__PURE__ */ jsx(Fragment, { children: dependencies.map(({ name }) => name).join(", ") });
|
|
4903
4903
|
};
|
|
4904
4904
|
const button = "_button_l55x0_1";
|
|
4905
|
-
const styles$
|
|
4905
|
+
const styles$j = {
|
|
4906
4906
|
button
|
|
4907
4907
|
};
|
|
4908
4908
|
const DeleteIcon = (props) => /* @__PURE__ */ jsxs(
|
|
@@ -4936,7 +4936,7 @@ const DeleteColumn = ({
|
|
|
4936
4936
|
e.stopPropagation();
|
|
4937
4937
|
},
|
|
4938
4938
|
onClick,
|
|
4939
|
-
className: styles$
|
|
4939
|
+
className: styles$j.button,
|
|
4940
4940
|
children: (icons == null ? void 0 : icons.renderDeleteIcon) ? icons.renderDeleteIcon() : /* @__PURE__ */ jsx(DeleteIcon, {})
|
|
4941
4941
|
}
|
|
4942
4942
|
);
|
|
@@ -4971,7 +4971,7 @@ const EditColumn = ({
|
|
|
4971
4971
|
e.stopPropagation();
|
|
4972
4972
|
},
|
|
4973
4973
|
onClick,
|
|
4974
|
-
className: styles$
|
|
4974
|
+
className: styles$j.button,
|
|
4975
4975
|
children: (icons == null ? void 0 : icons.renderEditIcon) ? icons.renderEditIcon() : /* @__PURE__ */ jsx(EditIcon, {})
|
|
4976
4976
|
}
|
|
4977
4977
|
);
|
|
@@ -5012,52 +5012,52 @@ const AddColumn = ({
|
|
|
5012
5012
|
e.stopPropagation();
|
|
5013
5013
|
},
|
|
5014
5014
|
onClick,
|
|
5015
|
-
className: styles$
|
|
5015
|
+
className: styles$j.button,
|
|
5016
5016
|
children: (icons == null ? void 0 : icons.renderAddIcon) ? icons.renderAddIcon() : /* @__PURE__ */ jsx(AddIcon, {})
|
|
5017
5017
|
}
|
|
5018
5018
|
);
|
|
5019
5019
|
};
|
|
5020
5020
|
function useTaskListColumnsBuilder() {
|
|
5021
5021
|
const createNameColumn = useCallback(
|
|
5022
|
-
(
|
|
5022
|
+
(title2, width) => {
|
|
5023
5023
|
return {
|
|
5024
5024
|
id: "TitleColumn",
|
|
5025
5025
|
component: TitleColumn,
|
|
5026
5026
|
width: width || 120,
|
|
5027
|
-
title
|
|
5027
|
+
title: title2
|
|
5028
5028
|
};
|
|
5029
5029
|
},
|
|
5030
5030
|
[]
|
|
5031
5031
|
);
|
|
5032
5032
|
const createStartDateColumn = useCallback(
|
|
5033
|
-
(
|
|
5033
|
+
(title2, width) => {
|
|
5034
5034
|
return {
|
|
5035
5035
|
id: "DateStartColumn",
|
|
5036
5036
|
component: DateStartColumn,
|
|
5037
5037
|
width: width || 60,
|
|
5038
|
-
title
|
|
5038
|
+
title: title2
|
|
5039
5039
|
};
|
|
5040
5040
|
},
|
|
5041
5041
|
[]
|
|
5042
5042
|
);
|
|
5043
5043
|
const createEndDateColumn = useCallback(
|
|
5044
|
-
(
|
|
5044
|
+
(title2, width) => {
|
|
5045
5045
|
return {
|
|
5046
5046
|
id: "DateEndColumn",
|
|
5047
5047
|
component: DateEndColumn,
|
|
5048
5048
|
width: width || 60,
|
|
5049
|
-
title
|
|
5049
|
+
title: title2
|
|
5050
5050
|
};
|
|
5051
5051
|
},
|
|
5052
5052
|
[]
|
|
5053
5053
|
);
|
|
5054
5054
|
const createDependenciesColumn = useCallback(
|
|
5055
|
-
(
|
|
5055
|
+
(title2, width) => {
|
|
5056
5056
|
return {
|
|
5057
5057
|
id: "DependenciesColumn",
|
|
5058
5058
|
component: DependenciesColumn,
|
|
5059
5059
|
width: width || 90,
|
|
5060
|
-
title
|
|
5060
|
+
title: title2
|
|
5061
5061
|
};
|
|
5062
5062
|
},
|
|
5063
5063
|
[]
|
|
@@ -5521,7 +5521,7 @@ const ganttTable_HeaderMoveTask = "_ganttTable_HeaderMoveTask_5goa0_27";
|
|
|
5521
5521
|
const ganttTable_HeaderSeparator = "_ganttTable_HeaderSeparator_5goa0_39";
|
|
5522
5522
|
const ganttTable_HeaderItem = "_ganttTable_HeaderItem_5goa0_53";
|
|
5523
5523
|
const resizer = "_resizer_5goa0_77";
|
|
5524
|
-
const styles$
|
|
5524
|
+
const styles$i = {
|
|
5525
5525
|
ganttTable,
|
|
5526
5526
|
ganttTable_Header,
|
|
5527
5527
|
ganttTable_HeaderMoveTask,
|
|
@@ -5570,7 +5570,7 @@ const TaskListTableHeadersDefaultInner = ({
|
|
|
5570
5570
|
return /* @__PURE__ */ jsx(
|
|
5571
5571
|
"div",
|
|
5572
5572
|
{
|
|
5573
|
-
className: styles$
|
|
5573
|
+
className: styles$i.ganttTable,
|
|
5574
5574
|
style: {
|
|
5575
5575
|
fontFamily: "var(--gantt-font-family)",
|
|
5576
5576
|
fontSize: "var(--gantt-font-size)"
|
|
@@ -5578,18 +5578,18 @@ const TaskListTableHeadersDefaultInner = ({
|
|
|
5578
5578
|
children: /* @__PURE__ */ jsxs(
|
|
5579
5579
|
"div",
|
|
5580
5580
|
{
|
|
5581
|
-
className: styles$
|
|
5581
|
+
className: styles$i.ganttTable_Header,
|
|
5582
5582
|
style: {
|
|
5583
5583
|
height: headerHeight - 2
|
|
5584
5584
|
},
|
|
5585
5585
|
children: [
|
|
5586
|
-
canMoveTasks && /* @__PURE__ */ jsx("div", { className: styles$
|
|
5587
|
-
columns.map(({ title, width, canResize }, index2) => {
|
|
5586
|
+
canMoveTasks && /* @__PURE__ */ jsx("div", { className: styles$i.ganttTable_HeaderMoveTask }),
|
|
5587
|
+
columns.map(({ title: title2, width, canResize }, index2) => {
|
|
5588
5588
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
5589
|
-
index2 > 0 && !!
|
|
5589
|
+
index2 > 0 && !!title2 && /* @__PURE__ */ jsx(
|
|
5590
5590
|
"div",
|
|
5591
5591
|
{
|
|
5592
|
-
className: styles$
|
|
5592
|
+
className: styles$i.ganttTable_HeaderSeparator,
|
|
5593
5593
|
style: {
|
|
5594
5594
|
height: headerHeight * 0.5,
|
|
5595
5595
|
marginTop: headerHeight * 0.2
|
|
@@ -5599,20 +5599,20 @@ const TaskListTableHeadersDefaultInner = ({
|
|
|
5599
5599
|
/* @__PURE__ */ jsxs(
|
|
5600
5600
|
"div",
|
|
5601
5601
|
{
|
|
5602
|
-
"data-testid": `table-column-header-${
|
|
5603
|
-
className: styles$
|
|
5602
|
+
"data-testid": `table-column-header-${title2}`,
|
|
5603
|
+
className: styles$i.ganttTable_HeaderItem,
|
|
5604
5604
|
style: {
|
|
5605
5605
|
minWidth: width,
|
|
5606
5606
|
maxWidth: width,
|
|
5607
5607
|
...pinnedStyles[index2]
|
|
5608
5608
|
},
|
|
5609
5609
|
children: [
|
|
5610
|
-
|
|
5611
|
-
canResizeColumns && canResize !== false && !!
|
|
5610
|
+
title2,
|
|
5611
|
+
canResizeColumns && canResize !== false && !!title2 && /* @__PURE__ */ jsx(
|
|
5612
5612
|
"div",
|
|
5613
5613
|
{
|
|
5614
|
-
"data-testid": `table-column-header-resize-handle-${
|
|
5615
|
-
className: styles$
|
|
5614
|
+
"data-testid": `table-column-header-resize-handle-${title2}`,
|
|
5615
|
+
className: styles$i.resizer,
|
|
5616
5616
|
onMouseDown: (event) => {
|
|
5617
5617
|
onColumnResizeStart(index2, event.clientX);
|
|
5618
5618
|
},
|
|
@@ -9826,7 +9826,7 @@ function normalizeLocalDisabled(localDisabled, globalDisabled) {
|
|
|
9826
9826
|
}
|
|
9827
9827
|
[KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left];
|
|
9828
9828
|
const taskListWrapper$1 = "_taskListWrapper_196te_3";
|
|
9829
|
-
const styles$
|
|
9829
|
+
const styles$h = {
|
|
9830
9830
|
taskListWrapper: taskListWrapper$1
|
|
9831
9831
|
};
|
|
9832
9832
|
function getDragDepth(offset2, indentationWidth2) {
|
|
@@ -10012,7 +10012,7 @@ const dragIndicator = "_dragIndicator_1yqtr_99";
|
|
|
10012
10012
|
const dragIndicatorIcon = "_dragIndicatorIcon_1yqtr_119";
|
|
10013
10013
|
const isCut = "_isCut_1yqtr_135";
|
|
10014
10014
|
const taskListCell = "_taskListCell_1yqtr_167";
|
|
10015
|
-
const styles$
|
|
10015
|
+
const styles$g = {
|
|
10016
10016
|
taskListTableRow,
|
|
10017
10017
|
isAfter,
|
|
10018
10018
|
isBefore,
|
|
@@ -10152,18 +10152,18 @@ const TaskListTableRowInner = forwardRef(
|
|
|
10152
10152
|
return isSelected ? "var(--gantt-table-selected-task-background-color)" : isEven ? "var(--gantt-table-even-background-color)" : void 0;
|
|
10153
10153
|
}, [isEven, isOverlay2, isSelected]);
|
|
10154
10154
|
const rowClassName = useMemo(() => {
|
|
10155
|
-
const classNames = [styles$
|
|
10155
|
+
const classNames = [styles$g.taskListTableRow];
|
|
10156
10156
|
if (moveOverPosition === "after") {
|
|
10157
|
-
classNames.push(styles$
|
|
10157
|
+
classNames.push(styles$g.isAfter);
|
|
10158
10158
|
}
|
|
10159
10159
|
if (moveOverPosition === "before") {
|
|
10160
|
-
classNames.push(styles$
|
|
10160
|
+
classNames.push(styles$g.isBefore);
|
|
10161
10161
|
}
|
|
10162
10162
|
if (isOverlay2 && !isDragging) {
|
|
10163
|
-
classNames.push(styles$
|
|
10163
|
+
classNames.push(styles$g.isOverlay);
|
|
10164
10164
|
}
|
|
10165
10165
|
if (isCut2) {
|
|
10166
|
-
classNames.push(styles$
|
|
10166
|
+
classNames.push(styles$g.isCut);
|
|
10167
10167
|
}
|
|
10168
10168
|
return classNames.join(" ");
|
|
10169
10169
|
}, [isCut2, moveOverPosition, isOverlay2, isDragging]);
|
|
@@ -10211,12 +10211,12 @@ const TaskListTableRowInner = forwardRef(
|
|
|
10211
10211
|
},
|
|
10212
10212
|
onContextMenu,
|
|
10213
10213
|
children: [
|
|
10214
|
-
task.type !== "project" && task.id !== "no-project-asigned" && !isOverlay2 && moveHandleProps ? /* @__PURE__ */ jsx("div", { className: `${styles$
|
|
10214
|
+
task.type !== "project" && task.id !== "no-project-asigned" && !isOverlay2 && moveHandleProps ? /* @__PURE__ */ jsx("div", { className: `${styles$g.dragIndicator}`, ...moveHandleProps, children: /* @__PURE__ */ jsx(DragIndicatorIcon, { className: styles$g.dragIndicatorIcon }) }) : /* @__PURE__ */ jsx("div", {}),
|
|
10215
10215
|
columns.map(({ id: id2, component: Component, width }, index2) => {
|
|
10216
10216
|
return /* @__PURE__ */ jsx(
|
|
10217
10217
|
"div",
|
|
10218
10218
|
{
|
|
10219
|
-
className: styles$
|
|
10219
|
+
className: styles$g.taskListCell,
|
|
10220
10220
|
style: {
|
|
10221
10221
|
minWidth: width,
|
|
10222
10222
|
maxWidth: width,
|
|
@@ -10627,7 +10627,7 @@ const TaskListSortableTableDefaultInner = (props) => {
|
|
|
10627
10627
|
children: /* @__PURE__ */ jsx(
|
|
10628
10628
|
"div",
|
|
10629
10629
|
{
|
|
10630
|
-
className: styles$
|
|
10630
|
+
className: styles$h.taskListWrapper,
|
|
10631
10631
|
style: {
|
|
10632
10632
|
fontFamily: "var(--gantt-font-family)",
|
|
10633
10633
|
fontSize: "var(--gantt-font-size)"
|
|
@@ -10666,7 +10666,7 @@ const TaskListSortableTableDefaultInner = (props) => {
|
|
|
10666
10666
|
};
|
|
10667
10667
|
const TaskListSortableTable = memo(TaskListSortableTableDefaultInner);
|
|
10668
10668
|
const taskListWrapper = "_taskListWrapper_196te_3";
|
|
10669
|
-
const styles$
|
|
10669
|
+
const styles$f = {
|
|
10670
10670
|
taskListWrapper
|
|
10671
10671
|
};
|
|
10672
10672
|
const TaskListTableDefaultInner = ({
|
|
@@ -10712,7 +10712,7 @@ const TaskListTableDefaultInner = ({
|
|
|
10712
10712
|
return /* @__PURE__ */ jsx(
|
|
10713
10713
|
"div",
|
|
10714
10714
|
{
|
|
10715
|
-
className: styles$
|
|
10715
|
+
className: styles$f.taskListWrapper,
|
|
10716
10716
|
style: {
|
|
10717
10717
|
fontFamily: "var(--gantt-font-family)",
|
|
10718
10718
|
fontSize: "var(--gantt-font-size)"
|
|
@@ -10730,7 +10730,7 @@ const tableWrapper = "_tableWrapper_yoz76_159";
|
|
|
10730
10730
|
const scrollToTop = "_scrollToTop_yoz76_173";
|
|
10731
10731
|
const scrollToBottom = "_scrollToBottom_yoz76_189";
|
|
10732
10732
|
const hidden = "_hidden_yoz76_205";
|
|
10733
|
-
const styles$
|
|
10733
|
+
const styles$e = {
|
|
10734
10734
|
taskListRoot,
|
|
10735
10735
|
taskListHorizontalScroll,
|
|
10736
10736
|
taskListResizer,
|
|
@@ -10869,12 +10869,12 @@ const TaskListInner = ({
|
|
|
10869
10869
|
]
|
|
10870
10870
|
);
|
|
10871
10871
|
const RenderTaskListTable = canReorderTasks ? TaskListSortableTable : TaskListTable;
|
|
10872
|
-
return /* @__PURE__ */ jsxs("div", { className: styles$
|
|
10872
|
+
return /* @__PURE__ */ jsxs("div", { className: styles$e.taskListRoot, ref: taskListRef, children: [
|
|
10873
10873
|
/* @__PURE__ */ jsxs(
|
|
10874
10874
|
"div",
|
|
10875
10875
|
{
|
|
10876
10876
|
ref: taskListHorizontalScrollRef,
|
|
10877
|
-
className: styles$
|
|
10877
|
+
className: styles$e.taskListHorizontalScroll,
|
|
10878
10878
|
style: {
|
|
10879
10879
|
width: tableWidth
|
|
10880
10880
|
},
|
|
@@ -10889,12 +10889,12 @@ const TaskListInner = ({
|
|
|
10889
10889
|
canResizeColumns
|
|
10890
10890
|
}
|
|
10891
10891
|
),
|
|
10892
|
-
/* @__PURE__ */ jsxs("div", { className: styles$
|
|
10892
|
+
/* @__PURE__ */ jsxs("div", { className: styles$e.tableWrapper, children: [
|
|
10893
10893
|
/* @__PURE__ */ jsx(
|
|
10894
10894
|
"div",
|
|
10895
10895
|
{
|
|
10896
10896
|
ref: taskListContainerRef,
|
|
10897
|
-
className: styles$
|
|
10897
|
+
className: styles$e.horizontalContainer,
|
|
10898
10898
|
style: {
|
|
10899
10899
|
height: Math.max(
|
|
10900
10900
|
ganttHeight - ((tableBottom == null ? void 0 : tableBottom.height) || 0),
|
|
@@ -10956,13 +10956,13 @@ const TaskListInner = ({
|
|
|
10956
10956
|
/* @__PURE__ */ jsx(
|
|
10957
10957
|
"div",
|
|
10958
10958
|
{
|
|
10959
|
-
className: `${styles$
|
|
10959
|
+
className: `${styles$e.scrollToTop} ${!renderedIndexes || renderedIndexes[2] ? styles$e.hidden : ""}`
|
|
10960
10960
|
}
|
|
10961
10961
|
),
|
|
10962
10962
|
/* @__PURE__ */ jsx(
|
|
10963
10963
|
"div",
|
|
10964
10964
|
{
|
|
10965
|
-
className: `${styles$
|
|
10965
|
+
className: `${styles$e.scrollToBottom} ${!renderedIndexes || renderedIndexes[3] ? styles$e.hidden : ""}`
|
|
10966
10966
|
}
|
|
10967
10967
|
)
|
|
10968
10968
|
] }),
|
|
@@ -10973,7 +10973,7 @@ const TaskListInner = ({
|
|
|
10973
10973
|
/* @__PURE__ */ jsx(
|
|
10974
10974
|
"div",
|
|
10975
10975
|
{
|
|
10976
|
-
className: styles$
|
|
10976
|
+
className: styles$e.taskListResizer,
|
|
10977
10977
|
onMouseDown: (event) => {
|
|
10978
10978
|
onTableResizeStart(event.clientX);
|
|
10979
10979
|
},
|
|
@@ -10990,7 +10990,7 @@ const TaskListInner = ({
|
|
|
10990
10990
|
const TaskList = memo(TaskListInner);
|
|
10991
10991
|
const ganttToday = "_ganttToday_1oyhk_1";
|
|
10992
10992
|
const ganttTodayCircle = "_ganttTodayCircle_1oyhk_9";
|
|
10993
|
-
const styles$
|
|
10993
|
+
const styles$d = {
|
|
10994
10994
|
ganttToday,
|
|
10995
10995
|
ganttTodayCircle
|
|
10996
10996
|
};
|
|
@@ -11056,7 +11056,7 @@ const GanttTodayInner = ({
|
|
|
11056
11056
|
/* @__PURE__ */ jsx(
|
|
11057
11057
|
"circle",
|
|
11058
11058
|
{
|
|
11059
|
-
className: styles$
|
|
11059
|
+
className: styles$d.ganttTodayCircle,
|
|
11060
11060
|
cx: x + 1,
|
|
11061
11061
|
cy: 6,
|
|
11062
11062
|
r: 6,
|
|
@@ -11133,7 +11133,7 @@ const GanttTodayInner = ({
|
|
|
11133
11133
|
/* @__PURE__ */ jsx(
|
|
11134
11134
|
"circle",
|
|
11135
11135
|
{
|
|
11136
|
-
className: styles$
|
|
11136
|
+
className: styles$d.ganttTodayCircle,
|
|
11137
11137
|
cx: x + 1,
|
|
11138
11138
|
cy: 6,
|
|
11139
11139
|
r: 6,
|
|
@@ -11176,7 +11176,7 @@ const calendarTopText = "_calendarTopText_15t8b_35";
|
|
|
11176
11176
|
const calendarHeader = "_calendarHeader_15t8b_61";
|
|
11177
11177
|
const calendar = "_calendar_15t8b_1";
|
|
11178
11178
|
const calendarDragging$1 = "_calendarDragging_15t8b_85";
|
|
11179
|
-
const styles$
|
|
11179
|
+
const styles$c = {
|
|
11180
11180
|
calendarBottomText,
|
|
11181
11181
|
calendarTopTick,
|
|
11182
11182
|
calendarTopText,
|
|
@@ -11207,10 +11207,10 @@ const TopPartOfCalendar = ({
|
|
|
11207
11207
|
y1: y1Line,
|
|
11208
11208
|
x2: x1Line,
|
|
11209
11209
|
y2: y2Line,
|
|
11210
|
-
className: styles$
|
|
11210
|
+
className: styles$c.calendarTopTick
|
|
11211
11211
|
}
|
|
11212
11212
|
),
|
|
11213
|
-
value !== null && /* @__PURE__ */ jsx("text", { y: yText - 4, x: xText, className: styles$
|
|
11213
|
+
value !== null && /* @__PURE__ */ jsx("text", { y: yText - 4, x: xText, className: styles$c.calendarTopText, children: value.toString().split(",")[1] ? t(value.toString().split(",")[0]) + "," + value.toString().split(",")[1] : value.toString().length >= 3 ? t(value.toString()) : value })
|
|
11214
11214
|
] });
|
|
11215
11215
|
};
|
|
11216
11216
|
const defaultRenderBottomHeader = (date, viewMode, dateSetup, index2, isUnknownDates) => {
|
|
@@ -11370,7 +11370,7 @@ const Calendar = ({
|
|
|
11370
11370
|
[renderTopHeader, dateSetup]
|
|
11371
11371
|
);
|
|
11372
11372
|
const renderBottomText = (x, y, key2, text) => {
|
|
11373
|
-
return /* @__PURE__ */ jsx("g", { className: styles$
|
|
11373
|
+
return /* @__PURE__ */ jsx("g", { className: styles$c.calendarBottomText, children: /* @__PURE__ */ jsx(
|
|
11374
11374
|
"text",
|
|
11375
11375
|
{
|
|
11376
11376
|
y,
|
|
@@ -11665,7 +11665,7 @@ const Calendar = ({
|
|
|
11665
11665
|
scrollLeft: scrollRef.current.scrollLeft,
|
|
11666
11666
|
scrollTop: scrollRef.current.scrollTop
|
|
11667
11667
|
};
|
|
11668
|
-
calendarContainer.classList.add(styles$
|
|
11668
|
+
calendarContainer.classList.add(styles$c.calendarDragging);
|
|
11669
11669
|
};
|
|
11670
11670
|
const onScrollMove = (event) => {
|
|
11671
11671
|
if (!moveStateRef.current) {
|
|
@@ -11680,7 +11680,7 @@ const Calendar = ({
|
|
|
11680
11680
|
const onScrollEnd = (event) => {
|
|
11681
11681
|
event.preventDefault();
|
|
11682
11682
|
moveStateRef.current = null;
|
|
11683
|
-
calendarContainer.classList.remove(styles$
|
|
11683
|
+
calendarContainer.classList.remove(styles$c.calendarDragging);
|
|
11684
11684
|
};
|
|
11685
11685
|
calendarContainer.addEventListener("mousemove", onScrollMove);
|
|
11686
11686
|
calendarContainer.addEventListener("mousedown", onScrollStart);
|
|
@@ -11697,7 +11697,7 @@ const Calendar = ({
|
|
|
11697
11697
|
"g",
|
|
11698
11698
|
{
|
|
11699
11699
|
ref: calendarRef,
|
|
11700
|
-
className: `${styles$
|
|
11700
|
+
className: `${styles$c.calendar} calendar`,
|
|
11701
11701
|
fontSize: "var(--gantt-font-size)",
|
|
11702
11702
|
fontFamily: "var(--gantt-font-family)",
|
|
11703
11703
|
children: [
|
|
@@ -11708,7 +11708,7 @@ const Calendar = ({
|
|
|
11708
11708
|
y: 0,
|
|
11709
11709
|
width: fullSvgWidth,
|
|
11710
11710
|
height: headerHeight,
|
|
11711
|
-
className: styles$
|
|
11711
|
+
className: styles$c.calendarHeader
|
|
11712
11712
|
}
|
|
11713
11713
|
),
|
|
11714
11714
|
topValues,
|
|
@@ -11727,12 +11727,14 @@ const generateTrianglePoints = (x, y, width, isLeftDirected) => {
|
|
|
11727
11727
|
${x - width},${y - width}
|
|
11728
11728
|
${x - width},${y + width}`;
|
|
11729
11729
|
};
|
|
11730
|
-
const arrow_clickable = "
|
|
11731
|
-
const mainPath = "
|
|
11732
|
-
const
|
|
11733
|
-
const
|
|
11730
|
+
const arrow_clickable = "_arrow_clickable_3u3q2_1";
|
|
11731
|
+
const mainPath = "_mainPath_3u3q2_11";
|
|
11732
|
+
const arrow_active = "_arrow_active_3u3q2_37";
|
|
11733
|
+
const clickZone = "_clickZone_3u3q2_81";
|
|
11734
|
+
const styles$b = {
|
|
11734
11735
|
arrow_clickable,
|
|
11735
11736
|
mainPath,
|
|
11737
|
+
arrow_active,
|
|
11736
11738
|
clickZone
|
|
11737
11739
|
};
|
|
11738
11740
|
const ArrowInner = (props) => {
|
|
@@ -11753,6 +11755,8 @@ const ArrowInner = (props) => {
|
|
|
11753
11755
|
isCritical,
|
|
11754
11756
|
rtl,
|
|
11755
11757
|
onArrowDoubleClick = void 0,
|
|
11758
|
+
onArrowClick = void 0,
|
|
11759
|
+
isActive = false,
|
|
11756
11760
|
fromConnectionIndex = 0,
|
|
11757
11761
|
fromTotalConnections = 1,
|
|
11758
11762
|
toConnectionIndex = 0,
|
|
@@ -11771,6 +11775,11 @@ const ArrowInner = (props) => {
|
|
|
11771
11775
|
onArrowDoubleClick(taskFrom, taskTo);
|
|
11772
11776
|
}
|
|
11773
11777
|
}, [taskFrom, taskTo, onArrowDoubleClick]);
|
|
11778
|
+
const handleClick = useCallback(() => {
|
|
11779
|
+
if (onArrowClick) {
|
|
11780
|
+
onArrowClick(taskFrom, taskTo);
|
|
11781
|
+
}
|
|
11782
|
+
}, [taskFrom, taskTo, onArrowClick]);
|
|
11774
11783
|
const [path, trianglePoints] = useMemo(
|
|
11775
11784
|
() => drownPathAndTriangle(
|
|
11776
11785
|
indexFrom,
|
|
@@ -11822,12 +11831,13 @@ const ArrowInner = (props) => {
|
|
|
11822
11831
|
"g",
|
|
11823
11832
|
{
|
|
11824
11833
|
"data-testid": `task-arrow-${targetFrom}-${taskFrom.name}-${targetTo}-${taskTo.name}`,
|
|
11825
|
-
className: `arrow ${styles$
|
|
11834
|
+
className: `arrow ${styles$b.arrow_clickable}${isActive ? ` ${styles$b.arrow_active}` : ""}`,
|
|
11826
11835
|
onDoubleClick,
|
|
11836
|
+
onClick: handleClick,
|
|
11827
11837
|
children: [
|
|
11828
|
-
onArrowDoubleClick && /* @__PURE__ */ jsx("path", { d: path, className: styles$
|
|
11829
|
-
/* @__PURE__ */ jsx("path", { className:
|
|
11830
|
-
/* @__PURE__ */ jsx("polygon", { className: "polygon
|
|
11838
|
+
(onArrowDoubleClick || onArrowClick) && /* @__PURE__ */ jsx("path", { d: path, className: styles$b.clickZone }),
|
|
11839
|
+
/* @__PURE__ */ jsx("path", { className: styles$b.mainPath, d: path }),
|
|
11840
|
+
/* @__PURE__ */ jsx("polygon", { className: "polygon", points: trianglePoints })
|
|
11831
11841
|
]
|
|
11832
11842
|
}
|
|
11833
11843
|
) });
|
|
@@ -11922,7 +11932,7 @@ const drownPathAndTriangle = (indexForm, fromX1, fromX2, fromY, isTaskFromLeftSi
|
|
|
11922
11932
|
return [path, trianglePoints];
|
|
11923
11933
|
};
|
|
11924
11934
|
const relationLine = "_relationLine_wh2qy_1";
|
|
11925
|
-
const styles$
|
|
11935
|
+
const styles$a = {
|
|
11926
11936
|
relationLine
|
|
11927
11937
|
};
|
|
11928
11938
|
const RelationLine = ({
|
|
@@ -11938,7 +11948,7 @@ const RelationLine = ({
|
|
|
11938
11948
|
x2,
|
|
11939
11949
|
y1,
|
|
11940
11950
|
y2,
|
|
11941
|
-
className: styles$
|
|
11951
|
+
className: styles$a.relationLine
|
|
11942
11952
|
}
|
|
11943
11953
|
);
|
|
11944
11954
|
};
|
|
@@ -12161,7 +12171,7 @@ const barHandle = "_barHandle_5jhkr_11";
|
|
|
12161
12171
|
const barHandleImportantVisible = "_barHandleImportantVisible_5jhkr_37";
|
|
12162
12172
|
const barHandleImportantHidden = "_barHandleImportantHidden_5jhkr_47";
|
|
12163
12173
|
const barBackground = "_barBackground_5jhkr_57";
|
|
12164
|
-
const styles$
|
|
12174
|
+
const styles$9 = {
|
|
12165
12175
|
barWrapper,
|
|
12166
12176
|
barHandle,
|
|
12167
12177
|
barHandleImportantVisible,
|
|
@@ -12263,7 +12273,7 @@ const BarDisplay = ({
|
|
|
12263
12273
|
ry: barCornerRadius,
|
|
12264
12274
|
rx: barCornerRadius,
|
|
12265
12275
|
fill: barColor,
|
|
12266
|
-
className: styles$
|
|
12276
|
+
className: styles$9.barBackground
|
|
12267
12277
|
}
|
|
12268
12278
|
),
|
|
12269
12279
|
showProgress && /* @__PURE__ */ jsx(
|
|
@@ -12320,7 +12330,7 @@ const BarDateHandle = ({
|
|
|
12320
12330
|
const projectWrapper = "_projectWrapper_1maxt_1";
|
|
12321
12331
|
const projectBackground = "_projectBackground_1maxt_11";
|
|
12322
12332
|
const projectTop = "_projectTop_1maxt_21";
|
|
12323
|
-
const styles$
|
|
12333
|
+
const styles$8 = {
|
|
12324
12334
|
projectWrapper,
|
|
12325
12335
|
projectBackground,
|
|
12326
12336
|
projectTop
|
|
@@ -12401,7 +12411,7 @@ const ProjectDisplay = ({
|
|
|
12401
12411
|
startMoveFullTask(firstTouch.clientX);
|
|
12402
12412
|
}
|
|
12403
12413
|
},
|
|
12404
|
-
className: styles$
|
|
12414
|
+
className: styles$8.projectWrapper,
|
|
12405
12415
|
children: [
|
|
12406
12416
|
/* @__PURE__ */ jsx(
|
|
12407
12417
|
"rect",
|
|
@@ -12413,7 +12423,7 @@ const ProjectDisplay = ({
|
|
|
12413
12423
|
height: taskHeight,
|
|
12414
12424
|
rx: barCornerRadius,
|
|
12415
12425
|
ry: barCornerRadius,
|
|
12416
|
-
className: styles$
|
|
12426
|
+
className: styles$8.projectBackground
|
|
12417
12427
|
}
|
|
12418
12428
|
),
|
|
12419
12429
|
showProgress && /* @__PURE__ */ jsx(
|
|
@@ -12438,13 +12448,13 @@ const ProjectDisplay = ({
|
|
|
12438
12448
|
height: taskHalfHeight,
|
|
12439
12449
|
rx: barCornerRadius,
|
|
12440
12450
|
ry: barCornerRadius,
|
|
12441
|
-
className: styles$
|
|
12451
|
+
className: styles$8.projectTop
|
|
12442
12452
|
}
|
|
12443
12453
|
),
|
|
12444
12454
|
/* @__PURE__ */ jsx(
|
|
12445
12455
|
"polygon",
|
|
12446
12456
|
{
|
|
12447
|
-
className: styles$
|
|
12457
|
+
className: styles$8.projectTop,
|
|
12448
12458
|
points: projectLeftTriangle,
|
|
12449
12459
|
fill: barColor
|
|
12450
12460
|
}
|
|
@@ -12452,7 +12462,7 @@ const ProjectDisplay = ({
|
|
|
12452
12462
|
/* @__PURE__ */ jsx(
|
|
12453
12463
|
"polygon",
|
|
12454
12464
|
{
|
|
12455
|
-
className: styles$
|
|
12465
|
+
className: styles$8.projectTop,
|
|
12456
12466
|
points: projectRightTriangle,
|
|
12457
12467
|
fill: barColor
|
|
12458
12468
|
}
|
|
@@ -12464,7 +12474,7 @@ const ProjectDisplay = ({
|
|
|
12464
12474
|
const barRelationHandleWrapper = "_barRelationHandleWrapper_eluno_1";
|
|
12465
12475
|
const barRelationHandle = "_barRelationHandle_eluno_1";
|
|
12466
12476
|
const barRelationHandle_drawMode = "_barRelationHandle_drawMode_eluno_9";
|
|
12467
|
-
const styles$
|
|
12477
|
+
const styles$7 = {
|
|
12468
12478
|
barRelationHandleWrapper,
|
|
12469
12479
|
barRelationHandle,
|
|
12470
12480
|
barRelationHandle_drawMode
|
|
@@ -12484,7 +12494,7 @@ const BarRelationHandleInner = ({
|
|
|
12484
12494
|
cx: x,
|
|
12485
12495
|
cy: y,
|
|
12486
12496
|
r: radius,
|
|
12487
|
-
className: `${styles$
|
|
12497
|
+
className: `${styles$7.barRelationHandle} ${isRelationDrawMode ? styles$7.barRelationHandle_drawMode : ""}`,
|
|
12488
12498
|
onMouseDown: startDrawRelation,
|
|
12489
12499
|
onTouchStart: startDrawRelation
|
|
12490
12500
|
}
|
|
@@ -12497,7 +12507,7 @@ const BarRelationWrapperInner = forwardRef(({ className, children }, ref) => {
|
|
|
12497
12507
|
{
|
|
12498
12508
|
ref,
|
|
12499
12509
|
tabIndex: 0,
|
|
12500
|
-
className: `${styles$
|
|
12510
|
+
className: `${styles$7.barRelationHandleWrapper} ${className || ""}`,
|
|
12501
12511
|
children
|
|
12502
12512
|
}
|
|
12503
12513
|
);
|
|
@@ -12638,12 +12648,12 @@ const Bar = (props) => {
|
|
|
12638
12648
|
return () => {
|
|
12639
12649
|
};
|
|
12640
12650
|
}, []);
|
|
12641
|
-
return /* @__PURE__ */ jsxs(BarRelationWrapper, { ref: rootRef, className: styles$
|
|
12651
|
+
return /* @__PURE__ */ jsxs(BarRelationWrapper, { ref: rootRef, className: styles$9.barWrapper, children: [
|
|
12642
12652
|
task.id !== "no-project-asigned" && renderBarDisplay(),
|
|
12643
12653
|
ctrlPressed && isDateChangeable(task) && /* @__PURE__ */ jsx(
|
|
12644
12654
|
BarDateHandle,
|
|
12645
12655
|
{
|
|
12646
|
-
className: `${styles$
|
|
12656
|
+
className: `${styles$9.barHandle} ${isMovingDate ? styles$9.barHandleImportantVisible : ""} ${isMovingProgress || isRelationDrawMode ? styles$9.barHandleImportantHidden : ""}`,
|
|
12647
12657
|
dataTestId: `bar-date-handle-left-${task.id}`,
|
|
12648
12658
|
barCornerRadius,
|
|
12649
12659
|
height: handleHeight,
|
|
@@ -12656,7 +12666,7 @@ const Bar = (props) => {
|
|
|
12656
12666
|
ctrlPressed && isDateChangeable(task) && /* @__PURE__ */ jsx(
|
|
12657
12667
|
BarDateHandle,
|
|
12658
12668
|
{
|
|
12659
|
-
className: `${styles$
|
|
12669
|
+
className: `${styles$9.barHandle} ${isMovingDate ? styles$9.barHandleImportantVisible : ""} ${isMovingProgress || isRelationDrawMode ? styles$9.barHandleImportantHidden : ""}`,
|
|
12660
12670
|
dataTestId: `bar-date-handle-right-${task.id}`,
|
|
12661
12671
|
barCornerRadius,
|
|
12662
12672
|
height: handleHeight,
|
|
@@ -12672,7 +12682,7 @@ const Bar = (props) => {
|
|
|
12672
12682
|
};
|
|
12673
12683
|
const milestoneWrapper = "_milestoneWrapper_vcirf_1";
|
|
12674
12684
|
const milestoneBackground = "_milestoneBackground_vcirf_11";
|
|
12675
|
-
const styles$
|
|
12685
|
+
const styles$6 = {
|
|
12676
12686
|
milestoneWrapper,
|
|
12677
12687
|
milestoneBackground
|
|
12678
12688
|
};
|
|
@@ -12702,7 +12712,7 @@ const Milestone = ({
|
|
|
12702
12712
|
}
|
|
12703
12713
|
return "var(--gantt-milestone-background-color)";
|
|
12704
12714
|
}, [isSelected, isCritical]);
|
|
12705
|
-
return /* @__PURE__ */ jsxs(BarRelationWrapper, { className: styles$
|
|
12715
|
+
return /* @__PURE__ */ jsxs(BarRelationWrapper, { className: styles$6.milestoneWrapper, children: [
|
|
12706
12716
|
/* @__PURE__ */ jsx(
|
|
12707
12717
|
"rect",
|
|
12708
12718
|
{
|
|
@@ -12715,7 +12725,7 @@ const Milestone = ({
|
|
|
12715
12725
|
rx: barCornerRadius,
|
|
12716
12726
|
ry: barCornerRadius,
|
|
12717
12727
|
transform,
|
|
12718
|
-
className: styles$
|
|
12728
|
+
className: styles$6.milestoneBackground,
|
|
12719
12729
|
onMouseDown: (e) => {
|
|
12720
12730
|
e.stopPropagation();
|
|
12721
12731
|
onTaskEventStart("move", e.clientX);
|
|
@@ -13041,11 +13051,11 @@ const TaskItemInner = (props) => {
|
|
|
13041
13051
|
};
|
|
13042
13052
|
const TaskItem = memo(TaskItemInner);
|
|
13043
13053
|
const TaskItemWrapper = "_TaskItemWrapper_8x02m_1";
|
|
13044
|
-
const styles$
|
|
13054
|
+
const styles$5 = {
|
|
13045
13055
|
TaskItemWrapper
|
|
13046
13056
|
};
|
|
13047
13057
|
const barComparison = "_barComparison_14078_1";
|
|
13048
|
-
const styles$
|
|
13058
|
+
const styles$4 = {
|
|
13049
13059
|
barComparison
|
|
13050
13060
|
};
|
|
13051
13061
|
const BarComparison = (props) => {
|
|
@@ -13100,7 +13110,7 @@ const BarComparison = (props) => {
|
|
|
13100
13110
|
ry: barCornerRadius,
|
|
13101
13111
|
rx: barCornerRadius,
|
|
13102
13112
|
fill: barColor,
|
|
13103
|
-
className: styles$
|
|
13113
|
+
className: styles$4.barComparison
|
|
13104
13114
|
}
|
|
13105
13115
|
),
|
|
13106
13116
|
/* @__PURE__ */ jsx(
|
|
@@ -13149,6 +13159,8 @@ const TaskGanttContentInner = (props) => {
|
|
|
13149
13159
|
onTaskBarDragStart,
|
|
13150
13160
|
mapGlobalRowIndexToTask,
|
|
13151
13161
|
onArrowDoubleClick,
|
|
13162
|
+
onArrowClick,
|
|
13163
|
+
activeArrowKey,
|
|
13152
13164
|
onDoubleClick,
|
|
13153
13165
|
onClick,
|
|
13154
13166
|
renderedRowIndexes,
|
|
@@ -13203,13 +13215,6 @@ const TaskGanttContentInner = (props) => {
|
|
|
13203
13215
|
getDate,
|
|
13204
13216
|
startColumnIndex
|
|
13205
13217
|
]);
|
|
13206
|
-
const [hoveredTaskId, setHoveredTaskId] = useState(null);
|
|
13207
|
-
const handleTaskHover = useCallback((taskId) => {
|
|
13208
|
-
setHoveredTaskId(taskId);
|
|
13209
|
-
}, []);
|
|
13210
|
-
const handleTaskLeave = useCallback(() => {
|
|
13211
|
-
setHoveredTaskId(null);
|
|
13212
|
-
}, []);
|
|
13213
13218
|
const [renderedTasks, renderedArrows, renderedSelectedTasks] = useMemo(() => {
|
|
13214
13219
|
if (!renderedRowIndexes) {
|
|
13215
13220
|
return [null, null, null];
|
|
@@ -13307,13 +13312,11 @@ const TaskGanttContentInner = (props) => {
|
|
|
13307
13312
|
"svg",
|
|
13308
13313
|
{
|
|
13309
13314
|
id: task.id,
|
|
13310
|
-
className: `${styles$
|
|
13315
|
+
className: `${styles$5.TaskItemWrapper} TaskItemWrapper`,
|
|
13311
13316
|
x: Math.max(safeContainerX + (additionalLeftSpace || 0), 0),
|
|
13312
13317
|
y: safeLevelY,
|
|
13313
13318
|
width: Math.max(safeContainerWidth, 0),
|
|
13314
13319
|
height: fullRowHeight,
|
|
13315
|
-
onMouseEnter: () => handleTaskHover(task.id),
|
|
13316
|
-
onMouseLeave: handleTaskLeave,
|
|
13317
13320
|
children: /* @__PURE__ */ jsx(
|
|
13318
13321
|
TaskItem,
|
|
13319
13322
|
{
|
|
@@ -13442,8 +13445,6 @@ const TaskGanttContentInner = (props) => {
|
|
|
13442
13445
|
y: containerY,
|
|
13443
13446
|
width: safeArrowContainerWidth,
|
|
13444
13447
|
height: containerHeight,
|
|
13445
|
-
"data-from-id": source.id,
|
|
13446
|
-
"data-to-id": taskId,
|
|
13447
13448
|
children: /* @__PURE__ */ jsx(
|
|
13448
13449
|
Arrow,
|
|
13449
13450
|
{
|
|
@@ -13463,6 +13464,8 @@ const TaskGanttContentInner = (props) => {
|
|
|
13463
13464
|
isCritical: isCritical2,
|
|
13464
13465
|
rtl,
|
|
13465
13466
|
onArrowDoubleClick,
|
|
13467
|
+
onArrowClick,
|
|
13468
|
+
isActive: activeArrowKey === `${source.id}|${taskId}`,
|
|
13466
13469
|
fromConnectionIndex: getConnectionIndex(
|
|
13467
13470
|
`${source.id}|${sourceTarget}|out`
|
|
13468
13471
|
),
|
|
@@ -13528,8 +13531,6 @@ const TaskGanttContentInner = (props) => {
|
|
|
13528
13531
|
y: containerY,
|
|
13529
13532
|
width: safeArrowContainerWidth,
|
|
13530
13533
|
height: containerHeight,
|
|
13531
|
-
"data-from-id": taskId,
|
|
13532
|
-
"data-to-id": dependent.id,
|
|
13533
13534
|
children: /* @__PURE__ */ jsx(
|
|
13534
13535
|
Arrow,
|
|
13535
13536
|
{
|
|
@@ -13549,6 +13550,8 @@ const TaskGanttContentInner = (props) => {
|
|
|
13549
13550
|
isCritical: isCritical2,
|
|
13550
13551
|
rtl,
|
|
13551
13552
|
onArrowDoubleClick,
|
|
13553
|
+
onArrowClick,
|
|
13554
|
+
isActive: activeArrowKey === `${taskId}|${dependent.id}`,
|
|
13552
13555
|
fromConnectionIndex: getConnectionIndex(
|
|
13553
13556
|
`${taskId}|${ownTarget}|out`
|
|
13554
13557
|
),
|
|
@@ -13627,8 +13630,6 @@ const TaskGanttContentInner = (props) => {
|
|
|
13627
13630
|
y: containerY,
|
|
13628
13631
|
width: safeCW,
|
|
13629
13632
|
height: containerHeight,
|
|
13630
|
-
"data-from-id": source.id,
|
|
13631
|
-
"data-to-id": taskId,
|
|
13632
13633
|
children: /* @__PURE__ */ jsx(
|
|
13633
13634
|
Arrow,
|
|
13634
13635
|
{
|
|
@@ -13648,6 +13649,8 @@ const TaskGanttContentInner = (props) => {
|
|
|
13648
13649
|
isCritical,
|
|
13649
13650
|
rtl,
|
|
13650
13651
|
onArrowDoubleClick,
|
|
13652
|
+
onArrowClick,
|
|
13653
|
+
isActive: activeArrowKey === `${source.id}|${taskId}`,
|
|
13651
13654
|
fromConnectionIndex: getConnectionIndex(
|
|
13652
13655
|
`${source.id}|${sourceTarget}|out`
|
|
13653
13656
|
),
|
|
@@ -13705,36 +13708,12 @@ const TaskGanttContentInner = (props) => {
|
|
|
13705
13708
|
isRelationChangeable,
|
|
13706
13709
|
visibleTasksMirror,
|
|
13707
13710
|
onArrowDoubleClick,
|
|
13711
|
+
onArrowClick,
|
|
13712
|
+
activeArrowKey,
|
|
13708
13713
|
showProgress,
|
|
13709
|
-
progressColor
|
|
13710
|
-
handleTaskHover,
|
|
13711
|
-
handleTaskLeave
|
|
13714
|
+
progressColor
|
|
13712
13715
|
]);
|
|
13713
|
-
const arrowHighlightStyle = useMemo(() => {
|
|
13714
|
-
if (!hoveredTaskId)
|
|
13715
|
-
return null;
|
|
13716
|
-
const safeId = CSS.escape(hoveredTaskId);
|
|
13717
|
-
return /* @__PURE__ */ jsx("style", { children: `
|
|
13718
|
-
g.arrows svg { opacity: 0.08 !important; transition: opacity 0.15s; }
|
|
13719
|
-
g.arrows svg[data-from-id="${safeId}"],
|
|
13720
|
-
g.arrows svg[data-to-id="${safeId}"] {
|
|
13721
|
-
opacity: 1 !important;
|
|
13722
|
-
}
|
|
13723
|
-
g.arrows svg[data-from-id="${safeId}"] .arrowMainPath,
|
|
13724
|
-
g.arrows svg[data-to-id="${safeId}"] .arrowMainPath {
|
|
13725
|
-
opacity: 1 !important;
|
|
13726
|
-
stroke-width: 2px !important;
|
|
13727
|
-
stroke: var(--gantt-arrow-hover-color, #1976D2) !important;
|
|
13728
|
-
}
|
|
13729
|
-
g.arrows svg[data-from-id="${safeId}"] .arrowPolygon,
|
|
13730
|
-
g.arrows svg[data-to-id="${safeId}"] .arrowPolygon {
|
|
13731
|
-
fill: var(--gantt-arrow-hover-color, #1976D2) !important;
|
|
13732
|
-
opacity: 1 !important;
|
|
13733
|
-
}
|
|
13734
|
-
` });
|
|
13735
|
-
}, [hoveredTaskId]);
|
|
13736
13716
|
return /* @__PURE__ */ jsxs("g", { className: "content", children: [
|
|
13737
|
-
arrowHighlightStyle,
|
|
13738
13717
|
renderedSelectedTasks,
|
|
13739
13718
|
/* @__PURE__ */ jsx("g", { children: renderedHolidays }),
|
|
13740
13719
|
/* @__PURE__ */ jsx(
|
|
@@ -13771,7 +13750,7 @@ const ganttVerticalContainer = "_ganttVerticalContainer_1wr55_1";
|
|
|
13771
13750
|
const horizontalContainer = "_horizontalContainer_1wr55_73";
|
|
13772
13751
|
const wrapper = "_wrapper_1wr55_85";
|
|
13773
13752
|
const calendarDragging = "_calendarDragging_1wr55_109";
|
|
13774
|
-
const styles$
|
|
13753
|
+
const styles$3 = {
|
|
13775
13754
|
ganttVerticalContainer,
|
|
13776
13755
|
horizontalContainer,
|
|
13777
13756
|
wrapper,
|
|
@@ -13855,7 +13834,7 @@ const TaskGanttInner = (props) => {
|
|
|
13855
13834
|
scrollLeft: verticalScrollbarRef.current.scrollLeft,
|
|
13856
13835
|
scrollTop: verticalScrollbarRef.current.scrollTop
|
|
13857
13836
|
};
|
|
13858
|
-
contentContainer.classList.add(styles$
|
|
13837
|
+
contentContainer.classList.add(styles$3.calendarDragging);
|
|
13859
13838
|
};
|
|
13860
13839
|
const onScrollMove = (event) => {
|
|
13861
13840
|
if (!moveStateVertRef.current) {
|
|
@@ -13888,7 +13867,7 @@ const TaskGanttInner = (props) => {
|
|
|
13888
13867
|
event.preventDefault();
|
|
13889
13868
|
moveStateVertRef.current = null;
|
|
13890
13869
|
moveStateHorRef.current = null;
|
|
13891
|
-
contentContainer.classList.remove(styles$
|
|
13870
|
+
contentContainer.classList.remove(styles$3.calendarDragging);
|
|
13892
13871
|
};
|
|
13893
13872
|
contentContainer.addEventListener("mousemove", onScrollMove);
|
|
13894
13873
|
contentContainer.addEventListener("mousedown", onScrollStart);
|
|
@@ -13904,7 +13883,7 @@ const TaskGanttInner = (props) => {
|
|
|
13904
13883
|
return /* @__PURE__ */ jsxs(
|
|
13905
13884
|
"div",
|
|
13906
13885
|
{
|
|
13907
|
-
className: styles$
|
|
13886
|
+
className: styles$3.ganttVerticalContainer,
|
|
13908
13887
|
ref: verticalGanttContainerRef,
|
|
13909
13888
|
onScroll: onVerticalScrollbarScrollX,
|
|
13910
13889
|
dir: "ltr",
|
|
@@ -13923,7 +13902,7 @@ const TaskGanttInner = (props) => {
|
|
|
13923
13902
|
"div",
|
|
13924
13903
|
{
|
|
13925
13904
|
ref: horizontalContainerRef,
|
|
13926
|
-
className: styles$
|
|
13905
|
+
className: styles$3.horizontalContainer,
|
|
13927
13906
|
style: containerStyle,
|
|
13928
13907
|
children: /* @__PURE__ */ jsx("div", { style: gridStyle, children: /* @__PURE__ */ jsxs(
|
|
13929
13908
|
"svg",
|
|
@@ -16290,13 +16269,13 @@ function getWindowScrollBarX(element) {
|
|
|
16290
16269
|
function getDocumentRect(element) {
|
|
16291
16270
|
const html = getDocumentElement(element);
|
|
16292
16271
|
const scroll2 = getNodeScroll(element);
|
|
16293
|
-
const
|
|
16294
|
-
const width = max(html.scrollWidth, html.clientWidth,
|
|
16295
|
-
const height = max(html.scrollHeight, html.clientHeight,
|
|
16272
|
+
const body2 = element.ownerDocument.body;
|
|
16273
|
+
const width = max(html.scrollWidth, html.clientWidth, body2.scrollWidth, body2.clientWidth);
|
|
16274
|
+
const height = max(html.scrollHeight, html.clientHeight, body2.scrollHeight, body2.clientHeight);
|
|
16296
16275
|
let x = -scroll2.scrollLeft + getWindowScrollBarX(element);
|
|
16297
16276
|
const y = -scroll2.scrollTop;
|
|
16298
|
-
if (getComputedStyle$1(
|
|
16299
|
-
x += max(html.clientWidth,
|
|
16277
|
+
if (getComputedStyle$1(body2).direction === "rtl") {
|
|
16278
|
+
x += max(html.clientWidth, body2.clientWidth) - width;
|
|
16300
16279
|
}
|
|
16301
16280
|
return {
|
|
16302
16281
|
width,
|
|
@@ -18415,7 +18394,7 @@ const useContextMenu = (wrapperRef, scrollToTask) => {
|
|
|
18415
18394
|
const menuOption = "_menuOption_1c3e3_3";
|
|
18416
18395
|
const icon = "_icon_1c3e3_81";
|
|
18417
18396
|
const label = "_label_1c3e3_89";
|
|
18418
|
-
const styles$
|
|
18397
|
+
const styles$2 = {
|
|
18419
18398
|
menuOption,
|
|
18420
18399
|
icon,
|
|
18421
18400
|
label
|
|
@@ -18509,7 +18488,7 @@ function MenuOption(props) {
|
|
|
18509
18488
|
/* @__PURE__ */ jsxs(
|
|
18510
18489
|
"button",
|
|
18511
18490
|
{
|
|
18512
|
-
className: styles$
|
|
18491
|
+
className: styles$2.menuOption,
|
|
18513
18492
|
"aria-disabled": disabled,
|
|
18514
18493
|
disabled,
|
|
18515
18494
|
style: {
|
|
@@ -18524,7 +18503,7 @@ function MenuOption(props) {
|
|
|
18524
18503
|
/* @__PURE__ */ jsx(
|
|
18525
18504
|
"div",
|
|
18526
18505
|
{
|
|
18527
|
-
className: styles$
|
|
18506
|
+
className: styles$2.icon,
|
|
18528
18507
|
style: {
|
|
18529
18508
|
width: contextMenuIconWidth,
|
|
18530
18509
|
color: "var(--gantt-context-menu-text-color)",
|
|
@@ -18533,7 +18512,7 @@ function MenuOption(props) {
|
|
|
18533
18512
|
children: icon2
|
|
18534
18513
|
}
|
|
18535
18514
|
),
|
|
18536
|
-
/* @__PURE__ */ jsx("div", { className: styles$
|
|
18515
|
+
/* @__PURE__ */ jsx("div", { className: styles$2.label, children: label2 }),
|
|
18537
18516
|
children && children.length > 0 && /* @__PURE__ */ jsx(
|
|
18538
18517
|
"div",
|
|
18539
18518
|
{
|
|
@@ -19342,15 +19321,81 @@ const GANTT_EN_LOCALE = {
|
|
|
19342
19321
|
const loader = "_loader_covn4_5";
|
|
19343
19322
|
const l16 = "_l16_covn4_1";
|
|
19344
19323
|
const loaderHidden = "_loaderHidden_covn4_49";
|
|
19345
|
-
const styles = {
|
|
19324
|
+
const styles$1 = {
|
|
19346
19325
|
loader,
|
|
19347
19326
|
l16,
|
|
19348
19327
|
loaderHidden
|
|
19349
19328
|
};
|
|
19350
19329
|
const GanttLoaderInner = ({ loading }) => {
|
|
19351
|
-
return /* @__PURE__ */ jsx("div", { className: `${styles.loader} ${loading ? "" : styles.loaderHidden}` });
|
|
19330
|
+
return /* @__PURE__ */ jsx("div", { className: `${styles$1.loader} ${loading ? "" : styles$1.loaderHidden}` });
|
|
19352
19331
|
};
|
|
19353
19332
|
const GanttLoader = memo(GanttLoaderInner);
|
|
19333
|
+
const overlay = "_overlay_1rnqn_1";
|
|
19334
|
+
const drawer = "_drawer_1rnqn_19";
|
|
19335
|
+
const drawer_open = "_drawer_open_1rnqn_51";
|
|
19336
|
+
const header = "_header_1rnqn_59";
|
|
19337
|
+
const title = "_title_1rnqn_77";
|
|
19338
|
+
const closeButton = "_closeButton_1rnqn_97";
|
|
19339
|
+
const body = "_body_1rnqn_131";
|
|
19340
|
+
const styles = {
|
|
19341
|
+
overlay,
|
|
19342
|
+
drawer,
|
|
19343
|
+
drawer_open,
|
|
19344
|
+
header,
|
|
19345
|
+
title,
|
|
19346
|
+
closeButton,
|
|
19347
|
+
body
|
|
19348
|
+
};
|
|
19349
|
+
const GanttDrawerInner = ({
|
|
19350
|
+
data,
|
|
19351
|
+
width,
|
|
19352
|
+
onClose,
|
|
19353
|
+
renderContent
|
|
19354
|
+
}) => {
|
|
19355
|
+
const handleOverlayClick = useCallback(
|
|
19356
|
+
(e) => {
|
|
19357
|
+
e.stopPropagation();
|
|
19358
|
+
onClose();
|
|
19359
|
+
},
|
|
19360
|
+
[onClose]
|
|
19361
|
+
);
|
|
19362
|
+
const title2 = (data == null ? void 0 : data.type) === "task" ? data.task.name : (data == null ? void 0 : data.type) === "arrow" ? `${data.taskFrom.name} → ${data.taskTo.name}` : "";
|
|
19363
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19364
|
+
data && /* @__PURE__ */ jsx("div", { className: styles.overlay, onClick: handleOverlayClick }),
|
|
19365
|
+
/* @__PURE__ */ jsxs(
|
|
19366
|
+
"div",
|
|
19367
|
+
{
|
|
19368
|
+
className: `${styles.drawer}${data ? ` ${styles.drawer_open}` : ""}`,
|
|
19369
|
+
style: { width },
|
|
19370
|
+
children: [
|
|
19371
|
+
/* @__PURE__ */ jsxs("div", { className: styles.header, children: [
|
|
19372
|
+
/* @__PURE__ */ jsx("span", { className: styles.title, children: title2 }),
|
|
19373
|
+
/* @__PURE__ */ jsx(
|
|
19374
|
+
"button",
|
|
19375
|
+
{
|
|
19376
|
+
className: styles.closeButton,
|
|
19377
|
+
onClick: onClose,
|
|
19378
|
+
"aria-label": "Close drawer",
|
|
19379
|
+
type: "button",
|
|
19380
|
+
children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsx(
|
|
19381
|
+
"path",
|
|
19382
|
+
{
|
|
19383
|
+
d: "M12 4L4 12M4 4l8 8",
|
|
19384
|
+
stroke: "currentColor",
|
|
19385
|
+
strokeWidth: "1.5",
|
|
19386
|
+
strokeLinecap: "round"
|
|
19387
|
+
}
|
|
19388
|
+
) })
|
|
19389
|
+
}
|
|
19390
|
+
)
|
|
19391
|
+
] }),
|
|
19392
|
+
/* @__PURE__ */ jsx("div", { className: styles.body, children: data && renderContent ? renderContent(data) : null })
|
|
19393
|
+
]
|
|
19394
|
+
}
|
|
19395
|
+
)
|
|
19396
|
+
] });
|
|
19397
|
+
};
|
|
19398
|
+
const GanttDrawer = memo(GanttDrawerInner);
|
|
19354
19399
|
const Gantt = (props) => {
|
|
19355
19400
|
var _a, _b;
|
|
19356
19401
|
const {
|
|
@@ -19396,7 +19441,8 @@ const Gantt = (props) => {
|
|
|
19396
19441
|
dataDateLabel = "Data Date",
|
|
19397
19442
|
showProgress = true,
|
|
19398
19443
|
progressColor,
|
|
19399
|
-
scrollToTaskId
|
|
19444
|
+
scrollToTaskId,
|
|
19445
|
+
drawer: drawerProps
|
|
19400
19446
|
} = props;
|
|
19401
19447
|
const ganttSVGRef = useRef(null);
|
|
19402
19448
|
const wrapperRef = useRef(null);
|
|
@@ -19413,6 +19459,11 @@ const Gantt = (props) => {
|
|
|
19413
19459
|
[theme, rowHeight]
|
|
19414
19460
|
);
|
|
19415
19461
|
const [waitCommitTasks, setWaitCommitTasks] = useState(false);
|
|
19462
|
+
const enableDrawer = (drawerProps == null ? void 0 : drawerProps.enableDrawer) ?? false;
|
|
19463
|
+
const drawerWidth = (drawerProps == null ? void 0 : drawerProps.drawerWidth) ?? 360;
|
|
19464
|
+
const renderDrawerContent = drawerProps == null ? void 0 : drawerProps.renderDrawerContent;
|
|
19465
|
+
const [drawerData, setDrawerData] = useState(null);
|
|
19466
|
+
const [activeArrowKey, setActiveArrowKey] = useState(null);
|
|
19416
19467
|
const taskBar = useMemo(() => {
|
|
19417
19468
|
return mergeDeepObj(
|
|
19418
19469
|
{},
|
|
@@ -20502,6 +20553,34 @@ const Gantt = (props) => {
|
|
|
20502
20553
|
},
|
|
20503
20554
|
[mapTaskToGlobalIndex, taskBar, handleCommitInternal, sortedTasks]
|
|
20504
20555
|
);
|
|
20556
|
+
const onArrowClick = useCallback(
|
|
20557
|
+
(taskFrom, taskTo) => {
|
|
20558
|
+
if (enableDrawer) {
|
|
20559
|
+
setActiveArrowKey(`${taskFrom.id}|${taskTo.id}`);
|
|
20560
|
+
setDrawerData({ type: "arrow", taskFrom, taskTo });
|
|
20561
|
+
}
|
|
20562
|
+
if (taskBar.onArrowClick) {
|
|
20563
|
+
taskBar.onArrowClick(taskFrom, taskTo);
|
|
20564
|
+
}
|
|
20565
|
+
},
|
|
20566
|
+
[enableDrawer, taskBar]
|
|
20567
|
+
);
|
|
20568
|
+
const handleTaskClick = useCallback(
|
|
20569
|
+
(task, _event) => {
|
|
20570
|
+
if (enableDrawer) {
|
|
20571
|
+
setActiveArrowKey(null);
|
|
20572
|
+
setDrawerData({ type: "task", task });
|
|
20573
|
+
}
|
|
20574
|
+
if (taskBar.onClick) {
|
|
20575
|
+
taskBar.onClick(task);
|
|
20576
|
+
}
|
|
20577
|
+
},
|
|
20578
|
+
[enableDrawer, taskBar]
|
|
20579
|
+
);
|
|
20580
|
+
const handleDrawerClose = useCallback(() => {
|
|
20581
|
+
setDrawerData(null);
|
|
20582
|
+
setActiveArrowKey(null);
|
|
20583
|
+
}, []);
|
|
20505
20584
|
const handleAction = useHandleAction({
|
|
20506
20585
|
checkTaskIdExists,
|
|
20507
20586
|
childTasksMap,
|
|
@@ -20688,6 +20767,7 @@ const Gantt = (props) => {
|
|
|
20688
20767
|
const renderTaskBarProps = useMemo(
|
|
20689
20768
|
() => ({
|
|
20690
20769
|
...taskBar,
|
|
20770
|
+
onClick: enableDrawer ? handleTaskClick : taskBar.onClick,
|
|
20691
20771
|
taskBarMovingAction: (task) => {
|
|
20692
20772
|
var _a2;
|
|
20693
20773
|
return task.id === ((_a2 = changeInProgress == null ? void 0 : changeInProgress.changedTask) == null ? void 0 : _a2.id) ? changeInProgress.action : null;
|
|
@@ -20714,6 +20794,8 @@ const Gantt = (props) => {
|
|
|
20714
20794
|
onTooltipTask: onChangeTooltipTask,
|
|
20715
20795
|
mapGlobalRowIndexToTask,
|
|
20716
20796
|
onArrowDoubleClick,
|
|
20797
|
+
onArrowClick: enableDrawer ? onArrowClick : taskBar.onArrowClick,
|
|
20798
|
+
activeArrowKey,
|
|
20717
20799
|
renderedRowIndexes,
|
|
20718
20800
|
rtl,
|
|
20719
20801
|
selectTaskOnMouseDown,
|
|
@@ -20751,6 +20833,10 @@ const Gantt = (props) => {
|
|
|
20751
20833
|
onChangeTooltipTask,
|
|
20752
20834
|
mapGlobalRowIndexToTask,
|
|
20753
20835
|
onArrowDoubleClick,
|
|
20836
|
+
onArrowClick,
|
|
20837
|
+
activeArrowKey,
|
|
20838
|
+
enableDrawer,
|
|
20839
|
+
handleTaskClick,
|
|
20754
20840
|
renderedRowIndexes,
|
|
20755
20841
|
rtl,
|
|
20756
20842
|
selectTaskOnMouseDown,
|
|
@@ -20833,7 +20919,7 @@ const Gantt = (props) => {
|
|
|
20833
20919
|
"div",
|
|
20834
20920
|
{
|
|
20835
20921
|
style: cssVars,
|
|
20836
|
-
className: `${styles$
|
|
20922
|
+
className: `${styles$3.wrapper} gantt`,
|
|
20837
20923
|
onKeyDown: handleKeyDown,
|
|
20838
20924
|
tabIndex: 0,
|
|
20839
20925
|
ref: wrapperRef,
|
|
@@ -20917,7 +21003,16 @@ const Gantt = (props) => {
|
|
|
20917
21003
|
boundaryElement: verticalGanttContainerRef
|
|
20918
21004
|
}
|
|
20919
21005
|
),
|
|
20920
|
-
/* @__PURE__ */ jsx(GanttLoader, { loading: waitCommitTasks })
|
|
21006
|
+
/* @__PURE__ */ jsx(GanttLoader, { loading: waitCommitTasks }),
|
|
21007
|
+
enableDrawer && /* @__PURE__ */ jsx(
|
|
21008
|
+
GanttDrawer,
|
|
21009
|
+
{
|
|
21010
|
+
data: drawerData,
|
|
21011
|
+
width: drawerWidth,
|
|
21012
|
+
onClose: handleDrawerClose,
|
|
21013
|
+
renderContent: renderDrawerContent
|
|
21014
|
+
}
|
|
21015
|
+
)
|
|
20921
21016
|
]
|
|
20922
21017
|
}
|
|
20923
21018
|
) }) });
|