@michengai/dsh-codex-ui 0.2.73 → 0.2.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/client.js +21 -5
  2. package/package.json +1 -1
package/dist/client.js CHANGED
@@ -1160,6 +1160,17 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1160
1160
  if (!after) return hoveredId;
1161
1161
  return index >= ids.length - 1 ? void 0 : ids[index + 1];
1162
1162
  }
1163
+ /**
1164
+ * 置顶标题区与首项目的上半区都表示“插到第一项之前”,因此必须共用同一条指示线。
1165
+ * 非空列表把指示线贴到首项目顶部;空列表才使用独立的起始占位线。
1166
+ */
1167
+ function pinnedHeaderDropIndicator(ids) {
1168
+ const workspaceId = ids[0];
1169
+ return workspaceId === void 0 ? { kind: "empty" } : {
1170
+ kind: "workspace",
1171
+ workspaceId
1172
+ };
1173
+ }
1163
1174
  /** 按指定 id 顺序取出对应项;未出现在 ids 中的项丢弃。 */
1164
1175
  function orderByIds(items, ids, idOf) {
1165
1176
  const byId = new Map(items.map((item) => [idOf(item), item]));
@@ -1394,6 +1405,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1394
1405
  const pinnedGroups = orderByIds(groups.items, pinnedWorkspaceIds, (workspace) => String(workspace.workspaceId));
1395
1406
  const regularGroups = groups.items.filter((workspace) => !projectPinned(workspace.workspaceId));
1396
1407
  const pinDragActive = workspaceDragId !== void 0;
1408
+ const pinnedHeaderDrop = pinSlot === "header" ? pinnedHeaderDropIndicator(pinnedGroups.map((workspace) => String(workspace.workspaceId))) : void 0;
1397
1409
  const assignedIds = workspaces.items.flatMap((workspace) => workspace.sessionIds.map((id) => String(id)));
1398
1410
  const recentIds = ungroupedSessionIds(sessions.ids ?? Object.keys(sessions.byId), sessions.byId, assignedIds, workspaces.archivedSessionIds).sort((left, right) => (sessions.byId[right]?.updatedAt ?? 0) - (sessions.byId[left]?.updatedAt ?? 0));
1399
1411
  const run = async (key, action) => {
@@ -1514,6 +1526,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1514
1526
  y: menu.y
1515
1527
  } : void 0;
1516
1528
  const isCurrentWorkspace = sessions.current !== void 0 && workspace.visibleIds.includes(sessions.current);
1529
+ const isPinnedHeaderDrop = zone === "pinned" && pinnedHeaderDrop?.kind === "workspace" && pinnedHeaderDrop.workspaceId === String(workspace.workspaceId);
1517
1530
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1518
1531
  className: `dcu-wb-project${isCurrentWorkspace ? " dcu-wb-project-current" : ""}`,
1519
1532
  onDragOver: (event) => {
@@ -1557,7 +1570,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1557
1570
  },
1558
1571
  children: [
1559
1572
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1560
- className: `dcu-wb-project-head${menuOpen ? " dcu-wb-menu-open" : ""}${workspaceDropId === workspace.workspaceId ? workspaceDropAfter ? " dcu-wb-drop dcu-wb-drop-after" : " dcu-wb-drop" : ""}${workspaceDragId === String(workspace.workspaceId) ? " dcu-wb-dragging" : ""}`,
1573
+ className: `dcu-wb-project-head${menuOpen ? " dcu-wb-menu-open" : ""}${isPinnedHeaderDrop || workspaceDropId === workspace.workspaceId ? workspaceDropAfter && !isPinnedHeaderDrop ? " dcu-wb-drop dcu-wb-drop-after" : " dcu-wb-drop" : ""}${workspaceDragId === String(workspace.workspaceId) ? " dcu-wb-dragging" : ""}`,
1561
1574
  role: "treeitem",
1562
1575
  "aria-expanded": isExpanded,
1563
1576
  tabIndex: 0,
@@ -1929,7 +1942,11 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1929
1942
  if (!pinDragActive) return;
1930
1943
  event.preventDefault();
1931
1944
  event.dataTransfer.dropEffect = "move";
1932
- if (event.target === event.currentTarget || event.target instanceof Element && event.target.closest(".dcu-wb-section-head") !== null) setPinSlot("header");
1945
+ if (event.target === event.currentTarget || event.target instanceof Element && event.target.closest(".dcu-wb-section-head") !== null) {
1946
+ setPinSlot("header");
1947
+ setWorkspaceDropId(void 0);
1948
+ setWorkspaceDropAfter(false);
1949
+ }
1933
1950
  },
1934
1951
  onDrop: (event) => {
1935
1952
  event.preventDefault();
@@ -1976,10 +1993,9 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1976
1993
  className: "dcu-wb-section-body",
1977
1994
  "data-open": sectionOpen("pinned"),
1978
1995
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
1979
- (pinDragActive || pinSlot === "header") && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1980
- className: `dcu-wb-pin-start${pinSlot === "header" ? " dcu-wb-drop" : ""}`,
1996
+ pinDragActive && pinnedGroups.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1997
+ className: `dcu-wb-pin-start${pinnedHeaderDrop?.kind === "empty" ? " dcu-wb-drop" : ""}`,
1981
1998
  onDragOver: (event) => {
1982
- if (!pinDragActive) return;
1983
1999
  event.preventDefault();
1984
2000
  event.stopPropagation();
1985
2001
  event.dataTransfer.dropEffect = "move";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michengai/dsh-codex-ui",
3
- "version": "0.2.73",
3
+ "version": "0.2.74",
4
4
  "description": "以 Codex 风格重构 DSH Web 侧栏的独立客户端插件",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {