dsh-group-status 0.5.0 → 0.5.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/README.en.md +138 -133
  3. package/README.md +140 -133
  4. package/docs/facet-protocol.md +274 -0
  5. package/docs/media/glyph-completed.svg +3 -0
  6. package/docs/media/glyph-pending.svg +3 -0
  7. package/docs/media/glyph-running.svg +6 -0
  8. package/docs/media/screenshot-folders.png +0 -0
  9. package/docs/media/screenshot-hover.png +0 -0
  10. package/docs/upgrading.md +241 -0
  11. package/lib/client.js +1197 -1159
  12. package/lib/client.js.map +1 -1
  13. package/lib/index.js +31 -4
  14. package/lib/types/build-stamp.d.ts +4 -0
  15. package/lib/types/build-stamp.d.ts.map +1 -0
  16. package/lib/types/build-stamp.js +23 -0
  17. package/lib/types/build-stamp.js.map +1 -0
  18. package/lib/types/client/BadgeSettingsCard.js +3 -3
  19. package/lib/types/client/BadgeSettingsCard.js.map +1 -1
  20. package/lib/types/client/group-status.d.ts +5 -0
  21. package/lib/types/client/group-status.d.ts.map +1 -1
  22. package/lib/types/client/group-status.js +25 -0
  23. package/lib/types/client/group-status.js.map +1 -1
  24. package/lib/types/client/locales.d.ts +4 -0
  25. package/lib/types/client/locales.d.ts.map +1 -1
  26. package/lib/types/client/locales.js +4 -0
  27. package/lib/types/client/locales.js.map +1 -1
  28. package/lib/types/client/navigation.d.ts +23 -8
  29. package/lib/types/client/navigation.d.ts.map +1 -1
  30. package/lib/types/client/navigation.js +20 -3
  31. package/lib/types/client/navigation.js.map +1 -1
  32. package/lib/types/client/rows/EmptySessions.d.ts +4 -0
  33. package/lib/types/client/rows/EmptySessions.d.ts.map +1 -0
  34. package/lib/types/client/rows/EmptySessions.js +10 -0
  35. package/lib/types/client/rows/EmptySessions.js.map +1 -0
  36. package/lib/types/client/rows/ListView.d.ts +24 -0
  37. package/lib/types/client/rows/ListView.d.ts.map +1 -0
  38. package/lib/types/client/rows/ListView.js +81 -0
  39. package/lib/types/client/rows/ListView.js.map +1 -0
  40. package/lib/types/client/rows/SessionTree.d.ts +4 -0
  41. package/lib/types/client/rows/SessionTree.d.ts.map +1 -0
  42. package/lib/types/client/rows/SessionTree.js +381 -0
  43. package/lib/types/client/rows/SessionTree.js.map +1 -0
  44. package/lib/types/client/rows/ViewOptionsMenu.d.ts +14 -0
  45. package/lib/types/client/rows/ViewOptionsMenu.d.ts.map +1 -0
  46. package/lib/types/client/rows/ViewOptionsMenu.js +50 -0
  47. package/lib/types/client/rows/ViewOptionsMenu.js.map +1 -0
  48. package/lib/types/client/rows/WorkspaceBrowser.d.ts +0 -5
  49. package/lib/types/client/rows/WorkspaceBrowser.d.ts.map +1 -1
  50. package/lib/types/client/rows/WorkspaceBrowser.js +7 -557
  51. package/lib/types/client/rows/WorkspaceBrowser.js.map +1 -1
  52. package/lib/types/client/rows/browser-shared.d.ts +105 -0
  53. package/lib/types/client/rows/browser-shared.d.ts.map +1 -0
  54. package/lib/types/client/rows/browser-shared.js +93 -0
  55. package/lib/types/client/rows/browser-shared.js.map +1 -0
  56. package/lib/types/client/session-actions/derived.d.ts.map +1 -1
  57. package/lib/types/client/session-actions/derived.js +13 -2
  58. package/lib/types/client/session-actions/derived.js.map +1 -1
  59. package/lib/types/client/session-watermarks.d.ts +6 -1
  60. package/lib/types/client/session-watermarks.d.ts.map +1 -1
  61. package/lib/types/client/session-watermarks.js +31 -11
  62. package/lib/types/client/session-watermarks.js.map +1 -1
  63. package/lib/types/client/toast/register.d.ts.map +1 -1
  64. package/lib/types/client/toast/register.js +102 -132
  65. package/lib/types/client/toast/register.js.map +1 -1
  66. package/lib/types/host-contract.d.ts +15 -1
  67. package/lib/types/host-contract.d.ts.map +1 -1
  68. package/lib/types/host-contract.js +47 -4
  69. package/lib/types/host-contract.js.map +1 -1
  70. package/lib/types/index.d.ts +6 -3
  71. package/lib/types/index.d.ts.map +1 -1
  72. package/lib/types/index.js +10 -4
  73. package/lib/types/index.js.map +1 -1
  74. package/package.json +17 -3
