@dsh-workbench/core 0.2.3 → 0.2.5

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,4 +1,4 @@
1
- import { Button, CodeBlock, DisclosureRow, IconArchiveOutlineRegular, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCodeOutlineRegular, IconCordisPluginOutlineRegular, IconDownloadOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconLinkOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPinOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSearchOutlineRegular, IconSettingsOutlineRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Menu, Modal, RiskConfirmation, StateDot, Switch, Tag, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
1
+ import { Button, CodeBlock, DisclosureRow, HoverCard, IconArchiveOutlineRegular, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCodeOutlineRegular, IconCordisPluginOutlineRegular, IconDownloadOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconLinkOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPinFillRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSearchOutlineRegular, IconSettingsOutlineRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Menu, Modal, RiskConfirmation, StateDot, Switch, Tag, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
2
2
  //#region \0rolldown/runtime.js
3
3
  var __defProp = Object.defineProperty;
4
4
  var __exportAll = (all, no_symbols) => {
@@ -20,6 +20,51 @@ function cx(...parts) {
20
20
  return parts.filter(Boolean).join(" ");
21
21
  }
22
22
  var MINUTE = 6e4;
23
+ var HOUR = 60 * MINUTE;
24
+ var DAY = 24 * HOUR;
25
+ var MONTH = 30 * DAY;
26
+ var YEAR = 365 * DAY;
27
+ function relativeTimeBucket(epochMs, now = Date.now()) {
28
+ if (!Number.isFinite(epochMs) || !Number.isFinite(now)) return null;
29
+ const diff = Math.max(0, now - epochMs);
30
+ if (diff < MINUTE) return {
31
+ unit: "now",
32
+ n: 0
33
+ };
34
+ if (diff < HOUR) return {
35
+ unit: "minutes",
36
+ n: Math.floor(diff / MINUTE)
37
+ };
38
+ if (diff < DAY) return {
39
+ unit: "hours",
40
+ n: Math.floor(diff / HOUR)
41
+ };
42
+ if (diff < MONTH) return {
43
+ unit: "days",
44
+ n: Math.floor(diff / DAY)
45
+ };
46
+ if (diff < YEAR) return {
47
+ unit: "months",
48
+ n: Math.floor(diff / MONTH)
49
+ };
50
+ return {
51
+ unit: "years",
52
+ n: Math.floor(diff / YEAR)
53
+ };
54
+ }
55
+ function bucketLabel(bucket, t) {
56
+ return bucket.unit === "now" ? t("time.now") : t(`time.short.${bucket.unit}`, { n: bucket.n });
57
+ }
58
+ function relativeTimeCompact(epochMs, t, now) {
59
+ const bucket = relativeTimeBucket(epochMs, now);
60
+ return bucket === null ? "" : bucketLabel(bucket, t);
61
+ }
62
+ function relativeTimeAgo(epochMs, t, now) {
63
+ const bucket = relativeTimeBucket(epochMs, now);
64
+ if (bucket === null) return "";
65
+ const label = bucketLabel(bucket, t);
66
+ return bucket.unit === "now" ? label : t("time.ago", { t: label });
67
+ }
23
68
  function relativeTime(epochMs, t) {
24
69
  if (!Number.isFinite(epochMs)) return "";
25
70
  const diff = Date.now() - epochMs;
@@ -1256,20 +1301,32 @@ var en = {
1256
1301
  "session.new.label": "Start a session in the current project",
1257
1302
  "session.empty": "No sessions in this project yet.",
1258
1303
  "session.noProject": "Add a project first.",
1304
+ "session.list.label": "Sessions",
1305
+ "session.copy": "Copy",
1259
1306
  "session.pinned": "Pinned",
1260
1307
  "session.actions": "Actions for {name}",
1261
1308
  "status.idle": "Idle",
1262
1309
  "status.running": "Running",
1263
1310
  "status.waitingApproval": "Waiting for approval",
1264
- "status.planReview": "Waiting for plan review",
1311
+ "status.planReview": "Plan awaiting review",
1265
1312
  "status.waitingAnswer": "Waiting for your answer",
1313
+ "status.compact.approval": "Approval",
1314
+ "status.compact.planReview": "Plan review",
1315
+ "status.compact.answer": "Answer",
1266
1316
  "status.completed": "Completed",
1267
1317
  "status.subagentsRunning.one": "{n} subagent running",
1268
1318
  "status.subagentsRunning.other": "{n} subagents running",
1319
+ "hover.copied": "Copied",
1269
1320
  "time.now": "just now",
1270
1321
  "time.minutes": "{n} min ago",
1271
1322
  "time.hours": "{n} h ago",
1272
1323
  "time.days": "{n} d ago",
1324
+ "time.ago": "{t} ago",
1325
+ "time.short.minutes": "{n}min",
1326
+ "time.short.hours": "{n}h",
1327
+ "time.short.days": "{n}d",
1328
+ "time.short.months": "{n}mo",
1329
+ "time.short.years": "{n}y",
1273
1330
  "panels.title": "Panel modules",
1274
1331
  "panels.groupBoardless": "No-board modules",
1275
1332
  "panels.groupPlugins": "opencli plugins",
@@ -1604,20 +1661,32 @@ var zh = {
1604
1661
  "session.new.label": "在当前项目新建会话",
1605
1662
  "session.empty": "这个项目还没有会话。",
1606
1663
  "session.noProject": "先添加一个项目。",
1664
+ "session.list.label": "会话",
1665
+ "session.copy": "复制",
1607
1666
  "session.pinned": "已置顶",
1608
1667
  "session.actions": "{name} 的操作",
1609
1668
  "status.idle": "空闲",
1610
- "status.running": "运行中",
1611
- "status.waitingApproval": "等待授权",
1612
- "status.planReview": "等待计划确认",
1669
+ "status.running": "进行中",
1670
+ "status.waitingApproval": "等待审批",
1671
+ "status.planReview": "计划待审",
1613
1672
  "status.waitingAnswer": "等待回答",
1673
+ "status.compact.approval": "待审批",
1674
+ "status.compact.planReview": "计划待审",
1675
+ "status.compact.answer": "待回答",
1614
1676
  "status.completed": "已完成",
1615
1677
  "status.subagentsRunning.one": "{n} 个子代理运行中",
1616
1678
  "status.subagentsRunning.other": "{n} 个子代理运行中",
1679
+ "hover.copied": "已复制",
1617
1680
  "time.now": "刚刚",
1618
1681
  "time.minutes": "{n} 分钟前",
1619
1682
  "time.hours": "{n} 小时前",
1620
1683
  "time.days": "{n} 天前",
1684
+ "time.ago": "{t}前",
1685
+ "time.short.minutes": "{n}分钟",
1686
+ "time.short.hours": "{n}小时",
1687
+ "time.short.days": "{n}天",
1688
+ "time.short.months": "{n}个月",
1689
+ "time.short.years": "{n}年",
1621
1690
  "panels.title": "面板模块",
1622
1691
  "panels.groupBoardless": "无看板模块",
1623
1692
  "panels.groupPlugins": "opencli 插件",
@@ -2212,23 +2281,37 @@ function quoteShellArg(value) {
2212
2281
  function tailLines(text, lines = 6) {
2213
2282
  return String(text ?? "").trim().split("\n").slice(-lines).join("\n");
2214
2283
  }
2284
+ function candidateStarts(raw) {
2285
+ const starts = [];
2286
+ for (let index = 0; index < raw.length; index += 1) {
2287
+ const char = raw[index];
2288
+ if (char !== "[" && char !== "{") continue;
2289
+ if (index === 0 || raw[index - 1] === "\n") starts.push(index);
2290
+ }
2291
+ const earliest = [raw.indexOf("["), raw.indexOf("{")].filter((index) => index >= 0);
2292
+ if (earliest.length > 0) {
2293
+ const head = Math.min(...earliest);
2294
+ if (!starts.includes(head)) starts.push(head);
2295
+ }
2296
+ return starts;
2297
+ }
2215
2298
  function parseJsonLoose(text) {
2216
2299
  const raw = String(text ?? "").trim();
2217
2300
  if (!raw) return void 0;
2218
2301
  try {
2219
2302
  return JSON.parse(raw);
2220
2303
  } catch {
2221
- const starts = [raw.indexOf("["), raw.indexOf("{")].filter((index) => index >= 0);
2222
- if (starts.length === 0) return void 0;
2223
- const from = Math.min(...starts);
2224
- const close = raw[from] === "[" ? "]" : "}";
2225
- const to = raw.lastIndexOf(close);
2226
- if (to <= from) return void 0;
2227
- try {
2228
- return JSON.parse(raw.slice(from, to + 1));
2229
- } catch {
2230
- return;
2304
+ for (const from of candidateStarts(raw)) {
2305
+ const close = raw[from] === "[" ? "]" : "}";
2306
+ const to = raw.lastIndexOf(close);
2307
+ if (to <= from) continue;
2308
+ try {
2309
+ return JSON.parse(raw.slice(from, to + 1));
2310
+ } catch {
2311
+ continue;
2312
+ }
2231
2313
  }
2314
+ return;
2232
2315
  }
2233
2316
  }
2234
2317
  var MARKDOWN_IMAGE = /!\[[^\]]*\]\([^)]*\)/g;
@@ -2361,6 +2444,9 @@ var dist_exports = /* @__PURE__ */ __exportAll({
2361
2444
  readFlag: () => readFlag,
2362
2445
  readText: () => readText,
2363
2446
  relativeTime: () => relativeTime,
2447
+ relativeTimeAgo: () => relativeTimeAgo,
2448
+ relativeTimeBucket: () => relativeTimeBucket,
2449
+ relativeTimeCompact: () => relativeTimeCompact,
2364
2450
  runsRouteOf: () => runsRouteOf,
2365
2451
  scopePrefixOf: () => scopePrefixOf,
2366
2452
  shortenPath: () => shortenPath,
@@ -5022,19 +5108,22 @@ function sessionStatuses(node, t) {
5022
5108
  case "approval":
5023
5109
  pending = {
5024
5110
  state: "warning",
5025
- label: t("status.waitingApproval")
5111
+ label: t("status.waitingApproval"),
5112
+ trailingLabel: t("status.compact.approval")
5026
5113
  };
5027
5114
  break;
5028
5115
  case "plan-review":
5029
5116
  pending = {
5030
5117
  state: "warning",
5031
- label: t("status.planReview")
5118
+ label: t("status.planReview"),
5119
+ trailingLabel: t("status.compact.planReview")
5032
5120
  };
5033
5121
  break;
5034
5122
  case "question":
5035
5123
  pending = {
5036
5124
  state: "warning",
5037
- label: t("status.waitingAnswer")
5125
+ label: t("status.waitingAnswer"),
5126
+ trailingLabel: t("status.compact.answer")
5038
5127
  };
5039
5128
  break;
5040
5129
  default: pending = void 0;
@@ -5090,6 +5179,16 @@ function sessionRows(workspaceSessionIds, list, archivedIds, current) {
5090
5179
  return rows;
5091
5180
  }
5092
5181
  //#endregion
5182
+ //#region src/modules/sessions/model/scroll-edges.ts
5183
+ var EDGE_SLACK_PX = 1;
5184
+ function scrollEdgesOf(metrics) {
5185
+ const rest = metrics.scrollHeight - metrics.clientHeight;
5186
+ return {
5187
+ canScrollUp: metrics.scrollTop > EDGE_SLACK_PX,
5188
+ canScrollDown: metrics.scrollTop < rest - EDGE_SLACK_PX
5189
+ };
5190
+ }
5191
+ //#endregion
5093
5192
  //#region src/app/layouts/project-selection.ts
5094
5193
  var listeners$1 = /* @__PURE__ */ new Set();
5095
5194
  function selectedProjectId() {
@@ -8996,6 +9095,64 @@ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
8996
9095
  }
8997
9096
  //#endregion
8998
9097
  //#region src/app/layouts/sidebar/SessionList.tsx
9098
+ var MIN_TITLE_REVEAL_PX = 8;
9099
+ var TITLE_MARQUEE_PX_PER_MS = .03;
9100
+ var REST_EDGES = {
9101
+ canScrollUp: false,
9102
+ canScrollDown: false
9103
+ };
9104
+ function placeTitle(title, left, range) {
9105
+ title.scrollTo({
9106
+ left,
9107
+ behavior: "instant"
9108
+ });
9109
+ if (left > 0) title.dataset.scrolled = "";
9110
+ else delete title.dataset.scrolled;
9111
+ if (left < range) title.dataset.clipped = "";
9112
+ else delete title.dataset.clipped;
9113
+ }
9114
+ function restTitle(title) {
9115
+ title.scrollTo({
9116
+ left: 0,
9117
+ behavior: "instant"
9118
+ });
9119
+ delete title.dataset.scrolled;
9120
+ delete title.dataset.clipped;
9121
+ }
9122
+ function useTitleMarquee(title) {
9123
+ const frame = useRef(0);
9124
+ useEffect(() => () => {
9125
+ cancelAnimationFrame(frame.current);
9126
+ }, []);
9127
+ return useMemo(() => ({
9128
+ enter: () => {
9129
+ const element = title.current;
9130
+ if (element === null) return;
9131
+ const range = element.scrollWidth - element.clientWidth;
9132
+ if (range <= MIN_TITLE_REVEAL_PX) return;
9133
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
9134
+ placeTitle(element, range, range);
9135
+ return;
9136
+ }
9137
+ cancelAnimationFrame(frame.current);
9138
+ let previous;
9139
+ let position = 0;
9140
+ const step = (now) => {
9141
+ position += previous === void 0 ? 0 : (now - previous) * TITLE_MARQUEE_PX_PER_MS;
9142
+ previous = now;
9143
+ placeTitle(element, Math.min(position, range), range);
9144
+ if (position < range) frame.current = requestAnimationFrame(step);
9145
+ };
9146
+ frame.current = requestAnimationFrame(step);
9147
+ },
9148
+ leave: () => {
9149
+ cancelAnimationFrame(frame.current);
9150
+ const element = title.current;
9151
+ if (element === null) return;
9152
+ restTitle(element);
9153
+ }
9154
+ }), [title]);
9155
+ }
8999
9156
  function SessionLeading({ node, statuses, renderSlot }) {
9000
9157
  if (node.blank) return null;
9001
9158
  const primary = statuses[0];
@@ -9005,43 +9162,98 @@ function SessionLeading({ node, statuses, renderSlot }) {
9005
9162
  key: status.label
9006
9163
  }, status.label)));
9007
9164
  }
9165
+ function SessionHoverContent({ node, statuses, renderSlot, t }) {
9166
+ return /* @__PURE__ */ h("div", { className: "wb-sessionHover" }, /* @__PURE__ */ h("div", { className: "wb-sessionHoverTitle" }, node.blank ? t("session.new") : node.title), node.blank ? null : /* @__PURE__ */ h("div", { className: "wb-sessionHoverTime" }, relativeTimeAgo(node.updatedAt, t)), renderSlot("sidebar.session.row.hover", { sessionId: node.id }), statuses.map((status) => /* @__PURE__ */ h("div", {
9167
+ className: "wb-sessionHoverStatus",
9168
+ key: status.label
9169
+ }, /* @__PURE__ */ h(StateDot, { state: status.state }), /* @__PURE__ */ h("span", null, status.label))));
9170
+ }
9008
9171
  function SessionRow({ node, active, onOpen, renderSlot, t }) {
9009
9172
  const [menuOpen, setMenuOpen] = useState(false);
9010
9173
  const menuState = useMemo(() => [menuOpen, setMenuOpen], [menuOpen]);
9011
9174
  const statuses = sessionStatuses(node, t);
9012
9175
  const label = node.blank ? t("session.new") : node.title;
9176
+ const titleRef = useRef(null);
9177
+ const marquee = useTitleMarquee(titleRef);
9178
+ const trailing = statuses[0]?.trailingLabel;
9013
9179
  const owner = {
9014
9180
  sessionId: node.id,
9015
- displayTitle: label
9016
- };
9017
- return /* @__PURE__ */ h("div", {
9018
- className: cx("wb-sessionRow", active && "wb-selected", menuOpen && "wb-menuOpen"),
9019
- "aria-current": active ? "true" : void 0,
9020
- onClick: () => onOpen(node.id)
9021
- }, /* @__PURE__ */ h("span", { className: "wb-sessionLeading" }, /* @__PURE__ */ h(SessionLeading, {
9022
- node,
9023
- statuses,
9024
- renderSlot
9025
- })), /* @__PURE__ */ h("span", { className: "wb-sessionTitle" }, label), node.pinned ? /* @__PURE__ */ h(Tip, { label: t("session.pinned") }, /* @__PURE__ */ h("span", {
9026
- className: "wb-sessionPin",
9027
- role: "img",
9028
- "aria-label": t("session.pinned")
9029
- }, /* @__PURE__ */ h(IconPinOutlineRegular, { size: 14 }))) : null, /* @__PURE__ */ h("span", { className: "wb-sessionTime" }, relativeTime(node.updatedAt, t)), /* @__PURE__ */ h("span", { className: "wb-rowActions" }, /* @__PURE__ */ h(Menu, {
9030
- open: menuOpen,
9031
- portal: true,
9032
- anchor: /* @__PURE__ */ h("button", {
9033
- type: "button",
9034
- className: "wb-iconButton",
9035
- "aria-haspopup": "menu",
9036
- "aria-expanded": menuOpen,
9037
- "aria-label": t("session.actions", { name: label }),
9038
- onClick: (event) => {
9039
- event.stopPropagation();
9040
- setMenuOpen((value) => !value);
9041
- }
9042
- }, /* @__PURE__ */ h(IconEllipsisOutlineRegular, { size: 16 })),
9043
- onClose: () => setMenuOpen(false)
9044
- }, renderSlot("sidebar.workspaces.session.menu.item", owner, { hookContext: menuState })), renderSlot("sidebar.workspaces.session.row.action", owner)));
9181
+ displayTitle: node.title
9182
+ };
9183
+ return /* @__PURE__ */ h(HoverCard, {
9184
+ anchor: /* @__PURE__ */ h("div", {
9185
+ className: cx("wb-sessionRow", active && "wb-selected", menuOpen && "wb-menuOpen"),
9186
+ role: "treeitem",
9187
+ "aria-selected": active,
9188
+ onClick: () => onOpen(node.id),
9189
+ onPointerEnter: marquee.enter,
9190
+ onPointerLeave: marquee.leave
9191
+ }, /* @__PURE__ */ h("span", { className: "wb-sessionLeading" }, /* @__PURE__ */ h(SessionLeading, {
9192
+ node,
9193
+ statuses,
9194
+ renderSlot
9195
+ })), /* @__PURE__ */ h("span", {
9196
+ className: "wb-sessionTitle",
9197
+ ref: titleRef
9198
+ }, label), node.blank ? null : /* @__PURE__ */ h("span", {
9199
+ className: "wb-sessionTime",
9200
+ "aria-hidden": trailing === void 0 ? void 0 : true
9201
+ }, trailing ?? relativeTimeCompact(node.updatedAt, t)), node.pinned ? /* @__PURE__ */ h(Tip, { label: t("session.pinned") }, /* @__PURE__ */ h("span", {
9202
+ className: "wb-sessionPin",
9203
+ role: "img",
9204
+ "aria-label": t("session.pinned")
9205
+ }, /* @__PURE__ */ h(IconPinFillRegular, { size: 14 }))) : null, node.blank ? null : /* @__PURE__ */ h("span", {
9206
+ className: "wb-rowActions",
9207
+ onClick: (event) => event.stopPropagation()
9208
+ }, /* @__PURE__ */ h(Menu, {
9209
+ open: menuOpen,
9210
+ portal: true,
9211
+ closeOnPointerLeave: true,
9212
+ anchor: /* @__PURE__ */ h("button", {
9213
+ type: "button",
9214
+ className: "wb-iconButton",
9215
+ "aria-haspopup": "menu",
9216
+ "aria-expanded": menuOpen,
9217
+ "aria-label": t("session.actions", { name: label }),
9218
+ onClick: (event) => {
9219
+ event.stopPropagation();
9220
+ setMenuOpen((value) => !value);
9221
+ }
9222
+ }, /* @__PURE__ */ h(IconEllipsisOutlineRegular, { size: 16 })),
9223
+ onClose: () => setMenuOpen(false)
9224
+ }, renderSlot("sidebar.workspaces.session.menu.item", owner, { hookContext: menuState })), renderSlot("sidebar.workspaces.session.row.action", owner))),
9225
+ content: /* @__PURE__ */ h(SessionHoverContent, {
9226
+ node,
9227
+ statuses,
9228
+ renderSlot,
9229
+ t
9230
+ }),
9231
+ openDelayMs: 800,
9232
+ disabled: menuOpen,
9233
+ copyText: node.blank || node.title === "" ? void 0 : node.title,
9234
+ copyLabel: t("session.copy"),
9235
+ copiedLabel: t("hover.copied")
9236
+ });
9237
+ }
9238
+ function useScrollEdges(list, rows) {
9239
+ const [edges, setEdges] = useState(REST_EDGES);
9240
+ useEffect(() => {
9241
+ const element = list.current;
9242
+ if (element === null) return;
9243
+ const sync = () => {
9244
+ const next = scrollEdgesOf(element);
9245
+ setEdges((current) => current.canScrollUp === next.canScrollUp && current.canScrollDown === next.canScrollDown ? current : next);
9246
+ };
9247
+ sync();
9248
+ element.addEventListener("scroll", sync, { passive: true });
9249
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(sync);
9250
+ observer?.observe(element);
9251
+ return () => {
9252
+ element.removeEventListener("scroll", sync);
9253
+ observer?.disconnect();
9254
+ };
9255
+ }, [list, rows]);
9256
+ return edges;
9045
9257
  }
9046
9258
  function SessionList({ workspace, pinnedIds, archived, panelActive, useSessions, useSessionStatus, onOpen, renderSlot, t }) {
9047
9259
  const list = useSessions((state) => state);
@@ -9059,9 +9271,16 @@ function SessionList({ workspace, pinnedIds, archived, panelActive, useSessions,
9059
9271
  currentId,
9060
9272
  pinned
9061
9273
  ]);
9274
+ const listRef = useRef(null);
9275
+ const edges = useScrollEdges(listRef, rows);
9062
9276
  if (workspace === null) return /* @__PURE__ */ h("div", { className: "wb-empty" }, t("session.noProject"));
9063
9277
  if (rows.length === 0) return /* @__PURE__ */ h("div", { className: "wb-empty" }, t("session.empty"));
9064
- return /* @__PURE__ */ h("div", { className: "wb-sessions" }, rows.map((row) => /* @__PURE__ */ h(SessionRow, {
9278
+ return /* @__PURE__ */ h("div", {
9279
+ ref: listRef,
9280
+ className: cx("wb-sessions", edges.canScrollUp && "wb-fadeTop", edges.canScrollDown && "wb-fadeBottom"),
9281
+ role: "tree",
9282
+ "aria-label": t("session.list.label")
9283
+ }, rows.map((row) => /* @__PURE__ */ h(SessionRow, {
9065
9284
  key: row.id,
9066
9285
  node: sessionNode(row, statusById, list, pinned, archivedSet),
9067
9286
  active: row.id === currentId,
@@ -9206,7 +9425,7 @@ var palette_default = ":root {\n --wb-static-titlebar-fill: #ffffff8c;\n --wb-
9206
9425
  var scale_default = ":root {\n --wb-dur-0-12: 0.12s;\n --wb-dur-0-15: 0.15s;\n --wb-dur-0-9: 0.9s;\n --wb-dur-1-4: 1.4s;\n --wb-dur-1-5: 1.5s;\n --wb-font-10: 10px;\n --wb-font-11-5: 11.5px;\n --wb-font-12-5: 12.5px;\n --wb-font-17: 17px;\n --wb-font-18: 18px;\n --wb-font-6: 6px;\n --wb-len-0-5: 0.5px;\n --wb-len-1: 1px;\n --wb-len-10: 10px;\n --wb-len-12: 12px;\n --wb-len-120: 120px;\n --wb-len-13: 13px;\n --wb-len-132: 132px;\n --wb-len-14: 14px;\n --wb-len-144: 144px;\n --wb-len-15: 15px;\n --wb-len-16: 16px;\n --wb-len-18: 18px;\n --wb-len-2: 2px;\n --wb-len-20: 20px;\n --wb-len-200: 200px;\n --wb-len-22: 22px;\n --wb-len-220: 220px;\n --wb-len-24: 24px;\n --wb-len-240: 240px;\n --wb-len-26: 26px;\n --wb-len-260: 260px;\n --wb-len-28: 28px;\n --wb-len-3: 3px;\n --wb-len-3-4em: 3.4em;\n --wb-len-30: 30px;\n --wb-len-300: 300px;\n --wb-len-32: 32px;\n --wb-len-320: 320px;\n --wb-len-34: 34px;\n --wb-len-36: 36px;\n --wb-len-360: 360px;\n --wb-len-38: 38px;\n --wb-len-4: 4px;\n --wb-len-440: 440px;\n --wb-len-40: 40px;\n --wb-len-420: 420px;\n --wb-len-42em: 42em;\n --wb-len-44: 44px;\n --wb-len-48: 48px;\n --wb-len-5: 5px;\n --wb-len-52: 52px;\n --wb-len-520: 520px;\n --wb-len-56: 56px;\n --wb-len-560: 560px;\n --wb-len-6: 6px;\n --wb-len-60: 60px;\n --wb-len-64: 64px;\n --wb-len-7: 7px;\n --wb-len-72: 72px;\n --wb-len-8: 8px;\n --wb-len-800: 800px;\n --wb-len-9: 9px;\n --wb-len-96: 96px;\n --wb-len-960: 960px;\n --wb-len-neg-0-5: -0.5px;\n --wb-len-neg-1-5: -1.5px;\n --wb-len-neg-12: -12px;\n --wb-len-neg-2: -2px;\n --wb-len-neg-3: -3px;\n --wb-len-neg-4: -4px;\n --wb-len-neg-6: -6px;\n --wb-len-neg-8: -8px;\n --wb-line-10: 10px;\n --wb-line-13: 13px;\n --wb-line-14: 14px;\n --wb-line-15: 15px;\n --wb-line-16: 16px;\n --wb-line-17: 17px;\n --wb-line-18: 18px;\n --wb-line-19: 19px;\n --wb-line-20: 20px;\n --wb-line-22: 22px;\n --wb-line-24: 24px;\n --wb-radius-14: 14px;\n --wb-radius-2: 2px;\n --wb-radius-6: 6px;\n --wb-radius-pill: 999px;\n --wb-track-brand: .04em;\n --wb-z-1100: 1100;\n --wb-z-10: 10;\n --wb-z-30: 30;\n --wb-z-40: 40;\n --wb-z-top: 2147483000;\n --wb-project-menu-min-width: 0;\n}\n";
9207
9426
  //#endregion
9208
9427
  //#region src/shared/styles/sidebar-app.css?raw
9209
- var sidebar_app_default = ".wb-wsSection {\n position: relative;\n flex: none;\n --dsh-session-list-edge-inset: var(--dsh-sidebar-inline-padding);\n --dsh-session-list-scrollbar-width: 5px;\n --dsh-session-list-scrollbar-offset: 2px;\n margin: 0 var(--dsh-session-list-scrollbar-offset) var(--wb-len-4) 0;\n padding-right: calc( var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) - var(--dsh-session-list-scrollbar-offset) );\n}.wb-sectionHeader {\n box-sizing: border-box;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: var(--wb-len-4);\n height: var(--wb-len-36);\n flex: none;\n margin-bottom: var(--wb-len-4);\n padding-left: var(--wb-len-8);\n padding-right: var(--wb-len-2);\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n}.wb-wsNew {\n margin-left: auto;\n}.wb-sectionLabel {\n flex: none;\n min-width: 0;\n max-width: 45%;\n overflow: hidden;\n white-space: nowrap;\n line-height: var(--wb-line-20);\n}.wb-collapsed .wb-wsSection {\n margin: 0 0 var(--wb-len-12);\n padding-right: 0;\n}.wb-collapsed .wb-sectionHeader {\n justify-content: flex-start;\n gap: 0;\n margin-bottom: 0;\n padding-left: 0;\n padding-right: 0;\n}.wb-collapsed .wb-wsNew {\n margin-left: 0;\n}.wb-project {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}.wb-projectAnchor {\n display: block;\n width: 100%;\n min-width: var(--wb-project-menu-min-width, 0);\n}.wb-projectButton {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n width: 100%;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n user-select: none;\n}.wb-projectButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}.wb-projectButton:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}.wb-collapsed .wb-projectButton {\n justify-content: center;\n width: var(--wb-bar-height);\n height: var(--wb-bar-height);\n padding: 0;\n}.wb-collapsed .wb-projectName,\n.wb-collapsed .wb-projectChevron {\n display: none;\n}.wb-projectGlyph {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}.wb-projectGlyphActive {\n color: var(--dsw-alias-state-business-primary);\n}.wb-projectName {\n flex: 1;\n min-width: 0;\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}.wb-projectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n transition: transform var(--wb-dur-0-15) var(--ds-ease-in-out);\n}.wb-projectChevronOpen {\n transform: rotate(180deg);\n}.wb-sessions {\n --dsh-session-list-edge-inset: var(--dsh-sidebar-inline-padding);\n --dsh-session-list-scrollbar-width: 5px;\n --dsh-session-list-scrollbar-offset: 2px;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n margin-left: var(--wb-len-neg-4);\n margin-right: var(--dsh-session-list-scrollbar-offset);\n padding-left: var(--wb-len-4);\n padding-right: calc( var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) - var(--dsh-session-list-scrollbar-offset) );\n padding-bottom: var(--wb-len-16);\n scrollbar-gutter: stable;\n --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);\n --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);\n}.wb-sessions > * + * {\n margin-top: var(--wb-len-2);\n}.wb-sessionLeading {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}.wb-sessionPin {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n margin-left: var(--wb-len-6);\n color: var(--dsw-alias-label-caption);\n}.wb-rowActions {\n flex: none;\n display: none;\n align-items: center;\n gap: var(--wb-len-10);\n}.wb-rowActions .wb-iconButton {\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n}.wb-sessionRow:hover .wb-rowActions,\n.wb-sessionRow.wb-menuOpen .wb-rowActions {\n display: inline-flex;\n}.wb-sessionRow:hover .wb-sessionTime,\n.wb-sessionRow.wb-menuOpen .wb-sessionTime,\n.wb-sessionRow:hover .wb-sessionPin,\n.wb-sessionRow.wb-menuOpen .wb-sessionPin {\n display: none;\n}.wb-sessionRow.wb-menuOpen {\n background: var(--dsw-alias-interactive-bg-hover);\n}.wb-rowMenu {\n left: auto;\n right: 0;\n min-width: var(--wb-len-144);\n max-width: var(--wb-len-260);\n}.wb-sessionRow {\n position: relative;\n flex: none;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 0;\n width: 100%;\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n user-select: none;\n}.wb-sessionRow:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}.wb-sessionRow:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}.wb-visuallyHidden {\n clip: rect(0 0 0 0);\n white-space: nowrap;\n width: var(--wb-len-1);\n height: var(--wb-len-1);\n position: absolute;\n overflow: hidden;\n}.wb-sessionTitle {\n flex: 1;\n min-width: 0;\n margin: 0 var(--wb-len-6) 0 var(--wb-len-4);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}.wb-sessionTime {\n flex: none;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}.wb-workspaceBusy {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: var(--wb-len-4) var(--wb-len-8) 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}.wb-workspaceError {\n margin: var(--wb-len-4) var(--wb-len-8) 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}.wb-empty {\n padding: var(--wb-len-16) var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-tertiary);\n}@media (prefers-reduced-motion: reduce) {\n .wb-projectChevron {\n transition: none;\n }}.wb-sessionRow.wb-selected {\n background: var(--dsw-alias-interactive-bg-hover);\n}.wb-panelTag {\n flex: none;\n margin-left: auto;\n}.wb-panelGlyph {\n position: relative;\n}.wb-panelDot {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: var(--wb-len-neg-3);\n right: var(--wb-len-neg-3);\n}button.pXSMma_workspace {\n display: none;\n}";
9428
+ var sidebar_app_default = ".wb-wsSection {\n position: relative;\n flex: none;\n --dsh-session-list-edge-inset: var(--dsh-sidebar-inline-padding);\n --dsh-session-list-scrollbar-width: 5px;\n --dsh-session-list-scrollbar-offset: 2px;\n margin: 0 var(--dsh-session-list-scrollbar-offset) var(--wb-len-4) 0;\n padding-right: calc( var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) - var(--dsh-session-list-scrollbar-offset) );\n}.wb-sectionHeader {\n box-sizing: border-box;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: var(--wb-len-4);\n height: var(--wb-len-36);\n flex: none;\n margin-bottom: var(--wb-len-4);\n padding-left: var(--wb-len-8);\n padding-right: var(--wb-len-2);\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n}.wb-wsNew {\n margin-left: auto;\n}.wb-sectionLabel {\n flex: none;\n min-width: 0;\n max-width: 45%;\n overflow: hidden;\n white-space: nowrap;\n line-height: var(--wb-line-20);\n}.wb-collapsed .wb-wsSection {\n margin: 0 0 var(--wb-len-12);\n padding-right: 0;\n}.wb-collapsed .wb-sectionHeader {\n justify-content: flex-start;\n gap: 0;\n margin-bottom: 0;\n padding-left: 0;\n padding-right: 0;\n}.wb-collapsed .wb-wsNew {\n margin-left: 0;\n}.wb-project {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}.wb-projectAnchor {\n display: block;\n width: 100%;\n min-width: var(--wb-project-menu-min-width, 0);\n}.wb-projectButton {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n width: 100%;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n user-select: none;\n}.wb-projectButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}.wb-projectButton:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}.wb-collapsed .wb-projectButton {\n justify-content: center;\n width: var(--wb-bar-height);\n height: var(--wb-bar-height);\n padding: 0;\n}.wb-collapsed .wb-projectName,\n.wb-collapsed .wb-projectChevron {\n display: none;\n}.wb-projectGlyph {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}.wb-projectGlyphActive {\n color: var(--dsw-alias-state-business-primary);\n}.wb-projectName {\n flex: 1;\n min-width: 0;\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}.wb-projectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n transition: transform var(--wb-dur-0-15) var(--ds-ease-in-out);\n}.wb-projectChevronOpen {\n transform: rotate(180deg);\n}.wb-sessions {\n --dsh-session-list-edge-inset: var(--dsh-sidebar-inline-padding);\n --dsh-session-list-scrollbar-width: 5px;\n --dsh-session-list-scrollbar-offset: 2px;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n margin-left: var(--wb-len-neg-4);\n margin-right: var(--dsh-session-list-scrollbar-offset);\n padding-left: var(--wb-len-4);\n padding-right: calc( var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) - var(--dsh-session-list-scrollbar-offset) );\n padding-bottom: var(--wb-len-16);\n scrollbar-gutter: stable;\n --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);\n --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);\n}.wb-sessions.wb-fadeTop {\n mask-image: linear-gradient(\n to bottom,\n transparent 0,\n var(--wb-static-mask-opaque) var(--wb-len-24),\n var(--wb-static-mask-opaque) 100%\n );\n}.wb-sessions.wb-fadeBottom {\n mask-image: linear-gradient(\n to bottom,\n var(--wb-static-mask-opaque) 0,\n var(--wb-static-mask-opaque) calc(100% - var(--wb-len-24)),\n transparent 100%\n );\n}.wb-sessions.wb-fadeTop.wb-fadeBottom {\n mask-image: linear-gradient(\n to bottom,\n transparent 0,\n var(--wb-static-mask-opaque) var(--wb-len-24),\n var(--wb-static-mask-opaque) calc(100% - var(--wb-len-24)),\n transparent 100%\n );\n}.wb-sessions > * {\n flex: none;\n}.wb-sessions > * + * {\n margin-top: var(--wb-len-2);\n}.wb-sessionLeading {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}.wb-sessionPin {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n margin-left: var(--wb-len-6);\n color: var(--dsw-alias-label-caption);\n}.wb-rowActions {\n flex: none;\n display: none;\n align-items: center;\n gap: var(--wb-len-15);\n}.wb-rowActions .wb-iconButton {\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border-radius: var(--dsw-radius-xs);\n color: var(--dsw-alias-label-tertiary);\n}.wb-rowActions .wb-iconButton:hover {\n background: transparent;\n color: var(--dsw-alias-label-primary);\n}.wb-sessionRow:hover .wb-rowActions,\n.wb-sessionRow.wb-menuOpen .wb-rowActions {\n display: inline-flex;\n}.wb-sessionRow:hover .wb-sessionTime,\n.wb-sessionRow.wb-menuOpen .wb-sessionTime,\n.wb-sessionRow:hover .wb-sessionPin,\n.wb-sessionRow.wb-menuOpen .wb-sessionPin {\n display: none;\n}.wb-sessionRow.wb-menuOpen {\n background: var(--dsw-alias-interactive-bg-hover);\n}.wb-rowMenu {\n left: auto;\n right: 0;\n min-width: var(--wb-len-144);\n max-width: var(--wb-len-260);\n}.wb-sessionRow {\n position: relative;\n flex: none;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 0;\n width: 100%;\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n user-select: none;\n}.wb-sessionRow:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}.wb-sessionRow:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}.wb-visuallyHidden {\n clip: rect(0 0 0 0);\n white-space: nowrap;\n width: var(--wb-len-1);\n height: var(--wb-len-1);\n position: absolute;\n overflow: hidden;\n}.wb-sessionTitle {\n flex: 1;\n min-width: 0;\n margin: 0 var(--wb-len-6) 0 var(--wb-len-4);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}.wb-sessionTitle[data-scrolled] {\n mask-image: linear-gradient(90deg, transparent, var(--wb-static-mask-opaque) var(--wb-len-12));\n}.wb-sessionTitle[data-clipped] {\n mask-image: linear-gradient(270deg, transparent, var(--wb-static-mask-opaque) var(--wb-len-12));\n}.wb-sessionTitle[data-scrolled][data-clipped] {\n mask-image: linear-gradient(\n 90deg,\n transparent,\n var(--wb-static-mask-opaque) var(--wb-len-12) calc(100% - var(--wb-len-12)),\n transparent\n );\n}@media (hover: hover) {\n .wb-sessionRow:hover .wb-sessionTitle,\n .wb-sessionRow.wb-menuOpen .wb-sessionTitle {\n text-overflow: clip;\n }\n}.wb-sessionHover {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}.wb-sessionHoverTitle {\n color: var(--dsw-static-neutral-bluish-00);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n overflow-wrap: break-word;\n}.wb-sessionHoverTime {\n color: var(--dsw-static-neutral-bluish-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-16);\n}.wb-sessionHoverStatus {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n color: var(--dsw-static-neutral-bluish-400);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-20);\n}.wb-sessionTime {\n flex: none;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}.wb-workspaceBusy {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: var(--wb-len-4) var(--wb-len-8) 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}.wb-workspaceError {\n margin: var(--wb-len-4) var(--wb-len-8) 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}.wb-empty {\n padding: var(--wb-len-16) var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-tertiary);\n}@media (prefers-reduced-motion: reduce) {\n .wb-projectChevron {\n transition: none;\n }}.wb-sessionRow.wb-selected {\n background: var(--dsw-alias-interactive-bg-hover);\n}.wb-panelTag {\n flex: none;\n margin-left: auto;\n}.wb-panelGlyph {\n position: relative;\n}.wb-panelDot {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: var(--wb-len-neg-3);\n right: var(--wb-len-neg-3);\n}button.pXSMma_workspace {\n display: none;\n}";
9210
9429
  //#endregion
9211
9430
  //#region src/shared/styles/sidebar.css?raw
9212
9431
  var sidebar_default = ".wb-root{--dsh-sidebar-inline-padding:12px;height:100%;padding:var(--wb-len-6) var(--dsh-sidebar-inline-padding);box-sizing:border-box;background:var(--dsw-specific-sidebar-fill);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);flex-direction:column;font-size:var(--dsw-font-s-14-font-size);display:flex}[data-platform=darwin] .wb-root{background:0 0}.wb-root.wb-collapsed{padding:var(--wb-len-18) var(--wb-len-10) var(--wb-len-6)}[data-windows-titlebar] .wb-root .wb-logoRow{height:var(--wb-len-40);margin:0;padding:0}[data-windows-titlebar] .wb-toggle{top:calc((var(--dsh-windows-titlebar-height) - var(--wb-len-28)) / 2);z-index:var(--wb-z-30);-webkit-app-region:no-drag;position:fixed;left:var(--wb-len-12)}[data-windows-titlebar] .wb-root.wb-collapsed .wb-logoRow{height:0}[data-windows-titlebar] .wb-root:not(.wb-collapsed) .wb-brand{padding-left:var(--wb-len-4)}[data-windows-titlebar] .wb-brandIdentity{transform:translateY(1px)}[data-windows-titlebar] .wb-brandMark{transform:translate(1px)}[data-windows-titlebar] .wb-brandName{font-weight:400}[data-windows-titlebar] .wb-root.wb-collapsed{padding:0}[data-windows-titlebar] .wb-root:not(.wb-collapsed) .wb-newSession{margin-top:var(--wb-len-8);margin-left:0}[data-windows-titlebar] .wb-collapsed .wb-panelList,[data-windows-titlebar] .wb-collapsed .wb-regionArea,[data-windows-titlebar] .wb-collapsed .wb-footArea{display:none}html[data-windows-titlebar]:has([data-sidebar-collapsed=true]){--dsh-windows-menu-start:84px}[data-windows-titlebar] .wb-collapsed .wb-newSession{top:calc((var(--dsh-windows-titlebar-height) - var(--wb-len-28)) / 2);z-index:var(--wb-z-30);-webkit-app-region:no-drag;border:none;margin:0;padding:0;position:fixed;left:var(--wb-len-48)}[data-windows-titlebar] .wb-railIn .wb-iconButton,[data-windows-titlebar] .wb-railIn .wb-newSession{animation:none}[data-windows-titlebar] .wb-collapsed .wb-toggle,[data-windows-titlebar] .wb-collapsed .wb-newSession{corner-shape:round;width:var(--wb-len-28);height:var(--wb-len-28);color:var(--dsw-alias-label-secondary);border-radius:50%}[data-windows-titlebar] .wb-collapsed .wb-toggle .wb-panelIcon{display:inline-flex}.wb-root.wb-quietBars{--dsh-scrollbar-thumb:transparent;--dsh-scrollbar-thumb-hover:transparent}.wb-fading>*{opacity:0;transition:opacity var(--wb-dur-0-15) var(--ds-ease-in-out)}.wb-wide{animation:wb-wide-in var(--ds-transition-duration) var(--ds-ease-in-out)}@keyframes wb-wide-in{0%{opacity:0}}.wb-railIn .wb-iconButton,.wb-railIn .wb-newSession,.wb-railIn .wb-panelList,.wb-railIn .wb-regionArea{animation:wb-rail-in var(--wb-dur-0-15) var(--ds-ease-in-out) backwards}.wb-railIn .wb-footArea{animation:wb-rail-fade-in var(--wb-dur-0-15) var(--ds-ease-in-out) backwards}@keyframes wb-rail-in{0%{opacity:0;transform:translate(49px)}}@keyframes wb-rail-fade-in{0%{opacity:0}}.wb-topStrip{box-sizing:border-box;height:var(--wb-len-52);margin:var(--wb-len-neg-6) calc(-1 * var(--dsh-sidebar-inline-padding)) 0;flex:none;justify-content:flex-end;align-items:center;padding:0 var(--wb-len-12) var(--wb-len-2);display:flex}[data-fullscreen] .wb-topStrip{justify-content:flex-start}.wb-topStrip+.wb-logoRow{margin-top:var(--wb-len-neg-12)}.wb-logoRow{box-sizing:border-box;flex:none;justify-content:flex-end;align-items:center;gap:var(--wb-len-8);height:var(--wb-len-60);margin-bottom:var(--wb-len-4);padding:var(--wb-len-8) 0 var(--wb-len-8) var(--wb-len-4);display:flex;overflow:hidden}.wb-collapsed .wb-logoRow{justify-content:flex-start;height:var(--wb-len-36);margin-bottom:var(--wb-len-12);padding:0;overflow:visible}.wb-brand{min-width:0;color:inherit;cursor:pointer;background:0 0;border:none;flex:1;align-items:center;padding:0;display:inline-flex;overflow:hidden}[data-platform=darwin] .wb-brand{cursor:default}.wb-brandIdentity{align-items:center;gap:var(--wb-len-8);min-width:0;height:var(--wb-len-24);display:inline-flex}.wb-brandMark{flex:none;justify-content:center;align-items:center;display:inline-flex}.wb-brandName{letter-spacing:var(--wb-track-brand);align-items:center;gap:var(--wb-len-6);min-width:0;height:var(--wb-len-24);font-size:var(--wb-font-18);font-weight:600;line-height:var(--wb-line-24);display:inline-flex}.wb-fallbackBrandName{letter-spacing:0;white-space:nowrap;font-size:var(--wb-font-17)}.wb-localBuildBrand{white-space:nowrap;flex-direction:column;flex:none;justify-content:center;align-items:flex-start;gap:var(--wb-len-1);height:var(--wb-len-24);display:inline-flex}.wb-localBuildTitle{letter-spacing:0;font-size:var(--dsw-font-xxs-12-font-size);line-height:var(--wb-line-13)}.wb-panelIcon{display:inline-flex;align-items:center;justify-content:center}.wb-iconButton{border-radius:var(--dsw-radius-sm);cursor:pointer;width:var(--wb-len-28);height:var(--wb-len-28);color:var(--dsw-alias-label-secondary);background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.wb-iconButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.wb-iconButton.wb-toggle:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.wb-collapsed .wb-iconButton{border-radius:var(--dsw-radius-md);width:var(--wb-len-36);height:var(--wb-len-36)}.wb-collapsed .wb-toggle .wb-panelIcon{display:none}.wb-collapsed .wb-toggle:hover .wb-panelIcon{display:inline}.wb-collapsed .wb-toggle:hover .wb-railMark{display:none}.wb-railMark{justify-content:center;align-items:center;display:inline-flex}.wb-collapsed .wb-iconButton{color:var(--dsw-alias-label-primary)}.wb-buildVersion{height:var(--wb-len-10);color:var(--dsw-alias-label-primary-inverted);background:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code);white-space:nowrap;border-radius:var(--wb-radius-2);flex:none;align-items:center;padding:0 var(--wb-len-3);font-size:var(--wb-font-6);font-weight:500;line-height:var(--wb-line-10);display:inline-flex}.wb-newSession{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-button-elevated-fill);height:var(--wb-len-38);color:var(--dsw-alias-label-primary);cursor:pointer;flex:none;justify-content:center;align-items:center;gap:0;margin:0 var(--wb-len-2) var(--wb-len-12);padding:var(--wb-len-8) var(--wb-len-12);font-size:var(--dsw-font-s-14-font-size);font-weight:500;line-height:var(--wb-line-22);display:flex;position:relative;overflow:hidden;container-type:inline-size}.wb-newSession:hover{background:var(--dsw-alias-button-floating-hover)}[data-platform=darwin] .wb-newSession{background:var(--wb-static-titlebar-fill)}[data-platform=darwin] .wb-newSession:hover{background:var(--wb-static-titlebar-fill-hover)}[data-platform=darwin] [data-ds-dark-theme] .wb-newSession{background:var(--wb-static-titlebar-fill-dark)}[data-platform=darwin] [data-ds-dark-theme] .wb-newSession:hover{background:var(--wb-static-titlebar-fill-dark-hover)}.wb-collapsed .wb-newSession{background:0 0;border-color:transparent;align-self:flex-start;gap:0;width:var(--wb-len-36);height:var(--wb-len-36);margin:0 0 var(--wb-len-12);padding:0}.wb-collapsed .wb-newSession:hover{background:var(--dsw-alias-interactive-bg-hover)}.wb-newSessionLabel{white-space:nowrap;max-width:var(--wb-len-200);overflow:hidden}.wb-collapsed .wb-newSessionLabel{max-width:0}.wb-newSessionLabelMask{flex:1;min-width:0}.wb-newSession:is(:hover,:focus-visible) .wb-newSessionLabelMask:has(+.wb-newSessionShortcut){overflow:hidden;mask-image:linear-gradient(90deg,var(--wb-static-mask-opaque) calc(100% - var(--wb-len-16)),transparent)}.wb-newSessionContent{justify-content:center;align-items:center;gap:var(--wb-len-6);width:100cqw;display:flex}.wb-newSessionContent>svg{flex:none}.wb-newSessionShortcut{opacity:0;pointer-events:none;flex:none;font-weight:400;display:inline-flex}.wb-newSession:is(:hover,:focus-visible) .wb-newSessionShortcut{opacity:1}.wb-panelList{flex-direction:column;flex:none;gap:var(--wb-len-4);margin-bottom:var(--wb-len-8);display:flex}.wb-panelRow{box-sizing:border-box;border-radius:var(--dsw-radius-md);min-height:var(--wb-len-36);color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:var(--wb-len-8);margin:0 var(--wb-len-2);padding:var(--wb-len-7) var(--wb-len-8);line-height:var(--wb-line-22);display:flex}.wb-panelRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.wb-panelRow.wb-panelActive{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.wb-panelRow:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.wb-panelGlyph{flex:none;justify-content:center;align-items:center;display:inline-flex}.wb-panelTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.wb-collapsed .wb-panelList{gap:var(--wb-len-12);margin-bottom:var(--wb-len-12)}.wb-collapsed .wb-panelRow{width:var(--wb-len-36);height:var(--wb-len-36);color:var(--dsw-alias-label-primary);justify-content:center;margin:0;padding:0}.wb-regionArea{min-height:0;margin-left:var(--wb-len-neg-4);margin-right:calc(-1 * var(--dsh-sidebar-inline-padding));flex-direction:column;flex:1;padding-left:var(--wb-len-4);display:flex;overflow:hidden}.wb-collapsed .wb-regionArea{margin-left:0;margin-right:0;padding-left:0}.wb-footArea{flex-direction:column;flex:none;display:flex}.wb-settingsArea,.wb-footerActions{flex:none;width:100%;min-width:0}.wb-footerActions{display:flex}.wb-collapsed .wb-footArea{align-items:center}.wb-collapsed .wb-settingsArea,.wb-collapsed .wb-footerActions{justify-content:center;width:auto;display:flex}@media (prefers-reduced-motion:reduce){.wb-wide,.wb-fading>*,.wb-railIn .wb-iconButton,.wb-railIn .wb-newSession,.wb-railIn .wb-panelList,.wb-railIn .wb-footArea,.wb-railIn .wb-regionArea{transition:none;animation:none}}\n";
@@ -9896,6 +10115,10 @@ function sidebarChildren(ctx) {
9896
10115
  "sidebar.session.row.leading": {
9897
10116
  kind: "list",
9898
10117
  scope: "root"
10118
+ },
10119
+ "sidebar.session.row.hover": {
10120
+ kind: "list",
10121
+ scope: "root"
9899
10122
  }
9900
10123
  };
9901
10124
  }