@industry-theme/backlogmd-kanban-panel 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KanbanPanel.d.ts","sourceRoot":"","sources":["../../src/panels/KanbanPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6E,MAAM,OAAO,CAAC;AAelG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAiBtD;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"KanbanPanel.d.ts","sourceRoot":"","sources":["../../src/panels/KanbanPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6E,MAAM,OAAO,CAAC;AAelG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAiBtD;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA+8CvD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskDetailPanel.d.ts","sourceRoot":"","sources":["../../src/panels/TaskDetailPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAMxE,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskDetailPanel.d.ts","sourceRoot":"","sources":["../../src/panels/TaskDetailPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAMxE,OAAO,KAAK,EAAE,yBAAyB,EAAqB,MAAM,UAAU,CAAC;AAuG7E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,yBAAyB;IACrE,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAiDD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA0yB1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoardEmptyState.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/components/BoardEmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAK3C,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"BoardEmptyState.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/components/BoardEmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAK3C,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAqJ1D,CAAC"}
|
package/dist/panels.bundle.js
CHANGED
|
@@ -9871,17 +9871,27 @@ const BoardEmptyState = ({
|
|
|
9871
9871
|
}) => {
|
|
9872
9872
|
const { theme: theme2 } = useTheme();
|
|
9873
9873
|
const handleAddTask = useCallback(() => {
|
|
9874
|
-
const
|
|
9875
|
-
|
|
9874
|
+
const tracer = getTracer();
|
|
9875
|
+
const span = tracer.startSpan("board.interaction", {
|
|
9876
|
+
attributes: { "action.type": "add_task" }
|
|
9877
|
+
});
|
|
9878
|
+
span.addEvent("empty.action.clicked", {
|
|
9876
9879
|
"action.type": "add_task"
|
|
9877
9880
|
});
|
|
9881
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
9882
|
+
span.end();
|
|
9878
9883
|
onAddTask();
|
|
9879
9884
|
}, [onAddTask]);
|
|
9880
9885
|
const handleAddMilestone = useCallback(() => {
|
|
9881
|
-
const
|
|
9882
|
-
|
|
9886
|
+
const tracer = getTracer();
|
|
9887
|
+
const span = tracer.startSpan("board.interaction", {
|
|
9888
|
+
attributes: { "action.type": "add_milestone" }
|
|
9889
|
+
});
|
|
9890
|
+
span.addEvent("empty.action.clicked", {
|
|
9883
9891
|
"action.type": "add_milestone"
|
|
9884
9892
|
});
|
|
9893
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
9894
|
+
span.end();
|
|
9885
9895
|
onAddMilestone();
|
|
9886
9896
|
}, [onAddMilestone]);
|
|
9887
9897
|
return /* @__PURE__ */ jsxs(
|
|
@@ -11084,26 +11094,68 @@ const KanbanPanel = ({
|
|
|
11084
11094
|
const [searchQuery, setSearchQuery] = useState("");
|
|
11085
11095
|
const [isSearchVisible, setIsSearchVisible] = useState(false);
|
|
11086
11096
|
const searchDebounceRef = useRef(null);
|
|
11097
|
+
useEffect(() => {
|
|
11098
|
+
var _a2;
|
|
11099
|
+
const tracer = getTracer();
|
|
11100
|
+
const span = tracer.startSpan("panel.lifecycle", {
|
|
11101
|
+
attributes: {
|
|
11102
|
+
"panel.id": "kanban-panel"
|
|
11103
|
+
}
|
|
11104
|
+
});
|
|
11105
|
+
span.addEvent("panel.initialized", {
|
|
11106
|
+
"panel.id": "kanban-panel",
|
|
11107
|
+
"has.file.tree": Boolean((_a2 = context2 == null ? void 0 : context2.fileTree) == null ? void 0 : _a2.data),
|
|
11108
|
+
"has.file.system": Boolean(actions == null ? void 0 : actions.writeFile)
|
|
11109
|
+
});
|
|
11110
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
11111
|
+
span.end();
|
|
11112
|
+
}, []);
|
|
11087
11113
|
const handleSearchChange = useCallback((value) => {
|
|
11088
11114
|
setSearchQuery(value);
|
|
11089
11115
|
if (searchDebounceRef.current) {
|
|
11090
11116
|
clearTimeout(searchDebounceRef.current);
|
|
11091
11117
|
}
|
|
11092
11118
|
searchDebounceRef.current = setTimeout(() => {
|
|
11093
|
-
const activeSpan = getActiveSpan();
|
|
11094
11119
|
if (value.trim()) {
|
|
11095
|
-
|
|
11120
|
+
const tracer = getTracer();
|
|
11121
|
+
const span = tracer.startSpan("board.interaction", {
|
|
11122
|
+
attributes: {
|
|
11123
|
+
"search.query": value.trim()
|
|
11124
|
+
}
|
|
11125
|
+
});
|
|
11126
|
+
span.addEvent("search.performed", {
|
|
11096
11127
|
"search.query": value.trim()
|
|
11097
|
-
// Note: results.count is approximate since filteredTasksByStatus updates async
|
|
11098
11128
|
});
|
|
11129
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
11130
|
+
span.end();
|
|
11099
11131
|
}
|
|
11100
11132
|
}, 500);
|
|
11101
11133
|
}, []);
|
|
11102
11134
|
const handleClearSearch = useCallback(() => {
|
|
11103
11135
|
setSearchQuery("");
|
|
11104
|
-
const
|
|
11105
|
-
|
|
11136
|
+
const tracer = getTracer();
|
|
11137
|
+
const span = tracer.startSpan("board.interaction");
|
|
11138
|
+
span.addEvent("filter.cleared");
|
|
11139
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
11140
|
+
span.end();
|
|
11106
11141
|
}, []);
|
|
11142
|
+
const handleTabSelect = useCallback((status) => {
|
|
11143
|
+
const previousTab = selectedTab;
|
|
11144
|
+
setSelectedTab(status);
|
|
11145
|
+
const tracer = getTracer();
|
|
11146
|
+
const span = tracer.startSpan("board.interaction", {
|
|
11147
|
+
attributes: {
|
|
11148
|
+
"column.selected": status,
|
|
11149
|
+
"column.previous": previousTab
|
|
11150
|
+
}
|
|
11151
|
+
});
|
|
11152
|
+
span.addEvent("column.selected", {
|
|
11153
|
+
"column.status": status,
|
|
11154
|
+
"column.previous": previousTab
|
|
11155
|
+
});
|
|
11156
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
11157
|
+
span.end();
|
|
11158
|
+
}, [selectedTab]);
|
|
11107
11159
|
const sensors = useSensors(
|
|
11108
11160
|
useSensor(PointerSensor, {
|
|
11109
11161
|
activationConstraint: {
|
|
@@ -11176,6 +11228,24 @@ const KanbanPanel = ({
|
|
|
11176
11228
|
context: context2,
|
|
11177
11229
|
actions
|
|
11178
11230
|
});
|
|
11231
|
+
const hasEmittedSkipped = useRef(false);
|
|
11232
|
+
useEffect(() => {
|
|
11233
|
+
if (!isLoading && !isBacklogProject && !hasEmittedSkipped.current) {
|
|
11234
|
+
hasEmittedSkipped.current = true;
|
|
11235
|
+
const tracer = getTracer();
|
|
11236
|
+
const span = tracer.startSpan("board.interaction", {
|
|
11237
|
+
attributes: { "is.backlog.project": false }
|
|
11238
|
+
});
|
|
11239
|
+
span.addEvent("kanban.skipped", {
|
|
11240
|
+
"reason": "not_backlog_project"
|
|
11241
|
+
});
|
|
11242
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
11243
|
+
span.end();
|
|
11244
|
+
}
|
|
11245
|
+
if (isBacklogProject) {
|
|
11246
|
+
hasEmittedSkipped.current = false;
|
|
11247
|
+
}
|
|
11248
|
+
}, [isLoading, isBacklogProject]);
|
|
11179
11249
|
const filteredTasksByStatus = useMemo(() => {
|
|
11180
11250
|
if (!searchQuery.trim()) {
|
|
11181
11251
|
return tasksByStatus;
|
|
@@ -11269,11 +11339,19 @@ const KanbanPanel = ({
|
|
|
11269
11339
|
}, [getTaskById, moveTaskOptimistic]);
|
|
11270
11340
|
const handleTaskClick = (task) => {
|
|
11271
11341
|
setSelectedTaskId(task.id);
|
|
11272
|
-
const
|
|
11273
|
-
|
|
11342
|
+
const tracer = getTracer();
|
|
11343
|
+
const span = tracer.startSpan("board.interaction", {
|
|
11344
|
+
attributes: {
|
|
11345
|
+
"task.id": task.id,
|
|
11346
|
+
"task.status": task.status || "unknown"
|
|
11347
|
+
}
|
|
11348
|
+
});
|
|
11349
|
+
span.addEvent("task.selected", {
|
|
11274
11350
|
"task.id": task.id,
|
|
11275
11351
|
"task.status": task.status || "unknown"
|
|
11276
11352
|
});
|
|
11353
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
11354
|
+
span.end();
|
|
11277
11355
|
if (events2) {
|
|
11278
11356
|
events2.emit({
|
|
11279
11357
|
type: "task:selected",
|
|
@@ -11893,7 +11971,7 @@ const KanbanPanel = ({
|
|
|
11893
11971
|
return /* @__PURE__ */ jsxs(
|
|
11894
11972
|
"button",
|
|
11895
11973
|
{
|
|
11896
|
-
onClick: () =>
|
|
11974
|
+
onClick: () => handleTabSelect(status),
|
|
11897
11975
|
style: {
|
|
11898
11976
|
flex: 1,
|
|
11899
11977
|
padding: "10px 12px",
|
|
@@ -56497,6 +56575,16 @@ const TaskDetailPanel = ({ context: context2, events: events2, config }) => {
|
|
|
56497
56575
|
const hasClaudeWorkflow = ((_a = repoCapabilities == null ? void 0 : repoCapabilities.data) == null ? void 0 : _a.hasClaudeWorkflow) ?? false;
|
|
56498
56576
|
const handleAssignToClaude = useCallback(() => {
|
|
56499
56577
|
if (!events2 || !selectedTask) return;
|
|
56578
|
+
const tracer = getTracer();
|
|
56579
|
+
const span = tracer.startSpan("detail.interaction", {
|
|
56580
|
+
attributes: { "task.id": selectedTask.id }
|
|
56581
|
+
});
|
|
56582
|
+
span.addEvent("task.assign.requested", {
|
|
56583
|
+
"task.id": selectedTask.id,
|
|
56584
|
+
"task.title": selectedTask.title
|
|
56585
|
+
});
|
|
56586
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
56587
|
+
span.end();
|
|
56500
56588
|
setClaudeAssignment({ status: "loading" });
|
|
56501
56589
|
events2.emit({
|
|
56502
56590
|
type: "task:assign-to-claude",
|
|
@@ -56521,6 +56609,19 @@ const TaskDetailPanel = ({ context: context2, events: events2, config }) => {
|
|
|
56521
56609
|
}
|
|
56522
56610
|
});
|
|
56523
56611
|
}, [events2, selectedTask]);
|
|
56612
|
+
const handleOpenDeleteModal = useCallback(() => {
|
|
56613
|
+
if (!selectedTask) return;
|
|
56614
|
+
const tracer = getTracer();
|
|
56615
|
+
const span = tracer.startSpan("detail.interaction", {
|
|
56616
|
+
attributes: { "task.id": selectedTask.id }
|
|
56617
|
+
});
|
|
56618
|
+
span.addEvent("delete.modal.opened", {
|
|
56619
|
+
"task.id": selectedTask.id
|
|
56620
|
+
});
|
|
56621
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
56622
|
+
span.end();
|
|
56623
|
+
setIsDeleteModalOpen(true);
|
|
56624
|
+
}, [selectedTask]);
|
|
56524
56625
|
const handleDeleteConfirm = useCallback(() => {
|
|
56525
56626
|
if (!events2 || !selectedTask) return;
|
|
56526
56627
|
setDeleteState({ status: "loading" });
|
|
@@ -56582,6 +56683,15 @@ const TaskDetailPanel = ({ context: context2, events: events2, config }) => {
|
|
|
56582
56683
|
events2.on("task:deleted:success", (event) => {
|
|
56583
56684
|
const payload = event.payload;
|
|
56584
56685
|
if (payload.taskId === (selectedTask == null ? void 0 : selectedTask.id)) {
|
|
56686
|
+
const tracer = getTracer();
|
|
56687
|
+
const span = tracer.startSpan("task.mutation", {
|
|
56688
|
+
attributes: { "task.id": payload.taskId }
|
|
56689
|
+
});
|
|
56690
|
+
span.addEvent("task.deleted", {
|
|
56691
|
+
"task.id": payload.taskId
|
|
56692
|
+
});
|
|
56693
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
56694
|
+
span.end();
|
|
56585
56695
|
setDeleteState({ status: "success" });
|
|
56586
56696
|
setIsDeleteModalOpen(false);
|
|
56587
56697
|
setTimeout(() => {
|
|
@@ -56612,7 +56722,18 @@ const TaskDetailPanel = ({ context: context2, events: events2, config }) => {
|
|
|
56612
56722
|
});
|
|
56613
56723
|
};
|
|
56614
56724
|
}, [events2, selectedTask == null ? void 0 : selectedTask.id]);
|
|
56615
|
-
const handleBack = () => {
|
|
56725
|
+
const handleBack = useCallback(() => {
|
|
56726
|
+
if (selectedTask) {
|
|
56727
|
+
const tracer = getTracer();
|
|
56728
|
+
const span = tracer.startSpan("detail.interaction", {
|
|
56729
|
+
attributes: { "task.id": selectedTask.id }
|
|
56730
|
+
});
|
|
56731
|
+
span.addEvent("task.deselected", {
|
|
56732
|
+
"task.id": selectedTask.id
|
|
56733
|
+
});
|
|
56734
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
56735
|
+
span.end();
|
|
56736
|
+
}
|
|
56616
56737
|
setSelectedTask(null);
|
|
56617
56738
|
setDeleteState({ status: "idle" });
|
|
56618
56739
|
setIsDeleteModalOpen(false);
|
|
@@ -56624,7 +56745,7 @@ const TaskDetailPanel = ({ context: context2, events: events2, config }) => {
|
|
|
56624
56745
|
payload: {}
|
|
56625
56746
|
});
|
|
56626
56747
|
}
|
|
56627
|
-
};
|
|
56748
|
+
}, [selectedTask, events2]);
|
|
56628
56749
|
if (!selectedTask) {
|
|
56629
56750
|
return /* @__PURE__ */ jsxs(
|
|
56630
56751
|
"div",
|
|
@@ -56724,7 +56845,7 @@ const TaskDetailPanel = ({ context: context2, events: events2, config }) => {
|
|
|
56724
56845
|
deleteState.status === "idle" && /* @__PURE__ */ jsx(
|
|
56725
56846
|
"button",
|
|
56726
56847
|
{
|
|
56727
|
-
onClick:
|
|
56848
|
+
onClick: handleOpenDeleteModal,
|
|
56728
56849
|
style: {
|
|
56729
56850
|
display: "flex",
|
|
56730
56851
|
alignItems: "center",
|