@@ -0,0 +1,81 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** The two wide-only list bodies: the flat single-list view and the search results view. */
3
+ import { useMemo, useRef, useState } from 'react';
4
+ import clsx from 'clsx';
5
+ import { HoverCardGroup } from '@deepseek-ai/dsh-client-ui-primitives';
6
+ import { deriveFlat, deriveSearchResults } from "../tree.js";
7
+ import { SearchResultItem, SessionNodeItem } from "./Rows.js";
8
+ import { AnimatedRows } from "./AnimatedRows.js";
9
+ import { FLAT_SESSION_ORDER_KEY } from "../stores.js";
10
+ import css from './WorkspaceBrowser.module.css';
11
+ import { mainViewSessionId, sessionDragOrder, useNativeDragAcceptance, } from "./browser-shared.js";
12
+ import { EmptySessions } from "./EmptySessions.js";
13
+ /** The flat "In one list" body: every session is one draggable top-level row. */
14
+ export function FlatList({ list, sessionIds, rowState, onLeaveArchivedOnly, useSessionStatus, open, onSessionRenameRequest, usePanelInfo, setSessionOrder, workspaceReady, animationResetKey, revealSessionId, onSessionRevealed, renderSlot, t, }) {
15
+ const panelActive = usePanelInfo(info => info.activePanelId !== null);
16
+ const statuses = useSessionStatus(s => s);
17
+ const rows = useMemo(() => deriveFlat(list, sessionIds, rowState, statuses), [list, sessionIds, rowState, statuses]);
18
+ const [drag, setDrag] = useState(null);
19
+ const dropCommitted = useRef(false);
20
+ useNativeDragAcceptance(drag !== null);
21
+ const mainViewId = useMemo(() => mainViewSessionId(list), [list]);
22
+ const currentId = panelActive ? undefined : mainViewId;
23
+ const commitDrag = (activeDrag, over) => {
24
+ if (dropCommitted.current)
25
+ return;
26
+ dropCommitted.current = true;
27
+ setDrag(null);
28
+ const nextOrder = sessionDragOrder(sessionIds, rows, activeDrag, over);
29
+ if (nextOrder !== undefined)
30
+ setSessionOrder(FLAT_SESSION_ORDER_KEY, nextOrder);
31
+ };
32
+ const now = Date.now();
33
+ return (_jsxs(HoverCardGroup, { className: clsx(css.treeBody, css.wide), children: [_jsxs(AnimatedRows, { className: clsx(css.list, css.flatList), label: t('section.sessions'), rowKeys: rows.length === 0 ? ['empty'] : rows.map(row => `session:${row.id}`), ready: list.phase === 'ready' && workspaceReady && drag === null, resetKey: animationResetKey, children: [rows.length === 0 && (_jsx(EmptySessions, { rowState: rowState, onLeaveArchivedOnly: onLeaveArchivedOnly, t: t })), rows.map((node) => {
34
+ const active = drag !== null && drag.pinned === node.pinned;
35
+ const normalizeHalf = (half) => node.blank ? 'after' : half;
36
+ return (_jsx(SessionNodeItem, { node: node, currentId: currentId, now: now, onOpen: open, onRenameRequest: onSessionRenameRequest, renderSlot: renderSlot, onReveal: node.id === revealSessionId
37
+ ? () => { onSessionRevealed(node.id); }
38
+ : undefined, drag: {
39
+ start: () => {
40
+ dropCommitted.current = false;
41
+ setDrag({ accountKey: FLAT_SESSION_ORDER_KEY, sessionId: node.id, pinned: node.pinned, over: null });
42
+ },
43
+ active,
44
+ marker: active && drag.over?.id === node.id ? drag.over.half : null,
45
+ hover: (half) => {
46
+ setDrag(current => current === null ? current : {
47
+ ...current, over: { id: node.id, half: normalizeHalf(half) },
48
+ });
49
+ },
50
+ drop: (half) => {
51
+ if (drag !== null)
52
+ commitDrag(drag, { id: node.id, half: normalizeHalf(half) });
53
+ },
54
+ end: () => {
55
+ if (drag?.over !== null && drag?.over !== undefined)
56
+ commitDrag(drag, drag.over);
57
+ else
58
+ setDrag(null);
59
+ dropCommitted.current = false;
60
+ },
61
+ }, t: t }, node.id));
62
+ })] }), _jsx("span", { className: css.fade })] }));
63
+ }
64
+ /** Flat search body: local metadata matches plus the current Host result page. */
65
+ export function SearchResults({ useSessions, useSessionStatus, open, onUnarchive, workspaces, archivedSessionIds, archivedFilter, query, remote, resultLimit, usePanelInfo, t, }) {
66
+ const panelActive = usePanelInfo(info => info.activePanelId !== null);
67
+ const list = useSessions(s => s);
68
+ const statuses = useSessionStatus(s => s);
69
+ const currentRemote = remote.query === query
70
+ ? remote
71
+ : { query, status: 'loading', items: [], hasMore: false };
72
+ const results = useMemo(() => deriveSearchResults(list, workspaces, query, archivedSessionIds, archivedFilter, statuses, currentRemote, resultLimit), [list, workspaces, query, archivedSessionIds, archivedFilter, statuses, currentRemote, resultLimit]);
73
+ const pending = currentRemote.status === 'loading';
74
+ const mainViewId = useMemo(() => mainViewSessionId(list), [list]);
75
+ const currentId = panelActive ? undefined : mainViewId;
76
+ return (_jsxs("div", { className: clsx(css.treeBody, css.wide), children: [_jsxs("div", { className: css.list, children: [_jsx("div", { className: css.searchTree, role: "tree", "aria-label": t('search.results.aria'), "aria-busy": pending, children: results.items.map(result => (_jsx(SearchResultItem, { result: result, currentId: currentId, onOpen: open, onUnarchive: onUnarchive, t: t }, result.id))) }), pending && (
77
+ /* Two skeleton rows on an empty list, one when local matches already
78
+ show and only the content hits are outstanding. */
79
+ _jsx("div", { role: "status", "aria-label": t('search.pending'), children: (results.items.length === 0 ? [0, 1] : [0]).map(i => (_jsxs("div", { className: css.skeletonRow, "aria-hidden": "true", children: [_jsx("span", { className: css.skeletonDot }), _jsxs("span", { className: css.skeletonBars, children: [_jsx("span", { className: css.skeletonBar }), _jsx("span", { className: clsx(css.skeletonBar, css.skeletonBarWide) })] })] }, i))) })), !pending && results.items.length === 0 && (_jsx("div", { className: css.empty, role: "status", children: t('search.noMatches') })), results.hasMore && (_jsx("div", { className: css.searchStatus, role: "status", children: t('search.hasMore', { n: resultLimit }) }))] }), _jsx("span", { className: css.fade })] }));
80
+ }
81
+ //# sourceMappingURL=ListView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListView.js","sourceRoot":"","sources":["../../../../src/client/rows/ListView.tsx"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACjD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAKtE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAyC,MAAM,YAAY,CAAA;AACnG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAY,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,GAAG,MAAM,+BAA+B,CAAA;AAC/C,OAAO,EACL,iBAAiB,EAAE,gBAAgB,EAAE,uBAAuB,GAE7D,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAEnD,iFAAiF;AACjF,MAAM,UAAU,QAAQ,CAAC,EACvB,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB,EAC/F,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAChE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,GAmBlD;IACC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAA;IACrE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,OAAO,CAClB,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,EACtD,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CACvC,CAAA;IACD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACnC,uBAAuB,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACjE,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IACtD,MAAM,UAAU,GAAG,CAAC,UAAqB,EAAE,IAAoC,EAAQ,EAAE;QACvF,IAAI,aAAa,CAAC,OAAO;YAAE,OAAM;QACjC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAA;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QACtE,IAAI,SAAS,KAAK,SAAS;YAAE,eAAe,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAA;IACjF,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,OAAO,CACL,MAAC,cAAc,IAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,aACrD,MAAC,YAAY,IACX,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,EACvC,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAC5B,OAAO,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,EAAE,EAAE,CAAC,EAC7E,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,cAAc,IAAI,IAAI,KAAK,IAAI,EAChE,QAAQ,EAAE,iBAAiB,aAE1B,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CACpB,KAAC,aAAa,IAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,GAAI,CACtF,EACA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wBACjB,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAA;wBAC3D,MAAM,aAAa,GAAG,CAAC,IAAwB,EAAsB,EAAE,CACrE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;wBAC7B,OAAO,CACL,KAAC,eAAe,IAEd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,IAAI,EACZ,eAAe,EAAE,sBAAsB,EACvC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,eAAe;gCACnC,CAAC,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC;gCACtC,CAAC,CAAC,SAAS,EACb,IAAI,EAAE;gCACJ,KAAK,EAAE,GAAG,EAAE;oCACV,aAAa,CAAC,OAAO,GAAG,KAAK,CAAA;oCAC7B,OAAO,CAAC,EAAE,UAAU,EAAE,sBAAsB,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;gCACtG,CAAC;gCACD,MAAM;gCACN,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gCACnE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;oCACd,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;wCAC9C,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE;qCAC7D,CAAC,CAAA;gCACJ,CAAC;gCACD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oCACb,IAAI,IAAI,KAAK,IAAI;wCAAE,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gCACjF,CAAC;gCACD,GAAG,EAAE,GAAG,EAAE;oCACR,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS;wCAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;;wCAC3E,OAAO,CAAC,IAAI,CAAC,CAAA;oCAClB,aAAa,CAAC,OAAO,GAAG,KAAK,CAAA;gCAC/B,CAAC;6BACF,EACD,CAAC,EAAE,CAAC,IA/BC,IAAI,CAAC,EAAE,CAgCZ,CACH,CAAA;oBACH,CAAC,CAAC,IACW,EACf,eAAM,SAAS,EAAE,GAAG,CAAC,IAAI,GAAI,IACd,CAClB,CAAA;AACH,CAAC;AACD,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,EAC5B,WAAW,EACX,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,KAAK,EACL,MAAM,EACN,WAAW,EACX,YAAY,EACZ,CAAC,GAWF;IACC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAA;IACrE,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,KAAK,KAAK;QAC1C,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IACpE,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,mBAAmB,CACvB,IAAI,EACJ,UAAU,EACV,KAAK,EACL,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,aAAa,EACb,WAAW,CACZ,EACD,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,CAAC,CACpG,CAAA;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,KAAK,SAAS,CAAA;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACjE,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAEtD,OAAO,CACL,eAAK,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,aAC1C,eAAK,SAAS,EAAE,GAAG,CAAC,IAAI,aAGtB,cACE,SAAS,EAAE,GAAG,CAAC,UAAU,EACzB,IAAI,EAAC,MAAM,gBACC,CAAC,CAAC,qBAAqB,CAAC,eACzB,OAAO,YAEjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAC3B,KAAC,gBAAgB,IAEf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,IAAI,EACZ,WAAW,EAAE,WAAW,EACxB,CAAC,EAAE,CAAC,IALC,MAAM,CAAC,EAAE,CAMd,CACH,CAAC,GACE,EACL,OAAO,IAAI;oBACV;yEACqD;oBACrD,cAAK,IAAI,EAAC,QAAQ,gBAAa,CAAC,CAAC,gBAAgB,CAAC,YAC/C,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACpD,eAAa,SAAS,EAAE,GAAG,CAAC,WAAW,iBAAc,MAAM,aACzD,eAAM,SAAS,EAAE,GAAG,CAAC,WAAW,GAAI,EACpC,gBAAM,SAAS,EAAE,GAAG,CAAC,YAAY,aAC/B,eAAM,SAAS,EAAE,GAAG,CAAC,WAAW,GAAI,EACpC,eAAM,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,eAAe,CAAC,GAAI,IAC1D,KALC,CAAC,CAML,CACP,CAAC,GACE,CACP,EAGA,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CACzC,cAAK,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAC,QAAQ,YAAE,CAAC,CAAC,kBAAkB,CAAC,GAAO,CACvE,EACA,OAAO,CAAC,OAAO,IAAI,CAClB,cAAK,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE,IAAI,EAAC,QAAQ,YAC5C,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,GACpC,CACP,IACG,EACN,eAAM,SAAS,EAAE,GAAG,CAAC,IAAI,GAAI,IACzB,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type SessionTreeProps } from './browser-shared.ts';
2
+ /** The scrolling session tree; unmounting drops the sessions subscription and local row limits. */
3
+ export declare function SessionTree({ list, useSessionStatus, startSession, open, workspaces, ungroupedSessionIds, rowState, onLeaveArchivedOnly, workspaceReady, animationResetKey, usePanelInfo, onRenameRequest, onDeleteRequest, onSessionRenameRequest, renderSlot, insertWorkspaceBefore, nestWorkspaces, groupExpansion, setGroupExpanded, setSessionOrder, home, t, revealSessionId, onSessionRevealed, shortcuts, useBadgeSettings, }: SessionTreeProps): import("react").JSX.Element;
4
+ //# sourceMappingURL=SessionTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionTree.d.ts","sourceRoot":"","sources":["../../../../src/client/rows/SessionTree.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAEW,KAAK,gBAAgB,EACtC,MAAM,qBAAqB,CAAA;AAW5B,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAC3E,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAC/C,eAAe,EAAE,eAAe,EAAE,sBAAsB,EACxD,UAAU,EACV,qBAAqB,EACrB,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAChD,eAAe,EAAE,IAAI,EAAE,CAAC,EACxB,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,GAChE,EAAE,gBAAgB,+BA2ZlB"}
@@ -0,0 +1,381 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * The scrolling session tree: Workspace groups, aggregated live-status badges,
4
+ * watermarks, and row drag ordering.
5
+ *
6
+ * Split out of `WorkspaceBrowser.tsx` so the shell keeps only the header, search
7
+ * box, and dialogs; this file owns the tree body and its local row limits, and
8
+ * unmounting it drops both the sessions subscription and those limits.
9
+ */
10
+ import { useEffect, useMemo, useRef, useState } from 'react';
11
+ import clsx from 'clsx';
12
+ import { HoverCardGroup } from '@deepseek-ai/dsh-client-ui-primitives';
13
+ import { deriveGroups, owningGroupKey, owningParentFolder, UNGROUPED_KEY } from "../tree.js";
14
+ import { directStatusesForGroups, withAggregatedStatus } from "../group-status.js";
15
+ import { raiseWatermarks, requiredWatermark, SESSION_WATERMARK_BASE, watermarkRows } from "../session-watermarks.js";
16
+ import { facetStore } from "../facet-store.js";
17
+ import { useRegisteredFacets } from "../use-registered-facets.js";
18
+ import { ProjectRowItem, SessionNodeItem } from "./Rows.js";
19
+ import { AnimatedRows } from "./AnimatedRows.js";
20
+ import css from './WorkspaceBrowser.module.css';
21
+ import { mainViewSessionId, sessionDragOrder, useNativeDragAcceptance, workspaceGroupHalf, } from "./browser-shared.js";
22
+ import { EmptySessions } from "./EmptySessions.js";
23
+ // 外部状态来源:**本文件不认识任何具体插件**。运行时只有登记面(`../facets.ts`)与
24
+ // 它背后的存储订阅;谁想让自己的状态进折叠徽标,就按协议注册一个 facet
25
+ // (`docs/facet-protocol.md`)。现有两家已各自注册,本插件不再代管任何来源。
26
+ //
27
+ // 这里只经 `useRegisteredFacets` 订阅一次外部存储,与 facet 数量无关,所以增删来源不会
28
+ // 改变 hook 调用序列(那正是逐个调 provider hook 的写法做不到的);登记面本身**迟到**也
29
+ // 照样生效,理由与踩过的坑写在那个文件里。本插件不再筛外部来源:登记面即所见。
30
+ const facetsStore = facetStore();
31
+ /** The scrolling session tree; unmounting drops the sessions subscription and local row limits. */
32
+ export function SessionTree({ list, useSessionStatus, startSession, open, workspaces, ungroupedSessionIds, rowState, onLeaveArchivedOnly, workspaceReady, animationResetKey, usePanelInfo, onRenameRequest, onDeleteRequest, onSessionRenameRequest, renderSlot, insertWorkspaceBefore, nestWorkspaces, groupExpansion, setGroupExpanded, setSessionOrder, home, t, revealSessionId, onSessionRevealed, shortcuts, useBadgeSettings, }) {
33
+ const panelActive = usePanelInfo(info => info.activePanelId !== null);
34
+ // 徽标设置:**本插件自己**那三档会话状态的显隐、悬停明细、数字样式。
35
+ const badgeSettings = useBadgeSettings(settings => settings);
36
+ const statuses = useSessionStatus(s => s);
37
+ // 外部状态:订阅 + 读登记面,在 `useRegisteredFacets` 里一次做完。这里刻意**不**自己
38
+ // 摊开那两行:登记面是运行时增删的(提供方在自己的 apply 里注册,宿主不保证它早于本
39
+ // 组件首渲染),而 memo 的依赖里必须有版本号,否则订阅只换来一次重渲染、算的却还是
40
+ // 上一次的登记面——「注册成功了却永远不进徽标」。推导过程与回归用例见
41
+ // `../use-registered-facets.ts`。外部来源的显隐不归本插件管:来源不注册就是不显示。
42
+ const facets = useRegisteredFacets(facetsStore);
43
+ const mainViewId = useMemo(() => mainViewSessionId(list), [list]);
44
+ const current = panelActive ? undefined : mainViewId;
45
+ const revealGroup = revealSessionId === undefined || !workspaceReady
46
+ ? undefined
47
+ : owningGroupKey(workspaces, revealSessionId);
48
+ const [storedWatermarks, setStoredWatermarks] = useState({});
49
+ const [watermarkMotionKey, setWatermarkMotionKey] = useState(0);
50
+ // Transient drag marker state; the selected mode owns the resulting order.
51
+ const [drag, setDrag] = useState(null);
52
+ const sessionDropCommitted = useRef(false);
53
+ const [workspaceDrag, setWorkspaceDrag] = useState(null);
54
+ const workspaceDropCommitted = useRef(false);
55
+ const nativeDragActive = drag !== null || workspaceDrag !== null;
56
+ useNativeDragAcceptance(nativeDragActive);
57
+ const currentGroup = current === undefined || !workspaceReady
58
+ ? undefined
59
+ : owningGroupKey(workspaces, current);
60
+ useEffect(() => {
61
+ if (current === undefined || currentGroup === undefined || Object.hasOwn(groupExpansion, currentGroup))
62
+ return;
63
+ setGroupExpanded(currentGroup, true);
64
+ }, [current, currentGroup, setGroupExpanded, groupExpansion]);
65
+ const parents = useMemo(() => {
66
+ if (!nestWorkspaces)
67
+ return new Map();
68
+ const keysByPath = new Map(workspaces.map(workspace => [workspace.path, workspace.workspaceId]));
69
+ const paths = [...keysByPath.keys()];
70
+ return new Map(workspaces.map((workspace) => {
71
+ const path = owningParentFolder(workspace.path, paths);
72
+ return [workspace.workspaceId, path === undefined ? undefined : keysByPath.get(path)];
73
+ }));
74
+ }, [nestWorkspaces, workspaces]);
75
+ const currentAncestors = useMemo(() => {
76
+ const keys = new Set();
77
+ for (let key = currentGroup === undefined ? undefined : parents.get(currentGroup); key !== undefined; key = parents.get(key)) {
78
+ keys.add(key);
79
+ }
80
+ return keys;
81
+ }, [currentGroup, parents]);
82
+ const expandedGroups = useMemo(() => {
83
+ const ancestorKeys = new Set(parents.values());
84
+ return [...workspaces.map(workspace => workspace.workspaceId), UNGROUPED_KEY]
85
+ .filter(key => groupExpansion[key] ?? ancestorKeys.has(key));
86
+ }, [groupExpansion, parents, workspaces]);
87
+ const groups = useMemo(() => deriveGroups(list, workspaces, rowState, statuses, {
88
+ expandedGroups,
89
+ ungroupedOrder: ungroupedSessionIds,
90
+ }), [list, workspaces, rowState, statuses, expandedGroups, ungroupedSessionIds]);
91
+ useEffect(() => {
92
+ for (let key = revealGroup; key !== undefined; key = parents.get(key)) {
93
+ if (groupExpansion[key] === false || (key === revealGroup && groupExpansion[key] !== true)) {
94
+ setGroupExpanded(key, true);
95
+ }
96
+ }
97
+ }, [groupExpansion, parents, revealGroup, setGroupExpanded]);
98
+ const baselines = new Map(groups.map(group => [
99
+ group.key,
100
+ Math.max(SESSION_WATERMARK_BASE, requiredWatermark(group.expanded ? group.sessions : [], current, group.key === revealGroup ? revealSessionId : undefined)),
101
+ ]));
102
+ const foldedKeys = new Set(groups.filter(group => !group.expanded).map(group => group.key));
103
+ const underFoldedAncestor = (key) => {
104
+ for (let owner = parents.get(key); owner !== undefined; owner = parents.get(owner)) {
105
+ if (foldedKeys.has(owner))
106
+ return true;
107
+ }
108
+ return false;
109
+ };
110
+ const requiredWatermarks = new Map([...baselines].filter(([key]) => !underFoldedAncestor(key)));
111
+ const sessionWatermarks = raiseWatermarks(storedWatermarks, requiredWatermarks);
112
+ if (sessionWatermarks !== storedWatermarks) {
113
+ setStoredWatermarks(marks => raiseWatermarks(marks, requiredWatermarks));
114
+ }
115
+ const dropWatermarks = (drop) => {
116
+ if (!Object.keys(storedWatermarks).some(drop))
117
+ return;
118
+ setStoredWatermarks(marks => Object.fromEntries(Object.entries(marks).filter(([key]) => !drop(key))));
119
+ setWatermarkMotionKey(key => key + 1);
120
+ };
121
+ const withinGroup = (key, root) => {
122
+ for (let owner = key; owner !== undefined; owner = parents.get(owner)) {
123
+ if (owner === root)
124
+ return true;
125
+ }
126
+ return false;
127
+ };
128
+ const now = Date.now();
129
+ const commitSessionDrag = (activeDrag, over) => {
130
+ if (sessionDropCommitted.current)
131
+ return;
132
+ sessionDropCommitted.current = true;
133
+ setDrag(null);
134
+ const group = groups.find(candidate => candidate.key === activeDrag.accountKey);
135
+ if (group === undefined)
136
+ return;
137
+ if (over.id === activeDrag.sessionId)
138
+ return;
139
+ const accountSessionIds = activeDrag.accountKey === UNGROUPED_KEY
140
+ ? ungroupedSessionIds
141
+ : workspaces.find(workspace => workspace.workspaceId === activeDrag.accountKey)?.sessionIds;
142
+ if (accountSessionIds === undefined)
143
+ return;
144
+ const renderedSessions = watermarkRows(group.sessions, sessionWatermarks[group.key] ?? SESSION_WATERMARK_BASE).rows;
145
+ const nextOrder = sessionDragOrder(accountSessionIds, renderedSessions, activeDrag, over);
146
+ if (nextOrder !== undefined)
147
+ setSessionOrder(activeDrag.accountKey, nextOrder);
148
+ };
149
+ const commitWorkspaceDrag = (activeDrag, over) => {
150
+ if (workspaceDropCommitted.current)
151
+ return;
152
+ workspaceDropCommitted.current = true;
153
+ setWorkspaceDrag(null);
154
+ const owner = parents.get(activeDrag.workspaceId);
155
+ const siblings = workspaces.filter(workspace => parents.get(workspace.workspaceId) === owner);
156
+ const rowIndex = siblings.findIndex(workspace => workspace.workspaceId === over.id);
157
+ if (rowIndex === -1)
158
+ return;
159
+ const anchor = over.half === 'before' ? over.id : siblings[rowIndex + 1]?.workspaceId;
160
+ if (anchor === activeDrag.workspaceId)
161
+ return;
162
+ const sourceIndex = siblings.findIndex(workspace => workspace.workspaceId === activeDrag.workspaceId);
163
+ const anchorIndex = anchor === undefined
164
+ ? siblings.length
165
+ : siblings.findIndex(workspace => workspace.workspaceId === anchor);
166
+ if (sourceIndex !== -1 && (anchorIndex === sourceIndex || anchorIndex === sourceIndex + 1))
167
+ return;
168
+ insertWorkspaceBefore(activeDrag.workspaceId, anchor).catch((reason) => {
169
+ console.warn('workspace reorder rejected:', reason);
170
+ });
171
+ };
172
+ // Build tree structure from original groups (for aggregation traversal)
173
+ const childrenByParentForAggregation = useMemo(() => {
174
+ const rendered = new Set(groups.map(group => group.key));
175
+ const children = new Map();
176
+ for (const group of groups) {
177
+ let parent = parents.get(group.key);
178
+ while (parent !== undefined && !rendered.has(parent))
179
+ parent = parents.get(parent);
180
+ const siblings = children.get(parent);
181
+ if (siblings === undefined)
182
+ children.set(parent, [group]);
183
+ else
184
+ siblings.push(group);
185
+ }
186
+ return children;
187
+ }, [groups, parents]);
188
+ // Fork-owned: each group's DIRECT member status — the input to the tree-wide
189
+ // aggregation below. deriveGroups stopped computing liveStatus (PR #10 moved it
190
+ // out), so this map is the aggregator's only data source. Expanded groups are
191
+ // measured too; see directStatusesForGroups.
192
+ const directStatusByGroup = useMemo(() => directStatusesForGroups(groups, facets, now),
193
+ // `now` 刻意不进依赖:它是渲染期的时钟读数,唯一影响的是"哪些截止还算将来"。
194
+ // 提供方的 store 到点会通知,需要新答案的那次渲染本来就带着新的 `now` 发生。
195
+ [groups, facets]);
196
+ // Multi-level aggregation: a collapsed folder's badge covers its own members plus
197
+ // every descendant group's, at any depth. Every row comes back measured, so the
198
+ // render path can never see an unresolved liveStatus.
199
+ const groupsWithAggregatedStatus = useMemo(() => withAggregatedStatus(groups, directStatusByGroup, childrenByParentForAggregation), [groups, directStatusByGroup, childrenByParentForAggregation]);
200
+ // Rebuild tree structure with aggregated groups (for rendering)
201
+ const childrenByParent = useMemo(() => {
202
+ const rendered = new Set(groupsWithAggregatedStatus.map(group => group.key));
203
+ const children = new Map();
204
+ for (const group of groupsWithAggregatedStatus) {
205
+ // The archived-only view drops empty groups, so an ancestor may be
206
+ // absent; nest under the nearest rendered one.
207
+ let parent = parents.get(group.key);
208
+ while (parent !== undefined && !rendered.has(parent))
209
+ parent = parents.get(parent);
210
+ const siblings = children.get(parent);
211
+ if (siblings === undefined)
212
+ children.set(parent, [group]);
213
+ else
214
+ siblings.push(group);
215
+ }
216
+ return children;
217
+ }, [groupsWithAggregatedStatus, parents]);
218
+ const rootGroups = childrenByParent.get(undefined) ?? [];
219
+ const workspaceDropAtListStart = rootGroups[0]?.workspaceId !== undefined
220
+ && workspaceDrag?.over?.id === rootGroups[0].workspaceId
221
+ && workspaceDrag.over.half === 'before';
222
+ const rowKeys = groupsWithAggregatedStatus.length === 0 ? ['empty'] : [];
223
+ const renderGroup = (group, depth) => {
224
+ const workspaceId = group.workspaceId;
225
+ const children = childrenByParent.get(group.key) ?? [];
226
+ const compatibleDrag = workspaceDrag !== null && parents.get(workspaceDrag.workspaceId) === parents.get(group.key);
227
+ const watermark = sessionWatermarks[group.key] ?? SESSION_WATERMARK_BASE;
228
+ const collapsed = watermarkRows(group.sessions, baselines.get(group.key) ?? SESSION_WATERMARK_BASE);
229
+ const visible = watermarkRows(group.sessions, watermark);
230
+ const sessionsExpanded = visible.hiddenCount === 0;
231
+ rowKeys.push(`workspace:${group.key}`);
232
+ const childRows = group.expanded ? children.map(child => renderGroup(child, depth + 1)) : [];
233
+ const sessions = visible.rows;
234
+ for (const node of sessions)
235
+ rowKeys.push(`session:${node.id}`);
236
+ if (collapsed.hiddenCount > 0)
237
+ rowKeys.push(`overflow:${group.key}`);
238
+ const workspaceMarker = workspaceId !== undefined && workspaceDrag?.over?.id === workspaceId
239
+ ? workspaceDrag.over.half
240
+ : null;
241
+ const workspaceDragProps = workspaceId === undefined ? undefined : {
242
+ start: () => {
243
+ workspaceDropCommitted.current = false;
244
+ setWorkspaceDrag({ workspaceId, over: null });
245
+ },
246
+ end: () => {
247
+ if (workspaceDrag?.over !== null && workspaceDrag?.over !== undefined) {
248
+ commitWorkspaceDrag(workspaceDrag, workspaceDrag.over);
249
+ }
250
+ else {
251
+ setWorkspaceDrag(null);
252
+ }
253
+ workspaceDropCommitted.current = false;
254
+ },
255
+ };
256
+ const hoverWorkspace = workspaceId === undefined || !compatibleDrag
257
+ ? undefined
258
+ : (half) => {
259
+ setWorkspaceDrag(active => active === null
260
+ ? active
261
+ : { ...active, over: { id: workspaceId, half } });
262
+ };
263
+ const dropWorkspace = workspaceId === undefined || !compatibleDrag
264
+ ? undefined
265
+ : (half) => {
266
+ commitWorkspaceDrag(workspaceDrag, { id: workspaceId, half });
267
+ };
268
+ // group arrives from groupsWithAggregatedStatus: collapsed groups already
269
+ // carry the bottom-up aggregated liveStatus (direct + all descendants).
270
+ return (
271
+ // Group section: header, descendant Workspaces, and own Session rows. The
272
+ // inter-group breathing room is the section's own margin
273
+ // (WorkspaceBrowser.module.css).
274
+ _jsxs("div", { style: { '--dsh-workspace-indent': `${depth * 12}px` }, className: clsx(css.groupSection, workspaceMarker === 'before' && css.workspaceDropBefore, workspaceMarker === 'after' && css.workspaceDropAfter), onDragOver: workspaceDrag === null
275
+ ? undefined
276
+ : (e) => {
277
+ e.preventDefault();
278
+ if (hoverWorkspace === undefined && parents.get(group.key) !== undefined)
279
+ return;
280
+ e.stopPropagation();
281
+ if (hoverWorkspace === undefined) {
282
+ e.dataTransfer.dropEffect = 'none';
283
+ if (workspaceDrag.over !== null)
284
+ setWorkspaceDrag({ ...workspaceDrag, over: null });
285
+ }
286
+ else {
287
+ e.dataTransfer.dropEffect = 'move';
288
+ hoverWorkspace(workspaceGroupHalf(e));
289
+ }
290
+ }, onDrop: workspaceDrag === null
291
+ ? undefined
292
+ : (e) => {
293
+ e.preventDefault();
294
+ if (dropWorkspace === undefined && parents.get(group.key) !== undefined)
295
+ return;
296
+ e.stopPropagation();
297
+ if (dropWorkspace === undefined) {
298
+ workspaceDropCommitted.current = true;
299
+ setWorkspaceDrag(null);
300
+ }
301
+ else {
302
+ dropWorkspace(workspaceGroupHalf(e));
303
+ }
304
+ }, children: [_jsx(ProjectRowItem, { newShortcut: shortcuts.find(row => row.id === 'session.new'), group: group, containsCurrentDescendant: currentAncestors.has(group.key), home: home, settings: badgeSettings, now: now, t: t, onToggle: () => {
305
+ if (group.expanded)
306
+ dropWatermarks(key => withinGroup(key, group.key));
307
+ setGroupExpanded(group.key, !group.expanded);
308
+ }, onCreate: () => {
309
+ if (group.workspaceId !== undefined) {
310
+ setGroupExpanded(group.key, true);
311
+ startSession(group.workspaceId);
312
+ }
313
+ }, drag: workspaceDragProps, actions: group.workspaceId === undefined
314
+ ? undefined
315
+ : {
316
+ rename: () => {
317
+ /* v8 ignore next -- narrowing guard: the actions object exists only for real-workspace groups. */
318
+ if (group.workspaceId !== undefined)
319
+ onRenameRequest(group.workspaceId, group.label);
320
+ },
321
+ delete: () => {
322
+ /* v8 ignore next -- narrowing guard: the actions object exists only for real-workspace groups. */
323
+ if (group.workspaceId !== undefined)
324
+ onDeleteRequest(group.workspaceId, group.label);
325
+ },
326
+ } }), childRows.length > 0 && (_jsx("div", { role: "group", children: childRows })), group.expanded && sessions.map((node) => {
327
+ // Session drag never leaves its browser-local account, and pinned
328
+ // rows reorder only within their leading pinned block.
329
+ const sameGroupDrag = drag !== null && drag.accountKey === group.key;
330
+ const compatibleTarget = sameGroupDrag && drag.pinned === node.pinned;
331
+ const normalizeHalf = (half) => node.blank ? 'after' : half;
332
+ const dragProps = {
333
+ start: () => {
334
+ sessionDropCommitted.current = false;
335
+ setDrag({ accountKey: group.key, sessionId: node.id, pinned: node.pinned, over: null });
336
+ },
337
+ active: compatibleTarget,
338
+ marker: sameGroupDrag && drag.over?.id === node.id ? drag.over.half : null,
339
+ hover: (half) => {
340
+ /* v8 ignore next -- narrowing guard: Rows gates hover on `active`, which is false while the drag state is null. */
341
+ setDrag(d => (d === null ? d : {
342
+ ...d, over: { id: node.id, half: normalizeHalf(half) },
343
+ }));
344
+ },
345
+ drop: (half) => {
346
+ /* v8 ignore next -- narrowing guard: Rows gates drop on `active`, which is false while the drag state is null. */
347
+ if (drag === null)
348
+ return;
349
+ commitSessionDrag(drag, { id: node.id, half: normalizeHalf(half) });
350
+ },
351
+ end: () => {
352
+ if (drag?.over !== null && drag?.over !== undefined)
353
+ commitSessionDrag(drag, drag.over);
354
+ else
355
+ setDrag(null);
356
+ sessionDropCommitted.current = false;
357
+ },
358
+ };
359
+ return (_jsx(SessionNodeItem, { node: node, currentId: current, now: now, onOpen: open, onRenameRequest: onSessionRenameRequest, renderSlot: renderSlot, onReveal: node.id === revealSessionId && group.key === revealGroup
360
+ ? () => { onSessionRevealed(node.id); }
361
+ : undefined, drag: dragProps, t: t }, node.id));
362
+ }), group.expanded && collapsed.hiddenCount > 0 && (_jsx("button", { type: "button", className: css.sessionOverflowButton, "data-row-key": `overflow:${group.key}`, "aria-expanded": sessionsExpanded, onClick: () => {
363
+ if (sessionsExpanded) {
364
+ dropWatermarks(key => key === group.key);
365
+ return;
366
+ }
367
+ setStoredWatermarks(marks => ({
368
+ ...marks,
369
+ [group.key]: visible.hiddenCount <= SESSION_WATERMARK_BASE
370
+ ? Infinity
371
+ : watermark + SESSION_WATERMARK_BASE,
372
+ }));
373
+ setWatermarkMotionKey(key => key + 1);
374
+ }, children: sessionsExpanded
375
+ ? t('sessions.collapse')
376
+ : t('sessions.expand', { n: visible.hiddenCount }) }))] }, group.key));
377
+ };
378
+ const groupRows = rootGroups.map(group => renderGroup(group, 0));
379
+ return (_jsxs(HoverCardGroup, { className: clsx(css.treeBody, css.wide), children: [workspaceDropAtListStart && _jsx("span", { className: css.listTopDropIndicator, "aria-hidden": "true" }), _jsxs(AnimatedRows, { className: clsx(css.list, workspaceDropAtListStart && css.listTopDropActive), label: t('section.sessions'), rowKeys: rowKeys, ready: list.phase === 'ready' && workspaceReady && !nativeDragActive, resetKey: JSON.stringify([animationResetKey, watermarkMotionKey]), children: [groupsWithAggregatedStatus.length === 0 && (_jsx(EmptySessions, { rowState: rowState, onLeaveArchivedOnly: onLeaveArchivedOnly, t: t })), groupRows] }), _jsx("span", { className: css.fade })] }));
380
+ }
381
+ //# sourceMappingURL=SessionTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionTree.js","sourceRoot":"","sources":["../../../../src/client/rows/SessionTree.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAsC,MAAM,OAAO,CAAA;AAChG,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AAEtE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAkB,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAA0B,MAAM,oBAAoB,CAAA;AAC1G,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACpH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAY,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AACjD,OAAO,GAAG,MAAM,+BAA+B,CAAA;AAC/C,OAAO,EACL,iBAAiB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,kBAAkB,GAEjF,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAEnD,oDAAoD;AACpD,wCAAwC;AACxC,oDAAoD;AACpD,EAAE;AACF,4DAA4D;AAC5D,0DAA0D;AAC1D,yCAAyC;AACzC,MAAM,WAAW,GAAG,UAAU,EAAE,CAAA;AAChC,mGAAmG;AACnG,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAC3E,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAC/C,eAAe,EAAE,eAAe,EAAE,sBAAsB,EACxD,UAAU,EACV,qBAAqB,EACrB,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAChD,eAAe,EAAE,IAAI,EAAE,CAAC,EACxB,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,gBAAgB,GAC9C;IACjB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAA;IACrE,sCAAsC;IACtC,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;IAC5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzC,2DAA2D;IAC3D,+CAA+C;IAC/C,8CAA8C;IAC9C,qCAAqC;IACrC,0DAA0D;IAC1D,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAA;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACjE,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IACpD,MAAM,WAAW,GAAG,eAAe,KAAK,SAAS,IAAI,CAAC,cAAc;QAClE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;IAC/C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAmC,EAAE,CAAC,CAAA;IAC9F,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC/D,2EAA2E;IAC3E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC,CAAA;IACxD,MAAM,oBAAoB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAA4B,IAAI,CAAC,CAAA;IACnF,MAAM,sBAAsB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,gBAAgB,GAAG,IAAI,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,CAAA;IAChE,uBAAuB,CAAC,gBAAgB,CAAC,CAAA;IACzC,MAAM,YAAY,GAAG,OAAO,KAAK,SAAS,IAAI,CAAC,cAAc;QAC3D,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC;YAAE,OAAM;QAC9G,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,GAAG,EAAmC,CAAA;QACtE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAChG,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;QACpC,OAAO,IAAI,GAAG,CAAkC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAC3E,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACtD,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QACvF,CAAC,CAAC,CAAC,CAAA;IACL,CAAC,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAA;IAChC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,KAAK,IAAI,GAAG,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7H,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACf,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3B,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAqB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAClE,OAAO,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;aAC1E,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAChE,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACvD,cAAc;QACd,cAAc,EAAE,mBAAmB;KACpC,CAAC,EACF,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAC5E,CAAA;IACD,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,IAAI,GAAG,GAAG,WAAW,EAAE,GAAG,KAAK,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtE,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC3F,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,GAAG;QACT,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,iBAAiB,CAChD,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAC7C,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CACxD,CAAC;KACM,CAAC,CAAC,CAAA;IACZ,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3F,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAW,EAAE;QACnD,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnF,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;QACxC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IACD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC/F,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;IAC/E,IAAI,iBAAiB,KAAK,gBAAgB,EAAE,CAAC;QAC3C,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,cAAc,GAAG,CAAC,IAA8B,EAAQ,EAAE;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAM;QACrD,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAC7C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACpD,CAAC,CAAA;QACF,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;IACvC,CAAC,CAAA;IACD,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,IAAY,EAAW,EAAE;QACzD,KAAK,IAAI,KAAK,GAAuB,GAAG,EAAE,KAAK,KAAK,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1F,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;QACjC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,iBAAiB,GAAG,CAAC,UAAqB,EAAE,IAAoC,EAAQ,EAAE;QAC9F,IAAI,oBAAoB,CAAC,OAAO;YAAE,OAAM;QACxC,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAA;QACnC,OAAO,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,UAAU,CAAC,UAAU,CAAC,CAAA;QAC/E,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAC/B,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,SAAS;YAAE,OAAM;QAC5C,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,KAAK,aAAa;YAC/D,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,UAAU,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;QAC7F,IAAI,iBAAiB,KAAK,SAAS;YAAE,OAAM;QAC3C,MAAM,gBAAgB,GAAG,aAAa,CACpC,KAAK,CAAC,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,sBAAsB,CACvE,CAAC,IAAI,CAAA;QACN,MAAM,SAAS,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QACzF,IAAI,SAAS,KAAK,SAAS;YAAE,eAAe,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAChF,CAAC,CAAA;IACD,MAAM,mBAAmB,GAAG,CAC1B,UAA8B,EAC9B,IAA6C,EACvC,EAAE;QACR,IAAI,sBAAsB,CAAC,OAAO;YAAE,OAAM;QAC1C,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAA;QACrC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACtB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,CAAA;QAC7F,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC,CAAA;QACnF,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,OAAM;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,WAAW,CAAA;QACrF,IAAI,MAAM,KAAK,UAAU,CAAC,WAAW;YAAE,OAAM;QAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,UAAU,CAAC,WAAW,CAAC,CAAA;QACrG,MAAM,WAAW,GAAG,MAAM,KAAK,SAAS;YACtC,CAAC,CAAC,QAAQ,CAAC,MAAM;YACjB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,MAAM,CAAC,CAAA;QACrE,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,WAAW,GAAG,CAAC,CAAC;YAAE,OAAM;QAClG,qBAAqB,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,MAAe,EAAE,EAAE;YAC9E,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IACD,wEAAwE;IACxE,MAAM,8BAA8B,GAAG,OAAO,CAAC,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QACxD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmC,CAAA;QAC3D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACnC,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAClF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACrC,IAAI,QAAQ,KAAK,SAAS;gBAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;;gBACpD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAErB,6EAA6E;IAC7E,gFAAgF;IAChF,8EAA8E;IAC9E,6CAA6C;IAC7C,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;IAClD,4CAA4C;IAC5C,+CAA+C;IAC/C,CAAC,MAAM,EAAE,MAAM,CAAC,CACjB,CAAA;IAED,kFAAkF;IAClF,gFAAgF;IAChF,sDAAsD;IACtD,MAAM,0BAA0B,GAAG,OAAO,CACxC,GAAG,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,EAAE,8BAA8B,CAAC,EACvF,CAAC,MAAM,EAAE,mBAAmB,EAAE,8BAA8B,CAAC,CAC9D,CAAA;IAED,gEAAgE;IAChE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAC5E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2C,CAAA;QACnE,KAAK,MAAM,KAAK,IAAI,0BAA0B,EAAE,CAAC;YAC/C,mEAAmE;YACnE,+CAA+C;YAC/C,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACnC,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAClF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACrC,IAAI,QAAQ,KAAK,SAAS;gBAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;;gBACpD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC,EAAE,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC,CAAA;IAEzC,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;IACxD,MAAM,wBAAwB,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,KAAK,SAAS;WACpE,aAAa,EAAE,IAAI,EAAE,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW;WACrD,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;IAEzC,MAAM,OAAO,GAAa,0BAA0B,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAClF,MAAM,WAAW,GAAG,CAAC,KAAwB,EAAE,KAAa,EAAa,EAAE;QACzE,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;QACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACtD,MAAM,cAAc,GAAG,aAAa,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClH,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAA;QACxE,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,CAAA;QACnG,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,KAAK,CAAC,CAAA;QAClD,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QACtC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAA;QAC7B,KAAK,MAAM,IAAI,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QAC/D,IAAI,SAAS,CAAC,WAAW,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QACpE,MAAM,eAAe,GAAG,WAAW,KAAK,SAAS,IAAI,aAAa,EAAE,IAAI,EAAE,EAAE,KAAK,WAAW;YAC1F,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI;YACzB,CAAC,CAAC,IAAI,CAAA;QACR,MAAM,kBAAkB,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACjE,KAAK,EAAE,GAAG,EAAE;gBACV,sBAAsB,CAAC,OAAO,GAAG,KAAK,CAAA;gBACtC,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC;YACD,GAAG,EAAE,GAAG,EAAE;gBACR,IAAI,aAAa,EAAE,IAAI,KAAK,IAAI,IAAI,aAAa,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;oBACtE,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;gBACxD,CAAC;qBAAM,CAAC;oBACN,gBAAgB,CAAC,IAAI,CAAC,CAAA;gBACxB,CAAC;gBACD,sBAAsB,CAAC,OAAO,GAAG,KAAK,CAAA;YACxC,CAAC;SACF,CAAA;QACD,MAAM,cAAc,GAAG,WAAW,KAAK,SAAS,IAAI,CAAC,cAAc;YACjE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,IAAwB,EAAE,EAAE;gBAC7B,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,IAAI;oBACxC,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YACrD,CAAC,CAAA;QACH,MAAM,aAAa,GAAG,WAAW,KAAK,SAAS,IAAI,CAAC,cAAc;YAChE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,IAAwB,EAAE,EAAE;gBAC7B,mBAAmB,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/D,CAAC,CAAA;QACH,0EAA0E;QAC1E,wEAAwE;QACxE,OAAO;QACP,0EAA0E;QAC1E,yDAAyD;QACzD,iCAAiC;QAC/B,eAEE,KAAK,EAAE,EAAE,wBAAwB,EAAE,GAAG,KAAK,GAAG,EAAE,IAAI,EAAmB,EACvE,SAAS,EAAE,IAAI,CACb,GAAG,CAAC,YAAY,EAChB,eAAe,KAAK,QAAQ,IAAI,GAAG,CAAC,mBAAmB,EACvD,eAAe,KAAK,OAAO,IAAI,GAAG,CAAC,kBAAkB,CACtD,EACD,UAAU,EAAE,aAAa,KAAK,IAAI;gBAChC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;oBACN,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,cAAc,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;wBAAE,OAAM;oBAChF,CAAC,CAAC,eAAe,EAAE,CAAA;oBACnB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;wBACjC,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAA;wBAClC,IAAI,aAAa,CAAC,IAAI,KAAK,IAAI;4BAAE,gBAAgB,CAAC,EAAE,GAAG,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;oBACrF,CAAC;yBAAM,CAAC;wBACN,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAA;wBAClC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;oBACvC,CAAC;gBACH,CAAC,EACH,MAAM,EAAE,aAAa,KAAK,IAAI;gBAC5B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;oBACN,CAAC,CAAC,cAAc,EAAE,CAAA;oBAClB,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;wBAAE,OAAM;oBAC/E,CAAC,CAAC,eAAe,EAAE,CAAA;oBACnB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;wBAChC,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAA;wBACrC,gBAAgB,CAAC,IAAI,CAAC,CAAA;oBACxB,CAAC;yBAAM,CAAC;wBACN,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;oBACtC,CAAC;gBACH,CAAC,aAEH,KAAC,cAAc,IACb,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,aAAa,CAAC,EAC5D,KAAK,EAAE,KAAK,EACZ,yBAAyB,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAC1D,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,GAAG,EACR,CAAC,EAAE,CAAC,EACJ,QAAQ,EAAE,GAAG,EAAE;wBACb,IAAI,KAAK,CAAC,QAAQ;4BAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;wBACtE,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;oBAC9C,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;wBACb,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;4BACpC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;4BACjC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;wBACjC,CAAC;oBACH,CAAC,EACD,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,KAAK,CAAC,WAAW,KAAK,SAAS;wBACtC,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC;4BACA,MAAM,EAAE,GAAG,EAAE;gCACb,kGAAkG;gCAChG,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;oCAAE,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;4BACtF,CAAC;4BACD,MAAM,EAAE,GAAG,EAAE;gCACb,kGAAkG;gCAChG,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;oCAAE,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;4BACtF,CAAC;yBACF,GACH,EACD,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CACvB,cAAK,IAAI,EAAC,OAAO,YACd,SAAS,GACN,CACP,EACA,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACzC,kEAAkE;oBAClE,uDAAuD;oBACrD,MAAM,aAAa,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,GAAG,CAAA;oBACpE,MAAM,gBAAgB,GAAG,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAA;oBACrE,MAAM,aAAa,GAAG,CAAC,IAAwB,EAAsB,EAAE,CACrE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;oBAC7B,MAAM,SAAS,GAAG;wBAChB,KAAK,EAAE,GAAG,EAAE;4BACV,oBAAoB,CAAC,OAAO,GAAG,KAAK,CAAA;4BACpC,OAAO,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;wBACzF,CAAC;wBACD,MAAM,EAAE,gBAAgB;wBACxB,MAAM,EAAE,aAAa,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;wBAC1E,KAAK,EAAE,CAAC,IAAwB,EAAE,EAAE;4BACpC,mHAAmH;4BACjH,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC7B,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE;6BACvD,CAAC,CAAC,CAAA;wBACL,CAAC;wBACD,IAAI,EAAE,CAAC,IAAwB,EAAE,EAAE;4BACnC,kHAAkH;4BAChH,IAAI,IAAI,KAAK,IAAI;gCAAE,OAAM;4BACzB,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;wBACrE,CAAC;wBACD,GAAG,EAAE,GAAG,EAAE;4BACR,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS;gCAAE,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;;gCAClF,OAAO,CAAC,IAAI,CAAC,CAAA;4BAClB,oBAAoB,CAAC,OAAO,GAAG,KAAK,CAAA;wBACtC,CAAC;qBACF,CAAA;oBACD,OAAO,CACL,KAAC,eAAe,IAEd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,OAAO,EAClB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,IAAI,EACZ,eAAe,EAAE,sBAAsB,EACvC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,eAAe,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW;4BAChE,CAAC,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC;4BACtC,CAAC,CAAC,SAAS,EACb,IAAI,EAAE,SAAS,EACf,CAAC,EAAE,CAAC,IAXC,IAAI,CAAC,EAAE,CAYZ,CACH,CAAA;gBACH,CAAC,CAAC,EACD,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,WAAW,GAAG,CAAC,IAAI,CAC9C,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,GAAG,CAAC,qBAAqB,kBACtB,YAAY,KAAK,CAAC,GAAG,EAAE,mBACtB,gBAAgB,EAC/B,OAAO,EAAE,GAAG,EAAE;wBACZ,IAAI,gBAAgB,EAAE,CAAC;4BACrB,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAA;4BACxC,OAAM;wBACR,CAAC;wBACD,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;4BAC5B,GAAG,KAAK;4BACR,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,sBAAsB;gCACxD,CAAC,CAAC,QAAQ;gCACV,CAAC,CAAC,SAAS,GAAG,sBAAsB;yBACvC,CAAC,CAAC,CAAA;wBACH,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;oBACvC,CAAC,YAEA,gBAAgB;wBACf,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;wBACxB,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,GAC7C,CACV,KAhJI,KAAK,CAAC,GAAG,CAiJV,CACP,CAAA;IACH,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IAChE,OAAO,CACL,MAAC,cAAc,IAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,aACpD,wBAAwB,IAAI,eAAM,SAAS,EAAE,GAAG,CAAC,oBAAoB,iBAAc,MAAM,GAAG,EAC7F,MAAC,YAAY,IACX,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,wBAAwB,IAAI,GAAG,CAAC,iBAAiB,CAAC,EAC5E,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAC5B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,cAAc,IAAI,CAAC,gBAAgB,EACpE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,aAEhE,0BAA0B,CAAC,MAAM,KAAK,CAAC,IAAI,CAC1C,KAAC,aAAa,IAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,GAAI,CACtF,EACA,SAAS,IACG,EACf,eAAM,SAAS,EAAE,GAAG,CAAC,IAAI,GAAI,IACd,CAClB,CAAA;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { WorkspaceBrowserProps } from '../contract/slots.ts';
2
+ import type { ArchivedFilter, SessionOrderBy } from '../tree.ts';
3
+ import type { SessionGroupBy } from '../stores.ts';
4
+ /** Grouping, ordering, and archived-filter menu; own open state so it resets with the wide chrome. */
5
+ export declare function ViewOptionsMenu({ groupBy, orderBy, archivedFilter, onGroupPick, onOrderPick, onArchivedFilterPick, t }: {
6
+ groupBy: SessionGroupBy;
7
+ orderBy: SessionOrderBy;
8
+ archivedFilter: ArchivedFilter;
9
+ onGroupPick: (mode: SessionGroupBy) => void;
10
+ onOrderPick: (mode: SessionOrderBy) => void;
11
+ onArchivedFilterPick: (filter: ArchivedFilter) => void;
12
+ t: WorkspaceBrowserProps['t'];
13
+ }): import("react").JSX.Element;
14
+ //# sourceMappingURL=ViewOptionsMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewOptionsMenu.d.ts","sourceRoot":"","sources":["../../../../src/client/rows/ViewOptionsMenu.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAGlD,sGAAsG;AACtG,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,EAAE,EAAE;IACvH,OAAO,EAAE,cAAc,CAAA;IACvB,OAAO,EAAE,cAAc,CAAA;IACvB,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAC3C,WAAW,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAC3C,oBAAoB,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAA;IACtD,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAA;CAC9B,+BAsDA"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Grouping, ordering, and archived-filter menu for the section header.
4
+ *
5
+ * Own open state so it resets with the wide chrome; the trigger button is the
6
+ * menu's own anchor, so the header does not thread a callback down for it.
7
+ */
8
+ import { useState } from 'react';
9
+ import clsx from 'clsx';
10
+ import { IconArchiveCheckOutlineRegular, IconArchiveOffOutlineRegular, IconChevronsUpDownOutlineRegular, IconClockOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconQueueOutlineRegular, IconSlidersTwoOutlineRegular, IconWorkspaceTreeOutlineRegular, Menu, Tooltip, } from '@deepseek-ai/dsh-client-ui-primitives';
11
+ import css from './WorkspaceBrowser.module.css';
12
+ /** Grouping, ordering, and archived-filter menu; own open state so it resets with the wide chrome. */
13
+ export function ViewOptionsMenu({ groupBy, orderBy, archivedFilter, onGroupPick, onOrderPick, onArchivedFilterPick, t }) {
14
+ const [open, setOpen] = useState(false);
15
+ return (_jsx(Menu, { open: open, onClose: () => { setOpen(false); }, items: [
16
+ { type: 'label', id: 'group-by', text: t('groupBy.label') },
17
+ { id: 'workspace', label: t('groupBy.workspace'), icon: _jsx(IconFolderCloseRegular, {}) },
18
+ { id: 'workspace-tree', label: t('groupBy.workspaceTree'), icon: _jsx(IconWorkspaceTreeOutlineRegular, {}) },
19
+ { id: 'flat', label: t('groupBy.flat'), icon: _jsx(IconFlatListOutlineRegular, {}) },
20
+ { type: 'separator', id: 'order-by-separator' },
21
+ { type: 'label', id: 'order-by', text: t('orderBy.label') },
22
+ { id: 'manual', label: t('orderBy.manual'), icon: _jsx(IconChevronsUpDownOutlineRegular, {}) },
23
+ { id: 'updated', label: t('orderBy.updated'), icon: _jsx(IconClockOutlineRegular, {}) },
24
+ { type: 'separator', id: 'archived-filter-separator' },
25
+ { type: 'label', id: 'filter-by', text: t('filterBy.label') },
26
+ { id: 'hide-archived', label: t('viewOptions.hideArchived'), icon: _jsx(IconArchiveOffOutlineRegular, {}) },
27
+ { id: 'show-archived', label: t('viewOptions.showArchived'), icon: _jsx(IconQueueOutlineRegular, {}) },
28
+ { id: 'only-archived', label: t('viewOptions.onlyArchived'), icon: _jsx(IconArchiveCheckOutlineRegular, {}) },
29
+ ], selectedIds: [
30
+ groupBy,
31
+ orderBy,
32
+ { default: 'hide-archived', show: 'show-archived', only: 'only-archived' }[archivedFilter],
33
+ ], onSelect: (id) => {
34
+ if (id === 'workspace' || id === 'workspace-tree' || id === 'flat')
35
+ onGroupPick(id);
36
+ else if (id === 'manual' || id === 'updated')
37
+ onOrderPick(id);
38
+ else if (id === 'hide-archived')
39
+ onArchivedFilterPick('default');
40
+ else if (id === 'show-archived')
41
+ onArchivedFilterPick('show');
42
+ else if (id === 'only-archived')
43
+ onArchivedFilterPick('only');
44
+ setOpen(false);
45
+ }, align: "end", dense: true, listClassName: css.viewOptionsMenu,
46
+ // Portal: the section header clips overflow, so an in-place list would
47
+ // be cut off at the header's bounds.
48
+ portal: true, anchor: (_jsx(Tooltip, { label: t('viewOptions.label'), side: "bottom", delayMs: 500, children: _jsx("button", { type: "button", className: clsx(css.iconButton, css.wide), "aria-label": t('viewOptions.label'), onClick: () => { setOpen(v => !v); }, children: _jsx(IconSlidersTwoOutlineRegular, {}) }) })) }));
49
+ }
50
+ //# sourceMappingURL=ViewOptionsMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewOptionsMenu.js","sourceRoot":"","sources":["../../../../src/client/rows/ViewOptionsMenu.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,3 @@
1
1
  import type { WorkspaceBrowserProps } from '../contract/slots.ts';
2
- /**
3
- * Render the browsing region.
4
- * @param props - composed slot props (shell owner share + store + injected actions).
5
- * @returns the region element tree.
6
- */
7
2
  export declare function WorkspaceBrowser({ wide, usePanelInfo, expandSidebar, useSessions, useSessionStatus, useWorkspaces, useStore, actions, startSession, open, requestSessionRename, notifyArchivedNotOpenable, renameWorkspace, deleteWorkspace, insertWorkspaceBefore, unarchiveSession, createWorkspace, searchSessions, searchResultLimit, useDirectoryFlow, useHostInfo, useShortcuts, useWorkspaceShortcuts, useBadgeSettings, requestSearch, requestAddWorkspace, closeAddWorkspace, setDirectoryBusy, renderSlot, t, }: WorkspaceBrowserProps): import("react").JSX.Element;
8
3
  //# sourceMappingURL=WorkspaceBrowser.d.ts.map